text_type = str
-class MRouteItfFlags:
- MFIB_ITF_FLAG_NONE = 0
- MFIB_ITF_FLAG_NEGATE_SIGNAL = 1
- MFIB_ITF_FLAG_ACCEPT = 2
- MFIB_ITF_FLAG_FORWARD = 4
- MFIB_ITF_FLAG_SIGNAL_PRESENT = 8
- MFIB_ITF_FLAG_INTERNAL_COPY = 16
-
-
-class MRouteEntryFlags:
- MFIB_ENTRY_FLAG_NONE = 0
- MFIB_ENTRY_FLAG_SIGNAL = 1
- MFIB_ENTRY_FLAG_DROP = 2
- MFIB_ENTRY_FLAG_CONNECTED = 4
- MFIB_ENTRY_FLAG_INHERIT_ACCEPT = 8
-
-
class FibPathProto:
FIB_PATH_NH_PROTO_IP4 = 0
FIB_PATH_NH_PROTO_IP6 = 1
def __init__(self,
test,
table_id,
- is_ip6=0):
+ is_ip6=0,
+ register=True):
self._test = test
self.table_id = table_id
self.is_ip6 = is_ip6
+ self.register = register
def add_vpp_config(self):
self._test.vapi.ip_table_add_del(is_add=1,
table={'is_ip6': self.is_ip6,
'table_id': self.table_id})
- self._test.registry.register(self, self._test.logger)
+ if self.register:
+ self._test.registry.register(self, self._test.logger)
return self
def remove_vpp_config(self):
self.prefix)
+class VppIp6LinkLocalAddress(VppObject):
+
+ def __init__(self, test, intf, addr):
+ self._test = test
+ self.intf = intf
+ self.addr = addr
+
+ def add_vpp_config(self):
+ self._test.vapi.sw_interface_ip6_set_link_local_address(
+ sw_if_index=self.intf.sw_if_index, ip=self.addr)
+ self._test.registry.register(self, self._test.logger)
+ return self
+
+ def remove_vpp_config(self):
+ # link locals can't be removed, only changed
+ pass
+
+ def query_vpp_config(self):
+ # no API to query
+ return False
+
+ def object_id(self):
+ return "ip6-link-local-%s-%s" % (self.intf, self.addr)
+
+
class VppIpInterfaceBind(VppObject):
def __init__(self, test, intf, table):
for path in self.paths:
self.encoded_paths.append(path.encode())
+ def encode(self, paths=None):
+ _paths = self.encoded_paths if paths is None else paths
+ return {'table_id': self.table_id,
+ 'entry_flags': self.e_flags,
+ 'rpf_id': self.rpf_id,
+ 'prefix': self.prefix.encode(),
+ 'n_paths': len(_paths),
+ 'paths': _paths,
+ }
+
def add_vpp_config(self):
- r = self._test.vapi.ip_mroute_add_del(self.table_id,
- self.prefix.encode(),
- self.e_flags,
- self.rpf_id,
- self.encoded_paths,
+ r = self._test.vapi.ip_mroute_add_del(route=self.encode(),
+ is_multipath=1,
is_add=1)
self.stats_index = r.stats_index
self._test.registry.register(self, self._test.logger)
return self
def remove_vpp_config(self):
- self._test.vapi.ip_mroute_add_del(self.table_id,
- self.prefix.encode(),
- self.e_flags,
- self.rpf_id,
- self.encoded_paths,
+ self._test.vapi.ip_mroute_add_del(route=self.encode(),
+ is_multipath=1,
is_add=0)
def update_entry_flags(self, flags):
self.e_flags = flags
- self._test.vapi.ip_mroute_add_del(self.table_id,
- self.prefix.encode(),
- self.e_flags,
- self.rpf_id,
- [],
+ self._test.vapi.ip_mroute_add_del(route=self.encode(paths=[]),
+ is_multipath=1,
is_add=1)
def update_rpf_id(self, rpf_id):
self.rpf_id = rpf_id
- self._test.vapi.ip_mroute_add_del(self.table_id,
- self.prefix.encode(),
- self.e_flags,
- self.rpf_id,
- [],
+ self._test.vapi.ip_mroute_add_del(route=self.encode(paths=[]),
+ is_multipath=1,
is_add=1)
def update_path_flags(self, itf, flags):
for p in range(len(self.paths)):
if self.paths[p].nh_itf == itf:
self.paths[p].nh_i_flags = flags
- self.encoded_paths[p] = self.paths[p].encode()
- break
-
- self._test.vapi.ip_mroute_add_del(self.table_id,
- self.prefix.encode(),
- self.e_flags,
- self.rpf_id,
- [self.encoded_paths[p]],
- is_add=1,
- is_multipath=0)
+ self.encoded_paths[p] = self.paths[p].encode()
+ break
+
+ self._test.vapi.ip_mroute_add_del(
+ route=self.encode(
+ paths=[self.encoded_paths[p]]),
+ is_add=1,
+ is_multipath=0)
def query_vpp_config(self):
return find_mroute(self._test,