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/infra/session_manager/session_manager_rte.h
luwenpeng c2e9275a9e remove session_manager_subscribe_xxx() API; convert session closing events to pseudo packets
when a session is closed, use the packet manager to create a pseudo packet,
    set the session to be closed as packet Exdata, and schedule it to the packet forwarding stage.
    when the pseudo packet free, the session will be free.
2024-11-19 18:28:40 +08:00

55 lines
2.2 KiB
C

#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include "tuple.h"
#include "stellar/session.h"
#include "session_manager_cfg.h"
struct session_filter
{
uint64_t cursor;
uint64_t count;
uint64_t limit;
enum session_type type;
enum session_state state;
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 sess_created_ts_in_ms;
uint64_t pkt_received_ts_in_ms;
};
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_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);
struct session_manager_stat *session_manager_rte_get_stat(struct session_manager_rte *sess_mgr_rte);
#ifdef __cplusplus
}
#endif