This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar/src/session/session_manager.h

102 lines
3.3 KiB
C
Raw Normal View History

2023-12-13 19:20:34 +08:00
#ifndef _SESSION_MANAGER_H
#define _SESSION_MANAGER_H
#ifdef __cpluscplus
extern "C"
{
#endif
#include "session.h"
2024-01-09 18:03:24 +08:00
#ifndef SESSION_LOG_ERROR
#define SESSION_LOG_ERROR(format, ...) \
fprintf(stderr, "ERROR (session), " format "\n", ##__VA_ARGS__);
2023-12-19 10:47:26 +08:00
#endif
2024-01-09 18:03:24 +08:00
#ifndef SESSION_LOG_DEBUG
#define SESSION_LOG_DEBUG(format, ...) \
fprintf(stderr, "DEBUG (session), " format "\n", ##__VA_ARGS__);
2023-12-19 10:47:26 +08:00
#endif
2023-12-13 19:20:34 +08:00
struct session_manager_config
{
// max session number
uint64_t max_tcp_session_num;
uint64_t max_udp_session_num;
// session overload
uint8_t tcp_overload_evict_old_sess; // 1: evict old session, 0: bypass new session
uint8_t udp_overload_evict_old_sess; // 1: evict old session, 0: bypass new session
// TCP timeout
uint64_t tcp_timeout_init; // seconds, Range: 1-60
uint64_t tcp_timeout_handshake; // seconds, Range: 1-60
uint64_t tcp_timeout_data; // seconds, Range: 1-15,999,999
uint64_t tcp_timeout_half_closed; // seconds, Range: 1-604,800
uint64_t tcp_timeout_time_wait; // seconds, Range: 1-600
uint64_t tcp_timeout_discard; // seconds, Range: 1-15,999,999
2023-12-13 19:20:34 +08:00
// UDP timeout
uint64_t udp_timeout_data; // seconds, Range: 1-15,999,999
2023-12-19 10:47:26 +08:00
// TCP duplicate packet filter
uint8_t tcp_dupkt_filter_enable;
uint64_t tcp_dupkt_filter_capacity;
uint64_t tcp_dupkt_filter_timeout; // seconds, Range: 1-60
double tcp_dupkt_filter_error_rate;
// UDP eviction filter
uint8_t udp_eviction_filter_enable;
uint64_t udp_eviction_filter_capacity;
uint64_t udp_eviction_filter_timeout; // seconds, Range: 1-60
double udp_eviction_filter_error_rate;
};
struct session_manager;
struct session_manager *session_manager_create(struct session_manager_config *config);
void session_manager_destroy(struct session_manager *mgr);
2023-12-13 19:20:34 +08:00
// only use the packet six-tuple to find the session, not update it
struct session *session_manager_lookup_sesssion(struct session_manager *mgr, const struct packet *pkt);
/*
* Return NULL in the following cases:
* 1.not a TCP or UDP packet
* 2.TCP packet miss session but no syn packet seen
* 3.TCP duplicate packet
* 4.TCP discards packets
* 5.UDP evict packet
* pakcet will not update the session and needs to be fast forwarded
*/
struct session *session_manager_update_session(struct session_manager *mgr, const struct packet *pkt);
struct session *session_manager_get_expired_session(struct session_manager *mgr);
struct session *session_manager_get_evicted_session(struct session_manager *mgr);
// return 0: have already timeout session
// return >0: next expire interval
uint64_t session_manager_get_expire_interval(struct session_manager *mgr);
2023-12-19 10:47:26 +08:00
struct session_counter
{
uint64_t tcp_sess_num;
uint64_t tcp_opening_sess_num;
uint64_t tcp_active_sess_num;
uint64_t tcp_closing_sess_num;
uint64_t udp_sess_num;
uint64_t udp_opening_sess_num;
uint64_t udp_active_sess_num;
uint64_t udp_closing_sess_num;
uint64_t tcp_overload_evict_old_sess_num;
uint64_t tcp_overload_evict_new_sess_num;
uint64_t udp_overload_evict_old_sess_num;
uint64_t udp_overload_evict_new_sess_num;
};
void session_manager_get_session_counter(struct session_manager *mgr, struct session_counter *out);
void session_manager_print_status(struct session_manager *mgr);
2023-12-13 19:20:34 +08:00
#ifdef __cpluscplus
}
#endif
#endif