bugfix: session cannot get current flow direction on duplicate package

This commit is contained in:
luwenpeng
2024-05-16 17:05:45 +08:00
parent d6ae7c79f7
commit 1559f0a13e
4 changed files with 9 additions and 5 deletions

View File

@@ -75,7 +75,7 @@ enum session_direction session_get_direction(const struct session *sess)
return sess->sess_dir; return sess->sess_dir;
} }
void session_set_flow_direction(struct session *sess, enum flow_direction dir) void session_set_current_flow_direction(struct session *sess, enum flow_direction dir)
{ {
sess->flow_dir = dir; sess->flow_dir = dir;
} }

View File

@@ -496,6 +496,9 @@ static int duplicated_packet_bypass(struct session_manager *mgr, struct session
break; break;
} }
session_set_duplicate_traffic(sess); session_set_duplicate_traffic(sess);
session_set_current_packet(sess, pkt);
session_set_current_flow_direction(sess, dir);
return 1; return 1;
} }
else else
@@ -578,7 +581,7 @@ static void session_update(struct session *sess, enum session_state next_state,
} }
session_set_current_packet(sess, pkt); session_set_current_packet(sess, pkt);
session_set_flow_direction(sess, dir); session_set_current_flow_direction(sess, dir);
session_set_timestamp(sess, SESSION_TIMESTAMP_LAST, real_sec); session_set_timestamp(sess, SESSION_TIMESTAMP_LAST, real_sec);
session_set_state(sess, next_state); session_set_state(sess, next_state);
} }
@@ -997,7 +1000,7 @@ void session_manager_free_session(struct session_manager *mgr, struct session *s
session_clear_sid_list(sess, FLOW_DIRECTION_C2S); session_clear_sid_list(sess, FLOW_DIRECTION_C2S);
session_clear_sid_list(sess, FLOW_DIRECTION_S2C); session_clear_sid_list(sess, FLOW_DIRECTION_S2C);
session_set_current_packet(sess, NULL); session_set_current_packet(sess, NULL);
session_set_flow_direction(sess, FLOW_DIRECTION_NONE); session_set_current_flow_direction(sess, FLOW_DIRECTION_NONE);
session_pool_push(mgr->sess_pool, sess); session_pool_push(mgr->sess_pool, sess);
sess = NULL; sess = NULL;
} }

View File

@@ -81,7 +81,7 @@ void session_set_tuple(struct session *sess, const struct tuple6 *key);
void session_set_tuple_direction(struct session *sess, enum flow_direction dir); void session_set_tuple_direction(struct session *sess, enum flow_direction dir);
void session_set_direction(struct session *sess, enum session_direction dir); void session_set_direction(struct session *sess, enum session_direction dir);
void session_set_flow_direction(struct session *sess, enum flow_direction dir); void session_set_current_flow_direction(struct session *sess, enum flow_direction dir);
void session_set_state(struct session *sess, enum session_state state); void session_set_state(struct session *sess, enum session_state state);
void session_set_type(struct session *sess, enum session_type type); void session_set_type(struct session *sess, enum session_type type);
void session_set_duplicate_traffic(struct session *sess); void session_set_duplicate_traffic(struct session *sess);

View File

@@ -19,6 +19,7 @@ static void update_session_stat(struct session *sess, struct packet *pkt)
if (sess) if (sess)
{ {
enum flow_direction dir = session_get_current_flow_direction(sess); enum flow_direction dir = session_get_current_flow_direction(sess);
assert(dir != FLOW_DIRECTION_NONE);
int is_ctrl = packet_is_ctrl(pkt); int is_ctrl = packet_is_ctrl(pkt);
switch (packet_get_action(pkt)) switch (packet_get_action(pkt))
{ {
@@ -36,7 +37,7 @@ static void update_session_stat(struct session *sess, struct packet *pkt)
} }
session_set_current_packet(sess, NULL); session_set_current_packet(sess, NULL);
session_set_flow_direction(sess, FLOW_DIRECTION_NONE); session_set_current_flow_direction(sess, FLOW_DIRECTION_NONE);
} }
} }