Duplicated packet filter supports IPv4-Based TCP / UDP packet (IPv6 is not supported, because IPv6 does not have an IPid and cannot distinguish between retransmissions and duplicates)

This commit is contained in:
luwenpeng
2024-04-11 11:26:50 +08:00
parent 621a4cf292
commit cfbad63021
7 changed files with 77 additions and 54 deletions

View File

@@ -77,7 +77,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYN_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// C2S SYN dup Packet
printf("\n=> Packet Parse: TCP C2S SYN dup packet\n");
@@ -92,7 +92,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYN_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 1);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 1);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 1);
// C2S SYN retransmission Packet
printf("\n=> Packet Parse: TCP C2S SYN retransmission packet\n");
@@ -110,7 +110,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYN_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 1);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 1);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 1);
session_manager_free(mgr);
}
@@ -140,7 +140,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYNACK_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// S2C SYNACK dup Packet
printf("\n=> Packet Parse: TCP S2C SYNACK dup packet\n");
@@ -155,7 +155,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYNACK_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 1);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 1);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 1);
// S2C SYNACK retransmission Packet
printf("\n=> Packet Parse: TCP S2C SYNACK retransmission packet\n");
@@ -173,7 +173,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SYNACK_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 1);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 1);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 1);
session_manager_free(mgr);
}
@@ -204,7 +204,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SKIP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// C2S SYN retransmission Packet
printf("\n=> Packet Parse: TCP C2S SYN retransmission packet\n");
@@ -221,7 +221,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SKIP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// C2S SYN retransmission Packet
printf("\n=> Packet Parse: TCP C2S SYN retransmission packet\n");
@@ -238,7 +238,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SKIP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// C2S SYN dup Packet
printf("\n=> Packet Parse: TCP C2S SYN dup packet\n");
@@ -253,7 +253,7 @@ TEST(TCP_DUPKT_FILTER_ENABLE, SKIP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
session_manager_free(mgr);
}
@@ -286,7 +286,7 @@ TEST(TCP_DUPKT_FILTER_DISABLE, SYN_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// C2S SYN dup Packet
printf("\n=> Packet Parse: TCP C2S SYN dup packet\n");
@@ -301,7 +301,7 @@ TEST(TCP_DUPKT_FILTER_DISABLE, SYN_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
session_manager_free(mgr);
}
@@ -334,7 +334,7 @@ TEST(TCP_DUPKT_FILTER_DISABLE, SYNACK_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
// S2C SYNACK dup Packet
printf("\n=> Packet Parse: TCP S2C SYNACK dup packet\n");
@@ -349,7 +349,7 @@ TEST(TCP_DUPKT_FILTER_DISABLE, SYNACK_DUP)
EXPECT_TRUE(session_has_dup_traffic(sess) == 0);
stat = session_manager_get_stat(mgr);
EXPECT_TRUE(stat);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_hit_dup == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_duped_bypass == 0);
session_manager_free(mgr);
}

View File

@@ -86,8 +86,8 @@ TEST(TCP_OVERLOAD, EVICT_OLD_SESS)
EXPECT_TRUE(stat->nr_tcp_sess_closing == 0);
EXPECT_TRUE(stat->nr_tcp_sess_closed == RX_BURST_MAX); // have evicted, have't free
EXPECT_TRUE(stat->nr_tcp_sess_evicted == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_no_space == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_miss_sess == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_nospace_bypass == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_nosess_bypass == 0);
session_manager_free(mgr);
}
@@ -127,8 +127,8 @@ TEST(TCP_OVERLOAD, EVICT_NEW_SESS)
EXPECT_TRUE(stat->nr_tcp_sess_closing == 0);
EXPECT_TRUE(stat->nr_tcp_sess_closed == 0);
EXPECT_TRUE(stat->nr_tcp_sess_evicted == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_no_space == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_miss_sess == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_nospace_bypass == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_nosess_bypass == 0);
// table full, evict new session
for (uint32_t i = 0; i < RX_BURST_MAX; i++)
@@ -147,8 +147,8 @@ TEST(TCP_OVERLOAD, EVICT_NEW_SESS)
EXPECT_TRUE(stat->nr_tcp_sess_closing == 0);
EXPECT_TRUE(stat->nr_tcp_sess_closed == 0);
EXPECT_TRUE(stat->nr_tcp_sess_evicted == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_no_space == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_tcp_pkts_bypass_miss_sess == 0);
EXPECT_TRUE(stat->nr_tcp_pkts_nospace_bypass == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_tcp_pkts_nosess_bypass == 0);
session_manager_free(mgr);
}

View File

@@ -87,8 +87,8 @@ TEST(UDP_OVERLOAD, EVICT_OLD_SESS)
EXPECT_TRUE(stat->nr_udp_sess_closing == 0);
EXPECT_TRUE(stat->nr_udp_sess_closed == RX_BURST_MAX); // have evicted, have't free
EXPECT_TRUE(stat->nr_udp_sess_evicted == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_no_space == 0);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_hit_evc == 0);
EXPECT_TRUE(stat->nr_udp_pkts_nospace_bypass == 0);
EXPECT_TRUE(stat->nr_udp_pkts_evctd_bypass == 0);
// evicted session
while (1)
@@ -120,8 +120,8 @@ TEST(UDP_OVERLOAD, EVICT_OLD_SESS)
EXPECT_TRUE(stat->nr_udp_sess_closing == 0);
EXPECT_TRUE(stat->nr_udp_sess_closed == 0);
EXPECT_TRUE(stat->nr_udp_sess_evicted == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_no_space == 0);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_hit_evc == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_udp_pkts_nospace_bypass == 0);
EXPECT_TRUE(stat->nr_udp_pkts_evctd_bypass == RX_BURST_MAX);
// evicted session timeout
packet_set_ip_src_addr(&pkt, 0);
@@ -137,8 +137,8 @@ TEST(UDP_OVERLOAD, EVICT_OLD_SESS)
EXPECT_TRUE(stat->nr_udp_sess_closing == 0);
EXPECT_TRUE(stat->nr_udp_sess_closed == 1); // have evicted, have't free
EXPECT_TRUE(stat->nr_udp_sess_evicted == RX_BURST_MAX + 1);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_no_space == 0);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_hit_evc == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_udp_pkts_nospace_bypass == 0);
EXPECT_TRUE(stat->nr_udp_pkts_evctd_bypass == RX_BURST_MAX);
session_manager_free(mgr);
}
@@ -178,8 +178,8 @@ TEST(UDP_OVERLOAD, EVICT_NEW_SESS)
EXPECT_TRUE(stat->nr_udp_sess_closing == 0);
EXPECT_TRUE(stat->nr_udp_sess_closed == 0);
EXPECT_TRUE(stat->nr_udp_sess_evicted == 0);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_no_space == 0);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_hit_evc == 0);
EXPECT_TRUE(stat->nr_udp_pkts_nospace_bypass == 0);
EXPECT_TRUE(stat->nr_udp_pkts_evctd_bypass == 0);
// evicted session
EXPECT_TRUE(session_manager_get_evicted_session(mgr) == NULL);
@@ -201,8 +201,8 @@ TEST(UDP_OVERLOAD, EVICT_NEW_SESS)
EXPECT_TRUE(stat->nr_udp_sess_closing == 0);
EXPECT_TRUE(stat->nr_udp_sess_closed == 0);
EXPECT_TRUE(stat->nr_udp_sess_evicted == 0);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_no_space == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_udp_pkts_bypass_hit_evc == 0);
EXPECT_TRUE(stat->nr_udp_pkts_nospace_bypass == RX_BURST_MAX);
EXPECT_TRUE(stat->nr_udp_pkts_evctd_bypass == 0);
session_manager_free(mgr);
}