X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fflow.c;h=4b0e6cc310c4bdac563a616737f5d8bfa1853920;hb=f4709d4d7c2dfd4a599d8290747f4f3a7ac0cb54;hp=735e147959edfa8f47933befaa72d897761a9f36;hpb=535d6987a7af3bef33bf2db21b52bb81e3ea64ee;p=openvswitch diff --git a/datapath/flow.c b/datapath/flow.c index 735e1479..4b0e6cc3 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -34,6 +34,8 @@ #include #include +#include "vlan.h" + static struct kmem_cache *flow_cache; static unsigned int hash_seed __read_mostly; @@ -449,8 +451,12 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct sw_flow_key *key, /* dl_type, dl_vlan, dl_vlan_pcp. */ __skb_pull(skb, 2 * ETH_ALEN); - if (eth->h_proto == htons(ETH_P_8021Q)) + + if (vlan_tx_tag_present(skb)) + key->dl_tci = htons(vlan_get_tci(skb)); + else if (eth->h_proto == htons(ETH_P_8021Q)) parse_vlan(skb, key); + key->dl_type = parse_ethertype(skb); skb_reset_network_header(skb); __skb_push(skb, skb->data - (unsigned char *)eth);