Subject: Re: [PATCH 5/5] net/core: Allow receive on active slaves.

From: Joe Eykholt <[email-masked]>
Date: Sat, 05 Jul 2008 21:36:42 -0700

David Miller wrote:
> From: Jeff Garzik <[email-masked]>
> Date: Fri, 04 Jul 2008 08:45:52 -0400
> 
>> Jay Vosburgh wrote:
>>> @@ -2104,7 +2104,8 @@ int netif_receive_skb(struct sk_buff *skb)
>>>  #endif
>>>  
>>>  	list_for_each_entry_rcu(ptype, &ptype_all, list) {
>>> -		if (ptype->dev == null_or_orig || ptype->dev == skb->dev) {
>>> +		if (ptype->dev == null_or_orig || ptype->dev == skb->dev ||
>>> +		    ptype->dev == orig_dev) {
>>>  			if (pt_prev)
>>>  				ret = deliver_skb(skb, pt_prev, orig_dev);
>>>  			pt_prev = ptype;
>>> @@ -2129,7 +2130,8 @@ ncls:
>>>  	list_for_each_entry_rcu(ptype,
>>>  			&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
>>>  		if (ptype->type == type &&
>>> -		    (ptype->dev == null_or_orig || ptype->dev == skb->dev)) {
>>> +		    (ptype->dev == null_or_orig || ptype->dev == skb->dev ||
>>> +		     ptype->dev == orig_dev)) {
>>>  			if (pt_prev)
>> This needs a review&ack from David, then OK...
> 
> I fear this bit of the changes will break AF_PACKET device binding.
> So for example, if a tap registers it wants to hear eth0, it will now
> hear bond0 as well as eth0 if eth0 is a part of bond0.

Each ptype will get matched and delivered to at most once.  So if 
someone binds AF_PACKET to only eth0, they'll only see the packet once.
Whereas before patch 4, the frame wouldn't be delivered to them
at all, since skb->dev has already been changed to the bond.

       Regards,
       Joe Eykholt