|
@@ -2810,13 +2810,24 @@ static int __netif_receive_skb(struct sk_buff *skb)
|
|
|
if (!skb->skb_iif)
|
|
|
skb->skb_iif = skb->dev->ifindex;
|
|
|
|
|
|
+ /*
|
|
|
+ * bonding note: skbs received on inactive slaves should only
|
|
|
+ * be delivered to pkt handlers that are exact matches. Also
|
|
|
+ * the deliver_no_wcard flag will be set. If packet handlers
|
|
|
+ * are sensitive to duplicate packets these skbs will need to
|
|
|
+ * be dropped at the handler. The vlan accel path may have
|
|
|
+ * already set the deliver_no_wcard flag.
|
|
|
+ */
|
|
|
null_or_orig = NULL;
|
|
|
orig_dev = skb->dev;
|
|
|
master = ACCESS_ONCE(orig_dev->master);
|
|
|
- if (master) {
|
|
|
- if (skb_bond_should_drop(skb, master))
|
|
|
+ if (skb->deliver_no_wcard)
|
|
|
+ null_or_orig = orig_dev;
|
|
|
+ else if (master) {
|
|
|
+ if (skb_bond_should_drop(skb, master)) {
|
|
|
+ skb->deliver_no_wcard = 1;
|
|
|
null_or_orig = orig_dev; /* deliver only exact match */
|
|
|
- else
|
|
|
+ } else
|
|
|
skb->dev = master;
|
|
|
}
|
|
|
|