From 43c5c3bcb0de449f2489cb826020752f1162c0be Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 18 Apr 2011 10:11:43 -0700 Subject: [PATCH] ofp-util: Properly handle "tun_id"s in tun_id_from_cookie flows. Just setting the tun_id field isn't enough--it's also necessary to set the tun_id_mask. Otherwise the call to cls_rule_zero_wildcarded_fields() at the end of ofputil_cls_rule_from_match() will zero out the tun_id again. This was broken by commit 8368c090cab "Implement arbitrary bitwise masks for tun_id field" back in January. (This makes me wonder whether we can drop support for tun_id_from_cookie now.) Reported-by: Dan Wendlandt --- lib/ofp-util.c | 2 +- tests/ofproto.at | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/ofp-util.c b/lib/ofp-util.c index cc448bcd6..5c952701d 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -136,7 +136,7 @@ ofputil_cls_rule_from_match(const struct ofp_match *match, wc->nw_dst_mask = ofputil_wcbits_to_netmask(ofpfw >> OFPFW_NW_DST_SHIFT); if (flow_format == NXFF_TUN_ID_FROM_COOKIE && !(ofpfw & NXFW_TUN_ID)) { - rule->flow.tun_id = htonll(ntohll(cookie) >> 32); + cls_rule_set_tun_id(rule, htonll(ntohll(cookie) >> 32)); } if (ofpfw & OFPFW_DL_DST) { diff --git a/tests/ofproto.at b/tests/ofproto.at index 95067561c..fc7ff57ef 100644 --- a/tests/ofproto.at +++ b/tests/ofproto.at @@ -48,10 +48,14 @@ AT_CHECK([ovs-ofctl dump-flows br0 | STRIP_XIDS], [0], [NXST_FLOW reply: ]) AT_CHECK([echo 'in_port=1,actions=0' | ovs-ofctl add-flows br0 -]) AT_CHECK([ovs-ofctl add-flow br0 in_port=0,actions=1]) -AT_CHECK([ovs-ofctl dump-flows br0 | STRIP_XIDS | STRIP_DURATION], [0], [dnl -NXST_FLOW reply: +dnl Tests for a bug in which ofproto ignored tun_id in tun_id_from_cookie +dnl flow_mod commands. +AT_CHECK([ovs-ofctl add-flow -F tun_id_from_cookie br0 tun_id=1,actions=mod_vlan_vid:4]) +AT_CHECK([ovs-ofctl dump-flows br0 | STRIP_XIDS | STRIP_DURATION | sort], [0], [dnl cookie=0x0, duration=?s, table_id=0, n_packets=0, n_bytes=0, in_port=1 actions=output:0 cookie=0x0, duration=?s, table_id=0, n_packets=0, n_bytes=0, in_port=65534 actions=output:1 + cookie=0x100000000, duration=?s, table_id=0, n_packets=0, n_bytes=0, tun_id=0x1 actions=mod_vlan_vid:4 +NXST_FLOW reply: ]) AT_CHECK([ovs-ofctl del-flows br0]) AT_CHECK([ovs-ofctl dump-flows br0 | STRIP_XIDS], [0], [NXST_FLOW reply: -- 2.43.0