aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2016-10-05 18:16:24 -0400
committerDave Barach <openvpp@barachs.net>2016-10-06 12:08:12 +0000
commit3f993a6f07bcfd1aff360276c3696bb3909b2fa9 (patch)
treec81be5785ff54ab23efa7c32ba143ebc25a9fcf7
parent6c681c95e9924b45bede44668e87ec17a96cc8f4 (diff)
Fix IP6 ND solicitation termination to allow link-local source IP
Move check for link-local source IP address for MAC/IP notification only. Allow generation of response to IP6 ND solicitation request if a match is found for target IP irrespective of source IP type. Change-Id: Ib79d4b75fb4fe8aece625fd8cd26c8b9fc75ea47 Signed-off-by: John Lo <loj@cisco.com>
-rw-r--r--vnet/vnet/ethernet/arp.c3
-rw-r--r--vnet/vnet/ip/ip6_neighbor.c5
2 files changed, 3 insertions, 5 deletions
diff --git a/vnet/vnet/ethernet/arp.c b/vnet/vnet/ethernet/arp.c
index 90d193e86c5..45d0dc8e48a 100644
--- a/vnet/vnet/ethernet/arp.c
+++ b/vnet/vnet/ethernet/arp.c
@@ -2269,9 +2269,6 @@ arp_term_l2bd (vlib_main_t * vm,
iph0 = (ip6_header_t *) l3h0;
if (PREDICT_FALSE (ethertype0 == ETHERNET_TYPE_IP6 &&
iph0->protocol == IP_PROTOCOL_ICMP6 &&
- !ip6_address_is_link_local_unicast
- (&iph0->src_address)
- &&
!ip6_address_is_unspecified
(&iph0->src_address)))
{
diff --git a/vnet/vnet/ip/ip6_neighbor.c b/vnet/vnet/ip/ip6_neighbor.c
index a03701b8e80..57359f7adf3 100644
--- a/vnet/vnet/ip/ip6_neighbor.c
+++ b/vnet/vnet/ip/ip6_neighbor.c
@@ -3406,8 +3406,9 @@ int vnet_ip6_nd_term (vlib_main_t * vm,
/* Check if anyone want ND events for L2 BDs */
p = mhash_get (&nm->mac_changes_by_address, &ip6a_zero);
- if (p && shg == 0)
- { /* Only SHG 0 interface which is more likely local */
+ if (p && shg == 0 && /* Only SHG 0 interface which is more likely local */
+ !ip6_address_is_link_local_unicast (&ip->src_address))
+ {
u32 next_index = p[0];
while (next_index != (u32)~0)
{