X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vnet%2Fvnet%2Flisp-cp%2Fcontrol.h;h=14b54606079e3bac8ec7d981bb964b7301a5e43d;hb=397fd7d39f023887e428de37a1929c366a99b8d5;hp=7a56d4f981f448f816a1002eb4f8bf4dd2c0df75;hpb=b09167f33d3c79e7ccc27e0fc484cc5fbcdb9943;p=vpp.git diff --git a/vnet/vnet/lisp-cp/control.h b/vnet/vnet/lisp-cp/control.h index 7a56d4f981f..14b54606079 100644 --- a/vnet/vnet/lisp-cp/control.h +++ b/vnet/vnet/lisp-cp/control.h @@ -24,6 +24,19 @@ #define PENDING_MREQ_EXPIRATION_TIME 3.0 /* seconds */ #define PENDING_MREQ_QUEUE_LEN 5 +#define PENDING_MREG_EXPIRATION_TIME 3.0 /* seconds */ +#define RLOC_PROBING_INTERVAL 60.0 + +/* when map-registration is enabled "quick registration" takes place first. + In this mode ETR sends map-register messages at an increased frequency + until specified message count is reached */ +#define QUICK_MAP_REGISTER_MSG_COUNT 3 +#define QUICK_MAP_REGISTER_INTERVAL 3.0 + +/* normal map-register period */ +#define MAP_REGISTER_INTERVAL 60.0 + + typedef struct { gid_address_t src; @@ -55,12 +68,14 @@ typedef enum IP6_MISS_PACKET } miss_packet_type_t; +/* map-server/map-resolver structure */ typedef struct { u8 is_down; f64 last_update; ip_address_t address; -} map_resolver_t; + char *key; +} lisp_msmr_t; typedef struct { @@ -88,6 +103,9 @@ typedef struct /* pool of mappings */ mapping_t *mapping_pool; + /* hash map of secret keys by mapping index */ + u8 *key_by_mapping_index; + /* pool of locators */ locator_t *locator_pool; @@ -120,8 +138,14 @@ typedef struct pending_map_request_t *pending_map_requests_pool; volatile u32 *pending_map_request_lock; + /* hash map of sent map register messages */ + uword *map_register_messages_by_nonce; + /* vector of map-resolvers */ - map_resolver_t *map_resolvers; + lisp_msmr_t *map_resolvers; + + /* vector of map-servers */ + lisp_msmr_t *map_servers; /* map resolver address currently being used for sending requests. * This has to be an actual address and not an index to map_resolvers vector @@ -154,6 +178,12 @@ typedef struct /* map request mode */ u8 map_request_mode; + /* enable/disable map registering */ + u8 map_registering; + + /* enable/disable rloc-probing */ + u8 rloc_probing; + /* commodity */ ip4_main_t *im4; ip6_main_t *im6; @@ -207,6 +237,8 @@ typedef struct u8 local; u8 is_static; + u8 *key; + u8 key_id; } vnet_lisp_add_del_mapping_args_t; int @@ -238,6 +270,7 @@ typedef struct int vnet_lisp_add_del_map_resolver (vnet_lisp_add_del_map_resolver_args_t * a); +int vnet_lisp_add_del_map_server (ip_address_t * addr, u8 is_add); clib_error_t *vnet_lisp_enable_disable (u8 is_enabled); u8 vnet_lisp_enable_disable_status (void); @@ -256,9 +289,15 @@ vnet_lisp_add_del_mreq_itr_rlocs (vnet_lisp_add_del_mreq_itr_rloc_args_t * a); int vnet_lisp_clear_all_remote_adjacencies (void); int vnet_lisp_eid_table_map (u32 vni, u32 vrf, u8 is_l2, u8 is_add); +int vnet_lisp_add_del_map_table_key (gid_address_t * eid, char *key, + u8 is_add); int vnet_lisp_set_map_request_mode (u8 mode); u8 vnet_lisp_get_map_request_mode (void); lisp_adjacency_t *vnet_lisp_adjacencies_get_by_vni (u32 vni); +int vnet_lisp_rloc_probe_enable_disable (u8 is_enable); +int vnet_lisp_map_register_enable_disable (u8 is_enable); +u8 vnet_lisp_map_register_state_get (void); +u8 vnet_lisp_rloc_probe_state_get (void); static inline void lisp_pending_map_request_lock (lisp_cp_main_t * lcm)