diff options
Diffstat (limited to 'sys/netinet6/nd6_nbr.c')
-rw-r--r-- | sys/netinet6/nd6_nbr.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c index 81123fe..fefcc99 100644 --- a/sys/netinet6/nd6_nbr.c +++ b/sys/netinet6/nd6_nbr.c @@ -107,6 +107,7 @@ nd6_ns_input(m, off, icmp6len) int tlladdr; union nd_opts ndopts; struct sockaddr_dl *proxydl = NULL; + char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN]; #ifndef PULLDOWN_TEST IP6_EXTHDR_CHECK(m, off, icmp6len,); @@ -126,8 +127,8 @@ nd6_ns_input(m, off, icmp6len) if (ip6->ip6_hlim != 255) { nd6log((LOG_ERR, "nd6_ns_input: invalid hlim (%d) from %s to %s on %s\n", - ip6->ip6_hlim, ip6_sprintf(&ip6->ip6_src), - ip6_sprintf(&ip6->ip6_dst), if_name(ifp))); + ip6->ip6_hlim, ip6_sprintf(ip6bufs, &ip6->ip6_src), + ip6_sprintf(ip6bufd, &ip6->ip6_dst), if_name(ifp))); goto bad; } @@ -247,14 +248,14 @@ nd6_ns_input(m, off, icmp6len) if (lladdr && ((ifp->if_addrlen + 2 + 7) & ~7) != lladdrlen) { nd6log((LOG_INFO, "nd6_ns_input: lladdrlen mismatch for %s " "(if %d, NS packet %d)\n", - ip6_sprintf(&taddr6), + ip6_sprintf(ip6bufs, &taddr6), ifp->if_addrlen, lladdrlen - 2)); goto bad; } if (IN6_ARE_ADDR_EQUAL(&myaddr6, &saddr6)) { nd6log((LOG_INFO, "nd6_ns_input: duplicate IP6 address %s\n", - ip6_sprintf(&saddr6))); + ip6_sprintf(ip6bufs, &saddr6))); goto freeit; } @@ -317,9 +318,12 @@ nd6_ns_input(m, off, icmp6len) return; bad: - nd6log((LOG_ERR, "nd6_ns_input: src=%s\n", ip6_sprintf(&saddr6))); - nd6log((LOG_ERR, "nd6_ns_input: dst=%s\n", ip6_sprintf(&daddr6))); - nd6log((LOG_ERR, "nd6_ns_input: tgt=%s\n", ip6_sprintf(&taddr6))); + nd6log((LOG_ERR, "nd6_ns_input: src=%s\n", + ip6_sprintf(ip6bufs, &saddr6))); + nd6log((LOG_ERR, "nd6_ns_input: dst=%s\n", + ip6_sprintf(ip6bufs, &daddr6))); + nd6log((LOG_ERR, "nd6_ns_input: tgt=%s\n", + ip6_sprintf(ip6bufs, &taddr6))); icmp6stat.icp6s_badns++; m_freem(m); } @@ -454,10 +458,12 @@ nd6_ns_output(ifp, daddr6, taddr6, ln, dad) src = in6_selectsrc(&dst_sa, NULL, NULL, &ro, NULL, NULL, &error); if (src == NULL) { + char ip6buf[INET6_ADDRSTRLEN]; nd6log((LOG_DEBUG, "nd6_ns_output: source can't be " "determined: dst=%s, error=%d\n", - ip6_sprintf(&dst_sa.sin6_addr), error)); + ip6_sprintf(ip6buf, &dst_sa.sin6_addr), + error)); goto bad; } } @@ -561,12 +567,13 @@ nd6_na_input(m, off, icmp6len) struct rtentry *rt; struct sockaddr_dl *sdl; union nd_opts ndopts; + char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN]; if (ip6->ip6_hlim != 255) { nd6log((LOG_ERR, "nd6_na_input: invalid hlim (%d) from %s to %s on %s\n", - ip6->ip6_hlim, ip6_sprintf(&ip6->ip6_src), - ip6_sprintf(&ip6->ip6_dst), if_name(ifp))); + ip6->ip6_hlim, ip6_sprintf(ip6bufs, &ip6->ip6_src), + ip6_sprintf(ip6bufd, &ip6->ip6_dst), if_name(ifp))); goto bad; } @@ -593,7 +600,7 @@ nd6_na_input(m, off, icmp6len) if (IN6_IS_ADDR_MULTICAST(&taddr6)) { nd6log((LOG_ERR, "nd6_na_input: invalid target address %s\n", - ip6_sprintf(&taddr6))); + ip6_sprintf(ip6bufs, &taddr6))); goto bad; } if (IN6_IS_ADDR_MULTICAST(&daddr6)) @@ -638,13 +645,13 @@ nd6_na_input(m, off, icmp6len) if (ifa) { log(LOG_ERR, "nd6_na_input: duplicate IP6 address %s\n", - ip6_sprintf(&taddr6)); + ip6_sprintf(ip6bufs, &taddr6)); goto freeit; } if (lladdr && ((ifp->if_addrlen + 2 + 7) & ~7) != lladdrlen) { nd6log((LOG_INFO, "nd6_na_input: lladdrlen mismatch for %s " - "(if %d, NA packet %d)\n", ip6_sprintf(&taddr6), + "(if %d, NA packet %d)\n", ip6_sprintf(ip6bufs, &taddr6), ifp->if_addrlen, lladdrlen - 2)); goto bad; } @@ -936,9 +943,10 @@ nd6_na_output(ifp, daddr6_0, taddr6, flags, tlladdr, sdl0) bcopy(&dst_sa, &ro.ro_dst, sizeof(dst_sa)); src = in6_selectsrc(&dst_sa, NULL, NULL, &ro, NULL, NULL, &error); if (src == NULL) { + char ip6buf[INET6_ADDRSTRLEN]; nd6log((LOG_DEBUG, "nd6_na_output: source can't be " "determined: dst=%s, error=%d\n", - ip6_sprintf(&dst_sa.sin6_addr), error)); + ip6_sprintf(ip6buf, &dst_sa.sin6_addr), error)); goto bad; } ip6->ip6_src = *src; @@ -1099,6 +1107,7 @@ nd6_dad_start(ifa, delay) { struct in6_ifaddr *ia = (struct in6_ifaddr *)ifa; struct dadq *dp; + char ip6buf[INET6_ADDRSTRLEN]; if (!dad_init) { TAILQ_INIT(&dadq); @@ -1115,7 +1124,7 @@ nd6_dad_start(ifa, delay) log(LOG_DEBUG, "nd6_dad_start: called with non-tentative address " "%s(%s)\n", - ip6_sprintf(&ia->ia_addr.sin6_addr), + ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr), ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???"); return; } @@ -1141,7 +1150,7 @@ nd6_dad_start(ifa, delay) if (dp == NULL) { log(LOG_ERR, "nd6_dad_start: memory allocation failed for " "%s(%s)\n", - ip6_sprintf(&ia->ia_addr.sin6_addr), + ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr), ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???"); return; } @@ -1150,7 +1159,7 @@ nd6_dad_start(ifa, delay) TAILQ_INSERT_TAIL(&dadq, (struct dadq *)dp, dad_list); nd6log((LOG_DEBUG, "%s: starting DAD for %s\n", if_name(ifa->ifa_ifp), - ip6_sprintf(&ia->ia_addr.sin6_addr))); + ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr))); /* * Send NS packet for DAD, ip6_dad_count times. @@ -1204,6 +1213,7 @@ nd6_dad_timer(ifa) int s; struct in6_ifaddr *ia = (struct in6_ifaddr *)ifa; struct dadq *dp; + char ip6buf[INET6_ADDRSTRLEN]; s = splnet(); /* XXX */ @@ -1220,14 +1230,14 @@ nd6_dad_timer(ifa) if (ia->ia6_flags & IN6_IFF_DUPLICATED) { log(LOG_ERR, "nd6_dad_timer: called with duplicated address " "%s(%s)\n", - ip6_sprintf(&ia->ia_addr.sin6_addr), + ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr), ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???"); goto done; } if ((ia->ia6_flags & IN6_IFF_TENTATIVE) == 0) { log(LOG_ERR, "nd6_dad_timer: called with non-tentative address " "%s(%s)\n", - ip6_sprintf(&ia->ia_addr.sin6_addr), + ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr), ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???"); goto done; } @@ -1288,7 +1298,7 @@ nd6_dad_timer(ifa) nd6log((LOG_DEBUG, "%s: DAD complete for %s - no duplicates found\n", if_name(ifa->ifa_ifp), - ip6_sprintf(&ia->ia_addr.sin6_addr))); + ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr))); TAILQ_REMOVE(&dadq, (struct dadq *)dp, dad_list); free(dp, M_IP6NDP); @@ -1308,6 +1318,7 @@ nd6_dad_duplicated(ifa) struct in6_ifaddr *ia = (struct in6_ifaddr *)ifa; struct ifnet *ifp; struct dadq *dp; + char ip6buf[INET6_ADDRSTRLEN]; dp = nd6_dad_find(ifa); if (dp == NULL) { @@ -1317,7 +1328,7 @@ nd6_dad_duplicated(ifa) log(LOG_ERR, "%s: DAD detected duplicate IPv6 address %s: " "NS in/out=%d/%d, NA in=%d\n", - if_name(ifa->ifa_ifp), ip6_sprintf(&ia->ia_addr.sin6_addr), + if_name(ifa->ifa_ifp), ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr), dp->dad_ns_icount, dp->dad_ns_ocount, dp->dad_na_icount); ia->ia6_flags &= ~IN6_IFF_TENTATIVE; @@ -1328,7 +1339,7 @@ nd6_dad_duplicated(ifa) ifp = ifa->ifa_ifp; log(LOG_ERR, "%s: DAD complete for %s - duplicate found\n", - if_name(ifp), ip6_sprintf(&ia->ia_addr.sin6_addr)); + if_name(ifp), ip6_sprintf(ip6buf, &ia->ia_addr.sin6_addr)); log(LOG_ERR, "%s: manual intervention required\n", if_name(ifp)); @@ -1413,9 +1424,10 @@ nd6_dad_ns_input(ifa) /* Quickhack - completely ignore DAD NS packets */ if (dad_ignore_ns) { + char ip6buf[INET6_ADDRSTRLEN]; nd6log((LOG_INFO, "nd6_dad_ns_input: ignoring DAD NS packet for " - "address %s(%s)\n", ip6_sprintf(taddr6), + "address %s(%s)\n", ip6_sprintf(ip6buf, taddr6), if_name(ifa->ifa_ifp))); return; } |