* [PATCH v2] macvlan/macvtap: Fix vlan tagging on user read
@ 2012-04-20 23:20 Basil Gor
2012-04-21 1:51 ` Eric W. Biederman
0 siblings, 1 reply; 2+ messages in thread
From: Basil Gor @ 2012-04-20 23:20 UTC (permalink / raw)
To: netdev; +Cc: David S. Miller, Eric W. Biederman, Basil Gor
Vlan tag is restored during buffer transmit to a network device (bridge
port) in bridging code in case of tun/tap driver. In case of macvtap it
has to be done explicitly. Otherwise vlan_tci is ignored and user always
gets untagged packets.
Scenario tested:
kvm guests (that use vlans) migration from bridged network to macvtap
revealed that packets delivered to guests are always untagged. Dumping
and comparing sk_buff in case of tap and macvtap driver showed that
macvtap does not restore vlan_tci.
With current patch applied I was able to get working network, kvm guests
get correctly tagged packets and can reach each other when macvtap in
bridge mode (both with no vlans and through vlan interfaces).
Changes from original version:
vlan header restoring code is moved from macvtap_forward to
macvtap_receive
Signed-off-by: Basil Gor <basilgor@gmail.com>
---
drivers/net/macvtap.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index 0427c65..5e025d9 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -1,6 +1,7 @@
#include <linux/etherdevice.h>
#include <linux/if_macvlan.h>
#include <linux/interrupt.h>
+#include <linux/if_vlan.h>
#include <linux/nsproxy.h>
#include <linux/compat.h>
#include <linux/if_tun.h>
@@ -271,6 +272,15 @@ drop:
static int macvtap_receive(struct sk_buff *skb)
{
skb_push(skb, ETH_HLEN);
+
+ if (vlan_tx_tag_present(skb)) {
+ skb = __vlan_put_tag(skb, vlan_tx_tag_get(skb));
+ if (unlikely(!skb))
+ return NET_RX_DROP;
+
+ skb->vlan_tci = 0;
+ }
+
return macvtap_forward(skb->dev, skb);
}
--
1.7.6.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] macvlan/macvtap: Fix vlan tagging on user read
2012-04-20 23:20 [PATCH v2] macvlan/macvtap: Fix vlan tagging on user read Basil Gor
@ 2012-04-21 1:51 ` Eric W. Biederman
0 siblings, 0 replies; 2+ messages in thread
From: Eric W. Biederman @ 2012-04-21 1:51 UTC (permalink / raw)
To: Basil Gor; +Cc: netdev, David S. Miller, Basil Gor
Basil Gor <basil.gor@gmail.com> writes:
> Vlan tag is restored during buffer transmit to a network device (bridge
> port) in bridging code in case of tun/tap driver. In case of macvtap it
> has to be done explicitly. Otherwise vlan_tci is ignored and user always
> gets untagged packets.
>
> Scenario tested:
> kvm guests (that use vlans) migration from bridged network to macvtap
> revealed that packets delivered to guests are always untagged. Dumping
> and comparing sk_buff in case of tap and macvtap driver showed that
> macvtap does not restore vlan_tci.
>
> With current patch applied I was able to get working network, kvm guests
> get correctly tagged packets and can reach each other when macvtap in
> bridge mode (both with no vlans and through vlan interfaces).
>
> Changes from original version:
> vlan header restoring code is moved from macvtap_forward to
> macvtap_receive
I really think this is the wrong fix.
Eric
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-04-21 1:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-20 23:20 [PATCH v2] macvlan/macvtap: Fix vlan tagging on user read Basil Gor
2012-04-21 1:51 ` Eric W. Biederman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).