On 12 June 2013 07:04, Murphy McCauley <murphy.mccau...@gmail.com> wrote:
> (Sorry this isn't an actual reply and is missing context -- I wasn't on the 
> list when it was originally posted.)
>
> Simon and I have been in touch about this, and I thought I'd share my 
> findings for what they're worth.
>
> The problem is from the commit Simon mentioned 
> (796223f5bc3a4896e6398733c798390158479400).  Specifically, it's in 
> netdev-linux.c in netdev_linux_send().
>
> The new version always sends using the "sender" socket made by 
> af_packet_sock() unless the interface is a tap, in which case it sends it 
> using the tap fd.  This differs from the old version which sent using 
> whatever was in the fd field of the netdev if it was available.  For tap 
> interfaces, this was the tap fd, so the result was the same as it is now.  
> But for other interfaces, this held the socket opened for receiving if the 
> interface was listening (which was maybe never "right" in some sense and 
> isn't convenient anymore since this socket descriptor is no longer stored in 
> the non-rx netdev).
>
> The comments indicate that the exception is made for tap interfaces since 
> writing to a tap interface with an AF_PACKET socket results in receiving the 
> packet you just wrote.  However, I don't think this behavior is limited to 
> taps.  Since the old version of the code sent and received with the same 
> socket descriptor, I think the loop was fixed by the check in 
> dev_queue_xmit_nit() in net/core/dev.c.  Since they're two different socket 
> descriptors now, this no longer works and you get the loop.

Ahh, it turns out Ben explained this to me when I ran into a related
issue with the FreeBSD userspace implementation.  Ben's message in the
thread is at http://openvswitch.org/pipermail/dev/2012-July/018806.html
.

> I fixed it (I think) by adding a BPF packet filter on the rx socket so that 
> it only receives incoming packets.  There's probably a better fix, but you're 
> welcome to the patch if you want it.

I think it's worth taking a look.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to