X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Flisp-cp%2Fcontrol.c;h=aeea72c90a1340b838c9e7c6e3d000b79202e27b;hb=58f464e6c56634aafcf6b047ece29397ac468f9c;hp=7aa3b419e72bfa92e23790e585e9e22504066265;hpb=058799951d062bbbe4df8df101b4db5bc7797b8f;p=vpp.git diff --git a/src/vnet/lisp-cp/control.c b/src/vnet/lisp-cp/control.c index 7aa3b419e72..aeea72c90a1 100644 --- a/src/vnet/lisp-cp/control.c +++ b/src/vnet/lisp-cp/control.c @@ -1027,7 +1027,7 @@ vnet_lisp_ndp_entries_get_by_bd (u32 bd) } int -vnet_lisp_add_del_l2_arp_entry (gid_address_t * key, u8 * mac, u8 is_add) +vnet_lisp_add_del_l2_arp_ndp_entry (gid_address_t * key, u8 * mac, u8 is_add) { if (vnet_lisp_enable_disable_status () == 0) { @@ -1054,7 +1054,7 @@ vnet_lisp_add_del_l2_arp_entry (gid_address_t * key, u8 * mac, u8 is_add) { if (res == GID_LOOKUP_MISS_L2) { - clib_warning ("ONE ARP entry %U not found - cannot delete!", + clib_warning ("ONE entry %U not found - cannot delete!", format_gid_address, key); return -1; } @@ -1344,6 +1344,8 @@ vnet_lisp_add_mapping (vnet_lisp_add_del_mapping_args_t * a, /* new mapping */ else { + if (is_updated) + is_updated[0] = 1; remove_overlapping_sub_prefixes (lcm, &a->eid, 0 == ls_args->locators); ls_args->is_add = 1; @@ -1380,6 +1382,7 @@ vnet_lisp_del_mapping (gid_address_t * eid, u32 * res_map_index) mapping_t *old_map; u32 mi; + memset (ls_args, 0, sizeof (ls_args[0])); memset (m_args, 0, sizeof (m_args[0])); if (res_map_index) res_map_index[0] = ~0; @@ -1784,6 +1787,7 @@ get_locator_set_index (vnet_lisp_add_del_locator_set_args_t * a, uword * p) /* find locator-set */ if (a->local) { + ASSERT (a->name); p = hash_get_mem (lcm->locator_set_index_by_name, a->name); } else @@ -2700,6 +2704,7 @@ foreach_msmr /* CP output statistics */ #define foreach_lisp_cp_output_error \ _(MAP_REGISTERS_SENT, "map-registers sent") \ +_(MAP_REQUESTS_SENT, "map-requests sent") \ _(RLOC_PROBES_SENT, "rloc-probes sent") static char *lisp_cp_output_error_strings[] = { #define _(sym,string) string, @@ -3025,6 +3030,9 @@ _send_encapsulated_map_request (lisp_cp_main_t * lcm, f->n_vectors = 1; vlib_put_frame_to_node (lcm->vlib_main, next_index, f); + vlib_node_increment_counter (vlib_get_main (), lisp_cp_output_node.index, + LISP_CP_OUTPUT_ERROR_MAP_REQUESTS_SENT, 1); + if (duplicate_pmr) /* if there is a pending request already update it */ { @@ -3240,6 +3248,7 @@ get_src_and_dst_eids_from_buffer (lisp_cp_main_t * lcm, vlib_buffer_t * b, gid_address_nsh_si (dst) = si; gid_address_type (dst) = GID_ADDR_NSH; + gid_address_type (src) = GID_ADDR_NSH; } } } @@ -3252,7 +3261,7 @@ lisp_cp_lookup_inline (vlib_main_t * vm, icmp6_neighbor_discovery_ethernet_link_layer_address_option_t *opt; u32 *from, *to_next, di, si; lisp_cp_main_t *lcm = vnet_lisp_cp_get_main (); - u32 pkts_mapped = 0, next_index; + u32 next_index; uword n_left_from, n_left_to_next; vnet_main_t *vnm = vnet_get_main (); @@ -3372,7 +3381,6 @@ lisp_cp_lookup_inline (vlib_main_t * vm, /* send map-request */ queue_map_request (&src, &dst, 0 /* smr_invoked */ , 0 /* is_resend */ ); - pkts_mapped++; } else { @@ -3395,7 +3403,6 @@ lisp_cp_lookup_inline (vlib_main_t * vm, /* send map-request */ queue_map_request (&src, &dst, 0 /* smr_invoked */ , 0 /* is_resend */ ); - pkts_mapped++; } drop: @@ -3421,9 +3428,6 @@ lisp_cp_lookup_inline (vlib_main_t * vm, vlib_put_next_frame (vm, node, next_index, n_left_to_next); } - vlib_node_increment_counter (vm, node->node_index, - LISP_CP_LOOKUP_ERROR_MAP_REQUESTS_SENT, - pkts_mapped); return from_frame->n_vectors; } @@ -4351,6 +4355,7 @@ lisp_cp_init (vlib_main_t * vm) lcm->map_register_ttl = MAP_REGISTER_DEFAULT_TTL; lcm->max_expired_map_registers = MAX_EXPIRED_MAP_REGISTERS_DEFAULT; lcm->expired_map_registers = 0; + lcm->transport_protocol = LISP_TRANSPORT_PROTOCOL_UDP; return 0; } @@ -4720,6 +4725,26 @@ VLIB_REGISTER_NODE (lisp_retry_service_node,static) = { }; /* *INDENT-ON* */ +u32 +vnet_lisp_set_transport_protocol (u8 protocol) +{ + lisp_cp_main_t *lcm = vnet_lisp_cp_get_main (); + + if (protocol < LISP_TRANSPORT_PROTOCOL_UDP || + protocol > LISP_TRANSPORT_PROTOCOL_API) + return VNET_API_ERROR_INVALID_ARGUMENT; + + lcm->transport_protocol = protocol; + return 0; +} + +lisp_transport_protocol_t +vnet_lisp_get_transport_protocol (void) +{ + lisp_cp_main_t *lcm = vnet_lisp_cp_get_main (); + return lcm->transport_protocol; +} + VLIB_INIT_FUNCTION (lisp_cp_init); /*