refactor: use session_manager_discard_session() instead of session_set_discard()

This commit is contained in:
luwenpeng
2024-11-26 11:53:30 +08:00
parent 9ba56055b3
commit 1e072950d7
6 changed files with 31 additions and 21 deletions

View File

@@ -135,7 +135,6 @@ uint64_t session_get_id(const struct session *sess);
uint64_t session_get_timestamp(const struct session *sess, enum session_timestamp type); uint64_t session_get_timestamp(const struct session *sess, enum session_timestamp type);
uint64_t session_get_stat(const struct session *sess, enum flow_type type, enum session_stat stat); uint64_t session_get_stat(const struct session *sess, enum flow_type type, enum session_stat stat);
const char *session_get_readable_addr(const struct session *sess); const char *session_get_readable_addr(const struct session *sess);
void session_set_discard(struct session *sess);
void session_set_exdata(struct session *sess, int idx, void *ex_ptr); void session_set_exdata(struct session *sess, int idx, void *ex_ptr);
void *session_get_exdata(const struct session *sess, int idx); void *session_get_exdata(const struct session *sess, int idx);
@@ -145,6 +144,7 @@ struct session_manager *module_to_session_manager(struct module *mod);
int session_manager_new_session_exdata_index(struct session_manager *sess_mgr, const char *name, exdata_free *func, void *arg); int session_manager_new_session_exdata_index(struct session_manager *sess_mgr, const char *name, exdata_free *func, void *arg);
struct session *session_manager_lookup_session_by_packet(struct session_manager *sess_mgr, uint16_t thread_id, const struct packet *pkt); struct session *session_manager_lookup_session_by_packet(struct session_manager *sess_mgr, uint16_t thread_id, const struct packet *pkt);
struct session *session_manager_lookup_session_by_id(struct session_manager *sess_mgr, uint16_t thread_id, uint64_t sess_id); struct session *session_manager_lookup_session_by_id(struct session_manager *sess_mgr, uint16_t thread_id, uint64_t sess_id);
void session_manager_discard_session(struct session_manager *sess_mgr, uint16_t thread_id, struct session *sess);
void session_manager_on_packet_forward(struct packet *pkt, struct module *mod); void session_manager_on_packet_forward(struct packet *pkt, struct module *mod);
void session_manager_on_packet_output(struct packet *pkt, struct module *mod); void session_manager_on_packet_output(struct packet *pkt, struct module *mod);

View File

@@ -68,7 +68,6 @@ struct session
enum session_type sess_type; enum session_type sess_type;
enum session_state state; enum session_state state;
enum closing_reason reason; enum closing_reason reason;
struct session_manager_rte *sess_mgr_rte;
struct session_manager_stat *sess_mgr_stat; struct session_manager_stat *sess_mgr_stat;
}; };

View File

@@ -463,6 +463,16 @@ struct session *session_manager_lookup_session_by_id(struct session_manager *ses
return session_manager_rte_lookup_session_by_id(rte, sess_id); return session_manager_rte_lookup_session_by_id(rte, sess_id);
} }
void session_manager_discard_session(struct session_manager *sess_mgr, uint16_t thread_id, struct session *sess)
{
struct session_manager_rte *rte = session_manager_get_rte(sess_mgr, thread_id);
if (rte == NULL)
{
return;
}
session_manager_rte_discard_session(rte, sess);
}
struct session *packet_exdata_to_session(const struct session_manager *sess_mgr, const struct packet *pkt) struct session *packet_exdata_to_session(const struct session_manager *sess_mgr, const struct packet *pkt)
{ {
return (struct session *)packet_get_exdata(pkt, sess_mgr->pkt_ex_to_get_sess); return (struct session *)packet_get_exdata(pkt, sess_mgr->pkt_ex_to_get_sess);

View File

@@ -32,7 +32,10 @@ struct session_manager_rte
struct session_manager_cfg cfg; struct session_manager_cfg cfg;
struct session_manager_stat stat; struct session_manager_stat stat;
// only used for session_set_discard() or session_manager_rte_record_duplicated_packet(), because the function is called by plugin and has no time input. /*
* only used for session_manager_discard_session() or session_manager_rte_record_duplicated_packet(),
* because the function is called by module and has no time input.
*/
uint64_t now_ms; uint64_t now_ms;
struct snowflake *sf; struct snowflake *sf;
}; };
@@ -587,7 +590,6 @@ static struct session *session_manager_rte_new_tcp_session(struct session_manage
return NULL; return NULL;
} }
session_init(sess); session_init(sess);
sess->sess_mgr_rte = sess_mgr_rte;
sess->sess_mgr_stat = &sess_mgr_rte->stat; sess->sess_mgr_stat = &sess_mgr_rte->stat;
enum session_state next_state = session_transition_run(SESSION_STATE_INIT, TCP_SYN); enum session_state next_state = session_transition_run(SESSION_STATE_INIT, TCP_SYN);
@@ -634,7 +636,6 @@ static struct session *session_manager_rte_new_udp_session(struct session_manage
return NULL; return NULL;
} }
session_init(sess); session_init(sess);
sess->sess_mgr_rte = sess_mgr_rte;
sess->sess_mgr_stat = &sess_mgr_rte->stat; sess->sess_mgr_stat = &sess_mgr_rte->stat;
enum flow_type type = identify_flow_type_by_port(ntohs(key->src_port), ntohs(key->dst_port)); enum flow_type type = identify_flow_type_by_port(ntohs(key->src_port), ntohs(key->dst_port));
@@ -1160,22 +1161,8 @@ uint64_t session_manager_rte_scan_session(struct session_manager_rte *sess_mgr_r
return mached_sess_num; return mached_sess_num;
} }
void session_manager_rte_record_duplicated_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt) void session_manager_rte_discard_session(struct session_manager_rte *sess_mgr_rte, struct session *sess)
{ {
if (sess_mgr_rte->cfg.duplicated_packet_bloom_filter.enable)
{
packet_dabloom_add(sess_mgr_rte->dup_pkt_dab, pkt, sess_mgr_rte->now_ms);
}
}
struct session_manager_stat *session_manager_rte_get_stat(struct session_manager_rte *sess_mgr_rte)
{
return &sess_mgr_rte->stat;
}
void session_set_discard(struct session *sess)
{
struct session_manager_rte *sess_mgr_rte = sess->sess_mgr_rte;
enum session_type type = session_get_type(sess); enum session_type type = session_get_type(sess);
enum session_state curr_state = session_get_current_state(sess); enum session_state curr_state = session_get_current_state(sess);
enum session_state next_state = session_transition_run(curr_state, USER_CLOSE); enum session_state next_state = session_transition_run(curr_state, USER_CLOSE);
@@ -1197,3 +1184,16 @@ void session_set_discard(struct session *sess)
break; break;
} }
} }
void session_manager_rte_record_duplicated_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt)
{
if (sess_mgr_rte->cfg.duplicated_packet_bloom_filter.enable)
{
packet_dabloom_add(sess_mgr_rte->dup_pkt_dab, pkt, sess_mgr_rte->now_ms);
}
}
struct session_manager_stat *session_manager_rte_get_stat(struct session_manager_rte *sess_mgr_rte)
{
return &sess_mgr_rte->stat;
}

View File

@@ -44,6 +44,7 @@ struct session *session_manager_rte_get_expired_session(struct session_manager_r
struct session *session_manager_rte_get_evicted_session(struct session_manager_rte *sess_mgr_rte); struct session *session_manager_rte_get_evicted_session(struct session_manager_rte *sess_mgr_rte);
uint64_t session_manager_rte_scan_session(struct session_manager_rte *sess_mgr_rte, const struct session_filter *filter, uint64_t mached_sess_id[], uint64_t array_size); uint64_t session_manager_rte_scan_session(struct session_manager_rte *sess_mgr_rte, const struct session_filter *filter, uint64_t mached_sess_id[], uint64_t array_size);
void session_manager_rte_discard_session(struct session_manager_rte *sess_mgr_rte, struct session *sess);
void session_manager_rte_record_duplicated_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt); void session_manager_rte_record_duplicated_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt);

View File

@@ -47,7 +47,6 @@ global:
session_get_timestamp; session_get_timestamp;
session_get_stat; session_get_stat;
session_get_readable_addr; session_get_readable_addr;
session_set_discard;
session_get_exdata; session_get_exdata;
session_set_exdata; session_set_exdata;
@@ -58,6 +57,7 @@ global:
session_manager_new_session_exdata_index; session_manager_new_session_exdata_index;
session_manager_lookup_session_by_packet; session_manager_lookup_session_by_packet;
session_manager_lookup_session_by_id; session_manager_lookup_session_by_id;
session_manager_discard_session;
packet_exdata_to_session; packet_exdata_to_session;
packet_exdata_to_tcp_segment; packet_exdata_to_tcp_segment;