TSG-18285 TFE的Packet IO模块支持重复流量识别

This commit is contained in:
luwenpeng
2023-12-29 17:25:18 +08:00
parent 9d3dcce1ab
commit cbd98507a2
30 changed files with 4064 additions and 1572 deletions

View File

@@ -26,16 +26,9 @@ target_link_libraries(gtest_session_table common gtest)
# gtest_raw_packet
###############################################################################
add_executable(gtest_raw_packet test_raw_packet.cpp)
target_include_directories(gtest_raw_packet PUBLIC ${CMAKE_SOURCE_DIR}/common/include)
target_link_libraries(gtest_raw_packet common gtest)
###############################################################################
# test_fixed_buffer
###############################################################################
#add_executable(test_fixed_buffer test_fixed_buffer.cpp ${CMAKE_SOURCE_DIR}/common/src/fixed_buffer.cpp)
#target_include_directories(test_fixed_buffer PUBLIC ${CMAKE_SOURCE_DIR}/common/include)
#add_executable(gtest_raw_packet test_raw_packet.cpp)
#target_include_directories(gtest_raw_packet PUBLIC ${CMAKE_SOURCE_DIR}/common/include)
#target_link_libraries(gtest_raw_packet common gtest)
###############################################################################
# gtest_discover_tests
@@ -45,5 +38,4 @@ include(GoogleTest)
gtest_discover_tests(gtest_addr)
gtest_discover_tests(gtest_cmsg)
gtest_discover_tests(gtest_session_table)
gtest_discover_tests(gtest_raw_packet)
#gtest_discover_tests(test_fixed_buffer)
#gtest_discover_tests(gtest_raw_packet)

View File

@@ -1,10 +1,13 @@
#include <gtest/gtest.h>
#include <arpa/inet.h>
#include "tfe_raw_packet.h"
#include "packet.h"
#include "tfe_packet_io.h"
bool g_print_to_stderr = true;
void * g_packet_io_logger = NULL;
void *g_packet_io_logger = NULL;
void *g_default_logger = NULL;
extern int raw_traffic_decapsulate(struct packet *handler, const char *raw_data, int raw_len, char **header, int *header_len, int *is_ipv4);
/******************************************************************************
* Pcap file: 1-ETH_VLAN_VLAN_IP4_IP4_UDP.pcap
@@ -79,17 +82,15 @@ unsigned char data1[] = {
TEST(RAW_PACKET, ETH_VLAN_VLAN_IP4_IP4_UDP)
{
char *header = NULL;
int header_len = 0;
char *header = NULL;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data1, sizeof(data1), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data1, sizeof(data1), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
struct packet pkt;
packet_parse(&pkt, (const char *)data1, sizeof(data1));
raw_traffic_decapsulate(&pkt, (const char *)data1, sizeof(data1), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -188,17 +189,15 @@ unsigned char data2[] = {
TEST(RAW_PACKET, ETH_IP6_IP4_TCP_SSH)
{
char *header = NULL;
int header_len = 0;
char *header = NULL;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
raw_packet_parser_init(&raw_parser, 0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data2, sizeof(data2), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data2, sizeof(data2), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
struct packet pkt;
packet_parse(&pkt, (const char *)data2, sizeof(data2));
raw_traffic_decapsulate(&pkt, (const char *)data2, sizeof(data2), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -292,15 +291,14 @@ unsigned char data3[] = {
TEST(RAW_PACKET, ETH_VLAN_IP6_IP4_GRE_PPP_IP4_UDP_DNS)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data3, sizeof(data3), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data3, sizeof(data3), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data3, sizeof(data3));
raw_traffic_decapsulate(&pkt, (const char *)data3, sizeof(data3), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -369,15 +367,14 @@ unsigned char data4[] = {
TEST(RAW_PACKET, ETH_IP4_IP6_TCP)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data4, sizeof(data4), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data4, sizeof(data4), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data4, sizeof(data4));
raw_traffic_decapsulate(&pkt, (const char *)data4, sizeof(data4), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -432,15 +429,14 @@ unsigned char data5[] = {
TEST(RAW_PACKET, ETH_IP6_IP6_UDP)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data5, sizeof(data5), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data5, sizeof(data5), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data5, sizeof(data5));
raw_traffic_decapsulate(&pkt, (const char *)data5, sizeof(data5), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -502,15 +498,14 @@ unsigned char data6[] = {
TEST(RAW_PACKET, ETH_MPLS_IP4_TCP)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data6, sizeof(data6), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data6, sizeof(data6), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header != nullptr);
EXPECT_TRUE(header_len == 18);
packet_parse(&pkt, (const char *)data6, sizeof(data6));
raw_traffic_decapsulate(&pkt, (const char *)data6, sizeof(data6), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header != nullptr);
EXPECT_TRUE(header_len == 18);
}
/******************************************************************************
@@ -577,15 +572,14 @@ unsigned char data7[] = {
TEST(RAW_PACKET, ETH_MPLS_MPLS_IP4_TCP)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data7, sizeof(data7), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data7, sizeof(data7), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header != nullptr);
EXPECT_TRUE(header_len == 22);
packet_parse(&pkt, (const char *)data7, sizeof(data7));
raw_traffic_decapsulate(&pkt, (const char *)data7, sizeof(data7), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header != nullptr);
EXPECT_TRUE(header_len == 22);
}
/******************************************************************************
@@ -657,15 +651,14 @@ unsigned char data8[] = {
TEST(RAW_PACKET, ETH_VLAN_PPPOE_IP4_TCP)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data8, sizeof(data8), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data8, sizeof(data8), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header != nullptr);
EXPECT_TRUE(header_len == 26);
packet_parse(&pkt, (const char *)data8, sizeof(data8));
raw_traffic_decapsulate(&pkt, (const char *)data8, sizeof(data8), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header != nullptr);
EXPECT_TRUE(header_len == 26);
}
/******************************************************************************
@@ -796,15 +789,14 @@ unsigned char data9[] = {
TEST(RAW_PACKET, ETH_IP6_UDP_GTP_IP6_TCP_TLS)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data9, sizeof(data9), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data9, sizeof(data9), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data9, sizeof(data9));
raw_traffic_decapsulate(&pkt, (const char *)data9, sizeof(data9), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -942,15 +934,14 @@ unsigned char data10[] = {
TEST(RAW_PACKET, ETH_IP6_UDP_GTP_IP4_TCP_TLS)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data10, sizeof(data10), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data10, sizeof(data10), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data10, sizeof(data10));
raw_traffic_decapsulate(&pkt, (const char *)data10, sizeof(data10), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -1030,15 +1021,14 @@ unsigned char data11[] = {
TEST(RAW_PACKET, ETH_IP4_UDP_VXLAN_ETH_IP4_UDP_DNS)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data11, sizeof(data11), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data11, sizeof(data11), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data11, sizeof(data11));
raw_traffic_decapsulate(&pkt, (const char *)data11, sizeof(data11), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
/******************************************************************************
@@ -1080,15 +1070,14 @@ unsigned char data12[] = {
TEST(RAW_PACKET, ETH_MPLS_MPLS_PWETHCW_ETH_ARP)
{
char *header = NULL;
int header_len = 0;
int header_len = 0;
int is_ipv4 = 0;
struct raw_pkt_parser raw_parser;
struct packet pkt;
raw_packet_parser_init(&raw_parser,0, LAYER_TYPE_ALL, 8);
raw_packet_parser_parse(&raw_parser, (const void *)data12, sizeof(data12), g_packet_io_logger);
raw_traffic_decapsulate(&raw_parser, (char *)data12, sizeof(data12), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
packet_parse(&pkt, (const char *)data12, sizeof(data12));
raw_traffic_decapsulate(&pkt, (const char *)data12, sizeof(data12), &header, &header_len, &is_ipv4);
EXPECT_TRUE(header == nullptr);
EXPECT_TRUE(header_len == 0);
}
int main(int argc, char **argv)

View File

@@ -3,8 +3,26 @@
#include "tfe_session_table.h"
#define INIT_ADDR_V4(addr, src_ip_str, src_port_num, dst_ip_str, dst_port_num) \
struct tuple4 addr; \
memset(&addr, 0, sizeof(addr)); \
addr.ip_type = IP_TYPE_V4; \
addr.src_addr.v4.s_addr = inet_addr(src_ip_str); \
addr.dst_addr.v4.s_addr = inet_addr(dst_ip_str); \
addr.src_port = htons(src_port_num); \
addr.dst_port = htons(dst_port_num);
#define INIT_ADDR_V6(addr, src_ip_str, src_port_num, dst_ip_str, dst_port_num) \
struct tuple4 addr; \
memset(&addr, 0, sizeof(addr)); \
addr.ip_type = IP_TYPE_V6; \
inet_pton(AF_INET6, src_ip_str, &addr.src_addr.v6); \
inet_pton(AF_INET6, dst_ip_str, &addr.dst_addr.v6); \
addr.src_port = htons(src_port_num); \
addr.dst_port = htons(dst_port_num);
bool g_print_to_stderr = true;
void * g_packet_io_logger = NULL;
void *g_packet_io_logger = NULL;
TEST(STREAM_TABLE, INSERT)
{
@@ -104,10 +122,10 @@ TEST(STREAM_TABLE, SEARCH_BY_REVERSE_ADDR)
char *val_world = strdup("WORLD");
INIT_ADDR_V4(addr1, "1.2.3.4", 1234, "4.3.2.1", 4321);
INIT_ADDR_V6(addr2, "2:3:4::5", 2345, "5:4:3::2", 5342);
struct addr_tuple4 addr1_reverse;
struct addr_tuple4 addr2_reverse;
addr_tuple4_reverse(&addr1, &addr1_reverse);
addr_tuple4_reverse(&addr2, &addr2_reverse);
struct tuple4 addr1_reverse;
struct tuple4 addr2_reverse;
tuple4_reverse(&addr1, &addr1_reverse);
tuple4_reverse(&addr2, &addr2_reverse);
// TEST Insert
EXPECT_TRUE(session_table_insert(table, 1, &addr1, val_hello, free) == 0);
@@ -137,10 +155,10 @@ TEST(STREAM_TABLE, DELETE_BY_ID)
char *val_world = strdup("WORLD");
INIT_ADDR_V4(addr1, "1.2.3.4", 1234, "4.3.2.1", 4321);
INIT_ADDR_V6(addr2, "2:3:4::5", 2345, "5:4:3::2", 5342);
struct addr_tuple4 addr1_reverse;
struct addr_tuple4 addr2_reverse;
addr_tuple4_reverse(&addr1, &addr1_reverse);
addr_tuple4_reverse(&addr2, &addr2_reverse);
struct tuple4 addr1_reverse;
struct tuple4 addr2_reverse;
tuple4_reverse(&addr1, &addr1_reverse);
tuple4_reverse(&addr2, &addr2_reverse);
// TEST Insert
EXPECT_TRUE(session_table_insert(table, 1, &addr1, val_hello, free) == 0);
@@ -174,10 +192,10 @@ TEST(STREAM_TABLE, DELETE_BY_ADDR)
char *val_world = strdup("WORLD");
INIT_ADDR_V4(addr1, "1.2.3.4", 1234, "4.3.2.1", 4321);
INIT_ADDR_V6(addr2, "2:3:4::5", 2345, "5:4:3::2", 5342);
struct addr_tuple4 addr1_reverse;
struct addr_tuple4 addr2_reverse;
addr_tuple4_reverse(&addr1, &addr1_reverse);
addr_tuple4_reverse(&addr2, &addr2_reverse);
struct tuple4 addr1_reverse;
struct tuple4 addr2_reverse;
tuple4_reverse(&addr1, &addr1_reverse);
tuple4_reverse(&addr2, &addr2_reverse);
// TEST Insert
EXPECT_TRUE(session_table_insert(table, 1, &addr1, val_hello, free) == 0);
@@ -211,10 +229,10 @@ TEST(STREAM_TABLE, DELETE_BY_REVERSE_ADDR)
char *val_world = strdup("WORLD");
INIT_ADDR_V4(addr1, "1.2.3.4", 1234, "4.3.2.1", 4321);
INIT_ADDR_V6(addr2, "2:3:4::5", 2345, "5:4:3::2", 5342);
struct addr_tuple4 addr1_reverse;
struct addr_tuple4 addr2_reverse;
addr_tuple4_reverse(&addr1, &addr1_reverse);
addr_tuple4_reverse(&addr2, &addr2_reverse);
struct tuple4 addr1_reverse;
struct tuple4 addr2_reverse;
tuple4_reverse(&addr1, &addr1_reverse);
tuple4_reverse(&addr2, &addr2_reverse);
// TEST Insert
EXPECT_TRUE(session_table_insert(table, 1, &addr1, val_hello, free) == 0);