ipsec: IPSec protection for multi-point tunnel interfaces
[vpp.git] / test / test_ipsec_api.py
1 import unittest
2
3 from framework import VppTestCase, VppTestRunner
4 from template_ipsec import TemplateIpsec, IPsecIPv4Params
5 from vpp_papi import VppEnum
6
7
8 class IpsecApiTestCase(VppTestCase):
9     """ IPSec API tests """
10
11     @classmethod
12     def setUpClass(cls):
13         super(IpsecApiTestCase, cls).setUpClass()
14
15     @classmethod
16     def tearDownClass(cls):
17         super(IpsecApiTestCase, cls).tearDownClass()
18
19     def setUp(self):
20         super(IpsecApiTestCase, self).setUp()
21         self.create_pg_interfaces([0])
22         self.pg0.config_ip4()
23         self.pg0.admin_up()
24
25         self.vpp_esp_protocol = (VppEnum.vl_api_ipsec_proto_t.
26                                  IPSEC_API_PROTO_ESP)
27         self.vpp_ah_protocol = (VppEnum.vl_api_ipsec_proto_t.
28                                 IPSEC_API_PROTO_AH)
29         self.ipv4_params = IPsecIPv4Params()
30
31     def tearDown(self):
32         self.pg0.unconfig_ip4()
33         self.pg0.admin_down()
34         super(IpsecApiTestCase, self).tearDown()
35
36     def test_backend_dump(self):
37         """ backend dump """
38         d = self.vapi.ipsec_backend_dump()
39         self.assert_equal(len(d), 2, "number of ipsec backends in dump")
40         self.assert_equal(d[0].protocol, self.vpp_ah_protocol,
41                           "ipsec protocol in dump entry")
42         self.assert_equal(d[0].index, 0, "index in dump entry")
43         self.assert_equal(d[0].active, 1, "active flag in dump entry")
44         self.assert_equal(d[1].protocol, self.vpp_esp_protocol,
45                           "ipsec protocol in dump entry")
46         self.assert_equal(d[1].index, 0, "index in dump entry")
47         self.assert_equal(d[1].active, 1, "active flag in dump entry")
48
49     def test_select_valid_backend(self):
50         """ select valid backend """
51         self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 0)
52         self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 0)
53
54     def test_select_invalid_backend(self):
55         """ select invalid backend """
56         with self.vapi.assert_negative_api_retval():
57             self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 200)
58         with self.vapi.assert_negative_api_retval():
59             self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 200)
60
61     def test_select_backend_in_use(self):
62         """ attempt to change backend while sad configured """
63         params = self.ipv4_params
64         addr_type = params.addr_type
65         is_ipv6 = params.is_ipv6
66         scapy_tun_sa_id = params.scapy_tun_sa_id
67         scapy_tun_spi = params.scapy_tun_spi
68         auth_algo_vpp_id = params.auth_algo_vpp_id
69         auth_key = params.auth_key
70         crypt_algo_vpp_id = params.crypt_algo_vpp_id
71         crypt_key = params.crypt_key
72
73         self.vapi.ipsec_sad_entry_add_del(scapy_tun_sa_id, scapy_tun_spi,
74                                           auth_algo_vpp_id, auth_key,
75                                           crypt_algo_vpp_id, crypt_key,
76                                           self.vpp_ah_protocol,
77                                           self.pg0.local_addr[addr_type],
78                                           self.pg0.remote_addr[addr_type])
79         with self.vapi.assert_negative_api_retval():
80             self.vapi.ipsec_select_backend(
81                 protocol=self.vpp_ah_protocol, index=0)
82
83         self.vapi.ipsec_sad_entry_add_del(scapy_tun_sa_id, scapy_tun_spi,
84                                           auth_algo_vpp_id, auth_key,
85                                           crypt_algo_vpp_id, crypt_key,
86                                           self.vpp_ah_protocol,
87                                           self.pg0.local_addr[addr_type],
88                                           self.pg0.remote_addr[addr_type],
89                                           is_add=0)
90         self.vapi.ipsec_select_backend(
91             protocol=self.vpp_ah_protocol, index=0)
92
93
94 if __name__ == '__main__':
95     unittest.main(testRunner=VppTestRunner)