From: Daniele Di Proietto Date: Wed, 9 Jul 2014 22:22:14 +0000 (-0700) Subject: datapath/flow_netlink: Fix NDP flow mask validation X-Git-Tag: v2.3~30 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=8e21fbb9d8dd495630350ef1831809d6249ee022 datapath/flow_netlink: Fix NDP flow mask validation match_validate() enforce that a mask matching on NDP attributes has also an exact match on ICMPv6 type. The ICMPv6 type, which is 8-bit wide, is stored in the 'tp.src' field of 'struct sw_flow_key', which is 16-bit wide. Therefore, an exact match on ICMPv6 type should only check the first 8 bits. This commit fixes a bug that prevented flows with an exact match on NDP field from being installed Signed-off-by: Daniele Di Proietto Acked-by: Pravin B Shelar --- diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c index 803a94cb5..4b07d9632 100644 --- a/datapath/flow_netlink.c +++ b/datapath/flow_netlink.c @@ -209,7 +209,7 @@ static bool match_validate(const struct sw_flow_match *match, htons(NDISC_NEIGHBOUR_SOLICITATION) || match->key->tp.src == htons(NDISC_NEIGHBOUR_ADVERTISEMENT)) { key_expected |= 1ULL << OVS_KEY_ATTR_ND; - if (match->mask && (match->mask->key.tp.src == htons(0xffff))) + if (match->mask && (match->mask->key.tp.src == htons(0xff))) mask_allowed |= 1ULL << OVS_KEY_ATTR_ND; } }