X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Fflow.c;h=4dc94889f419b8d9bfe2c2d41ef90ccf0682bd00;hb=40a8ca3292a78639919e32ddd1558ce02ad938eb;hp=b2de023408a5496e979dfe89e86feb696e697d33;hpb=460d80629bc2c7b382f137c968f73ce2be983892;p=sliver-openvswitch.git diff --git a/datapath/flow.c b/datapath/flow.c index b2de02340..4dc94889f 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -1,6 +1,6 @@ /* * Distributed under the terms of the GNU GPL version 2. - * Copyright (c) 2007, 2008, 2009 Nicira Networks. + * Copyright (c) 2007, 2008, 2009, 2010 Nicira Networks. * * Significant portions of this file may be copied from parts of the Linux * kernel, by Linus Torvalds and others. @@ -231,6 +231,7 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key) struct vlan_hdr *vh = (struct vlan_hdr*)(skb->data + nh_ofs); key->dl_type = vh->h_vlan_encapsulated_proto; key->dl_vlan = vh->h_vlan_TCI & htons(VLAN_VID_MASK); + key->dl_vlan_pcp = (ntohs(vh->h_vlan_TCI) & 0xe000) >> 13; nh_ofs += sizeof(struct vlan_hdr); } memcpy(key->dl_src, eth->h_source, ETH_ALEN); @@ -243,6 +244,7 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key) int th_ofs = nh_ofs + nh->ihl * 4; key->nw_src = nh->saddr; key->nw_dst = nh->daddr; + key->nw_tos = nh->tos & 0xfc; key->nw_proto = nh->protocol; skb_set_transport_header(skb, th_ofs);