1 from vpp_object import VppObject
2 from vpp_papi import VppEnum
10 def value(key): return AuthMethod.v[key]
18 def value(key): return IDType.v[key]
21 class Profile(VppObject):
23 def __init__(self, test, profile_name):
26 self.profile_name = profile_name
27 self.udp_encap = False
29 def add_auth(self, method, data, is_hex=False):
30 if isinstance(method, int):
32 elif isinstance(method, str):
33 m = AuthMethod.value(method)
35 raise Exception('unsupported type {}'.format(method))
36 self.auth = {'auth_method': m,
40 def add_local_id(self, id_type, data):
41 if isinstance(id_type, str):
42 t = IDType.value(id_type)
43 self.local_id = {'id_type': t,
47 def add_remote_id(self, id_type, data):
48 if isinstance(id_type, str):
49 t = IDType.value(id_type)
50 self.remote_id = {'id_type': t,
54 def add_local_ts(self, start_addr, end_addr, start_port=0, end_port=0xffff,
56 self.local_ts = {'is_local': True,
58 'start_port': start_port,
60 'start_addr': start_addr,
63 def add_remote_ts(self, start_addr, end_addr, start_port=0,
64 end_port=0xffff, proto=0):
65 self.remote_ts = {'is_local': False,
67 'start_port': start_port,
69 'start_addr': start_addr,
72 def add_responder(self, responder):
73 self.responder = responder
75 def add_ike_transforms(self, tr):
76 self.ike_transforms = tr
78 def add_esp_transforms(self, tr):
79 self.esp_transforms = tr
81 def set_udp_encap(self, udp_encap):
82 self.udp_encap = udp_encap
84 def set_lifetime_data(self, data):
85 self.lifetime_data = data
87 def set_ipsec_over_udp_port(self, port):
88 self.ipsec_udp_port = {'is_set': 1,
91 def set_tunnel_interface(self, sw_if_index):
92 self.tun_itf = sw_if_index
95 return 'ikev2-profile-%s' % self.profile_name
97 def remove_vpp_config(self):
98 self.vapi.ikev2_profile_add_del(name=self.profile_name, is_add=False)
100 def add_vpp_config(self):
101 self.vapi.ikev2_profile_add_del(name=self.profile_name, is_add=True)
102 if hasattr(self, 'auth'):
103 self.vapi.ikev2_profile_set_auth(name=self.profile_name,
104 data_len=len(self.auth['data']),
106 if hasattr(self, 'local_id'):
107 self.vapi.ikev2_profile_set_id(name=self.profile_name,
108 data_len=len(self.local_id
111 if hasattr(self, 'remote_id'):
112 self.vapi.ikev2_profile_set_id(name=self.profile_name,
113 data_len=len(self.remote_id
116 if hasattr(self, 'local_ts'):
117 self.vapi.ikev2_profile_set_ts(name=self.profile_name,
118 ts={**self.local_ts})
120 if hasattr(self, 'remote_ts'):
121 self.vapi.ikev2_profile_set_ts(name=self.profile_name,
122 ts={**self.remote_ts})
124 if hasattr(self, 'responder'):
125 self.vapi.ikev2_set_responder(name=self.profile_name,
126 responder={**self.responder})
128 if hasattr(self, 'ike_transforms'):
129 self.vapi.ikev2_set_ike_transforms(name=self.profile_name,
130 tr={**self.ike_transforms})
132 if hasattr(self, 'esp_transforms'):
133 self.vapi.ikev2_set_esp_transforms(name=self.profile_name,
134 tr=self.esp_transforms)
137 self.vapi.ikev2_profile_set_udp_encap(name=self.profile_name)
139 if hasattr(self, 'lifetime_data'):
140 self.vapi.ikev2_set_sa_lifetime(name=self.profile_name,
141 **self.lifetime_data)
143 if hasattr(self, 'ipsec_udp_port'):
144 self.vapi.ikev2_profile_set_ipsec_udp_port(name=self.profile_name,
145 **self.ipsec_udp_port)
146 if hasattr(self, 'tun_itf'):
147 self.vapi.ikev2_set_tunnel_interface(name=self.profile_name,
148 sw_if_index=self.tun_itf)
150 def query_vpp_config(self):
151 res = self.vapi.ikev2_profile_dump()
153 if r.profile.name == self.profile_name: