perf: 优化通过四元组查询流表的实现(查表前先根据端口预判是否需要翻转四元组)
This commit is contained in:
@@ -377,13 +377,12 @@ static struct session_ctx *data_packet_search_session(struct session_table *tabl
|
||||
sce_packet_get_innermost_tuple(&data_pkt, &inner_addr);
|
||||
four_tuple_reverse(&inner_addr, &reverse_addr);
|
||||
|
||||
struct session_node *node = session_table_search_by_id(table, session_id);
|
||||
if (node == NULL)
|
||||
struct session_ctx *session_ctx = (struct session_ctx *)session_table_search_by_id(table, session_id);
|
||||
if (session_ctx == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct session_ctx *session_ctx = (struct session_ctx *)node->value;
|
||||
if (memcmp(&session_ctx->inner_tuple4, &inner_addr, sizeof(struct four_tuple)) != 0 && memcmp(&session_ctx->inner_tuple4, &reverse_addr, sizeof(struct four_tuple)) != 0)
|
||||
{
|
||||
char *addr_str = four_tuple_tostring(&inner_addr);
|
||||
@@ -405,8 +404,8 @@ static struct session_ctx *inject_packet_search_session(struct session_table *ta
|
||||
packet_parse(&data_pkt, raw_data, raw_len);
|
||||
sce_packet_get_innermost_tuple(&data_pkt, &inner_addr);
|
||||
|
||||
struct session_node *node = session_table_search_by_addr(table, &inner_addr);
|
||||
if (node == NULL)
|
||||
struct session_ctx *session_ctx = (struct session_ctx *)session_table_search_by_addr(table, &inner_addr);
|
||||
if (session_ctx == NULL)
|
||||
{
|
||||
char *addr_str = four_tuple_tostring(&inner_addr);
|
||||
LOG_ERROR("%s: unexpected inject packet, unable to find session %s from session table, drop !!!", LOG_TAG_PKTIO, addr_str);
|
||||
@@ -414,7 +413,7 @@ static struct session_ctx *inject_packet_search_session(struct session_table *ta
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (struct session_ctx *)node->value;
|
||||
return session_ctx;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -951,10 +950,9 @@ static void handle_session_closing(struct metadata *meta, struct control_packet
|
||||
struct thread_metrics *thread_metrics = &thread_ctx->thread_metrics;
|
||||
struct session_table *session_table = thread_ctx->session_table;
|
||||
|
||||
struct session_node *node = session_table_search_by_id(session_table, meta->session_id);
|
||||
if (node)
|
||||
struct session_ctx *s_ctx = (struct session_ctx *)session_table_search_by_id(session_table, meta->session_id);
|
||||
if (s_ctx)
|
||||
{
|
||||
struct session_ctx *s_ctx = (struct session_ctx *)node->value;
|
||||
LOG_INFO("%s: session %lu %s closing", LOG_TAG_PKTIO, s_ctx->session_id, s_ctx->session_addr);
|
||||
|
||||
dump_sf_metrics(s_ctx, s_ctx->chaining_raw);
|
||||
@@ -972,11 +970,9 @@ static void handle_session_active(struct metadata *meta, struct control_packet *
|
||||
struct policy_enforcer *enforcer = thread_ctx->ref_enforcer;
|
||||
struct sce_ctx *sce_ctx = thread_ctx->ref_sce_ctx;
|
||||
|
||||
struct session_node *node = session_table_search_by_id(session_table, meta->session_id);
|
||||
if (node)
|
||||
struct session_ctx *session_ctx = (struct session_ctx *)session_table_search_by_id(session_table, meta->session_id);
|
||||
if (session_ctx)
|
||||
{
|
||||
struct session_ctx *session_ctx = (struct session_ctx *)node->value;
|
||||
|
||||
struct packet data_pkt;
|
||||
const char *payload = packet_parse(&data_pkt, meta->raw_data, meta->raw_len);
|
||||
uint16_t real_offset = payload - meta->raw_data;
|
||||
|
||||
Reference in New Issue
Block a user