FD.io VPP  v16.12-rc0-308-g931be3a
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 typedef struct
28 {
37 
38 typedef struct
39 {
44 } fwd_entry_t;
45 
46 typedef struct
47 {
51 
52 typedef enum
53 {
57 
58 typedef struct
59 {
62  ip_address_t address;
64 
65 typedef struct
66 {
67  /* headers */
68  u8 data[100];
72 
73 typedef enum
74 {
77  _MR_MODE_MAX
79 
80 typedef struct
81 {
82  /* LISP feature status */
84 
85  /* eid table */
87 
88  /* pool of mappings */
90 
91  /* pool of locators */
93 
94  /* pool of locator-sets */
96 
97  /* vector of locator-set vectors composed of and indexed by locator index */
99 
100  /* hash map of locators by name */
102 
103  /* vector of eid index vectors supported and indexed by locator-set index */
105 
106  /* vectors of indexes for local locator-sets and mappings */
109 
110  /* hash map of forwarding entries by mapping index */
112 
113  /* forwarding entries pool */
115 
116  /* hash map keyed by nonce of pending map-requests */
118 
119  /* pool of pending map requests */
122 
123  /* vector of map-resolvers */
125 
126  /* map resolver address currently being used for sending requests.
127  * This has to be an actual address and not an index to map_resolvers vector
128  * since the vector may be modified during request resend/retry procedure
129  * and break things :-) */
130  ip_address_t active_map_resolver;
131 
133 
134  /* map-request locator set index */
136 
137  /* vni to vrf hash tables */
140 
141  /* vni to bd-index hash tables */
144 
145  /* track l2 and l3 interfaces that have been created for vni */
147 
148  /* Proxy ETR map index */
150 
151  /* LISP PITR mode */
153 
154  /* map request mode */
156 
157  /* commodity */
163 
164 /* lisp-gpe control plane */
166 
170 
172 
175 {
176  return &lisp_control_main;
177 }
178 
179 typedef struct
180 {
182  union
183  {
186  };
190 
191 int
193  u32 * ls_index);
194 int
196  locator_set_t * ls, u32 * ls_index);
197 
198 typedef struct
199 {
203 
207 
211 
212 int
214  u32 * map_index);
215 int
217  u32 * map_index_result);
218 
219 int
220 vnet_lisp_add_del_mapping (gid_address_t * deid, locator_t * dlocs, u8 action,
221  u8 authoritative, u32 ttl, u8 is_add, u8 is_static,
222  u32 * res_map_index);
223 
224 typedef struct
225 {
230 
232 
233 typedef struct
234 {
236  ip_address_t address;
238 
239 int
241 
244 
245 int vnet_lisp_pitr_set_locator_set (u8 * locator_set_name, u8 is_add);
246 
247 typedef struct
248 {
252 
253 int
255 
257 
258 int vnet_lisp_eid_table_map (u32 vni, u32 vrf, u8 is_l2, u8 is_add);
262 
263 static inline void
265 {
266  if (lcm->pending_map_request_lock)
267  while (__sync_lock_test_and_set (lcm->pending_map_request_lock, 1))
268  /* sweet dreams */ ;
269 }
270 
271 static inline void
273 {
274  if (lcm->pending_map_request_lock)
275  *lcm->pending_map_request_lock = 0;
276 }
277 
278 #endif /* VNET_CONTROL_H_ */
279 
280 /*
281  * fd.io coding-style-patch-verification: ON
282  *
283  * Local Variables:
284  * eval: (c-set-style "gnu")
285  * End:
286  */
u32 pitr_map_index
Definition: control.h:149
gid_address_t leid
Definition: control.h:48
a
Definition: bitmap.h:516
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:1943
ip_address_t active_map_resolver
Definition: control.h:130
locator_pair_t * locator_pairs
Definition: control.h:43
uword * table_id_by_vni
Definition: control.h:138
lisp_adjacency_t * vnet_lisp_adjacencies_get_by_vni(u32 vni)
Returns vector of adjacencies.
Definition: control.c:469
u32 * local_mappings_indexes
Definition: control.h:107
locator_t * locator_pool
Definition: control.h:92
Definition: control.h:38
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:3395
clib_error_t * lisp_cp_init()
uword * vni_by_table_id
Definition: control.h:139
map_resolver_t * map_resolvers
Definition: control.h:124
u32 ** locator_to_locator_sets
Definition: control.h:98
vlib_main_t * vlib_main
Definition: control.h:160
vlib_node_registration_t lisp_cp_lookup_ip4_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_lookup_ip4_node)
Definition: control.c:3376
#define always_inline
Definition: clib.h:84
volatile u32 * pending_map_request_lock
Definition: control.h:121
u32 * fwd_entry_by_mapping_index
Definition: control.h:111
unsigned long u64
Definition: types.h:89
uword * bd_id_by_vni
Definition: control.h:142
static lisp_cp_main_t * vnet_lisp_cp_get_main()
Definition: control.h:174
uword * vni_by_bd_id
Definition: control.h:143
u8 vnet_lisp_get_map_request_mode(void)
Definition: control.c:35
gid_address_t src
Definition: control.h:29
ip6_main_t * im6
Definition: control.h:159
u8 is_src_dst
Definition: control.h:42
u8 vnet_lisp_enable_disable_status(void)
Definition: control.c:2257
u8 do_map_resolver_election
Definition: control.h:132
int vnet_lisp_set_map_request_mode(u8 mode)
Definition: control.c:1442
u32 * local_locator_set_indexes
Definition: control.h:108
gid_address_t reid
Definition: control.h:41
u8 map_request_mode
Definition: control.h:155
lisp_cp_main_t lisp_control_main
Definition: control.h:165
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:979
uword * pending_map_requests_by_nonce
Definition: control.h:117
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:546
int vnet_lisp_eid_table_map(u32 vni, u32 vrf, u8 is_l2, u8 is_add)
Definition: control.c:767
static void lisp_pending_map_request_lock(lisp_cp_main_t *lcm)
Definition: control.h:264
static void lisp_pending_map_request_unlock(lisp_cp_main_t *lcm)
Definition: control.h:272
int vnet_lisp_pitr_set_locator_set(u8 *locator_set_name, u8 is_add)
Definition: control.c:1563
int vnet_lisp_add_del_map_resolver(vnet_lisp_add_del_map_resolver_args_t *a)
Definition: control.c:2568
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:645
ip_address_t address
Definition: control.h:62
gid_dictionary_t mapping_index_by_gid
Definition: control.h:86
IPv4 main type.
Definition: ip4.h:95
uword * l2_dp_intf_by_vni
Definition: control.h:146
locator_set_t * locator_set_pool
Definition: control.h:95
u32 ** locator_set_to_eids
Definition: control.h:104
fwd_entry_t * fwd_entry_pool
Definition: control.h:114
u64 uword
Definition: types.h:112
pending_map_request_t * pending_map_requests_pool
Definition: control.h:120
miss_packet_type_t
Definition: control.h:52
int vnet_lisp_add_del_mreq_itr_rlocs(vnet_lisp_add_del_mreq_itr_rloc_args_t *a)
Definition: control.c:2674
map_request_mode_t
Definition: control.h:73
double f64
Definition: types.h:142
unsigned char u8
Definition: types.h:56
f64 last_update
Definition: control.h:61
mapping_t * mapping_pool
Definition: control.h:89
uword * locator_set_index_by_name
Definition: control.h:101
int vnet_lisp_add_del_adjacency(vnet_lisp_add_del_adjacency_args_t *a)
Definition: control.c:1195
gid_address_t reid
Definition: control.h:49
vlib_node_registration_t lisp_cp_input_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_input_node)
Definition: control.c:3682
gid_address_t dst
Definition: control.h:30
clib_error_t * vnet_lisp_enable_disable(u8 is_enabled)
Definition: control.c:2173
int vnet_lisp_clear_all_remote_adjacencies(void)
Definition: control.c:1094
u32 mreq_itr_rlocs
Definition: control.h:135
vnet_main_t * vnet_main
Definition: control.h:161
u32 length
Definition: control.h:69
ip4_main_t * im4
Definition: control.h:158
gid_address_t leid
Definition: control.h:40
miss_packet_type_t type
Definition: control.h:70
int vnet_lisp_add_del_locator_set(vnet_lisp_add_del_locator_set_args_t *a, u32 *ls_index)
Definition: control.c:2033