summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/packets.h29
-rw-r--r--ovn/controller/lflow.c22
2 files changed, 36 insertions, 15 deletions
diff --git a/lib/packets.h b/lib/packets.h
index edf140b9e..36bd759bb 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 764a147ed..91ad5dbd8 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);