feature: add session monitor, support 'show session id/all/info' command

This commit is contained in:
luwenpeng
2024-11-07 19:12:51 +08:00
parent 50a841919d
commit d0a8685914
10 changed files with 1418 additions and 232 deletions

View File

@@ -9,37 +9,24 @@ extern "C"
#include "stellar/session.h"
#include "session_manager_cfg.h"
enum session_scan_flags
struct session_filter
{
SESSION_SCAN_TYPE = 1 << 0,
SESSION_SCAN_STATE = 1 << 1,
SESSION_SCAN_SIP = 1 << 2,
SESSION_SCAN_DIP = 1 << 3,
SESSION_SCAN_SPORT = 1 << 4,
SESSION_SCAN_DPORT = 1 << 5,
SESSION_SCAN_CREATE_TIME = 1 << 6,
SESSION_SCAN_LASPKT_TIME = 1 << 7,
};
uint64_t cursor;
uint64_t count;
uint64_t limit;
struct session_scan_opts
{
// required
uint32_t flags;
uint32_t cursor;
uint32_t count;
// optional
enum session_type type;
enum session_state state;
uint32_t addr_family; // AF_INET or AF_INET6
union ip_address src_addr[2]; // network byte order
union ip_address dst_addr[2]; // network byte order
uint16_t src_port; // network byte order
uint16_t dst_port; // network byte order
uint32_t src_family; // AF_INET or AF_INET6
uint32_t dst_family; // AF_INET or AF_INET6
union ip_address src_addr_range[2]; // network byte order
union ip_address dst_addr_range[2]; // network byte order
uint16_t src_port; // network byte order
uint16_t dst_port; // network byte order
uint64_t create_time_ms[2]; // session create time range
uint64_t laspkt_time_ms[2]; // last packet time range
uint64_t sess_created_ts_in_ms;
uint64_t pkt_received_ts_in_ms;
};
struct session_manager_rte;
@@ -57,7 +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_clean_session(struct session_manager_rte *sess_mgr_rte, uint64_t now_ms, struct session *cleaned_sess_ptr[], uint64_t array_size);
uint64_t session_manager_rte_scan_session(struct session_manager_rte *sess_mgr_rte, const struct session_scan_opts *opts, 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_record_duplicated_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt);