datapath/flow_netlink: Fix NDP flow mask validation
authorDaniele Di Proietto <ddiproietto@vmware.com>
Thu, 10 Jul 2014 19:39:39 +0000 (12:39 -0700)
committerPravin B Shelar <pshelar@nicira.com>
Thu, 10 Jul 2014 19:39:39 +0000 (12:39 -0700)
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 <ddiproietto@vmware.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
datapath/flow.c

index b3bc683..78924d6 100644 (file)
@@ -221,7 +221,7 @@ static bool ovs_match_validate(const struct sw_flow_match *match,
                                                htons(NDISC_NEIGHBOUR_SOLICITATION) ||
                                    match->key->ipv6.tp.src == htons(NDISC_NEIGHBOUR_ADVERTISEMENT)) {
                                        key_expected |= 1ULL << OVS_KEY_ATTR_ND;
-                                       if (match->mask && (match->mask->key.ipv6.tp.src == htons(0xffff)))
+                                       if (match->mask && (match->mask->key.ipv6.tp.src == htons(0xff)))
                                                mask_allowed |= 1ULL << OVS_KEY_ATTR_ND;
                                }
                        }