ipip: Multi-point interface
[vpp.git] / test / vpp_ipip_tun_interface.py
1 from vpp_tunnel_interface import VppTunnelInterface
2 from ipaddress import ip_address
3 from vpp_papi import VppEnum
4
5
6 class VppIpIpTunInterface(VppTunnelInterface):
7     """
8     VPP IP-IP Tunnel interface
9     """
10
11     def __init__(self, test, parent_if, src, dst,
12                  table_id=0, dscp=0x0,
13                  flags=0, mode=None):
14         super(VppIpIpTunInterface, self).__init__(test, parent_if)
15         self.src = src
16         self.dst = dst
17         self.table_id = table_id
18         self.dscp = dscp
19         self.flags = flags
20         self.mode = mode
21         if not self.mode:
22             self.mode = (VppEnum.vl_api_tunnel_mode_t.
23                          TUNNEL_API_MODE_P2P)
24
25     def add_vpp_config(self):
26         r = self.test.vapi.ipip_add_tunnel(
27             tunnel={
28                 'src': self.src,
29                 'dst': self.dst,
30                 'table_id': self.table_id,
31                 'flags': self.flags,
32                 'dscp': self.dscp,
33                 'instance': 0xffffffff,
34                 'mode': self.mode,
35             })
36         self.set_sw_if_index(r.sw_if_index)
37         self.test.registry.register(self, self.test.logger)
38         return self
39
40     def remove_vpp_config(self):
41         self.test.vapi.ipip_del_tunnel(sw_if_index=self._sw_if_index)
42
43     def query_vpp_config(self):
44         ts = self.test.vapi.ipip_tunnel_dump(sw_if_index=0xffffffff)
45         for t in ts:
46             if t.tunnel.sw_if_index == self._sw_if_index:
47                 return True
48         return False
49
50     def __str__(self):
51         return self.object_id()
52
53     def object_id(self):
54         return "ipip-%d" % self._sw_if_index
55
56     @property
57     def remote_ip(self):
58         return self.dst
59
60     @property
61     def local_ip(self):
62         return self.src