changeset 980:253cff0301e4

6281236 Implement correct handling of received NS without SLLA option
author dd193516
date Tue, 22 Nov 2005 22:54:27 -0800
parents 8be4e2098200
children e6bfffd6f3be
files usr/src/uts/common/inet/ip/ip_ndp.c
diffstat 1 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/ip/ip_ndp.c	Tue Nov 22 19:50:22 2005 -0800
+++ b/usr/src/uts/common/inet/ip/ip_ndp.c	Tue Nov 22 22:54:27 2005 -0800
@@ -1406,6 +1406,33 @@
 			}
 		}
 	}
+	/*
+	 * haddr can be NULL if no options are present,
+	 * or no Source link layer address is present in,
+	 * recvd NDP options of solicitation message.
+	 */
+	if (haddr == NULL) {
+		nce_t   *nnce;
+		mutex_enter(&ndp_g_lock);
+		nnce = nce_lookup_addr(ill, &src);
+		mutex_exit(&ndp_g_lock);
+
+		if (nnce == NULL) {
+			in6_addr_t dst = ipv6_solicited_node_mcast;
+
+			/* Form solicited node multicast address */
+			dst.s6_addr32[3] |= src.s6_addr32[3];
+			(void) nce_xmit(ill,
+				ND_NEIGHBOR_SOLICIT,
+				ill,
+				B_TRUE,
+				&target,
+				&dst,
+				flag);
+			bad_solicit = B_TRUE;
+			goto done;
+		}
+	}
 	/* Set override flag, it will be reset later if need be. */
 	flag |= NDP_ORIDE;
 	if (!IN6_IS_ADDR_MULTICAST(&ip6h->ip6_dst)) {