misc: deprecate gbp and its dependents
[vpp.git] / extras / deprecated / plugins / gbp / gbp_vxlan.h
1 /*
2  * Copyright (c) 2018 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 #ifndef __GBP_VXLAN_H__
17 #define __GBP_VXLAN_H__
18
19 #include <vnet/fib/fib_types.h>
20 #include <plugins/gbp/gbp_itf.h>
21
22 #define foreach_gbp_vxlan_tunnel_layer                                        \
23   _ (L2, "l2")                                                                \
24   _ (L3, "l3")
25
26 typedef enum gbp_vxlan_tunnel_layer_t_
27 {
28 #define _(s,n) GBP_VXLAN_TUN_##s,
29   foreach_gbp_vxlan_tunnel_layer
30 #undef _
31 } gbp_vxlan_tunnel_layer_t;
32
33 /**
34  * GBP VXLAN (template) tunnel.
35  * A template tunnel has only a VNI, it does not have src,dst address.
36  * As such it cannot be used to send traffic. It is used in the RX path
37  * to RX vxlan-gbp packets that do not match an existing tunnel;
38  */
39 typedef struct gbp_vxlan_tunnel_t_
40 {
41   u32 gt_hw_if_index;
42   u32 gt_sw_if_index;
43   u32 gt_vni;
44
45   /**
46    * The BD or RD value (depending on the layer) that the tunnel is bound to
47    */
48   u32 gt_bd_rd_id;
49   gbp_vxlan_tunnel_layer_t gt_layer;
50
51   union
52   {
53     struct
54     {
55       /**
56        * Reference to the GPB-BD
57        */
58       index_t gt_gbd;
59     };
60     struct
61     {
62       /**
63        * References to the GBP-RD
64        */
65       index_t gt_grd;
66     };
67   };
68
69   /**
70    * gbp-itf config for this interface
71    */
72   gbp_itf_hdl_t gt_itf;
73
74   /**
75    * list of child vxlan-gbp tunnels built from this template
76    */
77   index_t *gt_tuns;
78
79   /**
80    * The source address to use for child tunnels
81    */
82   ip46_address_t gt_src;
83 } gbp_vxlan_tunnel_t;
84
85 /**
86  * The different types of interfaces that endpoints are learned on
87  */
88 typedef enum gbp_vxlan_tunnel_type_t_
89 {
90   /**
91    * This is the object type defined above.
92    *  A template representation of a vxlan-gbp tunnel. from this tunnel
93    *  type, real vxlan-gbp tunnels are created (by cloning the VNI)
94    */
95   GBP_VXLAN_TEMPLATE_TUNNEL,
96
97   /**
98    * A real VXLAN-GBP tunnel (from vnet/vxlan-gbp/...)
99    */
100   VXLAN_GBP_TUNNEL,
101 } gbp_vxlan_tunnel_type_t;
102
103 extern int gbp_vxlan_tunnel_add (u32 vni, gbp_vxlan_tunnel_layer_t layer,
104                                  u32 bd_rd_id,
105                                  const ip4_address_t * src,
106                                  u32 * sw_if_indexp);
107 extern int gbp_vxlan_tunnel_del (u32 vni);
108
109 extern gbp_vxlan_tunnel_type_t gbp_vxlan_tunnel_get_type (u32 sw_if_index);
110
111 extern gbp_itf_hdl_t gbp_vxlan_tunnel_clone_and_lock (u32 parent_tunnel,
112                                                       const ip46_address_t *
113                                                       src,
114                                                       const ip46_address_t *
115                                                       dst);
116
117 extern u32 vxlan_gbp_tunnel_get_parent (u32 sw_if_index);
118 extern gbp_itf_hdl_t vxlan_gbp_tunnel_lock_itf (u32 sw_if_index);
119
120 typedef walk_rc_t (*gbp_vxlan_cb_t) (gbp_vxlan_tunnel_t * gt, void *ctx);
121 extern void gbp_vxlan_walk (gbp_vxlan_cb_t cb, void *ctx);
122
123 extern u8 *format_gbp_vxlan_tunnel (u8 * s, va_list * args);
124 extern u8 *format_gbp_vxlan_tunnel_layer (u8 * s, va_list * args);
125
126 extern gbp_vxlan_tunnel_t *gbp_vxlan_tunnel_get (index_t gti);
127 #endif
128
129 /*
130  * fd.io coding-style-patch-verification: ON
131  *
132  * Local Variables:
133  * eval: (c-set-style "gnu")
134  * End:
135  */