Message ID | 4BCFA615.8060205@hp.com |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
Brian Haley <brian.haley@hp.com> wrote: > > Well, my initial reaction is XVM is doing the wrong thing looping-back > multicast packets. You can try the following (untested) patch, I can > only confirm it compiles. I agree, whatever is looping the packet back should be fixed. And if we are going to filter them out at our end, then it should be done below IP. Thanks,
From: Herbert Xu <herbert@gondor.apana.org.au> Date: Thu, 22 Apr 2010 10:41:40 +0800 > Brian Haley <brian.haley@hp.com> wrote: >> >> Well, my initial reaction is XVM is doing the wrong thing looping-back >> multicast packets. You can try the following (untested) patch, I can >> only confirm it compiles. > > I agree, whatever is looping the packet back should be fixed. Ethernet does not send multicasts to itself, so we're definitely not going to cater to this XVM behavior. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index da0a4d2..33a7212 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -57,6 +57,7 @@ #include <linux/net.h> #include <linux/in6.h> #include <linux/route.h> +#include <linux/etherdevice.h> #include <linux/init.h> #include <linux/rcupdate.h> #include <linux/slab.h> @@ -800,6 +801,16 @@ static void ndisc_recv_ns(struct sk_buff *skb) } } + if (dev->type == ARPHRD_ETHER) { + struct ethhdr *eth = eth_hdr(skb); + if (!compare_ether_addr_64bits( + dev->dev_addr, + eth->h_source)){ + /* looped-back to us */ + goto out; + } + } + /* * We are colliding with another node * who is doing DAD