We should never push a VLAN tag with the CFI bit set.  This patch
defensively enforces this invariant.
---
 lib/packets.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/packets.c b/lib/packets.c
index b9f37bb..2548174 100644
--- a/lib/packets.c
+++ b/lib/packets.c
@@ -77,7 +77,7 @@ compose_benign_packet(struct ofpbuf *b, const char *tag, 
uint16_t snap_type,
 }
 
 /* Insert VLAN header according to given TCI. Packet passed must be Ethernet
- * packet.
+ * packet.  Ignores the CFI bit of 'tci' using 0 instead.
  *
  * Also sets 'packet->l2' to point to the new Ethernet header. */
 void
@@ -91,7 +91,7 @@ eth_push_vlan(struct ofpbuf *packet, ovs_be16 tci)
     memcpy(tmp.veth_dst, eh->eth_dst, ETH_ADDR_LEN);
     memcpy(tmp.veth_src, eh->eth_src, ETH_ADDR_LEN);
     tmp.veth_type = htons(ETH_TYPE_VLAN);
-    tmp.veth_tci = tci;
+    tmp.veth_tci = tci & htons(~VLAN_CFI);
     tmp.veth_next_type = eh->eth_type;
 
     veh = ofpbuf_push_uninit(packet, VLAN_HEADER_LEN);
-- 
1.7.7.1

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to