summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/stellar/session.h2
-rw-r--r--infra/session_manager/session_internal.h1
-rw-r--r--infra/session_manager/session_manager.c10
-rw-r--r--infra/session_manager/session_manager_rte.c36
-rw-r--r--infra/session_manager/session_manager_rte.h1
-rw-r--r--infra/version.map2
6 files changed, 31 insertions, 21 deletions
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)
-{
- 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)
+void session_manager_rte_discard_session(struct session_manager_rte *sess_mgr_rte, struct session *sess)
{
- 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;