ikev2: support responder hostname
[vpp.git] / src / plugins / ikev2 / test / vpp_ikev2.py
index 5a2a51e..de20812 100644 (file)
@@ -1,3 +1,4 @@
+from ipaddress import IPv4Address, AddressValueError
 from vpp_object import VppObject
 from vpp_papi import VppEnum
 
@@ -12,7 +13,8 @@ class AuthMethod:
 
 class IDType:
     v = {'ip4-addr': 1,
-         'fqdn': 2}
+         'fqdn': 2,
+         'ip6-addr': 5}
 
     @staticmethod
     def value(key): return IDType.v[key]
@@ -25,6 +27,10 @@ class Profile(VppObject):
         self.vapi = test.vapi
         self.profile_name = profile_name
         self.udp_encap = False
+        self.natt = True
+
+    def disable_natt(self):
+        self.natt = False
 
     def add_auth(self, method, data, is_hex=False):
         if isinstance(method, int):
@@ -52,7 +58,8 @@ class Profile(VppObject):
                           'is_local': False}
 
     def add_local_ts(self, start_addr, end_addr, start_port=0, end_port=0xffff,
-                     proto=0):
+                     proto=0, is_ip4=True):
+        self.ts_is_ip4 = is_ip4
         self.local_ts = {'is_local': True,
                          'protocol_id': proto,
                          'start_port': start_port,
@@ -62,6 +69,12 @@ class Profile(VppObject):
 
     def add_remote_ts(self, start_addr, end_addr, start_port=0,
                       end_port=0xffff, proto=0):
+        try:
+            IPv4Address(start_addr)
+            is_ip4 = True
+        except AddressValueError:
+            is_ip4 = False
+        self.ts_is_ip4 = is_ip4
         self.remote_ts = {'is_local': False,
                           'protocol_id': proto,
                           'start_port': start_port,
@@ -69,6 +82,9 @@ class Profile(VppObject):
                           'start_addr': start_addr,
                           'end_addr': end_addr}
 
+    def add_responder_hostname(self, hn):
+        self.responder_hostname = hn
+
     def add_responder(self, responder):
         self.responder = responder
 
@@ -115,19 +131,24 @@ class Profile(VppObject):
                                            **self.remote_id)
         if hasattr(self, 'local_ts'):
             self.vapi.ikev2_profile_set_ts(name=self.profile_name,
-                                           ts={**self.local_ts})
+                                           ts=self.local_ts)
 
         if hasattr(self, 'remote_ts'):
             self.vapi.ikev2_profile_set_ts(name=self.profile_name,
-                                           ts={**self.remote_ts})
+                                           ts=self.remote_ts)
 
         if hasattr(self, 'responder'):
             self.vapi.ikev2_set_responder(name=self.profile_name,
-                                          responder={**self.responder})
+                                          responder=self.responder)
+
+        if hasattr(self, 'responder_hostname'):
+            print(self.responder_hostname)
+            self.vapi.ikev2_set_responder_hostname(name=self.profile_name,
+                                                   **self.responder_hostname)
 
         if hasattr(self, 'ike_transforms'):
             self.vapi.ikev2_set_ike_transforms(name=self.profile_name,
-                                               tr={**self.ike_transforms})
+                                               tr=self.ike_transforms)
 
         if hasattr(self, 'esp_transforms'):
             self.vapi.ikev2_set_esp_transforms(name=self.profile_name,
@@ -147,6 +168,9 @@ class Profile(VppObject):
             self.vapi.ikev2_set_tunnel_interface(name=self.profile_name,
                                                  sw_if_index=self.tun_itf)
 
+        if not self.natt:
+            self.vapi.ikev2_profile_disable_natt(name=self.profile_name)
+
     def query_vpp_config(self):
         res = self.vapi.ikev2_profile_dump()
         for r in res: