[ovs-dev] [RFC] datapath/flow_netlink: Avoid wildcarding tunnel key with disabled megaflows

Daniele Di Proietto ddiproietto at vmware.com
Fri Jul 11 22:05:47 UTC 2014


If the userspace wants to match on a flow with tun_key.{tun_id, tun_flags,
ipv4_tos} set to 0 it simply omits them in the netlink attributes stream.
Since our wildcarding logic (when megaflows are disabled) is based on the
attributes in the netlink stream, we set our mask incorrectly.

This commit adds a check to detect if the userspace wants to match on a tunnel,
in which case we simply unwildcard tun_key.{tun_id, tun_flags, ipv4_tos}

Reported-by: Andy Zhou <azhou at nicira.com>
Signed-off-by: Daniele Di Proietto <ddiproietto at vmware.com>
---
 datapath/flow_netlink.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
index 5f975a1..13b55be 100644
--- a/datapath/flow_netlink.c
+++ b/datapath/flow_netlink.c
@@ -912,6 +912,17 @@ int ovs_nla_get_match(struct sw_flow_match *match,
 
 		mask_set_nlattr(newmask, 0xff);
 
+		/* The userspace does not send tunnel attributes that are 0,
+		 * but we should not wildcard them nonetheless. */
+		if (match->key->tun_key.ipv4_dst) {
+			SW_FLOW_KEY_PUT(match, tun_key.tun_id,
+					cpu_to_be64(0xffffffffffffffffULL),
+					true);
+			SW_FLOW_KEY_PUT(match, tun_key.tun_flags,
+					htons(0xffff), true);
+			SW_FLOW_KEY_PUT(match, tun_key.ipv4_tos, 0xff, true);
+		}
+
 		mask = newmask;
 	}
 
-- 
2.0.0




More information about the dev mailing list