diff options
Diffstat (limited to 'test/vpp_papi_provider.py')
-rw-r--r-- | test/vpp_papi_provider.py | 239 |
1 files changed, 183 insertions, 56 deletions
diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py index bda1aea425c..62fc0aa42b3 100644 --- a/test/vpp_papi_provider.py +++ b/test/vpp_papi_provider.py @@ -122,22 +122,23 @@ defaultmapping = { 'mpls_tunnel_dump': {'sw_if_index': 4294967295, }, 'nat44_add_del_address_range': {'is_add': 1, 'vrf_id': 4294967295, }, 'nat44_add_del_identity_mapping': {'ip': b'0', 'sw_if_index': 4294967295, - 'is_add': 1, }, + 'addr_only': 1, 'is_add': 1, }, 'nat44_add_del_interface_addr': {'is_add': 1, }, 'nat44_add_del_lb_static_mapping': {'is_add': 1, }, 'nat44_add_del_static_mapping': {'external_sw_if_index': 4294967295, - 'is_add': 1, }, - 'nat44_interface_add_del_feature': {'is_add': 1, }, - 'nat44_interface_add_del_output_feature': {'is_add': 1, }, + 'addr_only': 1, 'is_add': 1, }, + 'nat44_del_session': {'is_in': 1, }, + 'nat44_interface_add_del_feature': {'is_inside': 1, 'is_add': 1, }, + 'nat44_interface_add_del_output_feature': {'is_inside': 1, 'is_add': 1, }, 'nat44_lb_static_mapping_add_del_local': {'is_add': 1, }, - 'nat64_add_del_interface': {'is_add': 1, }, + 'nat64_add_del_interface': {'is_inside': 1, 'is_add': 1, }, 'nat64_add_del_interface_addr': {'is_add': 1, }, 'nat64_add_del_pool_addr_range': {'vrf_id': 4294967295, 'is_add': 1, }, 'nat64_add_del_prefix': {'is_add': 1, }, 'nat64_add_del_static_bib': {'is_add': 1, }, 'nat64_bib_dump': {'protocol': 255, }, 'nat64_st_dump': {'protocol': 255, }, - 'nat66_add_del_interface': {'is_add': 1, }, + 'nat66_add_del_interface': {'is_inside': 1, 'is_add': 1, }, 'nat66_add_del_static_mapping': {'is_add': 1, }, 'nat_det_add_del_map': {'is_add': 1, }, 'nat_ha_resync': {'want_resync_event': 1, }, @@ -754,35 +755,35 @@ class VppPapiProvider(object): def nat44_interface_add_del_feature( self, sw_if_index, - is_add=1, - flags=0): + is_inside=1, + is_add=1): """Enable/disable NAT44 feature on the interface :param sw_if_index: Software index of the interface + :param is_inside: 1 if inside, 0 if outside (Default value = 1) :param is_add: 1 if add, 0 if delete (Default value = 1) - :param flags: NAT_IS_INSIDE if inside else outside """ return self.api( self.papi.nat44_interface_add_del_feature, {'is_add': is_add, - 'flags': flags, + 'is_inside': is_inside, 'sw_if_index': sw_if_index}) def nat44_interface_add_del_output_feature( self, sw_if_index, - is_add=1, - flags=0): + is_inside=1, + is_add=1): """Enable/disable NAT44 output feature on the interface :param sw_if_index: Software index of the interface + :param is_inside: 1 if inside, 0 if outside (Default value = 1) :param is_add: 1 if add, 0 if delete (Default value = 1) - :param flags: NAT_IS_INSIDE if inside else outside """ return self.api( self.papi.nat44_interface_add_del_output_feature, {'is_add': is_add, - 'flags': flags, + 'is_inside': is_inside, 'sw_if_index': sw_if_index}) def nat44_add_del_static_mapping( @@ -792,11 +793,14 @@ class VppPapiProvider(object): external_sw_if_index=0xFFFFFFFF, local_port=0, external_port=0, + addr_only=1, vrf_id=0, protocol=0, - is_add=1, - flags=0, - tag=""): + twice_nat=0, + self_twice_nat=0, + out2in_only=0, + tag="", + is_add=1): """Add/delete NAT44 static mapping :param local_ip: Local IP address @@ -804,23 +808,31 @@ class VppPapiProvider(object): :param external_sw_if_index: External interface instead of IP address :param local_port: Local port number (Default value = 0) :param external_port: External port number (Default value = 0) + :param addr_only: 1 if address only mapping, 0 if address and port :param vrf_id: VRF ID :param protocol: IP protocol (Default value = 0) - :param flags: NAT configuration flags - :param is_add: 1 if add, 0 if delete (Default value = 1) + :param twice_nat: 1 if translate external host address and port + :param self_twice_nat: 1 if translate external host address and port + whenever external host address equals + local address of internal host + :param out2in_only: if 1 rule is matching only out2in direction :param tag: Opaque string tag + :param is_add: 1 if add, 0 if delete (Default value = 1) """ return self.api( self.papi.nat44_add_del_static_mapping, {'is_add': is_add, - 'flags': flags, + 'addr_only': addr_only, 'local_ip_address': local_ip, 'external_ip_address': external_ip, - 'protocol': protocol, 'local_port': local_port, 'external_port': external_port, 'external_sw_if_index': external_sw_if_index, 'vrf_id': vrf_id, + 'protocol': protocol, + 'twice_nat': twice_nat, + 'self_twice_nat': self_twice_nat, + 'out2in_only': out2in_only, 'tag': tag}) def nat44_add_del_identity_mapping( @@ -828,7 +840,7 @@ class VppPapiProvider(object): ip=b'0', sw_if_index=0xFFFFFFFF, port=0, - flags=0, + addr_only=1, vrf_id=0, protocol=0, tag='', @@ -838,7 +850,7 @@ class VppPapiProvider(object): :param ip: IP address (Default value = 0) :param sw_if_index: Interface instead of IP address :param port: Port number (Default value = 0) - :param flags: NAT configuration flags (NAT_IS_ADDR_ONLY) + :param addr_only: 1 if address only mapping, 0 if address and port :param vrf_id: VRF ID :param protocol: IP protocol (Default value = 0) :param tag: Opaque string tag @@ -847,13 +859,13 @@ class VppPapiProvider(object): return self.api( self.papi.nat44_add_del_identity_mapping, {'is_add': is_add, - 'flags': flags, + 'addr_only': addr_only, 'ip_address': ip, - 'protocol': protocol, 'port': port, 'sw_if_index': sw_if_index, 'vrf_id': vrf_id, - 'tag': tag}) + 'tag': tag, + 'protocol': protocol}) def nat44_add_del_address_range( self, @@ -861,69 +873,73 @@ class VppPapiProvider(object): last_ip_address, is_add=1, vrf_id=0xFFFFFFFF, - flags=0): + twice_nat=0): """Add/del NAT44 address range :param first_ip_address: First IP address :param last_ip_address: Last IP address :param vrf_id: VRF id for the address range + :param twice_nat: twice NAT address for extenral hosts :param is_add: 1 if add, 0 if delete (Default value = 1) - :param flags: NAT configuration flags (NAT_IS_TWICE_NAT) """ return self.api( self.papi.nat44_add_del_address_range, {'first_ip_address': first_ip_address, 'last_ip_address': last_ip_address, 'vrf_id': vrf_id, - 'is_add': is_add, - 'flags': flags}) + 'twice_nat': twice_nat, + 'is_add': is_add}) def nat44_add_del_interface_addr( self, sw_if_index, - flags=0, + twice_nat=0, is_add=1): """Add/del NAT44 address from interface :param sw_if_index: Software index of the interface - :param flags: NAT configuration flags (NAT_IS_TWICE_NAT) + :param twice_nat: twice NAT address for external hosts :param is_add: 1 if add, 0 if delete (Default value = 1) """ return self.api( self.papi.nat44_add_del_interface_addr, {'is_add': is_add, 'sw_if_index': sw_if_index, - 'flags': flags}) + 'twice_nat': twice_nat}) def nat44_add_del_lb_static_mapping( self, external_addr, external_port, protocol, + twice_nat=0, + self_twice_nat=0, + out2in_only=0, tag='', affinity=0, local_num=0, locals=[], - flags=0, is_add=1): """Add/delete NAT44 load balancing static mapping + :param twice_nat: 1 if translate external host address and port :param tag: Opaque string tag :param affinity: if 0 disabled, otherwise client IP affinity timeout - :param flags: NAT configuration flags (NAT_IS_TWICE_NAT) :param is_add - 1 if add, 0 if delete """ return self.api( self.papi.nat44_add_del_lb_static_mapping, {'is_add': is_add, - 'flags': flags, 'external_addr': external_addr, 'external_port': external_port, 'protocol': protocol, + 'twice_nat': twice_nat, + 'self_twice_nat': self_twice_nat, + 'out2in_only': out2in_only, + 'tag': tag, 'affinity': affinity, 'local_num': local_num, - 'locals': locals, - 'tag': tag}) + 'locals': locals}) def nat44_lb_static_mapping_add_del_local( self, @@ -964,7 +980,7 @@ class VppPapiProvider(object): port, protocol, vrf_id=0, - flags=0, + is_in=1, ext_host_address=None, ext_host_port=0): """Delete NAT44 session @@ -973,19 +989,29 @@ class VppPapiProvider(object): :param por: port number :param protocol: IP protocol number :param vrf_id: VRF ID - :param flags: NAT configuration flags (NAT_IS_INSIDE) + :param is_in: 1 if inside network address and port pair, 0 if outside :param ext_host_address: external host IPv4 address :param ext_host_port: external host port """ - return self.api( - self.papi.nat44_del_session, - {'address': addr, - 'protocol': protocol, - 'port': port, - 'vrf_id': vrf_id, - 'flags': flags, - 'ext_host_address': ext_host_address, - 'ext_host_port': ext_host_port}) + if ext_host_address is None: + return self.api( + self.papi.nat44_del_session, + {'address': addr, + 'port': port, + 'protocol': protocol, + 'vrf_id': vrf_id, + 'is_in': is_in}) + else: + return self.api( + self.papi.nat44_del_session, + {'address': addr, + 'port': port, + 'protocol': protocol, + 'vrf_id': vrf_id, + 'is_in': is_in, + 'ext_host_valid': 1, + 'ext_host_address': ext_host_address, + 'ext_host_port': ext_host_port}) def nat44_forwarding_enable_disable( self, @@ -998,6 +1024,56 @@ class VppPapiProvider(object): self.papi.nat44_forwarding_enable_disable, {'enable': enable}) + def nat_det_add_del_map( + self, + in_addr, + in_plen, + out_addr, + out_plen, + is_add=1): + """Add/delete deterministic NAT mapping + + :param is_add - 1 if add, 0 if delete + :param in_addr - inside IP address + :param in_plen - inside IP address prefix length + :param out_addr - outside IP address + :param out_plen - outside IP address prefix length + """ + return self.api( + self.papi.nat_det_add_del_map, + {'is_add': is_add, + 'is_nat44': 1, + 'in_addr': in_addr, + 'in_plen': in_plen, + 'out_addr': out_addr, + 'out_plen': out_plen}) + + def nat_det_forward( + self, + in_addr): + """Get outside address and port range from inside address + + :param in_addr - inside IP address + """ + return self.api( + self.papi.nat_det_forward, + {'in_addr': in_addr, + 'is_nat44': 1}) + + def nat_det_reverse( + self, + out_addr, + out_port): + """Get inside address from outside address and port + + :param out_addr - outside IP address + :param out_port - outside port + """ + return self.api( + self.papi.nat_det_reverse, + {'out_addr': out_addr, + 'out_port': out_port}) + def nat_det_map_dump(self): """Dump deterministic NAT mappings @@ -1015,6 +1091,56 @@ class VppPapiProvider(object): self.papi.nat_set_mss_clamping, {'enable': enable, 'mss_value': mss_value}) + def nat_det_close_session_in( + self, + in_addr, + in_port, + ext_addr, + ext_port): + """Close deterministic NAT session using inside address and port + + :param in_addr - inside IP address + :param in_port - inside port + :param ext_addr - external host IP address + :param ext_port - external host port + """ + return self.api( + self.papi.nat_det_close_session_in, + {'in_addr': in_addr, + 'in_port': in_port, + 'ext_addr': ext_addr, + 'ext_port': ext_port, + 'is_nat44': 1}) + + def nat_det_session_dump( + self, + user_addr): + """Dump deterministic NAT sessions belonging to a user + + :param user_addr - inside IP address of the user + :return: Dictionary of deterministic NAT sessions + """ + return self.api( + self.papi.nat_det_session_dump, + {'is_nat44': 1, + 'user_addr': user_addr}) + + def nat64_add_del_interface( + self, + sw_if_index, + is_inside=1, + is_add=1): + """Enable/disable NAT64 feature on the interface + :param sw_if_index: Index of the interface + :param is_inside: 1 if inside, 0 if outside (Default value = 1) + :param is_add: 1 if add, 0 if delete (Default value = 1) + """ + return self.api( + self.papi.nat64_add_del_interface, + {'sw_if_index': sw_if_index, + 'is_inside': is_inside, + 'is_add': is_add}) + def nat64_add_del_static_bib( self, in_ip, @@ -1060,16 +1186,18 @@ class VppPapiProvider(object): """ return self.api(self.papi.nat64_st_dump, {'proto': protocol}) - def nat64_add_del_prefix(self, prefix, vrf_id=0, is_add=1): + def nat64_add_del_prefix(self, prefix, plen, vrf_id=0, is_add=1): """Add/del NAT64 prefix :param prefix: NAT64 prefix + :param plen: NAT64 prefix length :param vrf_id: VRF id of tenant (Default 0) :param is_add: 1 if add, 0 if delete (Default value = 1) """ return self.api( self.papi.nat64_add_del_prefix, {'prefix': prefix, + 'prefix_len': plen, 'vrf_id': vrf_id, 'is_add': is_add}) @@ -1110,19 +1238,18 @@ class VppPapiProvider(object): def nat66_add_del_interface( self, sw_if_index, - flags=0, + is_inside=1, is_add=1): """Enable/disable NAT66 feature on the interface - :param sw_if_index: Index of the interface - :param flags: NAT configuration flags (NAT_IS_INSIDE) + :param is_inside: 1 if inside, 0 if outside (Default value = 1) :param is_add: 1 if add, 0 if delete (Default value = 1) """ return self.api( self.papi.nat66_add_del_interface, - {'is_add': is_add, - 'flags': flags, - 'sw_if_index': sw_if_index}) + {'sw_if_index': sw_if_index, + 'is_inside': is_inside, + 'is_add': is_add}) def nat66_add_del_static_mapping( self, |