feature: session mananger publish ctrl message; Enhance session debugger module

This commit is contained in:
luwenpeng
2024-10-24 10:24:20 +08:00
parent 5c5a50929b
commit 1e71122521
9 changed files with 204 additions and 44 deletions

View File

@@ -54,7 +54,7 @@ struct session
UT_hash_handle hh1;
UT_hash_handle hh2;
UT_hash_handle hh3;
struct tuple6 tuple;
struct tuple6 tuple; // FLOW_TYPE_C2S tuple
char tuple_str[TUPLE6_STR_SIZE];
struct sids sids[MAX_FLOW_TYPE];
struct route_ctx route_ctx[MAX_FLOW_TYPE];

View File

@@ -106,10 +106,16 @@ static void on_packet_forward(enum packet_stage stage, struct packet *pkt, void
*/
uint64_t now_ms = clock_get_real_time_ms();
struct tuple6 key;
struct tcp_segment *seg = NULL;
struct session *sess = session_manager_runtime_lookup_session_by_packet(sess_mgr_rt, pkt);
if (sess == NULL)
{
if (packet_is_ctrl(pkt))
{
goto fast_path;
}
sess = session_manager_runtime_new_session(sess_mgr_rt, pkt, now_ms);
if (sess == NULL)
{
@@ -123,6 +129,11 @@ static void on_packet_forward(enum packet_stage stage, struct packet *pkt, void
}
else
{
if (packet_is_ctrl(pkt))
{
goto ctrl_path;
}
if (session_manager_runtime_update_session(sess_mgr_rt, sess, pkt, now_ms) == -1)
{
goto fast_path;
@@ -133,6 +144,21 @@ static void on_packet_forward(enum packet_stage stage, struct packet *pkt, void
}
}
ctrl_path:
session_set_current_packet(sess, pkt);
packet_get_innermost_tuple6(pkt, &key);
if (tuple6_cmp(session_get_tuple6(sess), &key) == 0)
{
session_set_flow_type(sess, FLOW_TYPE_C2S);
}
else
{
session_set_flow_type(sess, FLOW_TYPE_S2C);
}
packet_set_exdata(pkt, sess_mgr->schema->pkt_exdata_idx, sess);
mq_runtime_publish_message(mq_rt, sess_mgr->schema->topic_id_ctrl_pkt, sess);
return;
slow_path:
if (session_get_type(sess) == SESSION_TYPE_TCP)
{
@@ -146,11 +172,12 @@ slow_path:
{
mq_runtime_publish_message(mq_rt, sess_mgr->schema->topic_id_udp, sess);
}
packet_set_exdata(pkt, sess_mgr->schema->pkt_exdata_idx, sess);
return;
fast_path:
packet_set_exdata(pkt, sess_mgr->schema->pkt_exdata_idx, NULL);
return;
}
static void on_packet_output(enum packet_stage stage, struct packet *pkt, void *args)
@@ -163,18 +190,29 @@ static void on_packet_output(enum packet_stage stage, struct packet *pkt, void *
struct session *sess = (struct session *)packet_get_exdata(pkt, sess_mgr->schema->pkt_exdata_idx);
if (sess)
{
enum flow_type type = session_get_flow_type(sess);
struct tuple6 key;
enum flow_type flow = FLOW_TYPE_NONE;
packet_get_innermost_tuple6(pkt, &key);
if (tuple6_cmp(session_get_tuple6(sess), &key) == 0)
{
flow = FLOW_TYPE_C2S;
}
else
{
flow = FLOW_TYPE_S2C;
}
int is_ctrl = packet_is_ctrl(pkt);
uint16_t len = packet_get_raw_len(pkt);
switch (packet_get_action(pkt))
{
case PACKET_ACTION_DROP:
session_inc_stat(sess, type, (is_ctrl ? STAT_CONTROL_PACKETS_DROPPED : STAT_RAW_PACKETS_DROPPED), 1);
session_inc_stat(sess, type, (is_ctrl ? STAT_CONTROL_BYTES_DROPPED : STAT_RAW_BYTES_DROPPED), len);
session_inc_stat(sess, flow, (is_ctrl ? STAT_CONTROL_PACKETS_DROPPED : STAT_RAW_PACKETS_DROPPED), 1);
session_inc_stat(sess, flow, (is_ctrl ? STAT_CONTROL_BYTES_DROPPED : STAT_RAW_BYTES_DROPPED), len);
break;
case PACKET_ACTION_FORWARD:
session_inc_stat(sess, type, (is_ctrl ? STAT_CONTROL_PACKETS_TRANSMITTED : STAT_RAW_PACKETS_TRANSMITTED), 1);
session_inc_stat(sess, type, (is_ctrl ? STAT_CONTROL_BYTES_TRANSMITTED : STAT_RAW_BYTES_TRANSMITTED), len);
session_inc_stat(sess, flow, (is_ctrl ? STAT_CONTROL_PACKETS_TRANSMITTED : STAT_RAW_PACKETS_TRANSMITTED), 1);
session_inc_stat(sess, flow, (is_ctrl ? STAT_CONTROL_BYTES_TRANSMITTED : STAT_RAW_BYTES_TRANSMITTED), len);
break;
default:
assert(0);

View File

@@ -1102,6 +1102,7 @@ void session_manager_runtime_free_session(struct session_manager_runtime *sess_m
session_set_current_state(sess, SESSION_STATE_INIT);
session_set_current_packet(sess, NULL);
session_set_flow_type(sess, FLOW_TYPE_NONE);
session_init(sess);
session_pool_push(sess_mgr_rt->sess_pool, sess);
sess = NULL;
}