[ovs-dev] [PATCH v2 1/6] odp-util: Fix scanning of recirc_id.
Jarno Rajahalme
jrajahalme at nicira.com
Tue Mar 10 22:43:21 UTC 2015
Recirculation id was scanned without a mask, which led to it being
ignored.
Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
---
lib/odp-util.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/lib/odp-util.c b/lib/odp-util.c
index 5dedf4b..827b91c 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
@@ -2591,6 +2591,15 @@ scan_mpls_bos(const char *s, ovs_be32 *key, ovs_be32 *mask)
do { \
len = 0;
+/* Init as fully-masked as mask will not be scanned. */
+#define SCAN_BEGIN_FULLY_MASKED(NAME, TYPE) \
+ SCAN_IF(NAME); \
+ TYPE skey, smask; \
+ memset(&skey, 0, sizeof skey); \
+ memset(&smask, 0xff, sizeof smask); \
+ do { \
+ len = 0;
+
/* VLAN needs special initialization. */
#define SCAN_BEGIN_INIT(NAME, TYPE, KEY_INIT, MASK_INIT) \
SCAN_IF(NAME); \
@@ -2652,9 +2661,9 @@ scan_mpls_bos(const char *s, ovs_be32 *key, ovs_be32 *mask)
SCAN_TYPE(SCAN_AS, &skey, &smask); \
} SCAN_END_SINGLE(ATTR)
-#define SCAN_SINGLE_NO_MASK(NAME, TYPE, SCAN_AS, ATTR) \
- SCAN_BEGIN(NAME, TYPE) { \
- SCAN_TYPE(SCAN_AS, &skey, NULL); \
+#define SCAN_SINGLE_FULLY_MASKED(NAME, TYPE, SCAN_AS, ATTR) \
+ SCAN_BEGIN_FULLY_MASKED(NAME, TYPE) { \
+ SCAN_TYPE(SCAN_AS, &skey, NULL); \
} SCAN_END_SINGLE(ATTR)
/* scan_port needs one extra argument. */
@@ -2673,7 +2682,8 @@ parse_odp_key_mask_attr(const char *s, const struct simap *port_names,
{
SCAN_SINGLE("skb_priority(", uint32_t, u32, OVS_KEY_ATTR_PRIORITY);
SCAN_SINGLE("skb_mark(", uint32_t, u32, OVS_KEY_ATTR_SKB_MARK);
- SCAN_SINGLE_NO_MASK("recirc_id(", uint32_t, u32, OVS_KEY_ATTR_RECIRC_ID);
+ SCAN_SINGLE_FULLY_MASKED("recirc_id(", uint32_t, u32,
+ OVS_KEY_ATTR_RECIRC_ID);
SCAN_SINGLE("dp_hash(", uint32_t, u32, OVS_KEY_ATTR_DP_HASH);
SCAN_BEGIN("tunnel(", struct flow_tnl) {
--
1.7.10.4
More information about the dev
mailing list