Skip to content

Commit 43763b7

Browse files
committed
Match exact flags in TCP state machine
1 parent 532ca05 commit 43763b7

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

include/dp_util.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ extern "C" {
3838
#define DP_TCP_PKT_FLAG_SYNACK(FLAGS) \
3939
(((FLAGS) & (RTE_TCP_SYN_FLAG|RTE_TCP_ACK_FLAG)) == (RTE_TCP_SYN_FLAG|RTE_TCP_ACK_FLAG))
4040

41+
#define DP_TCP_PKT_FLAG_EXACT(FLAGS, REQUIRED) \
42+
(((FLAGS) & 0xFF) == (REQUIRED))
43+
#define DP_TCP_PKT_FLAG_ONLY_SYN(FLAGS) \
44+
DP_TCP_PKT_FLAG_EXACT((FLAGS), RTE_TCP_SYN_FLAG)
45+
#define DP_TCP_PKT_FLAG_ONLY_ACK(FLAGS) \
46+
DP_TCP_PKT_FLAG_EXACT((FLAGS), RTE_TCP_ACK_FLAG)
47+
#define DP_TCP_PKT_FLAG_ONLY_SYNACK(FLAGS) \
48+
DP_TCP_PKT_FLAG_EXACT((FLAGS), (RTE_TCP_SYN_FLAG | RTE_TCP_ACK_FLAG))
49+
4150

4251
int dp_get_dev_info(uint16_t port_id, struct rte_eth_dev_info *dev_info, char ifname[IF_NAMESIZE]);
4352

src/dp_cntrack.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ static __rte_always_inline void dp_cntrack_tcp_state(struct flow_value *flow_val
5959
switch (flow_val->l4_state.tcp_state) {
6060
case DP_FLOW_TCP_STATE_NONE:
6161
case DP_FLOW_TCP_STATE_RST_FIN:
62-
if (DP_TCP_PKT_FLAG_SYN(tcp_flags) && df->flow_dir == DP_FLOW_DIR_ORG)
62+
if (DP_TCP_PKT_FLAG_ONLY_SYN(tcp_flags) && df->flow_dir == DP_FLOW_DIR_ORG)
6363
flow_val->l4_state.tcp_state = DP_FLOW_TCP_STATE_NEW_SYN;
6464
break;
6565
case DP_FLOW_TCP_STATE_NEW_SYN:
66-
if (DP_TCP_PKT_FLAG_SYNACK(tcp_flags) && df->flow_dir == DP_FLOW_DIR_REPLY)
66+
if (DP_TCP_PKT_FLAG_ONLY_SYNACK(tcp_flags) && df->flow_dir == DP_FLOW_DIR_REPLY)
6767
flow_val->l4_state.tcp_state = DP_FLOW_TCP_STATE_NEW_SYNACK;
6868
break;
6969
case DP_FLOW_TCP_STATE_NEW_SYNACK:
70-
if (DP_TCP_PKT_FLAG_ACK(tcp_flags) && df->flow_dir == DP_FLOW_DIR_ORG)
70+
if (DP_TCP_PKT_FLAG_ONLY_ACK(tcp_flags) && df->flow_dir == DP_FLOW_DIR_ORG)
7171
flow_val->l4_state.tcp_state = DP_FLOW_TCP_STATE_ESTABLISHED;
7272
break;
7373
default:

src/nodes/virtsvc_node.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ static __rte_always_inline void virtsvc_tcp_state_change(struct dp_virtsvc_conn
3434
} else {
3535
switch (conn->state) {
3636
case DP_VIRTSVC_CONN_TRANSIENT:
37-
if (DP_TCP_PKT_FLAG_SYN(tcp_flags))
37+
if (DP_TCP_PKT_FLAG_ONLY_SYN(tcp_flags))
3838
conn->state = DP_VIRTSVC_CONN_TRANSIENT_SYN;
3939
break;
4040
case DP_VIRTSVC_CONN_TRANSIENT_SYN:
41-
if (DP_TCP_PKT_FLAG_SYNACK(tcp_flags))
41+
if (DP_TCP_PKT_FLAG_ONLY_SYNACK(tcp_flags))
4242
conn->state = DP_VIRTSVC_CONN_TRANSIENT_SYNACK;
4343
break;
4444
case DP_VIRTSVC_CONN_TRANSIENT_SYNACK:
45-
if (DP_TCP_PKT_FLAG_ACK(tcp_flags))
45+
if (DP_TCP_PKT_FLAG_ONLY_ACK(tcp_flags))
4646
conn->state = DP_VIRTSVC_CONN_ESTABLISHED;
4747
break;
4848
case DP_VIRTSVC_CONN_ESTABLISHED:

0 commit comments

Comments
 (0)