perf:通过控制报文PACKET_CUR_DIR字段判断当前包的方向,不再默认active控制报文为C2S方向
This commit is contained in:
@@ -41,6 +41,8 @@
|
|||||||
|
|
||||||
#define RX_BURST_MAX 128
|
#define RX_BURST_MAX 128
|
||||||
|
|
||||||
|
#define CURDIR_C2S 0x1
|
||||||
|
#define CURDIR_S2C 0x2
|
||||||
|
|
||||||
#define IS_SINGLE 0x01
|
#define IS_SINGLE 0x01
|
||||||
#define IS_TUNNEL 0x02
|
#define IS_TUNNEL 0x02
|
||||||
@@ -259,11 +261,6 @@ static struct metadata *metadata_new()
|
|||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int metadata_is_empty(struct metadata *meta)
|
|
||||||
{
|
|
||||||
return meta->write_ref == 0 ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void metadata_deep_copy(struct metadata *dst, struct metadata *src)
|
static void metadata_deep_copy(struct metadata *dst, struct metadata *src)
|
||||||
{
|
{
|
||||||
dst->write_ref++;
|
dst->write_ref++;
|
||||||
@@ -1058,26 +1055,20 @@ static void packet_io_send_fake_pkt(struct packet_io_thread_ctx *thread, struct
|
|||||||
marsio_send_burst_with_options(packet_io->dev_nf_interface.mr_path, thread->thread_index, tx_buffs, 3, MARSIO_SEND_OPT_REHASH);
|
marsio_send_burst_with_options(packet_io->dev_nf_interface.mr_path, thread->thread_index, tx_buffs, 3, MARSIO_SEND_OPT_REHASH);
|
||||||
}
|
}
|
||||||
|
|
||||||
int raw_traffic_decapsulate(struct packet *handler, const char *raw_data, int raw_len, char **header, int *header_len, int *is_ipv4)
|
int raw_traffic_decapsulate(const char *raw_data, int raw_len, struct packet_info *pkt_info)
|
||||||
{
|
{
|
||||||
const struct layer_record *l3_layer_record = NULL;
|
const struct layer_record *l3_layer_record = NULL;
|
||||||
const struct layer_record *l4_layer_record = NULL;
|
struct packet pkt;
|
||||||
|
packet_parse(&pkt, raw_data, raw_len);
|
||||||
|
|
||||||
l4_layer_record = packet_get_innermost_layer(handler, LAYER_TYPE_L4);
|
l3_layer_record = packet_get_innermost_layer(&pkt, LAYER_TYPE_L3);
|
||||||
if (l4_layer_record == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (l4_layer_record->type != LAYER_TYPE_TCP)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
l3_layer_record = packet_get_innermost_layer(handler, LAYER_TYPE_L3);
|
|
||||||
if (l3_layer_record == NULL)
|
if (l3_layer_record == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
*is_ipv4 = l3_layer_record->type == LAYER_TYPE_IPV4 ? 1 : 0;
|
pkt_info->is_ipv4 = l3_layer_record->type == LAYER_TYPE_IPV4 ? 1 : 0;
|
||||||
*header_len = l3_layer_record->hdr_offset;
|
pkt_info->header_len = l3_layer_record->hdr_offset;
|
||||||
*header = (char *)calloc(*header_len, sizeof(char));
|
pkt_info->header_data = (char *)calloc(pkt_info->header_len, sizeof(char));
|
||||||
memcpy(*header, raw_data, *header_len);
|
memcpy(pkt_info->header_data, raw_data, pkt_info->header_len);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1103,7 +1094,6 @@ static int handle_session_opening(struct metadata *meta, struct ctrl_pkt_parser
|
|||||||
unsigned int stream_common_direction;
|
unsigned int stream_common_direction;
|
||||||
uint8_t stream_protocol_in_char = 0;
|
uint8_t stream_protocol_in_char = 0;
|
||||||
uint8_t enable_decrypted_traffic_steering = 0;
|
uint8_t enable_decrypted_traffic_steering = 0;
|
||||||
struct ethhdr *ether_hdr = NULL;
|
|
||||||
struct session_ctx *s_ctx = NULL;
|
struct session_ctx *s_ctx = NULL;
|
||||||
struct tuple4 inner_tuple4;
|
struct tuple4 inner_tuple4;
|
||||||
struct tcp_restore_info restore_info;
|
struct tcp_restore_info restore_info;
|
||||||
@@ -1251,18 +1241,27 @@ passthrough:
|
|||||||
route_ctx_copy(&s_ctx->ctrl_meta->route_ctx, &meta->route_ctx);
|
route_ctx_copy(&s_ctx->ctrl_meta->route_ctx, &meta->route_ctx);
|
||||||
|
|
||||||
if (parser->seq_len > 0)
|
if (parser->seq_len > 0)
|
||||||
raw_traffic_decapsulate(&pkt, parser->seq_header, parser->seq_len, &s_ctx->c2s_info.header_data, &s_ctx->c2s_info.header_len, &s_ctx->c2s_info.is_ipv4);
|
raw_traffic_decapsulate(parser->seq_header, parser->seq_len, &s_ctx->c2s_info);
|
||||||
if (parser->ack_len > 0)
|
if (parser->ack_len > 0)
|
||||||
raw_traffic_decapsulate(&pkt, parser->ack_header, parser->ack_len, &s_ctx->s2c_info.header_data, &s_ctx->s2c_info.header_len, &s_ctx->s2c_info.is_ipv4);
|
raw_traffic_decapsulate(parser->ack_header, parser->ack_len, &s_ctx->s2c_info);
|
||||||
|
|
||||||
|
uint8_t packet_cur_dir = CURDIR_C2S;
|
||||||
|
tfe_cmsg_get_value(parser->cmsg, TFE_CMSG_TCP_RESTORE_INFO_PACKET_CUR_DIR, (unsigned char *)&packet_cur_dir, sizeof(uint8_t), &size);
|
||||||
|
|
||||||
|
if (packet_cur_dir == CURDIR_C2S) {
|
||||||
|
s_ctx->c2s_info.tuple4 = inner_tuple4;
|
||||||
|
tuple4_reverse(&inner_tuple4, &s_ctx->s2c_info.tuple4);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
s_ctx->s2c_info.tuple4 = inner_tuple4;
|
||||||
|
tuple4_reverse(&inner_tuple4, &s_ctx->c2s_info.tuple4);
|
||||||
|
}
|
||||||
|
|
||||||
// c2s
|
// c2s
|
||||||
s_ctx->c2s_info.is_e2i_dir = meta->is_e2i_dir;
|
|
||||||
s_ctx->c2s_info.tuple4 = inner_tuple4;
|
|
||||||
sids_copy(&s_ctx->c2s_info.sids, &parser->seq_sids);
|
sids_copy(&s_ctx->c2s_info.sids, &parser->seq_sids);
|
||||||
route_ctx_copy(&s_ctx->c2s_info.route_ctx, &parser->seq_route_ctx);
|
route_ctx_copy(&s_ctx->c2s_info.route_ctx, &parser->seq_route_ctx);
|
||||||
|
|
||||||
// s2c
|
// s2c
|
||||||
tuple4_reverse(&inner_tuple4, &s_ctx->s2c_info.tuple4);
|
|
||||||
sids_copy(&s_ctx->s2c_info.sids, &parser->ack_sids);
|
sids_copy(&s_ctx->s2c_info.sids, &parser->ack_sids);
|
||||||
route_ctx_copy(&s_ctx->s2c_info.route_ctx, &parser->ack_route_ctx);
|
route_ctx_copy(&s_ctx->s2c_info.route_ctx, &parser->ack_route_ctx);
|
||||||
|
|
||||||
@@ -1941,8 +1940,6 @@ void handle_decryption_packet_from_tap(const char *data, int len, void *args)
|
|||||||
|
|
||||||
void handle_raw_packet_from_tap(const char *data, int len, void *args)
|
void handle_raw_packet_from_tap(const char *data, int len, void *args)
|
||||||
{
|
{
|
||||||
char *src_mac = NULL;
|
|
||||||
char *dst_mac = NULL;
|
|
||||||
struct packet_io_thread_ctx *thread = (struct packet_io_thread_ctx *)args;
|
struct packet_io_thread_ctx *thread = (struct packet_io_thread_ctx *)args;
|
||||||
struct packet_io *packet_io = thread->ref_io;
|
struct packet_io *packet_io = thread->ref_io;
|
||||||
struct packet_io_fs *packet_io_fs = thread->ret_fs_state;
|
struct packet_io_fs *packet_io_fs = thread->ret_fs_state;
|
||||||
|
|||||||
@@ -22,14 +22,6 @@ add_executable(gtest_session_table test_session_table.cpp)
|
|||||||
target_include_directories(gtest_session_table PUBLIC ${CMAKE_SOURCE_DIR}/common/include)
|
target_include_directories(gtest_session_table PUBLIC ${CMAKE_SOURCE_DIR}/common/include)
|
||||||
target_link_libraries(gtest_session_table common gtest)
|
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)
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# gtest_discover_tests
|
# gtest_discover_tests
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -38,4 +30,3 @@ include(GoogleTest)
|
|||||||
gtest_discover_tests(gtest_addr)
|
gtest_discover_tests(gtest_addr)
|
||||||
gtest_discover_tests(gtest_cmsg)
|
gtest_discover_tests(gtest_cmsg)
|
||||||
gtest_discover_tests(gtest_session_table)
|
gtest_discover_tests(gtest_session_table)
|
||||||
gtest_discover_tests(gtest_raw_packet)
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user