Merge branch 'ovs-8021AD-fixes'
authorDavid S. Miller <davem@davemloft.net>
Thu, 13 Oct 2016 14:03:24 +0000 (10:03 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 13 Oct 2016 14:03:24 +0000 (10:03 -0400)
Jiri Benc says:

====================
openvswitch: vlan fixes

Fix three issues introduced by the 802.1AD patchset.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/flow.c
net/openvswitch/vport-internal_dev.c
net/openvswitch/vport.c

index c8c82e1..2208706 100644 (file)
@@ -343,7 +343,7 @@ static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key)
        key->eth.cvlan.tci = 0;
        key->eth.cvlan.tpid = 0;
 
-       if (likely(skb_vlan_tag_present(skb))) {
+       if (skb_vlan_tag_present(skb)) {
                key->eth.vlan.tci = htons(skb->vlan_tci);
                key->eth.vlan.tpid = skb->vlan_proto;
        } else {
index 95c3614..e7da290 100644 (file)
@@ -176,7 +176,7 @@ static void do_setup(struct net_device *netdev)
 
        netdev->vlan_features = netdev->features;
        netdev->hw_enc_features = netdev->features;
-       netdev->features |= NETIF_F_HW_VLAN_CTAG_TX;
+       netdev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
        netdev->hw_features = netdev->features & ~NETIF_F_LLTX;
 
        eth_hw_addr_random(netdev);
index 8f19843..7387418 100644 (file)
@@ -485,7 +485,8 @@ static unsigned int packet_length(const struct sk_buff *skb)
 {
        unsigned int length = skb->len - ETH_HLEN;
 
-       if (skb_vlan_tagged(skb))
+       if (!skb_vlan_tag_present(skb) &&
+           eth_type_vlan(skb->protocol))
                length -= VLAN_HLEN;
 
        /* Don't subtract for multiple VLAN tags. Most (all?) drivers allow