68 lines
2.6 KiB
C
68 lines
2.6 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C"
|
||
|
|
{
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#include "tuple.h"
|
||
|
|
#include "stellar/session.h"
|
||
|
|
|
||
|
|
enum session_scan_flags
|
||
|
|
{
|
||
|
|
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,
|
||
|
|
};
|
||
|
|
|
||
|
|
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
|
||
|
|
|
||
|
|
uint64_t create_time_ms[2]; // session create time range
|
||
|
|
uint64_t laspkt_time_ms[2]; // last packet time range
|
||
|
|
};
|
||
|
|
|
||
|
|
struct session_manager_rte;
|
||
|
|
struct session_manager_rte *session_manager_rte_new(const struct session_manager_cfg *sess_mgr_cfg, uint64_t now_ms);
|
||
|
|
void session_manager_rte_free(struct session_manager_rte *sess_mgr_rte);
|
||
|
|
|
||
|
|
struct session *session_manager_rte_new_session(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt, uint64_t now_ms);
|
||
|
|
void session_manager_rte_free_session(struct session_manager_rte *sess_mgr_rte, struct session *sess);
|
||
|
|
|
||
|
|
struct session *session_manager_rte_lookup_session_by_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt);
|
||
|
|
struct session *session_manager_rte_lookup_session_by_id(struct session_manager_rte *sess_mgr_rte, uint64_t sess_id);
|
||
|
|
int session_manager_rte_update_session(struct session_manager_rte *sess_mgr_rte, struct session *sess, const struct packet *pkt, uint64_t now_ms);
|
||
|
|
|
||
|
|
struct session *session_manager_rte_get_expired_session(struct session_manager_rte *sess_mgr_rte, uint64_t now_ms);
|
||
|
|
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);
|
||
|
|
|
||
|
|
void session_manager_rte_record_duplicated_packet(struct session_manager_rte *sess_mgr_rte, const struct packet *pkt);
|
||
|
|
|
||
|
|
struct session_manager_stat *session_manager_rte_get_stat(struct session_manager_rte *sess_mgr_rte);
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|