Fix IPv6 ND. After r219562 we in nd6_ns_input() were erroneously always
passing the cached proxydl reference (sockaddr_dl initialized or not) to nd6_na_output(). nd6_na_output() will thus assume a proxy NA. Revert to conditionally passing either &proxydl or NULL if no proxy case desired. Tested by: ipv6gw and ref9-i386 Reported by: Pete French (petefrench ingresso.co.uk on stable) Reported by: bz, simon on Y! cluster Reported by: kib PR: kern/151908 MFC after: 3 days
This commit is contained in:
parent
a4646b9313
commit
0105c5eb47
@ -340,7 +340,7 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
|
|||||||
nd6_na_output(ifp, &in6_all, &taddr6,
|
nd6_na_output(ifp, &in6_all, &taddr6,
|
||||||
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
|
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
|
||||||
(V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0),
|
(V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0),
|
||||||
tlladdr, (struct sockaddr *)&proxydl);
|
tlladdr, proxy ? (struct sockaddr *)&proxydl : NULL);
|
||||||
goto freeit;
|
goto freeit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ nd6_ns_input(struct mbuf *m, int off, int icmp6len)
|
|||||||
nd6_na_output(ifp, &saddr6, &taddr6,
|
nd6_na_output(ifp, &saddr6, &taddr6,
|
||||||
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
|
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
|
||||||
(V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
|
(V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
|
||||||
tlladdr, (struct sockaddr *)&proxydl);
|
tlladdr, proxy ? (struct sockaddr *)&proxydl : NULL);
|
||||||
freeit:
|
freeit:
|
||||||
if (ifa != NULL)
|
if (ifa != NULL)
|
||||||
ifa_free(ifa);
|
ifa_free(ifa);
|
||||||
|
Loading…
Reference in New Issue
Block a user