ip: Replace Sematics for Interface IP addresses
[vpp.git] / src / plugins / gbp / gbp_itf.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_INTERFACE_H__
17 #define __GBP_INTERFACE_H__
18
19 #include <vnet/l2/l2_input.h>
20 #include <vnet/l2/l2_output.h>
21
22
23 #define foreach_gdb_l3_feature                  \
24   _(LEARN_IP4, "gbp-learn-ip4", "ip4-unicast") \
25   _(LEARN_IP6, "gbp-learn-ip6", "ip6-unicast")
26
27 typedef enum gbp_itf_l3_feat_pos_t_
28 {
29 #define _(s,v,a) GBP_ITF_L3_FEAT_POS_##s,
30   foreach_gdb_l3_feature
31 #undef _
32 } gbp_itf_l3_feat_pos_t;
33
34 typedef enum gbp_itf_l3_feat_t_
35 {
36   GBP_ITF_L3_FEAT_NONE,
37 #define _(s,v,a) GBP_ITF_L3_FEAT_##s = (1 << GBP_ITF_L3_FEAT_POS_##s),
38   foreach_gdb_l3_feature
39 #undef _
40 } gbp_itf_l3_feat_t;
41
42 #define GBP_ITF_L3_FEAT_LEARN (GBP_ITF_L3_FEAT_LEARN_IP4|GBP_ITF_L3_FEAT_LEARN_IP6)
43
44 typedef struct gbp_itf_hdl_t_
45 {
46   union
47   {
48     struct
49     {
50       u32 gh_who;
51       u32 gh_which;
52     };
53   };
54 } gbp_itf_hdl_t;
55
56 #define GBP_ITF_HDL_INIT {.gh_which = ~0}
57 const static gbp_itf_hdl_t GBP_ITF_HDL_INVALID = GBP_ITF_HDL_INIT;
58
59 extern void gbp_itf_hdl_reset (gbp_itf_hdl_t * gh);
60 extern bool gbp_itf_hdl_is_valid (gbp_itf_hdl_t gh);
61
62 typedef void (*gbp_itf_free_fn_t) (u32 sw_if_index);
63
64 extern gbp_itf_hdl_t gbp_itf_l2_add_and_lock (u32 sw_if_index, u32 bd_index);
65 extern gbp_itf_hdl_t gbp_itf_l3_add_and_lock (u32 sw_if_index, index_t gri);
66 extern gbp_itf_hdl_t gbp_itf_l2_add_and_lock_w_free (u32 sw_if_index,
67                                                      u32 bd_index,
68                                                      gbp_itf_free_fn_t ff);
69 extern gbp_itf_hdl_t gbp_itf_l3_add_and_lock_w_free (u32 sw_if_index,
70                                                      index_t gri,
71                                                      gbp_itf_free_fn_t ff);
72
73 extern void gbp_itf_unlock (gbp_itf_hdl_t * hdl);
74 extern void gbp_itf_lock (gbp_itf_hdl_t hdl);
75 extern gbp_itf_hdl_t gbp_itf_clone_and_lock (gbp_itf_hdl_t hdl);
76 extern u32 gbp_itf_get_sw_if_index (gbp_itf_hdl_t hdl);
77
78 extern void gbp_itf_l2_set_input_feature (gbp_itf_hdl_t hdl,
79                                           l2input_feat_masks_t feats);
80 extern void gbp_itf_l2_set_output_feature (gbp_itf_hdl_t hdl,
81                                            l2output_feat_masks_t feats);
82
83 extern void gbp_itf_l3_set_input_feature (gbp_itf_hdl_t hdl,
84                                           gbp_itf_l3_feat_t feats);
85
86 extern u8 *format_gbp_itf_hdl (u8 * s, va_list * args);
87
88 #endif
89
90 /*
91  * fd.io coding-style-patch-verification: ON
92  *
93  * Local Variables:
94  * eval: (c-set-style "gnu")
95  * End:
96  */