diff options
-rw-r--r-- | lib/packets.h | 29 | ||||
-rw-r--r-- | ovn/controller/lflow.c | 22 |
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); |