[ovs-dev] [PATCH 1/4] classifier, flow : Set CFI as part of VID

Simon Horman horms at verge.net.au
Wed Jul 4 08:50:41 UTC 2012


PCP depends on the presence of VID so it seems to make sense
to set the CFI bit as part of setting the VID rather than the PCP.

Signed-off-by: Simon Horman <horms at verge.net.au>
---
 lib/classifier.c | 2 +-
 lib/flow.c       | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/classifier.c b/lib/classifier.c
index b810f84..e74817e 100644
--- a/lib/classifier.c
+++ b/lib/classifier.c
@@ -260,7 +260,7 @@ void
 cls_rule_set_dl_vlan_pcp(struct cls_rule *rule, uint8_t dl_vlan_pcp)
 {
     flow_set_vlan_pcp(&rule->flow, dl_vlan_pcp);
-    rule->wc.vlan_tci_mask |= htons(VLAN_CFI | VLAN_PCP_MASK);
+    rule->wc.vlan_tci_mask |= htons(VLAN_PCP_MASK);
 }
 
 /* Modifies 'rule' so that it matches only packets with an outer tag of
diff --git a/lib/flow.c b/lib/flow.c
index 1e907d4..60b95ae 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -1057,10 +1057,10 @@ flow_hash_fields_valid(enum nx_hash_fields fields)
 void
 flow_set_vlan_vid(struct flow *flow, ovs_be16 vid)
 {
+    vid &= htons(VLAN_VID_MASK | VLAN_CFI);
     if (vid == htons(OFP_VLAN_NONE)) {
         flow->vlan_tci = htons(0);
     } else {
-        vid &= htons(VLAN_VID_MASK);
         flow->vlan_tci &= ~htons(VLAN_VID_MASK);
         flow->vlan_tci |= htons(VLAN_CFI) | vid;
     }
@@ -1078,7 +1078,7 @@ flow_set_vlan_pcp(struct flow *flow, uint8_t pcp)
 {
     pcp &= 0x07;
     flow->vlan_tci &= ~htons(VLAN_PCP_MASK);
-    flow->vlan_tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
+    flow->vlan_tci |= htons(pcp << VLAN_PCP_SHIFT);
 }
 
 /* Sets the VLAN tpid (outer tag) tpid that 'flow' matches. */
-- 
1.7.10.2.484.gcd07cc5




More information about the dev mailing list