X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip6_link.c;h=0527b2ffc522c3c6d5caf24b752ea7aa2c4f06dd;hb=3d5f08a825a978cd6853989a5df8c9b9811e7fb8;hp=d2142f9acedefab8d8d4551acb1cbd82a5f35937;hpb=ec40a7d2bce4bba67af3b3d971547d40e90fdf97;p=vpp.git diff --git a/src/vnet/ip/ip6_link.c b/src/vnet/ip/ip6_link.c index d2142f9aced..0527b2ffc52 100644 --- a/src/vnet/ip/ip6_link.c +++ b/src/vnet/ip/ip6_link.c @@ -182,7 +182,7 @@ ip6_link_enable (u32 sw_if_index, const ip6_address_t * link_local_addr) vec_validate (ip6_links, sw_if_index); il = &ip6_links[sw_if_index]; - il->il_locks = 1; + il->il_locks = 0; il->il_sw_if_index = sw_if_index; sw = vnet_get_sup_sw_interface (vnm, sw_if_index); @@ -204,7 +204,8 @@ ip6_link_enable (u32 sw_if_index, const ip6_address_t * link_local_addr) } else { - ip6_link_local_address_from_mac (&il->il_ll_addr, eth->address); + ip6_link_local_address_from_mac (&il->il_ll_addr, + eth->address.mac.bytes); } { @@ -238,6 +239,8 @@ ip6_link_enable (u32 sw_if_index, const ip6_address_t * link_local_addr) rv = VNET_API_ERROR_VALUE_EXIST; } + il->il_locks++; + out: return (rv); } @@ -316,9 +319,10 @@ ip6_get_link_local_address (u32 sw_if_index) { const ip6_link_t *il; - vec_validate (ip6_links, sw_if_index); + il = ip6_link_get (sw_if_index); - il = &ip6_links[sw_if_index]; + if (NULL == il) + return (NULL); return (&il->il_ll_addr); } @@ -328,44 +332,12 @@ ip6_link_get_mcast_adj (u32 sw_if_index) { const ip6_link_t *il; - il = &ip6_links[sw_if_index]; - - return (il->il_mcast_adj); -} - -int -ip6_src_address_for_packet (u32 sw_if_index, - const ip6_address_t * dst, ip6_address_t * src) -{ - ip_lookup_main_t *lm; - - lm = &ip6_main.lookup_main; - - if (ip6_address_is_link_local_unicast (dst)) - { - ip6_address_copy (src, ip6_get_link_local_address (sw_if_index)); - - return (!0); - } - else - { - u32 if_add_index = - lm->if_address_pool_index_by_sw_if_index[sw_if_index]; - if (PREDICT_TRUE (if_add_index != ~0)) - { - ip_interface_address_t *if_add = - pool_elt_at_index (lm->if_address_pool, if_add_index); - ip6_address_t *if_ip = - ip_interface_address_get_address (lm, if_add); - *src = *if_ip; - return (!0); - } - } + il = ip6_link_get (sw_if_index); - src->as_u64[0] = 0; - src->as_u64[1] = 0; + if (NULL == il) + return (INDEX_INVALID); - return (0); + return (il->il_mcast_adj); } int