tests: clean up gbp calls from vpp_papi_provider
[vpp.git] / src / vnet / vxlan / test / vpp_vxlan_gbp_tunnel.py
1
2 from vpp_interface import VppInterface
3 from vpp_papi import VppEnum
4
5
6 INDEX_INVALID = 0xffffffff
7
8
9 def find_vxlan_gbp_tunnel(test, src, dst, vni):
10     ts = test.vapi.vxlan_gbp_tunnel_dump(INDEX_INVALID)
11     for t in ts:
12         if src == str(t.tunnel.src) and \
13            dst == str(t.tunnel.dst) and \
14            t.tunnel.vni == vni:
15             return t.tunnel.sw_if_index
16     return INDEX_INVALID
17
18
19 class VppVxlanGbpTunnel(VppInterface):
20     """
21     VPP VXLAN GBP interface
22     """
23
24     def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None,
25                  is_ipv6=None, encap_table_id=None, instance=0xffffffff):
26         """ Create VXLAN-GBP Tunnel interface """
27         super(VppVxlanGbpTunnel, self).__init__(test)
28         self.src = src
29         self.dst = dst
30         self.vni = vni
31         self.mcast_itf = mcast_itf
32         self.ipv6 = is_ipv6
33         self.encap_table_id = encap_table_id
34         self.instance = instance
35         if not mode:
36             self.mode = (VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
37                          VXLAN_GBP_API_TUNNEL_MODE_L2)
38         else:
39             self.mode = mode
40
41     def encode(self):
42         return {
43             'src': self.src,
44             'dst': self.dst,
45             'mode': self.mode,
46             'vni': self.vni,
47             'mcast_sw_if_index': self.mcast_itf.sw_if_index
48             if self.mcast_itf else INDEX_INVALID,
49             'encap_table_id': self.encap_table_id,
50             'instance': self.instance,
51         }
52
53     def add_vpp_config(self):
54         reply = self.test.vapi.vxlan_gbp_tunnel_add_del(
55             is_add=1,
56             tunnel=self.encode(),
57         )
58         self.set_sw_if_index(reply.sw_if_index)
59         self._test.registry.register(self, self._test.logger)
60
61     def remove_vpp_config(self):
62         self.test.vapi.vxlan_gbp_tunnel_add_del(
63             is_add=0,
64             tunnel=self.encode(),
65         )
66
67     def query_vpp_config(self):
68         return (INDEX_INVALID != find_vxlan_gbp_tunnel(self._test,
69                                                        self.src,
70                                                        self.dst,
71                                                        self.vni))
72
73     def object_id(self):
74         return "vxlan-gbp-%d-%d-%s-%s" % (self.sw_if_index, self.vni,
75                                           self.src, self.dst)