FD.io VPP  v16.09
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 {
43 } fwd_entry_t;
44 
45 typedef enum
46 {
50 
51 typedef struct
52 {
55  ip_address_t address;
57 
58 typedef struct
59 {
60  /* headers */
61  u8 data[100];
65 
66 typedef struct
67 {
68  /* LISP feature status */
70 
71  /* eid table */
73 
74  /* pool of mappings */
76 
77  /* pool of locators */
79 
80  /* pool of locator-sets */
82 
83  /* vector of locator-set vectors composed of and indexed by locator index */
85 
86  /* hash map of locators by name */
88 
89  /* vector of eid index vectors supported and indexed by locator-set index */
91 
92  /* vectors of indexes for local locator-sets and mappings */
95 
96  /* hash map of forwarding entries by mapping index */
98 
99  /* forwarding entries pool */
101 
102  /* hash map keyed by nonce of pending map-requests */
104 
105  /* pool of pending map requests */
108 
109  /* vector of map-resolvers */
111 
112  /* map resolver address currently being used for sending requests.
113  * This has to be an actual address and not an index to map_resolvers vector
114  * since the vector may be modified during request resend/retry procedure
115  * and break things :-) */
116  ip_address_t active_map_resolver;
117 
119 
120  /* map-request locator set index */
122 
123  /* vni to vrf hash tables */
126 
127  /* vni to bd-index hash tables */
130 
131  /* track l2 and l3 interfaces that have been created for vni */
134 
135  /* Proxy ETR map index */
137 
138  /* LISP PITR mode */
140 
141  /* commodity */
147 
148 /* lisp-gpe control plane */
150 
153 
155 
158 {
159  return &lisp_control_main;
160 }
161 
162 typedef struct
163 {
165  union
166  {
169  };
173 
174 int
176  u32 * ls_index);
177 int
179  locator_set_t * ls, u32 * ls_index);
180 
181 typedef struct
182 {
186 
190 
194 
195 int
197  u32 * map_index);
198 int
200  u32 * map_index_result);
201 
202 int
203 vnet_lisp_add_del_mapping (gid_address_t * deid, locator_t * dlocs, u8 action,
204  u8 authoritative, u32 ttl, u8 is_add, u8 is_static,
205  u32 * res_map_index);
206 
207 typedef struct
208 {
213 
215 
216 typedef struct
217 {
219  ip_address_t address;
221 
222 int
224 
227 
228 int vnet_lisp_pitr_set_locator_set (u8 * locator_set_name, u8 is_add);
229 
230 typedef struct
231 {
235 
236 int
238 
240 
241 int vnet_lisp_eid_table_map (u32 vni, u32 vrf, u8 is_l2, u8 is_add);
242 
243 static inline void
245 {
246  if (lcm->pending_map_request_lock)
247  while (__sync_lock_test_and_set (lcm->pending_map_request_lock, 1))
248  /* sweet dreams */ ;
249 }
250 
251 static inline void
253 {
254  if (lcm->pending_map_request_lock)
255  *lcm->pending_map_request_lock = 0;
256 }
257 
258 #endif /* VNET_CONTROL_H_ */
259 
260 /*
261  * fd.io coding-style-patch-verification: ON
262  *
263  * Local Variables:
264  * eval: (c-set-style "gnu")
265  * End:
266  */
u32 pitr_map_index
Definition: control.h:136
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:1654
ip_address_t active_map_resolver
Definition: control.h:116
locator_pair_t * locator_pairs
Definition: control.h:42
uword * table_id_by_vni
Definition: control.h:124
u32 * local_mappings_indexes
Definition: control.h:93
locator_t * locator_pool
Definition: control.h:78
Definition: control.h:38
struct _vlib_node_registration vlib_node_registration_t
clib_error_t * lisp_cp_init()
uword * vni_by_table_id
Definition: control.h:125
uword * dp_intf_by_vni
Definition: control.h:132
map_resolver_t * map_resolvers
Definition: control.h:110
u32 ** locator_to_locator_sets
Definition: control.h:84
vlib_main_t * vlib_main
Definition: control.h:144
#define always_inline
Definition: clib.h:84
volatile u32 * pending_map_request_lock
Definition: control.h:107
u32 * fwd_entry_by_mapping_index
Definition: control.h:97
unsigned long u64
Definition: types.h:89
uword * bd_id_by_vni
Definition: control.h:128
static lisp_cp_main_t * vnet_lisp_cp_get_main()
Definition: control.h:157
uword * vni_by_bd_id
Definition: control.h:129
gid_address_t src
Definition: control.h:29
ip6_main_t * im6
Definition: control.h:143
u8 vnet_lisp_enable_disable_status(void)
Definition: control.c:1969
u8 do_map_resolver_election
Definition: control.h:118
u32 * local_locator_set_indexes
Definition: control.h:94
gid_address_t seid
Definition: control.h:40
lisp_cp_main_t lisp_control_main
Definition: control.h:149
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:776
uword * pending_map_requests_by_nonce
Definition: control.h:103
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:422
int vnet_lisp_eid_table_map(u32 vni, u32 vrf, u8 is_l2, u8 is_add)
Definition: control.c:643
static void lisp_pending_map_request_lock(lisp_cp_main_t *lcm)
Definition: control.h:244
gid_address_t deid
Definition: control.h:41
static void lisp_pending_map_request_unlock(lisp_cp_main_t *lcm)
Definition: control.h:252
int vnet_lisp_pitr_set_locator_set(u8 *locator_set_name, u8 is_add)
Definition: control.c:1274
int vnet_lisp_add_del_map_resolver(vnet_lisp_add_del_map_resolver_args_t *a)
Definition: control.c:2250
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:521
ip_address_t address
Definition: control.h:55
gid_dictionary_t mapping_index_by_gid
Definition: control.h:72
IPv4 main type.
Definition: ip4.h:114
uword * l2_dp_intf_by_vni
Definition: control.h:133
locator_set_t * locator_set_pool
Definition: control.h:81
u32 ** locator_set_to_eids
Definition: control.h:90
fwd_entry_t * fwd_entry_pool
Definition: control.h:100
u64 uword
Definition: types.h:112
pending_map_request_t * pending_map_requests_pool
Definition: control.h:106
miss_packet_type_t
Definition: control.h:45
int vnet_lisp_add_del_mreq_itr_rlocs(vnet_lisp_add_del_mreq_itr_rloc_args_t *a)
Definition: control.c:2356
double f64
Definition: types.h:142
unsigned char u8
Definition: types.h:56
f64 last_update
Definition: control.h:54
mapping_t * mapping_pool
Definition: control.h:75
uword * locator_set_index_by_name
Definition: control.h:87
int vnet_lisp_add_del_adjacency(vnet_lisp_add_del_adjacency_args_t *a)
Definition: control.c:989
vlib_node_registration_t lisp_cp_input_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_input_node)
Definition: control.c:3308
gid_address_t dst
Definition: control.h:30
vlib_node_registration_t lisp_cp_lookup_node
(constructor) VLIB_REGISTER_NODE (lisp_cp_lookup_node)
Definition: control.c:3038
clib_error_t * vnet_lisp_enable_disable(u8 is_enabled)
Definition: control.c:1884
int vnet_lisp_clear_all_remote_adjacencies(void)
Definition: control.c:889
u32 mreq_itr_rlocs
Definition: control.h:121
vnet_main_t * vnet_main
Definition: control.h:145
u32 length
Definition: control.h:62
ip4_main_t * im4
Definition: control.h:142
miss_packet_type_t type
Definition: control.h:63
int vnet_lisp_add_del_locator_set(vnet_lisp_add_del_locator_set_args_t *a, u32 *ls_index)
Definition: control.c:1744