diff --git a/src/session/session.cpp b/src/session/session.cpp index 168c13e..cdea80b 100644 --- a/src/session/session.cpp +++ b/src/session/session.cpp @@ -88,6 +88,17 @@ enum session_type session_get_type(const struct session *sess) return sess->type; } +// closing reasion +void session_set_closing_reasion(struct session *sess, enum closing_reasion reasion) +{ + sess->closing_reasion = reasion; +} + +enum closing_reasion session_get_closing_reasion(const struct session *sess) +{ + return sess->closing_reasion; +} + // session metrics void session_inc_c2s_metrics(struct session *sess, uint64_t packets, uint64_t bytes) { @@ -388,6 +399,27 @@ static void udp_ex_data_tostring(uint64_t ex_data, char *buffer, size_t buffer_l } } +const char *session_closing_reasion_tostring(enum closing_reasion reasion) +{ + switch (reasion) + { + case CLOSING_BY_TIMEOUT: + return "CLOSING_BY_TIMEOUT"; + case CLOSING_BY_EVICTED: + return "CLOSING_BY_EVICTED"; + case CLOSING_BY_CLIENT_FIN: + return "CLOSING_BY_CLIENT_FIN"; + case CLOSING_BY_CLIENT_RST: + return "CLOSING_BY_CLIENT_RST"; + case CLOSING_BY_SERVER_FIN: + return "CLOSING_BY_SERVER_FIN"; + case CLOSING_BY_SERVER_RST: + return "CLOSING_BY_SERVER_RST"; + default: + return "unknown"; + } +} + const char *session_state_tostring(enum session_state state) { switch (state) @@ -445,6 +477,7 @@ void session_dump(struct session *sess) printf("session tuple6 dir : %s\n", session_dir_tostring(session_get_tuple6_dir(sess))); printf("session state : %s\n", session_state_tostring(session_get_state(sess))); printf("session type : %s\n", session_type_tostring(session_get_type(sess))); + printf("session closing reasion : %s\n", session_closing_reasion_tostring(session_get_closing_reasion(sess))); printf("session c2s packets : %" PRIu64 "\n", session_get_c2s_packets(sess)); printf("session c2s bytes : %" PRIu64 "\n", session_get_c2s_bytes(sess)); printf("session s2c packets : %" PRIu64 "\n", session_get_s2c_packets(sess)); diff --git a/src/session/session.h b/src/session/session.h index 26f1543..309c9ce 100644 --- a/src/session/session.h +++ b/src/session/session.h @@ -20,12 +20,6 @@ enum session_state SESSION_STATE_CLOSED, }; -enum session_action -{ - SESSION_ACTION_DISCARD, - SESSION_ACTION_FASTFORWARD, -}; - enum session_type { SESSION_TYPE_TCP = 0x1, @@ -39,6 +33,16 @@ enum session_dir SESSION_DIR_S2C = 2, }; +enum closing_reasion +{ + CLOSING_BY_TIMEOUT = 1, + CLOSING_BY_EVICTED = 2, + CLOSING_BY_CLIENT_FIN = 3, + CLOSING_BY_CLIENT_RST = 4, + CLOSING_BY_SERVER_FIN = 5, + CLOSING_BY_SERVER_RST = 6, +}; + struct session; /****************************************************************************** @@ -65,6 +69,10 @@ enum session_state session_get_state(const struct session *sess); void session_set_type(struct session *sess, enum session_type type); enum session_type session_get_type(const struct session *sess); +// closing reasion +void session_set_closing_reasion(struct session *sess, enum closing_reasion reasion); +enum closing_reasion session_get_closing_reasion(const struct session *sess); + // session metrics void session_inc_c2s_metrics(struct session *sess, uint64_t packets, uint64_t bytes); void session_inc_s2c_metrics(struct session *sess, uint64_t packets, uint64_t bytes); @@ -140,6 +148,7 @@ void session_run_expirecb(struct session *sess); * session dump ******************************************************************************/ +const char *session_closing_reasion_tostring(enum closing_reasion reasion); const char *session_state_tostring(enum session_state state); const char *session_type_tostring(enum session_type type); const char *session_dir_tostring(enum session_dir dir); diff --git a/src/session/session_private.h b/src/session/session_private.h index 0ab5fb5..18460a4 100644 --- a/src/session/session_private.h +++ b/src/session/session_private.h @@ -49,6 +49,9 @@ struct session // session type enum session_type type; + // closing reasion + enum closing_reasion closing_reasion; + // session metrics uint64_t c2s_bytes; uint64_t s2c_bytes;