NAT66 1:1 mapping (VPP-1108)
[vpp.git] / test / vpp_papi_provider.py
index 338ca27..0269736 100644 (file)
@@ -603,6 +603,18 @@ class VppPapiProvider(object):
                          'tag1': tag1,
                          'tag2': tag2})
 
+    def sw_interface_set_l2_emulation(
+            self,
+            sw_if_index,
+            enable=1):
+        """L2 Emulation
+        :param sw_if_index - interface the operation is applied to
+
+        """
+        return self.api(self.papi.l2_emulation,
+                        {'sw_if_index': sw_if_index,
+                         'enable': enable})
+
     def sw_interface_set_flags(self, sw_if_index, admin_up_down):
         """
 
@@ -747,7 +759,7 @@ class VppPapiProvider(object):
             is_local=0,
             is_classify=0,
             is_multipath=0,
-            is_l2_bridged=0,
+            is_dvr=0,
             is_udp_encap=0,
             is_source_lookup=0):
         """
@@ -768,7 +780,7 @@ class VppPapiProvider(object):
         :param is_multipath:  (Default value = 0)
         :param is_resolve_host:  (Default value = 0)
         :param is_resolve_attached:  (Default value = 0)
-        :param is_l2_bridged:  (Default value = 0)
+        :param is_dvr:  (Default value = 0)
         :param is_source_lookup:  (Default value = 0)
         :param next_hop_weight:  (Default value = 1)
 
@@ -790,7 +802,7 @@ class VppPapiProvider(object):
              'is_multipath': is_multipath,
              'is_resolve_host': is_resolve_host,
              'is_resolve_attached': is_resolve_attached,
-             'is_l2_bridged': is_l2_bridged,
+             'is_dvr': is_dvr,
              'is_source_lookup': is_source_lookup,
              'is_udp_encap': is_udp_encap,
              'next_hop_weight': next_hop_weight,
@@ -1222,6 +1234,9 @@ class VppPapiProvider(object):
             addr_only=1,
             vrf_id=0,
             protocol=0,
+            twice_nat=0,
+            out2in_only=0,
+            tag="",
             is_add=1):
         """Add/delete NAT44 static mapping
 
@@ -1233,6 +1248,9 @@ class VppPapiProvider(object):
         :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 twice_nat: 1 if translate external host address and port
+        :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(
@@ -1245,7 +1263,10 @@ class VppPapiProvider(object):
              'external_port': external_port,
              'external_sw_if_index': external_sw_if_index,
              'vrf_id': vrf_id,
-             'protocol': protocol})
+             'protocol': protocol,
+             'twice_nat': twice_nat,
+             'out2in_only': out2in_only,
+             'tag': tag})
 
     def nat44_add_del_identity_mapping(
             self,
@@ -1255,6 +1276,7 @@ class VppPapiProvider(object):
             addr_only=1,
             vrf_id=0,
             protocol=0,
+            tag='',
             is_add=1):
         """Add/delete NAT44 identity mapping
 
@@ -1264,6 +1286,7 @@ class VppPapiProvider(object):
         :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
         :param is_add: 1 if add, 0 if delete (Default value = 1)
         """
         return self.api(
@@ -1274,6 +1297,7 @@ class VppPapiProvider(object):
              'port': port,
              'sw_if_index': sw_if_index,
              'vrf_id': vrf_id,
+             'tag': tag,
              'protocol': protocol})
 
     def nat44_add_del_address_range(
@@ -1281,12 +1305,14 @@ class VppPapiProvider(object):
             first_ip_address,
             last_ip_address,
             is_add=1,
-            vrf_id=0xFFFFFFFF):
+            vrf_id=0xFFFFFFFF,
+            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 extenal hosts
         :param is_add: 1 if add, 0 if delete (Default value = 1)
         """
         return self.api(
@@ -1294,6 +1320,7 @@ class VppPapiProvider(object):
             {'first_ip_address': first_ip_address,
              'last_ip_address': last_ip_address,
              'vrf_id': vrf_id,
+             'twice_nat': twice_nat,
              'is_add': is_add})
 
     def nat44_address_dump(self):
@@ -1335,14 +1362,19 @@ class VppPapiProvider(object):
     def nat44_add_interface_addr(
             self,
             sw_if_index,
+            twice_nat=0,
             is_add=1):
         """Add/del NAT44 address from interface
 
         :param sw_if_index: Software index of the interface
+        :param twice_nat: twice NAT address for extenal 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})
+        return self.api(
+            self.papi.nat44_add_del_interface_addr,
+            {'is_add': is_add,
+             'sw_if_index': sw_if_index,
+             'twice_nat': twice_nat})
 
     def nat44_interface_addr_dump(self):
         """Dump NAT44 addresses interfaces
@@ -1396,11 +1428,16 @@ class VppPapiProvider(object):
             external_port,
             protocol,
             vrf_id=0,
+            twice_nat=0,
+            out2in_only=0,
+            tag='',
             local_num=0,
             locals=[],
             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 is_add - 1 if add, 0 if delete
         """
         return self.api(
@@ -1410,6 +1447,9 @@ class VppPapiProvider(object):
              'external_port': external_port,
              'protocol': protocol,
              'vrf_id': vrf_id,
+             'twice_nat': twice_nat,
+             'out2in_only': out2in_only,
+             'tag': tag,
              'local_num': local_num,
              'locals': locals})
 
@@ -1443,6 +1483,17 @@ class VppPapiProvider(object):
              'vrf_id': vrf_id,
              'is_in': is_in})
 
+    def nat44_forwarding_enable_disable(
+            self,
+            enable):
+        """Enable/disable forwarding for NAT44
+
+        :param enable: 1 for enable, 0 for disable
+        """
+        return self.api(
+            self.papi.nat44_forwarding_enable_disable,
+            {'enable': enable})
+
     def nat_set_reass(
             self,
             timeout=2,
@@ -1781,6 +1832,17 @@ class VppPapiProvider(object):
             {'ip4_addr': ip4,
              'ip6_addr': ip6})
 
+    def dslite_set_b4_addr(self, ip6, ip4):
+        """Set DS-Lite B4 IPv6 address
+
+        :param ip4: IPv4 address
+        :param ip6: IPv6 address
+        """
+        return self.api(
+            self.papi.dslite_set_b4_addr,
+            {'ip4_addr': ip4,
+             'ip6_addr': ip6})
+
     def dslite_add_del_pool_addr_range(
             self,
             start_addr,
@@ -1798,6 +1860,54 @@ class VppPapiProvider(object):
              'end_addr': end_addr,
              'is_add': is_add})
 
+    def nat66_add_del_interface(
+            self,
+            sw_if_index,
+            is_inside=1,
+            is_add=1):
+        """Enable/disable NAT66 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.nat66_add_del_interface,
+            {'sw_if_index': sw_if_index,
+             'is_inside': is_inside,
+             'is_add': is_add})
+
+    def nat66_add_del_static_mapping(
+            self,
+            in_ip,
+            out_ip,
+            vrf_id=0,
+            is_add=1):
+        """Add/delete NAT66 static mapping
+
+        :param in_ip: Inside IPv6 address
+        :param out_ip: Outside IPv6 address
+        :param vrf_id: VRF ID (Default value = 0)
+        :param is_add: 1 if add, 0 if delete (Default value = 1)
+        """
+        return self.api(
+            self.papi.nat66_add_del_static_mapping,
+            {'local_ip_address': in_ip,
+             'external_ip_address': out_ip,
+             'vrf_id': vrf_id,
+             'is_add': is_add})
+
+    def nat66_interface_dump(self):
+        """Dump interfaces with NAT66 feature
+        :return: Dictionary of interfaces with NAT66 feature
+        """
+        return self.api(self.papi.nat66_interface_dump, {})
+
+    def nat66_static_mapping_dump(self):
+        """Dump NAT66 static mappings
+        :return: Dictionary of NAT66 static mappings
+        """
+        return self.api(self.papi.nat66_static_mapping_dump, {})
+
     def control_ping(self):
         self.api(self.papi.control_ping)
 
@@ -2079,6 +2189,7 @@ class VppPapiProvider(object):
                     hostname,
                     client_id='',
                     is_add=1,
+                    set_broadcast_flag=1,
                     want_dhcp_events=0):
         return self.api(
             self.papi.dhcp_client_config,
@@ -2088,6 +2199,7 @@ class VppPapiProvider(object):
                 'client_id': client_id,
                 'is_add': is_add,
                 'want_dhcp_event': want_dhcp_events,
+                'set_broadcast_flag': set_broadcast_flag,
                 'pid': os.getpid(),
             })
 
@@ -2278,6 +2390,7 @@ class VppPapiProvider(object):
                        psid_offset=0,
                        psid_length=0,
                        is_translation=0,
+                       is_rfc6052=0,
                        mtu=1280):
         return self.api(
             self.papi.map_add_domain,
@@ -2292,6 +2405,7 @@ class VppPapiProvider(object):
                 'psid_offset': psid_offset,
                 'psid_length': psid_length,
                 'is_translation': is_translation,
+                'is_rfc6052': is_rfc6052,
                 'mtu': mtu
             })
 
@@ -2973,3 +3087,18 @@ class VppPapiProvider(object):
              'is_outbound': is_outbound,
              'sa_id': sa_id,
              'is_ip_any': is_ip_any})
+
+    def app_namespace_add(self,
+                          namespace_id,
+                          ip4_fib_id=0,
+                          ip6_fib_id=0,
+                          sw_if_index=0xFFFFFFFF,
+                          secret=0):
+        return self.api(
+            self.papi.app_namespace_add_del,
+            {'secret': secret,
+             'sw_if_index': sw_if_index,
+             'ip4_fib_id': ip4_fib_id,
+             'ip6_fib_id': ip6_fib_id,
+             'namespace_id': namespace_id,
+             'namespace_id_len': len(namespace_id)})