|
@@ -3231,6 +3231,17 @@ another_round:
|
|
ncls:
|
|
ncls:
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+ if (vlan_tx_tag_present(skb)) {
|
|
|
|
+ if (pt_prev) {
|
|
|
|
+ ret = deliver_skb(skb, pt_prev, orig_dev);
|
|
|
|
+ pt_prev = NULL;
|
|
|
|
+ }
|
|
|
|
+ if (vlan_do_receive(&skb))
|
|
|
|
+ goto another_round;
|
|
|
|
+ else if (unlikely(!skb))
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
+
|
|
rx_handler = rcu_dereference(skb->dev->rx_handler);
|
|
rx_handler = rcu_dereference(skb->dev->rx_handler);
|
|
if (rx_handler) {
|
|
if (rx_handler) {
|
|
if (pt_prev) {
|
|
if (pt_prev) {
|
|
@@ -3251,17 +3262,6 @@ ncls:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (vlan_tx_tag_present(skb)) {
|
|
|
|
- if (pt_prev) {
|
|
|
|
- ret = deliver_skb(skb, pt_prev, orig_dev);
|
|
|
|
- pt_prev = NULL;
|
|
|
|
- }
|
|
|
|
- if (vlan_do_receive(&skb))
|
|
|
|
- goto another_round;
|
|
|
|
- else if (unlikely(!skb))
|
|
|
|
- goto out;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/* deliver only exact match when indicated */
|
|
/* deliver only exact match when indicated */
|
|
null_or_dev = deliver_exact ? skb->dev : NULL;
|
|
null_or_dev = deliver_exact ? skb->dev : NULL;
|
|
|
|
|