6 from vpp_object import VppObject
9 class BIER_HDR_PAYLOAD:
10 BIER_HDR_PROTO_MPLS_DOWN_STREAM = 1
11 BIER_HDR_PROTO_MPLS_UP_STREAM = 2
12 BIER_HDR_PROTO_ETHERNET = 3
13 BIER_HDR_PROTO_IPV4 = 4
14 BIER_HDR_PROTO_IPV6 = 5
15 BIER_HDR_PROTO_VXLAN = 6
16 BIER_HDR_PROTO_CTRL = 7
17 BIER_HDR_PROTO_OAM = 8
21 def __init__(self, sub_domain_id, set_id, hdr_len_id):
23 self.sub_domain_id = sub_domain_id
24 self.hdr_len_id = hdr_len_id
27 def find_bier_table(test, bti):
28 tables = test.vapi.bier_table_dump()
31 bti.set_id == t.bt_tbl_id.bt_set
32 and bti.sub_domain_id == t.bt_tbl_id.bt_sub_domain
33 and bti.hdr_len_id == t.bt_tbl_id.bt_hdr_len_id
39 def find_bier_route(test, bti, bp):
40 routes = test.vapi.bier_route_dump(bti)
43 bti.set_id == r.br_route.br_tbl_id.bt_set
44 and bti.sub_domain_id == r.br_route.br_tbl_id.bt_sub_domain
45 and bti.hdr_len_id == r.br_route.br_tbl_id.bt_hdr_len_id
46 and bp == r.br_route.br_bp
52 def find_bier_disp_table(test, bdti):
53 tables = test.vapi.bier_disp_table_dump()
55 if bdti == t.bdt_tbl_id:
60 def find_bier_disp_entry(test, bdti, bp):
61 entries = test.vapi.bier_disp_entry_dump(bdti)
63 if bp == e.bde_bp and bdti == e.bde_tbl_id:
68 def find_bier_imp(test, bti, bp):
69 imps = test.vapi.bier_imp_dump()
72 bti.set_id == i.bi_tbl_id.bt_set
73 and bti.sub_domain_id == i.bi_tbl_id.bt_sub_domain
74 and bti.hdr_len_id == i.bi_tbl_id.bt_hdr_len_id
81 class VppBierTable(VppObject):
86 def __init__(self, test, id, mpls_label):
89 self.mpls_label = mpls_label
91 def add_vpp_config(self):
92 self._test.vapi.bier_table_add_del(self.id, self.mpls_label, is_add=1)
93 self._test.registry.register(self, self._test.logger)
95 def remove_vpp_config(self):
96 self._test.vapi.bier_table_add_del(self.id, self.mpls_label, is_add=0)
99 return "bier-table;[%d:%d:%d]" % (
101 self.id.sub_domain_id,
105 def query_vpp_config(self):
106 return find_bier_table(self._test, self.id)
109 class VppBierRoute(VppObject):
114 def __init__(self, test, tbl_id, bp, paths):
119 self.encoded_paths = []
120 for path in self.paths:
121 self.encoded_paths.append(path.encode())
123 def add_vpp_config(self):
124 self._test.vapi.bier_route_add_del(
125 self.tbl_id, self.bp, self.encoded_paths, is_add=1
127 self._test.registry.register(self, self._test.logger)
129 def remove_vpp_config(self):
130 self._test.vapi.bier_route_add_del(
131 self.tbl_id, self.bp, self.encoded_paths, is_add=0
134 def update_paths(self, paths):
136 self.encoded_paths = []
137 for path in self.paths:
138 self.encoded_paths.append(path.encode())
139 self._test.vapi.bier_route_add_del(
140 self.tbl_id, self.bp, self.encoded_paths, is_replace=1
143 def add_path(self, path):
144 self.encoded_paths.append(path.encode())
145 self._test.vapi.bier_route_add_del(
146 self.tbl_id, self.bp, [path.encode()], is_add=1, is_replace=0
148 self.paths.append(path)
149 self._test.registry.register(self, self._test.logger)
151 def remove_path(self, path):
152 self.encoded_paths.remove(path.encode())
153 self._test.vapi.bier_route_add_del(
154 self.tbl_id, self.bp, [path.encode()], is_add=0, is_replace=0
156 self.paths.remove(path)
158 def remove_all_paths(self):
159 self._test.vapi.bier_route_add_del(
160 self.tbl_id, self.bp, [], is_add=0, is_replace=1
165 return "bier-route;[%d:%d:%d:%d]" % (
167 self.tbl_id.sub_domain_id,
168 self.tbl_id.hdr_len_id,
172 def query_vpp_config(self):
173 return find_bier_route(self._test, self.tbl_id, self.bp)
176 class VppBierImp(VppObject):
181 def __init__(self, test, tbl_id, src, ibytes):
187 def add_vpp_config(self):
188 res = self._test.vapi.bier_imp_add(self.tbl_id, self.src, self.ibytes)
189 self.bi_index = res.bi_index
190 self._test.registry.register(self, self._test.logger)
192 def remove_vpp_config(self):
193 self._test.vapi.bier_imp_del(self.bi_index)
196 return "bier-imp;[%d:%d:%d:%d]" % (
198 self.tbl_id.sub_domain_id,
199 self.tbl_id.hdr_len_id,
203 def query_vpp_config(self):
204 return find_bier_imp(self._test, self.tbl_id, self.src)
207 class VppBierDispTable(VppObject):
209 BIER Disposition Table
212 def __init__(self, test, id):
216 def add_vpp_config(self):
217 self._test.vapi.bier_disp_table_add_del(self.id, is_add=1)
218 self._test.registry.register(self, self._test.logger)
220 def remove_vpp_config(self):
221 self._test.vapi.bier_disp_table_add_del(self.id, is_add=0)
224 return "bier-disp-table;[%d]" % (self.id)
226 def query_vpp_config(self):
227 return find_bier_disp_table(self._test, self.id)
230 class VppBierDispEntry(VppObject):
232 BIER Disposition Entry
236 self, test, tbl_id, bp, payload_proto, nh_proto, nh, nh_tbl, rpf_id=~0
241 self.nh_proto = nh_proto
243 self.payload_proto = payload_proto
245 self.nh = socket.inet_pton(socket.AF_INET, nh)
247 def add_vpp_config(self):
248 self._test.vapi.bier_disp_entry_add_del(
258 self._test.registry.register(self, self._test.logger)
260 def remove_vpp_config(self):
261 self._test.vapi.bier_disp_entry_add_del(
273 return "bier-disp-entry;[%d:%d]" % (self.tbl_id, self.bp)
275 def query_vpp_config(self):
276 return find_bier_disp_entry(self._test, self.tbl_id, self.bp)