FD.io VPP  v17.04.2-2-ga8f93f8
Vector Packet Processing
mfib_types.h
Go to the documentation of this file.
1  /*
2  * Copyright (c) 2016 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 __MFIB_TYPES_H__
17 #define __MFIB_TYPES_H__
18 
19 #include <vnet/fib/fib_types.h>
20 
21 /**
22  * Aggregrate type for a prefix
23  */
24 typedef struct mfib_prefix_t_ {
25  /**
26  * The mask length
27  */
29 
30  /**
31  * protocol type
32  */
34 
35  /**
36  * Pad to keep the address 4 byte aligned
37  */
38  u8 ___fp___pad;
39 
40  /**
41  * The address type is not deriveable from the fp_addr member.
42  * If it's v4, then the first 3 u32s of the address will be 0.
43  * v6 addresses (even v4 mapped ones) have at least 2 u32s assigned
44  * to non-zero values. true. but when it's all zero, one cannot decide.
45  */
46  ip46_address_t fp_grp_addr;
47  ip46_address_t fp_src_addr;
49 
51 {
53  /**
54  * The control planes needs packets mathing this entry to generate
55  * a signal.
56  */
58  /**
59  * Drop all traffic to this route
60  */
62  /**
63  * The control plane needs to be informed of coneected sources
64  */
66  /**
67  * Accept packets from any incpoming interface
68  * Use with extreme caution
69  */
71  /**
72  * Exclusive - like its unicast counterpart. the source has provided
73  * the forwarding DPO directly. The entry therefore does not resolve
74  * paths via a path-list
75  */
77 
81 
82 #define FOR_EACH_MFIB_ATTRIBUTE(_item) \
83  for (_item = MFIB_ENTRY_ATTRIBUTE_FIRST; \
84  _item <= MFIB_ENTRY_ATTRIBUTE_LAST; \
85  _item++)
86 
87 #define MFIB_ENTRY_NAMES_SHORT { \
88  [MFIB_ENTRY_SIGNAL] = "S", \
89  [MFIB_ENTRY_CONNECTED] = "C", \
90  [MFIB_ENTRY_DROP] = "D", \
91  [MFIB_ENTRY_ACCEPT_ALL_ITF] = "AA", \
92  [MFIB_ENTRY_INHERIT_ACCEPT] = "IA", \
93  [MFIB_ENTRY_EXCLUSIVE] = "E", \
94 }
95 
96 #define MFIB_ENTRY_NAMES_LONG { \
97  [MFIB_ENTRY_SIGNAL] = "Signal", \
98  [MFIB_ENTRY_CONNECTED] = "Connected", \
99  [MFIB_ENTRY_DROP] = "Drop", \
100  [MFIB_ENTRY_ACCEPT_ALL_ITF] = "Accept-all-itf", \
101  [MFIB_ENTRY_INHERIT_ACCEPT] = "Inherit-Accept", \
102  [MFIB_ENTRY_EXCLUSIVE] = "Exclusive", \
103 }
104 
106 {
115 
117 {
126 
127 #define FOR_EACH_MFIB_ITF_ATTRIBUTE(_item) \
128  for (_item = MFIB_ITF_ATTRIBUTE_FIRST; \
129  _item <= MFIB_ITF_ATTRIBUTE_LAST; \
130  _item++)
131 
132 #define MFIB_ITF_NAMES_SHORT { \
133  [MFIB_ITF_NEGATE_SIGNAL] = "NS", \
134  [MFIB_ITF_ACCEPT] = "A", \
135  [MFIB_ITF_FORWARD] = "F", \
136  [MFIB_ITF_SIGNAL_PRESENT] = "SP", \
137  [MFIB_ITF_DONT_PRESERVE] = "DP", \
138 }
139 
140 #define MFIB_ITF_NAMES_LONG { \
141  [MFIB_ITF_NEGATE_SIGNAL] = "Negate-Signal", \
142  [MFIB_ITF_ACCEPT] = "Accept", \
143  [MFIB_ITF_FORWARD] = "Forward", \
144  [MFIB_ITF_SIGNAL_PRESENT] = "Signal-Present", \
145  [MFIB_ITF_DONT_PRESERVE] = "Don't-Preserve", \
146 }
147 
148 typedef enum mfib_itf_flags_t_
149 {
157 
158 /**
159  * Possible [control plane] sources of MFIB entries
160  */
161 typedef enum mfib_source_t_
162 {
170 } mfib_source_t;
171 
172 #define MFIB_SOURCE_NAMES { \
173  [MFIB_SOURCE_SPECIAL] = "Special", \
174  [MFIB_SOURCE_API] = "API", \
175  [MFIB_SOURCE_CLI] = "CLI", \
176  [MFIB_SOURCE_DHCP] = "DHCP", \
177  [MFIB_SOURCE_VXLAN] = "VXLAN", \
178  [MFIB_SOURCE_SRv6] = "SRv6", \
179  [MFIB_SOURCE_DEFAULT_ROUTE] = "Default Route", \
180 }
181 
182 /**
183  * \brief Compare two prefixes for equality
184  */
185 extern int mfib_prefix_cmp(const mfib_prefix_t *p1,
186  const mfib_prefix_t *p2);
187 
188 extern u8 * format_mfib_prefix(u8 * s, va_list * args);
189 
190 extern u8 *format_mfib_entry_flags(u8 * s, va_list * args);
191 extern u8 *format_mfib_itf_flags(u8 * s, va_list * args);
193  va_list * args);
195  va_list * args);
196 
197 #endif
mfib_itf_flags_t_
Definition: mfib_types.h:148
ip46_address_t fp_src_addr
Definition: mfib_types.h:47
enum mfib_entry_flags_t_ mfib_entry_flags_t
Exclusive - like its unicast counterpart.
Definition: mfib_types.h:76
The control planes needs packets mathing this entry to generate a signal.
Definition: mfib_types.h:57
The control plane needs to be informed of coneected sources.
Definition: mfib_types.h:65
mfib_itf_attribute_t_
Definition: mfib_types.h:116
u8 * format_mfib_itf_flags(u8 *s, va_list *args)
Definition: mfib_types.c:105
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
enum mfib_source_t_ mfib_source_t
Possible [control plane] sources of MFIB entries.
enum mfib_entry_attribute_t_ mfib_entry_attribute_t
uword unformat_mfib_itf_flags(unformat_input_t *input, va_list *args)
Definition: mfib_types.c:122
Drop all traffic to this route.
Definition: mfib_types.h:61
struct _unformat_input_t unformat_input_t
mfib_source_t_
Possible [control plane] sources of MFIB entries.
Definition: mfib_types.h:161
u8 * format_mfib_prefix(u8 *s, va_list *args)
Definition: mfib_types.c:30
enum mfib_itf_attribute_t_ mfib_itf_attribute_t
Aggregrate type for a prefix.
Definition: mfib_types.h:24
mfib_entry_flags_t_
Definition: mfib_types.h:105
u8 * format_mfib_entry_flags(u8 *s, va_list *args)
Definition: mfib_types.c:85
u64 uword
Definition: types.h:112
mfib_entry_attribute_t_
Definition: mfib_types.h:50
fib_protocol_t fp_proto
protocol type
Definition: mfib_types.h:33
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
enum mfib_itf_flags_t_ mfib_itf_flags_t
Accept packets from any incpoming interface Use with extreme caution.
Definition: mfib_types.h:70
struct mfib_prefix_t_ mfib_prefix_t
Aggregrate type for a prefix.
u16 fp_len
The mask length.
Definition: mfib_types.h:28
int mfib_prefix_cmp(const mfib_prefix_t *p1, const mfib_prefix_t *p2)
Compare two prefixes for equality.
uword unformat_mfib_entry_flags(unformat_input_t *input, va_list *args)
Definition: mfib_types.c:142
ip46_address_t fp_grp_addr
The address type is not deriveable from the fp_addr member.
Definition: mfib_types.h:46