- for path in self.paths:
- lstack = path.encode_labels()
-
- r = self._test.vapi.ip_add_del_route(
- dst_address=self.dest_addr,
- dst_address_length=self.dest_addr_len,
- next_hop_address=path.nh_addr,
- next_hop_sw_if_index=path.nh_itf, table_id=self.table_id,
- next_hop_table_id=path.nh_table_id,
- next_hop_n_out_labels=len(lstack),
- next_hop_out_label_stack=lstack,
- next_hop_via_label=path.nh_via_label,
- next_hop_id=path.next_hop_id,
- is_resolve_host=path.is_resolve_host,
- is_resolve_attached=path.is_resolve_attached,
- is_ipv6=self.is_ip6, is_local=self.is_local,
- is_multipath=1 if len(self.paths) > 1 else 0,
- is_dvr=path.is_dvr, is_udp_encap=path.is_udp_encap,
- is_source_lookup=path.is_source_lookup)
+ self._test.vapi.ip_route_add_del(
+ route={"table_id": self.table_id, "prefix": self.prefix, "n_paths": 0},
+ is_add=0,
+ is_multipath=0,
+ )
+
+ def query_vpp_config(self):
+ return find_route(
+ self._test,
+ self.prefix.network_address,
+ self.prefix.prefixlen,
+ self.table_id,
+ ignore_default_route=True,
+ )
+
+ def object_id(self):
+ return "%s:table-%d-%s" % (
+ "ip6-route" if self.prefix.version == 6 else "ip-route",
+ self.table_id,
+ self.prefix,
+ )
+
+ def get_stats_to(self):
+ c = self._test.statistics.get_counter("/net/route/to")
+ return c[0][self.stats_index]
+
+ def get_stats_via(self):
+ c = self._test.statistics.get_counter("/net/route/via")
+ return c[0][self.stats_index]
+
+
+class VppIpRouteV2(VppObject):
+ """
+ IP Route V2
+ """
+
+ def __init__(
+ self, test, dest_addr, dest_addr_len, paths, table_id=0, register=True, src=0
+ ):
+ self._test = test
+ self.paths = paths
+ self.table_id = table_id
+ self.prefix = mk_network(dest_addr, dest_addr_len)
+ self.register = register
+ self.stats_index = None
+ self.modified = False
+ self.src = src
+
+ self.encoded_paths = []
+ for path in self.paths:
+ self.encoded_paths.append(path.encode())
+
+ def __eq__(self, other):
+ if self.table_id == other.table_id and self.prefix == other.prefix:
+ return True
+ return False
+
+ def modify(self, paths):
+ self.paths = paths
+ self.encoded_paths = []
+ for path in self.paths:
+ self.encoded_paths.append(path.encode())
+ self.modified = True
+
+ self._test.vapi.ip_route_add_del_v2(
+ route={
+ "table_id": self.table_id,
+ "prefix": self.prefix,
+ "src": self.src,
+ "n_paths": len(self.encoded_paths),
+ "paths": self.encoded_paths,
+ },
+ is_add=1,
+ is_multipath=0,
+ )
+
+ def add_vpp_config(self):
+ r = self._test.vapi.ip_route_add_del_v2(
+ route={
+ "table_id": self.table_id,
+ "prefix": self.prefix,
+ "n_paths": len(self.encoded_paths),
+ "paths": self.encoded_paths,
+ "src": self.src,
+ },
+ is_add=1,
+ is_multipath=0,
+ )