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 <russ...@ovn.org> Requested-by: Joe Stringer <j...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev