FD.io VPP  v17.01.1-3-gc6833f8
Vector Packet Processing
control.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 VNET_CONTROL_H_
17 #define VNET_CONTROL_H_
18 
19 #include <vnet/vnet.h>
22 
23 #define NUMBER_OF_RETRIES 1
24 #define PENDING_MREQ_EXPIRATION_TIME 3.0 /* seconds */
25 #define PENDING_MREQ_QUEUE_LEN 5
26 
27 #define PENDING_MREG_EXPIRATION_TIME 3.0 /* seconds */
28 #define RLOC_PROBING_INTERVAL 60.0
29 
30 /* when map-registration is enabled "quick registration" takes place first.
31  In this mode ETR sends map-register messages at an increased frequency
32  until specified message count is reached */
33 #define QUICK_MAP_REGISTER_MSG_COUNT 3
34 #define QUICK_MAP_REGISTER_INTERVAL 3.0
35 
36 /* normal map-register period */
37 #define MAP_REGISTER_INTERVAL 60.0
38 
39 /* 15 minutes */
40 #define MAP_REGISTER_DEFAULT_TTL 900
41 
42 typedef struct
43 {
52 
53 typedef struct
54 {
59 } fwd_entry_t;
60 
61 typedef struct
62 {
66 
67 typedef enum
68 {
72 
73 /* map-server/map-resolver structure */
74 typedef struct
75 {
78  ip_address_t address;
79  char *key;
80 } lisp_msmr_t;
81 
82 typedef struct
83 {
84  /* headers */
85  u8 data[100];
89 
90 typedef enum
91 {
94  _MR_MODE_MAX
96 
97 typedef struct
98 {
99  /* LISP feature status */
101 
102  /* eid table */
104 
105  /* pool of mappings */
107 
108  /* hash map of secret keys by mapping index */
110 
111  /* pool of locators */
113 
114  /* pool of locator-sets */
116 
117  /* vector of locator-set vectors composed of and indexed by locator index */
119 
120  /* hash map of locators by name */
122 
123  /* vector of eid index vectors supported and indexed by locator-set index */
125 
126  /* vectors of indexes for local locator-sets and mappings */
129 
130  /* hash map of forwarding entries by mapping index */
132 
133  /* forwarding entries pool */
135 
136  /* hash map keyed by nonce of pending map-requests */
138 
139  /* pool of pending map requests */
141 
142  /* hash map of sent map register messages */
144 
145  /* vector of map-resolvers */
147 
148  /* vector of map-servers */
150 
151  /* map resolver address currently being used for sending requests.
152  * This has to be an actual address and not an index to map_resolvers vector
153  * since the vector may be modified during request resend/retry procedure
154  * and break things :-) */
155  ip_address_t active_map_resolver;
156 
158 
159  /* map-request locator set index */
161 
162  /* vni to vrf hash tables */
165 
166  /* vni to bd-index hash tables */
169 
170  /* track l2 and l3 interfaces that have been created for vni */
172 
173  /* Proxy ETR map index */
175 
176  /* LISP PITR mode */
178 
179  /* map request mode */
181 
182  /* enable/disable map registering */
184 
185  /* enable/disable rloc-probing */
187 
188  /* timing wheel for mappping timeouts */
190 
191  /* commodity */
197 
198 /* lisp-gpe control plane */
200 
204 
206 
209 {
210  return &lisp_control_main;
211 }
212 
213 typedef struct
214 {
216  union
217  {
220  };
224 
225 int
227  u32 * ls_index);
228 int
230  locator_set_t * ls, u32 * ls_index);
231 
232 typedef struct
233 {
237 
241 
244  u8 *key;
247 
248 int
250  u32 * map_index);
251 int
253  u32 * map_index_result);
254 
255 int
256 vnet_lisp_add_del_mapping (gid_address_t * deid, locator_t * dlocs, u8 action,
257  u8 authoritative, u32 ttl, u8 is_add, u8 is_static,
258  u32 * res_map_index);
259 
260 typedef struct
261 {
266 
268 
269 typedef struct
270 {
272  ip_address_t address;
274 
275 int
277 int vnet_lisp_add_del_map_server (ip_address_t * addr, u8 is_add);
278 
281 
282 int vnet_lisp_pitr_set_locator_set (u8 * locator_set_name, u8 is_add);
283 
284 typedef struct
285 {
289 
290 int
292 
294 
295 int vnet_lisp_eid_table_map (u32 vni, u32 vrf, u8 is_l2, u8 is_add);
296 int vnet_lisp_add_del_map_table_key (gid_address_t * eid, char *key,
297  u8 is_add);
305 
306 #endif /* VNET_CONTROL_H_ */
307 
308 /*
309  * fd.io coding-style-patch-verification: ON
310  *
311  * Local Variables:
312  * eval: (c-set-style "gnu")
313  * End:
314  */
u8 vnet_lisp_map_register_state_get(void)
Definition: control.c:413
u8 is_down
Definition: control.h:76
u32 pitr_map_index
Definition: control.h:174
gid_address_t leid
Definition: control.h:63
a
Definition: bitmap.h:516
int vnet_lisp_add_del_map_table_key(gid_address_t *eid, char *key, u8 is_add)
int vnet_lisp_add_del_locator(vnet_lisp_add_del_locator_set_args_t *a, locator_set_t *ls, u32 *ls_index)
Definition: control.c:2167
int vnet_lisp_add_del_map_server(ip_address_t *addr, u8 is_add)
Definition: control.c:641
ip_address_t active_map_resolver
Definition: control.h:155
lisp_msmr_t * map_resolvers
Definition: control.h:146
locator_pair_t * locator_pairs
Definition: control.h:58
uword * table_id_by_vni
Definition: control.h:163
lisp_adjacency_t * vnet_lisp_adjacencies_get_by_vni(u32 vni)
Returns vector of adjacencies.
Definition: control.c:535
u32 * local_mappings_indexes
Definition: control.h:127
locator_t * locator_pool
Definition: control.h:112
Definition: control.h:53
struct _vlib_node_registration vlib_node_registration_t
vlib_node_registration_t lisp_cp_lookup_ip6_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_lookup_ip6_node)
Definition: control.c:4034
clib_error_t * lisp_cp_init()
int vnet_lisp_map_register_enable_disable(u8 is_enable)
Definition: control.c:2406
ip_address_t address
Definition: control.h:78
uword * vni_by_table_id
Definition: control.h:164
lisp_msmr_t * map_servers
Definition: control.h:149
u32 ** locator_to_locator_sets
Definition: control.h:118
vlib_main_t * vlib_main
Definition: control.h:194
vlib_node_registration_t lisp_cp_lookup_ip4_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_lookup_ip4_node)
Definition: control.c:4015
#define always_inline
Definition: clib.h:84
u32 * fwd_entry_by_mapping_index
Definition: control.h:131
unsigned long u64
Definition: types.h:89
uword * bd_id_by_vni
Definition: control.h:167
static lisp_cp_main_t * vnet_lisp_cp_get_main()
Definition: control.h:208
uword * vni_by_bd_id
Definition: control.h:168
u8 vnet_lisp_get_map_request_mode(void)
Definition: control.c:49
gid_address_t src
Definition: control.h:44
ip6_main_t * im6
Definition: control.h:193
u8 is_src_dst
Definition: control.h:57
u8 vnet_lisp_enable_disable_status(void)
Definition: control.c:2596
u8 do_map_resolver_election
Definition: control.h:157
f64 last_update
Definition: control.h:77
int vnet_lisp_set_map_request_mode(u8 mode)
Definition: control.c:1666
u8 * key_by_mapping_index
Definition: control.h:109
u32 * local_locator_set_indexes
Definition: control.h:128
gid_address_t reid
Definition: control.h:56
u8 map_request_mode
Definition: control.h:180
int vnet_lisp_rloc_probe_enable_disable(u8 is_enable)
Definition: control.c:2397
lisp_cp_main_t lisp_control_main
Definition: control.h:199
u8 map_registering
Definition: control.h:183
int vnet_lisp_add_del_mapping(gid_address_t *deid, locator_t *dlocs, u8 action, u8 authoritative, u32 ttl, u8 is_add, u8 is_static, u32 *res_map_index)
Adds/removes/updates mapping.
Definition: control.c:1198
uword * pending_map_requests_by_nonce
Definition: control.h:137
int vnet_lisp_map_cache_add_del(vnet_lisp_add_del_mapping_args_t *a, u32 *map_index)
Add/remove mapping to/from map-cache.
Definition: control.c:738
int vnet_lisp_eid_table_map(u32 vni, u32 vrf, u8 is_l2, u8 is_add)
Definition: control.c:977
char * key
Definition: control.h:79
int vnet_lisp_pitr_set_locator_set(u8 *locator_set_name, u8 is_add)
Definition: control.c:1787
u8 vnet_lisp_rloc_probe_state_get(void)
Definition: control.c:420
int vnet_lisp_add_del_map_resolver(vnet_lisp_add_del_map_resolver_args_t *a)
Definition: control.c:2891
timing_wheel_t wheel
Definition: control.h:189
struct _gid_address_t gid_address_t
unsigned int u32
Definition: types.h:88
int vnet_lisp_add_del_local_mapping(vnet_lisp_add_del_mapping_args_t *a, u32 *map_index_result)
Add/update/delete mapping to/in/from map-cache.
Definition: control.c:839
gid_dictionary_t mapping_index_by_gid
Definition: control.h:103
IPv4 main type.
Definition: ip4.h:95
uword * l2_dp_intf_by_vni
Definition: control.h:171
locator_set_t * locator_set_pool
Definition: control.h:115
u32 ** locator_set_to_eids
Definition: control.h:124
fwd_entry_t * fwd_entry_pool
Definition: control.h:134
u64 uword
Definition: types.h:112
pending_map_request_t * pending_map_requests_pool
Definition: control.h:140
miss_packet_type_t
Definition: control.h:67
int vnet_lisp_add_del_mreq_itr_rlocs(vnet_lisp_add_del_mreq_itr_rloc_args_t *a)
Definition: control.c:2997
map_request_mode_t
Definition: control.h:90
double f64
Definition: types.h:142
unsigned char u8
Definition: types.h:56
mapping_t * mapping_pool
Definition: control.h:106
uword * locator_set_index_by_name
Definition: control.h:121
int vnet_lisp_add_del_adjacency(vnet_lisp_add_del_adjacency_args_t *a)
Definition: control.c:1419
gid_address_t reid
Definition: control.h:64
vlib_node_registration_t lisp_cp_input_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_input_node)
Definition: control.c:4688
gid_address_t dst
Definition: control.h:45
uword * map_register_messages_by_nonce
Definition: control.h:143
clib_error_t * vnet_lisp_enable_disable(u8 is_enabled)
Definition: control.c:2415
vhost_vring_addr_t addr
Definition: vhost-user.h:81
int vnet_lisp_clear_all_remote_adjacencies(void)
Definition: control.c:1318
u32 mreq_itr_rlocs
Definition: control.h:160
vnet_main_t * vnet_main
Definition: control.h:195
u32 length
Definition: control.h:86
ip4_main_t * im4
Definition: control.h:192
gid_address_t leid
Definition: control.h:55
miss_packet_type_t type
Definition: control.h:87
int vnet_lisp_add_del_locator_set(vnet_lisp_add_del_locator_set_args_t *a, u32 *ls_index)
Definition: control.c:2257