diff --git a/include/stellar/session.h b/include/stellar/session.h index f47d6b5..c66cb3d 100644 --- a/include/stellar/session.h +++ b/include/stellar/session.h @@ -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_stat(const struct session *sess, enum flow_type type, enum session_stat stat); 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_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); 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); +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_output(struct packet *pkt, struct module *mod); diff --git a/infra/session_manager/session_internal.h b/infra/session_manager/session_internal.h index ec8a0b8..e6c400b 100644 --- a/infra/session_manager/session_internal.h +++ b/infra/session_manager/session_internal.h @@ -68,7 +68,6 @@ struct session enum session_type sess_type; enum session_state state; enum closing_reason reason; - struct session_manager_rte *sess_mgr_rte; struct session_manager_stat *sess_mgr_stat; }; diff --git a/infra/session_manager/session_manager.c b/infra/session_manager/session_manager.c index 16a8b6a..acf73b0 100644 --- a/infra/session_manager/session_manager.c +++ b/infra/session_manager/session_manager.c @@ -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); } +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) { return (struct session *)packet_get_exdata(pkt, sess_mgr->pkt_ex_to_get_sess); diff --git a/infra/session_manager/session_manager_rte.c b/infra/session_manager/session_manager_rte.c index c3eb668..c00b661 100644 --- a/infra/session_manager/session_manager_rte.c +++ b/infra/session_manager/session_manager_rte.c @@ -32,7 +32,10 @@ struct session_manager_rte struct session_manager_cfg cfg; 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; struct snowflake *sf; }; @@ -587,7 +590,6 @@ static struct session *session_manager_rte_new_tcp_session(struct session_manage return NULL; } session_init(sess); - sess->sess_mgr_rte = sess_mgr_rte; sess->sess_mgr_stat = &sess_mgr_rte->stat; 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; } session_init(sess); - sess->sess_mgr_rte = sess_mgr_rte; 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)); @@ -1160,22 +1161,8 @@ uint64_t session_manager_rte_scan_session(struct session_manager_rte *sess_mgr_r 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_state curr_state = session_get_current_state(sess); enum session_state next_state = session_transition_run(curr_state, USER_CLOSE); @@ -1197,3 +1184,16 @@ void session_set_discard(struct session *sess) 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; +} \ No newline at end of file diff --git a/infra/session_manager/session_manager_rte.h b/infra/session_manager/session_manager_rte.h index 9a3e9e5..30afd67 100644 --- a/infra/session_manager/session_manager_rte.h +++ b/infra/session_manager/session_manager_rte.h @@ -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); 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); diff --git a/infra/version.map b/infra/version.map index 2bc8950..4cbe785 100644 --- a/infra/version.map +++ b/infra/version.map @@ -47,7 +47,6 @@ global: session_get_timestamp; session_get_stat; session_get_readable_addr; - session_set_discard; session_get_exdata; session_set_exdata; @@ -58,6 +57,7 @@ global: session_manager_new_session_exdata_index; session_manager_lookup_session_by_packet; session_manager_lookup_session_by_id; + session_manager_discard_session; packet_exdata_to_session; packet_exdata_to_tcp_segment;