Mercurial > illumos > illumos-gate
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)) {