diff options
Diffstat (limited to 'common/src/tfe_packet_io.cpp')
| -rw-r--r-- | common/src/tfe_packet_io.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/common/src/tfe_packet_io.cpp b/common/src/tfe_packet_io.cpp index 6ee97d3..ee0c42e 100644 --- a/common/src/tfe_packet_io.cpp +++ b/common/src/tfe_packet_io.cpp @@ -1096,6 +1096,7 @@ static int handle_session_opening(struct metadata *meta, marsio_buff_t *rx_buff, uint16_t size = 0; uint8_t is_passthrough = 0; uint8_t hit_no_intercept = 0; + uint8_t is_session_id_only_key = 0; uint16_t out_size = 0; char stream_traceid[24] = {0}; char reason_no_intercept_param[] = "Hit No Intercept Policy"; @@ -1300,6 +1301,10 @@ passthrough: tuple4_reverse(&inner_tuple4, &s_ctx->c2s_info.tuple4); } + // is_passthrough为1时,只通过session id创建流表,避免四元组相同的情况下,uthash频繁扩展导致崩溃 + if (is_passthrough) + is_session_id_only_key = 1; + // c2s sids_copy(&s_ctx->c2s_info.sids, &parser->seq_sids); route_ctx_copy(&s_ctx->c2s_info.route_ctx, &parser->seq_route_ctx); @@ -1309,7 +1314,7 @@ passthrough: route_ctx_copy(&s_ctx->s2c_info.route_ctx, &parser->ack_route_ctx); TFE_LOG_INFO(logger, "%s: session %lu %s active first, hit rule %s", LOG_TAG_PKTIO, s_ctx->session_id, s_ctx->session_addr, str_rule_id); - session_table_insert(thread->session_table, s_ctx->session_id, &(s_ctx->c2s_info.tuple4), s_ctx, session_value_free_cb); + session_table_insert(thread->session_table, is_session_id_only_key, s_ctx->session_id, &(s_ctx->c2s_info.tuple4), s_ctx, session_value_free_cb); ATOMIC_INC(&(packet_io_fs->session_num)); if (parser->seq_header) FREE(&parser->seq_header); @@ -1520,9 +1525,11 @@ static int handle_raw_packet_from_nf(struct packet_io *handle, marsio_buff_t *rx throughput_metrics_inc(&packet_io_fs->raw_bypass, 1, raw_len); if (memcmp(&inner_addr, &s_ctx->c2s_info.tuple4, sizeof(struct tuple4)) == 0) { + s_ctx->c2s_info.is_e2i_dir = meta.is_e2i_dir; throughput_metrics_inc(&s_ctx->c2s_info.rx, 1, raw_len); } else { + s_ctx->s2c_info.is_e2i_dir = meta.is_e2i_dir; throughput_metrics_inc(&s_ctx->s2c_info.rx, 1, raw_len); } |
