|
@@ -2210,7 +2210,8 @@ int netif_receive_skb(struct sk_buff *skb)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
list_for_each_entry_rcu(ptype, &ptype_all, list) {
|
|
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)
|
|
if (pt_prev)
|
|
ret = deliver_skb(skb, pt_prev, orig_dev);
|
|
ret = deliver_skb(skb, pt_prev, orig_dev);
|
|
pt_prev = ptype;
|
|
pt_prev = ptype;
|
|
@@ -2235,7 +2236,8 @@ ncls:
|
|
list_for_each_entry_rcu(ptype,
|
|
list_for_each_entry_rcu(ptype,
|
|
&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
|
|
&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
|
|
if (ptype->type == type &&
|
|
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)
|
|
if (pt_prev)
|
|
ret = deliver_skb(skb, pt_prev, orig_dev);
|
|
ret = deliver_skb(skb, pt_prev, orig_dev);
|
|
pt_prev = ptype;
|
|
pt_prev = ptype;
|