svn commit: r257024 - user/ae/inet6/sys/netinet6
Andrey V. Elsukov
ae at FreeBSD.org
Thu Oct 24 00:00:25 UTC 2013
Author: ae
Date: Thu Oct 24 00:00:24 2013
New Revision: 257024
URL: http://svnweb.freebsd.org/changeset/base/257024
Log:
Scope related cleanup in nd6_ns_input():
* remove in6_setscope() calls;
* don't do route lookup for link-local addresses.
Modified:
user/ae/inet6/sys/netinet6/nd6_nbr.c
Modified: user/ae/inet6/sys/netinet6/nd6_nbr.c
==============================================================================
--- user/ae/inet6/sys/netinet6/nd6_nbr.c Wed Oct 23 23:51:39 2013 (r257023)
+++ user/ae/inet6/sys/netinet6/nd6_nbr.c Thu Oct 24 00:00:24 2013 (r257024)
@@ -134,9 +134,6 @@ nd6_ns_input(struct mbuf *m, int off, in
#endif
ip6 = mtod(m, struct ip6_hdr *); /* adjust pointer for safety */
taddr6 = nd_ns->nd_ns_target;
- if (in6_setscope(&taddr6, ifp, NULL) != 0)
- goto bad;
-
if (ip6->ip6_hlim != 255) {
nd6log((LOG_ERR,
"nd6_ns_input: invalid hlim (%d) from %s to %s on %s\n",
@@ -147,8 +144,7 @@ nd6_ns_input(struct mbuf *m, int off, in
if (IN6_IS_ADDR_UNSPECIFIED(&saddr6)) {
/* dst has to be a solicited node multicast address. */
- if (daddr6.s6_addr16[0] == IPV6_ADDR_INT16_MLL &&
- /* don't check ifindex portion */
+ if (daddr6.s6_addr32[0] == IPV6_ADDR_INT32_MLL &&
daddr6.s6_addr32[1] == 0 &&
daddr6.s6_addr32[2] == IPV6_ADDR_INT32_ONE &&
daddr6.s6_addr8[12] == 0xff) {
@@ -225,7 +221,7 @@ nd6_ns_input(struct mbuf *m, int off, in
ifa = (struct ifaddr *)in6ifa_ifpwithaddr(ifp, &taddr6);
/* (2) check. */
- if (ifa == NULL) {
+ if (ifa == NULL && !IN6_IS_ADDR_LINKLOCAL(&taddr6)) {
struct rtentry *rt;
struct sockaddr_in6 tsin6;
int need_proxy;
@@ -335,12 +331,7 @@ nd6_ns_input(struct mbuf *m, int off, in
* S bit ("solicited") must be zero.
*/
if (IN6_IS_ADDR_UNSPECIFIED(&saddr6)) {
- struct in6_addr in6_all;
-
- in6_all = in6addr_linklocal_allnodes;
- if (in6_setscope(&in6_all, ifp, NULL) != 0)
- goto bad;
- nd6_na_output_fib(ifp, &in6_all, &taddr6,
+ nd6_na_output_fib(ifp, &in6addr_linklocal_allnodes, &taddr6,
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
rflag, tlladdr, proxy ? (struct sockaddr *)&proxydl : NULL,
M_GETFIB(m));
More information about the svn-src-user
mailing list