[ovs-dev] [PATCH] ovn: Use constants for conntrack state bits.

Russell Bryant russell at ovn.org
Mon Dec 14 17:54:45 UTC 2015


A previous commit fixed this code to match changes to the conntrack
state bit assignments.  This patch further updates the code to use
the defined constants to ensure this code adapts automatically to any
possible future changes.

Signed-off-by: Russell Bryant <russell at ovn.org>
Requested-by: Joe Stringer <joe at ovn.org>
---
 lib/packets.h          | 29 +++++++++++++++++++++--------
 ovn/controller/lflow.c | 22 +++++++++++++++-------
 2 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/lib/packets.h b/lib/packets.h
index edf140b..36bd759 100644
--- a/lib/packets.h
+++ b/lib/packets.h
@@ -733,14 +733,27 @@ struct tcp_header {
 BUILD_ASSERT_DECL(TCP_HEADER_LEN == sizeof(struct tcp_header));
 
 /* Connection states */
-#define CS_NEW               0x01
-#define CS_ESTABLISHED       0x02
-#define CS_RELATED           0x04
-#define CS_REPLY_DIR         0x08
-#define CS_INVALID           0x10
-#define CS_TRACKED           0x20
-#define CS_SRC_NAT           0x40
-#define CS_DST_NAT           0x80
+enum {
+    CS_NEW_BIT =         0,
+    CS_ESTABLISHED_BIT = 1,
+    CS_RELATED_BIT =     2,
+    CS_REPLY_DIR_BIT =   3,
+    CS_INVALID_BIT =     4,
+    CS_TRACKED_BIT =     5,
+    CS_SRC_NAT_BIT =     6,
+    CS_DST_NAT_BIT =     7,
+};
+
+enum {
+    CS_NEW =         (1 << CS_NEW_BIT),
+    CS_ESTABLISHED = (1 << CS_ESTABLISHED_BIT),
+    CS_RELATED =     (1 << CS_RELATED_BIT),
+    CS_REPLY_DIR =   (1 << CS_REPLY_DIR_BIT),
+    CS_INVALID =     (1 << CS_INVALID_BIT),
+    CS_TRACKED =     (1 << CS_TRACKED_BIT),
+    CS_SRC_NAT =     (1 << CS_SRC_NAT_BIT),
+    CS_DST_NAT =     (1 << CS_DST_NAT_BIT),
+};
 
 /* Undefined connection state bits. */
 #define CS_SUPPORTED_MASK    (CS_NEW | CS_ESTABLISHED | CS_RELATED \
diff --git a/ovn/controller/lflow.c b/ovn/controller/lflow.c
index 764a147..91ad5db 100644
--- a/ovn/controller/lflow.c
+++ b/ovn/controller/lflow.c
@@ -24,6 +24,7 @@
 #include "ovn/lib/actions.h"
 #include "ovn/lib/expr.h"
 #include "ovn/lib/ovn-sb-idl.h"
+#include "packets.h"
 #include "simap.h"
 
 VLOG_DEFINE_THIS_MODULE(lflow);
@@ -58,14 +59,21 @@ symtab_init(void)
     MFF_LOG_REGS;
 #undef MFF_LOG_REG
 
-    /* Connection tracking state. See CS_* in lib/packets.h. */
+    /* Connection tracking state. */
     expr_symtab_add_field(&symtab, "ct_state", MFF_CT_STATE, NULL, false);
-    expr_symtab_add_predicate(&symtab, "ct.trk", "ct_state[5]");
-    expr_symtab_add_subfield(&symtab, "ct.new", "ct.trk", "ct_state[0]");
-    expr_symtab_add_subfield(&symtab, "ct.est", "ct.trk", "ct_state[1]");
-    expr_symtab_add_subfield(&symtab, "ct.rel", "ct.trk", "ct_state[2]");
-    expr_symtab_add_subfield(&symtab, "ct.rpl", "ct.trk", "ct_state[3]");
-    expr_symtab_add_subfield(&symtab, "ct.inv", "ct.trk", "ct_state[4]");
+    char ct_state_str[16];
+    snprintf(ct_state_str, sizeof ct_state_str, "ct_state[%d]", CS_TRACKED_BIT);
+    expr_symtab_add_predicate(&symtab, "ct.trk", ct_state_str);
+    snprintf(ct_state_str, sizeof ct_state_str, "ct_state[%d]", CS_NEW_BIT);
+    expr_symtab_add_subfield(&symtab, "ct.new", "ct.trk", ct_state_str);
+    snprintf(ct_state_str, sizeof ct_state_str, "ct_state[%d]", CS_ESTABLISHED_BIT);
+    expr_symtab_add_subfield(&symtab, "ct.est", "ct.trk", ct_state_str);
+    snprintf(ct_state_str, sizeof ct_state_str, "ct_state[%d]", CS_RELATED_BIT);
+    expr_symtab_add_subfield(&symtab, "ct.rel", "ct.trk", ct_state_str);
+    snprintf(ct_state_str, sizeof ct_state_str, "ct_state[%d]", CS_REPLY_DIR_BIT);
+    expr_symtab_add_subfield(&symtab, "ct.rpl", "ct.trk", ct_state_str);
+    snprintf(ct_state_str, sizeof ct_state_str, "ct_state[%d]", CS_INVALID_BIT);
+    expr_symtab_add_subfield(&symtab, "ct.inv", "ct.trk", ct_state_str);
 
     /* Data fields. */
     expr_symtab_add_field(&symtab, "eth.src", MFF_ETH_SRC, NULL, false);
-- 
2.5.0




More information about the dev mailing list