ip: Router ID included in flow hash
[vpp.git] / src / vnet / ip / ip6_link.c
index d2142f9..0527b2f 100644 (file)
@@ -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