L3 cross connect
[vpp.git] / test / vpp_bier.py
index 7566b1f..8e27f25 100644 (file)
@@ -97,9 +97,6 @@ class VppBierTable(VppObject):
             self.mpls_label,
             is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "bier-table;[%d:%d:%d]" % (self.id.set_id,
                                           self.id.sub_domain_id,
@@ -120,27 +117,31 @@ class VppBierRoute(VppObject):
         self.bp = bp
         self.paths = paths
 
+    def encode_path(self, p):
+        lstack = []
+        for l in p.nh_labels:
+            if type(l) == VppMplsLabel:
+                lstack.append(l.encode())
+            else:
+                lstack.append({'label': l, 'ttl': 255})
+        n_labels = len(lstack)
+        while (len(lstack) < 16):
+            lstack.append({})
+        return {'next_hop': p.nh_addr,
+                'weight': 1,
+                'afi': p.proto,
+                'sw_if_index': 0xffffffff,
+                'preference': 0,
+                'table_id': p.nh_table_id,
+                'next_hop_id': p.next_hop_id,
+                'is_udp_encap': p.is_udp_encap,
+                'n_labels': n_labels,
+                'label_stack': lstack}
+
     def encode_paths(self):
         br_paths = []
         for p in self.paths:
-            lstack = []
-            for l in p.nh_labels:
-                if type(l) == VppMplsLabel:
-                    lstack.append(l.encode())
-                else:
-                    lstack.append({'label': l, 'ttl': 255})
-            n_labels = len(lstack)
-            while (len(lstack) < 16):
-                lstack.append({})
-            br_paths.append({'next_hop': p.nh_addr,
-                             'weight': 1,
-                             'afi': 0,
-                             'preference': 0,
-                             'table_id': p.nh_table_id,
-                             'next_hop_id': p.next_hop_id,
-                             'is_udp_encap': p.is_udp_encap,
-                             'n_labels': n_labels,
-                             'label_stack': lstack})
+            br_paths.append(self.encode_path(p))
         return br_paths
 
     def add_vpp_config(self):
@@ -158,8 +159,41 @@ class VppBierRoute(VppObject):
             self.encode_paths(),
             is_add=0)
 
-    def __str__(self):
-        return self.object_id()
+    def update_paths(self, paths):
+        self.paths = paths
+        self._test.vapi.bier_route_add_del(
+            self.tbl_id,
+            self.bp,
+            self.encode_paths(),
+            is_replace=1)
+
+    def add_path(self, path):
+        self._test.vapi.bier_route_add_del(
+            self.tbl_id,
+            self.bp,
+            [self.encode_path(path)],
+            is_add=1,
+            is_replace=0)
+        self.paths.append(path)
+        self._test.registry.register(self, self._test.logger)
+
+    def remove_path(self, path):
+        self._test.vapi.bier_route_add_del(
+            self.tbl_id,
+            self.bp,
+            [self.encode_path(path)],
+            is_add=0,
+            is_replace=0)
+        self.paths.remove(path)
+
+    def remove_all_paths(self):
+        self._test.vapi.bier_route_add_del(
+            self.tbl_id,
+            self.bp,
+            [],
+            is_add=0,
+            is_replace=1)
+        self.paths = []
 
     def object_id(self):
         return "bier-route;[%d:%d:%d:%d]" % (self.tbl_id.set_id,
@@ -194,9 +228,6 @@ class VppBierImp(VppObject):
         self._test.vapi.bier_imp_del(
             self.bi_index)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "bier-imp;[%d:%d:%d:%d]" % (self.tbl_id.set_id,
                                            self.tbl_id.sub_domain_id,
@@ -227,9 +258,6 @@ class VppBierDispTable(VppObject):
             self.id,
             is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "bier-disp-table;[%d]" % (self.id)
 
@@ -276,9 +304,6 @@ class VppBierDispEntry(VppObject):
             self.rpf_id,
             is_add=0)
 
-    def __str__(self):
-        return self.object_id()
-
     def object_id(self):
         return "bier-disp-entry;[%d:%d]" % (self.tbl_id,
                                             self.bp)