On Fri, 2007-05-25 at 20:13 +0100, Steve Hill wrote:
> On Fri, 25 May 2007, Johannes Berg wrote:
> 
> > I'd like to have packet dumps of the master interface, a monitor
> > interface and the actual interface that has the problem simultaneously,
> 
> http://www.nexusuk.org/~steve/iwl3945-ipv6/ap.pcap
> http://www.nexusuk.org/~steve/iwl3945-ipv6/wlan0.pcap
> 
> The set up I have is:
> 
>    Internet=====Router=====AccessPoint-----Notebook
> 
> (===== is 100Mbps ethernet, ----- is 802.11g)
> 
> The router is doing IPv6 router advertisements, the notebook is supposed 
> to be using them to configure the IPv6 address on it's wlan0 interface (an 
> iwl3945).  The access point is a LinkSys WRT54GL running OpenWRT 
> WhiteRussian and is just bridging the wired network to the wireless 
> network.
> 
> So, ap.pcap is a dump from the 802.11 interface on the access point. 
> wlan0.pcap is a dump from the 802.11 interface on the notebook.
> 
> The sequence of events is basically:
> 1. Router sends advertisement
> 2. Notebook receives advertisement
> 3. Notebook picks an IP address and sends a neighbor solicitation to see 
> if anyone else is already using that address.
> 
> (these 3 steps happen twice in these network dumps).
> 
> The dump taken on the access point clearly shows that the notebook sends 
> just one neighbor solicitation for each router advertisement it receives. 
> However, the dump taken on the notebook shows two neighbor solicitation 
> messages for each router advertisement.
> 
> Seems reasonably conclusive - it looks like the notebook is sending a 
> neighbor solicitation and is then receiving it's own data again.

Seems like a reasonable conclusion. Does this 'fix' it?

diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index d8b3645..289375c 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -716,7 +716,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
 
                if (ifp->flags & (IFA_F_TENTATIVE|IFA_F_OPTIMISTIC)) {
                        if (dad) {
-                               if (dev->type == ARPHRD_IEEE802_TR) {
+                               if (1) {
                                        const unsigned char *sadr;
                                        sadr = skb_mac_header(skb);
                                        if (((sadr[8] ^ dev->dev_addr[0]) & 
0x7f) == 0 &&

-- 
dwmw2

_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to