[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