X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Fvpp_ip.py;h=81305b2dd9b2029d8f631197cf02d6a9e250c1bf;hb=d170681b24724c522adaf1e2f4f0e1f3289dbf82;hp=3c01ba5e4b8b442b7d03e9b017cf25ebbbb2e6aa;hpb=e64e5fff4ddea88f386657c5d95ae8dc78138d20;p=vpp.git diff --git a/test/vpp_ip.py b/test/vpp_ip.py index 3c01ba5e4b8..81305b2dd9b 100644 --- a/test/vpp_ip.py +++ b/test/vpp_ip.py @@ -7,6 +7,7 @@ import logging from ipaddress import ip_address from socket import AF_INET, AF_INET6 from vpp_papi import VppEnum +from vpp_object import VppObject try: text_type = unicode except NameError: @@ -133,3 +134,96 @@ class VppIpMPrefix(): self.gaddr == str(other.grp_address.ip6) and self.saddr == str(other.src_address.ip6)) return NotImplemented + + +class VppIpPuntPolicer(VppObject): + def __init__(self, test, policer_index, is_ip6=False): + self._test = test + self._policer_index = policer_index + self._is_ip6 = is_ip6 + + def add_vpp_config(self): + self._test.vapi.ip_punt_police(policer_index=self._policer_index, + is_ip6=self._is_ip6, is_add=True) + + def remove_vpp_config(self): + self._test.vapi.ip_punt_police(policer_index=self._policer_index, + is_ip6=self._is_ip6, is_add=False) + + def query_vpp_config(self): + NotImplemented + + +class VppIpPuntRedirect(VppObject): + def __init__(self, test, rx_index, tx_index, nh_addr): + self._test = test + self._rx_index = rx_index + self._tx_index = tx_index + self._nh_addr = ip_address(nh_addr) + + def encode(self): + return {"rx_sw_if_index": self._rx_index, + "tx_sw_if_index": self._tx_index, "nh": self._nh_addr} + + def add_vpp_config(self): + self._test.vapi.ip_punt_redirect(punt=self.encode(), is_add=True) + self._test.registry.register(self, self._test.logger) + + def remove_vpp_config(self): + self._test.vapi.ip_punt_redirect(punt=self.encode(), is_add=False) + + def get_vpp_config(self): + is_ipv6 = True if self._nh_addr.version == 6 else False + return self._test.vapi.ip_punt_redirect_dump( + sw_if_index=self._rx_index, is_ipv6=is_ipv6) + + def query_vpp_config(self): + if self.get_vpp_config(): + return True + return False + + +class VppIpPathMtu(VppObject): + def __init__(self, test, nh, pmtu, table_id=0): + self._test = test + self.nh = nh + self.pmtu = pmtu + self.table_id = table_id + + def add_vpp_config(self): + self._test.vapi.ip_path_mtu_update(pmtu={'nh': self.nh, + 'table_id': self.table_id, + 'path_mtu': self.pmtu}) + self._test.registry.register(self, self._test.logger) + return self + + def modify(self, pmtu): + self.pmtu = pmtu + self._test.vapi.ip_path_mtu_update(pmtu={'nh': self.nh, + 'table_id': self.table_id, + 'path_mtu': self.pmtu}) + return self + + def remove_vpp_config(self): + self._test.vapi.ip_path_mtu_update(pmtu={'nh': self.nh, + 'table_id': self.table_id, + 'path_mtu': 0}) + + def query_vpp_config(self): + ds = list(self._test.vapi.vpp.details_iter( + self._test.vapi.ip_path_mtu_get)) + + for d in ds: + if self.nh == str(d.pmtu.nh) \ + and self.table_id == d.pmtu.table_id \ + and self.pmtu == d.pmtu.path_mtu: + return True + return False + + def object_id(self): + return ("ip-path-mtu-%d-%s-%d" % (self.table_id, + self.nh, + self.pmtu)) + + def __str__(self): + return self.object_id()