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