diff options
author | Patrick McHardy <kaber@trash.net> | 2008-07-15 01:49:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-15 01:49:30 -0400 |
commit | bc1d0411b804ad190cdadabac48a10067f17b9e6 (patch) | |
tree | 0a38da614b6bb46f2ffa2378aca25043a2b33a7c /net/8021q | |
parent | 6aa895b047720f71ec4eb11452f7c3ce8426941f (diff) |
vlan: deliver packets received with VLAN acceleration to network taps
When VLAN header stripping is used, packets currently bypass packet
sockets (and other network taps) completely. For locally existing
VLANs, they appear directly on the VLAN device, for unknown VLANs
they are silently dropped.
Add a new function netif_nit_deliver() to deliver incoming packets
to all network interface taps and use it in __vlan_hwaccel_rx() to
make VLAN packets visible on the underlying device.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q')
-rw-r--r-- | net/8021q/vlan_core.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index 68df12d3664b..916061f681b6 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c | |||
@@ -14,6 +14,9 @@ int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, | |||
14 | return NET_RX_DROP; | 14 | return NET_RX_DROP; |
15 | } | 15 | } |
16 | 16 | ||
17 | skb->vlan_tci = vlan_tci; | ||
18 | netif_nit_deliver(skb); | ||
19 | |||
17 | skb->dev = vlan_group_get_device(grp, vlan_tci & VLAN_VID_MASK); | 20 | skb->dev = vlan_group_get_device(grp, vlan_tci & VLAN_VID_MASK); |
18 | if (skb->dev == NULL) { | 21 | if (skb->dev == NULL) { |
19 | dev_kfree_skb_any(skb); | 22 | dev_kfree_skb_any(skb); |
@@ -22,6 +25,7 @@ int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, | |||
22 | return NET_RX_SUCCESS; | 25 | return NET_RX_SUCCESS; |
23 | } | 26 | } |
24 | skb->dev->last_rx = jiffies; | 27 | skb->dev->last_rx = jiffies; |
28 | skb->vlan_tci = 0; | ||
25 | 29 | ||
26 | stats = &skb->dev->stats; | 30 | stats = &skb->dev->stats; |
27 | stats->rx_packets++; | 31 | stats->rx_packets++; |