bugfix: session cannot get current flow direction on duplicate package
This commit is contained in:
@@ -75,7 +75,7 @@ enum session_direction session_get_direction(const struct session *sess)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -496,6 +496,9 @@ static int duplicated_packet_bypass(struct session_manager *mgr, struct session
|
||||
break;
|
||||
}
|
||||
session_set_duplicate_traffic(sess);
|
||||
|
||||
session_set_current_packet(sess, pkt);
|
||||
session_set_current_flow_direction(sess, dir);
|
||||
return 1;
|
||||
}
|
||||
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_flow_direction(sess, dir);
|
||||
session_set_current_flow_direction(sess, dir);
|
||||
session_set_timestamp(sess, SESSION_TIMESTAMP_LAST, real_sec);
|
||||
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_S2C);
|
||||
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);
|
||||
sess = NULL;
|
||||
}
|
||||
|
||||
@@ -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_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_type(struct session *sess, enum session_type type);
|
||||
void session_set_duplicate_traffic(struct session *sess);
|
||||
|
||||
@@ -19,6 +19,7 @@ static void update_session_stat(struct session *sess, struct packet *pkt)
|
||||
if (sess)
|
||||
{
|
||||
enum flow_direction dir = session_get_current_flow_direction(sess);
|
||||
assert(dir != FLOW_DIRECTION_NONE);
|
||||
int is_ctrl = packet_is_ctrl(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_flow_direction(sess, FLOW_DIRECTION_NONE);
|
||||
session_set_current_flow_direction(sess, FLOW_DIRECTION_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user