2023-12-11 16:35:26 +08:00
|
|
|
/*
|
|
|
|
|
* The current file is private to the plugin, and pulgin can only use session.h
|
|
|
|
|
* The current file can only be used by session.cpp/session_pool.cpp/session_table.cpp
|
|
|
|
|
*/
|
|
|
|
|
#ifndef _SESSION_PRIVATE_H
|
|
|
|
|
#define _SESSION_PRIVATE_H
|
|
|
|
|
|
|
|
|
|
#ifdef __cpluscplus
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
|
|
|
|
|
2023-12-13 19:20:34 +08:00
|
|
|
#include "timeout.h"
|
2023-12-11 16:35:26 +08:00
|
|
|
#include "uthash.h"
|
|
|
|
|
#include "session.h"
|
|
|
|
|
|
|
|
|
|
#define EX_DATA_MAX_COUNT 128
|
|
|
|
|
#define SESSION_EVENT_QUEUE_SIZE 256
|
|
|
|
|
|
2023-12-19 10:47:26 +08:00
|
|
|
enum tcp_ex_data
|
|
|
|
|
{
|
|
|
|
|
// HANDSHAKE
|
|
|
|
|
TCP_SYN_RECVED = 1 << 0,
|
|
|
|
|
TCP_SYNACK_RECVED = 1 << 1,
|
|
|
|
|
TCP_ACK_RECVED = 1 << 2,
|
|
|
|
|
// ESTABLISHED
|
|
|
|
|
TCP_C2S_PAYLOAD_RECVED = 1 << 3,
|
|
|
|
|
TCP_S2C_PAYLOAD_RECVED = 1 << 4,
|
|
|
|
|
// FIN
|
|
|
|
|
TCP_C2S_FIN_RECVED = 1 << 5,
|
|
|
|
|
TCP_S2C_FIN_RECVED = 1 << 6,
|
|
|
|
|
// RST
|
|
|
|
|
TCP_C2S_RST_RECVED = 1 << 7,
|
|
|
|
|
TCP_S2C_RST_RECVED = 1 << 8,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum udp_ex_data
|
|
|
|
|
{
|
|
|
|
|
UDP_C2S_RECVED = 1 << 0,
|
|
|
|
|
UDP_S2C_RECVED = 1 << 1,
|
|
|
|
|
};
|
|
|
|
|
|
2023-12-11 16:35:26 +08:00
|
|
|
struct event_queue
|
|
|
|
|
{
|
|
|
|
|
uint32_t head_idx;
|
|
|
|
|
uint32_t tail_idx;
|
|
|
|
|
uint32_t events[SESSION_EVENT_QUEUE_SIZE];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct session
|
|
|
|
|
{
|
2023-12-14 15:23:13 +08:00
|
|
|
// session id
|
|
|
|
|
uint64_t id;
|
|
|
|
|
|
2023-12-11 16:35:26 +08:00
|
|
|
// session state
|
|
|
|
|
enum session_state state;
|
|
|
|
|
|
|
|
|
|
// session type
|
|
|
|
|
enum session_type type;
|
|
|
|
|
|
|
|
|
|
// session metrics
|
|
|
|
|
uint64_t c2s_bytes;
|
|
|
|
|
uint64_t s2c_bytes;
|
|
|
|
|
uint64_t c2s_packets;
|
|
|
|
|
uint64_t s2c_packets;
|
|
|
|
|
|
|
|
|
|
// session metadata
|
|
|
|
|
struct metadata c2s_1st_md;
|
|
|
|
|
struct metadata s2c_1st_md;
|
|
|
|
|
|
|
|
|
|
// session timestamp
|
|
|
|
|
uint64_t create_time;
|
|
|
|
|
uint64_t last_time;
|
|
|
|
|
|
2023-12-15 11:20:05 +08:00
|
|
|
/******************************
|
|
|
|
|
* Session Current Packet
|
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
// session current packet
|
2023-12-15 16:34:53 +08:00
|
|
|
const struct packet *cur_pkt;
|
2023-12-15 11:20:05 +08:00
|
|
|
enum session_dir cur_dir;
|
|
|
|
|
|
2023-12-11 16:35:26 +08:00
|
|
|
/******************************
|
|
|
|
|
* Session Ev Queue Zone
|
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
struct event_queue events;
|
|
|
|
|
|
|
|
|
|
/******************************
|
|
|
|
|
* Session Ex Data Zone
|
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
void *ex_data[EX_DATA_MAX_COUNT];
|
|
|
|
|
|
|
|
|
|
/******************************
|
|
|
|
|
* Session Timer Zone
|
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
// session timer
|
2023-12-12 18:41:53 +08:00
|
|
|
struct timeout timeout;
|
2023-12-13 19:20:34 +08:00
|
|
|
session_expire_cb expire_cb;
|
|
|
|
|
void *expire_arg;
|
|
|
|
|
uint64_t expire_abs_ts;
|
2023-12-11 16:35:26 +08:00
|
|
|
|
|
|
|
|
/******************************
|
|
|
|
|
* Session Pool Zone
|
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
// session pool recycle handle
|
2023-12-13 17:56:27 +08:00
|
|
|
struct session *next_free_ptr;
|
2023-12-11 16:35:26 +08:00
|
|
|
|
|
|
|
|
/******************************
|
|
|
|
|
* Session Table Zone
|
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
// session table key
|
2023-12-15 16:34:53 +08:00
|
|
|
struct tuple6 tuple;
|
2023-12-19 10:47:26 +08:00
|
|
|
enum session_dir tuple_dir;
|
2023-12-11 16:35:26 +08:00
|
|
|
|
2023-12-13 17:56:27 +08:00
|
|
|
struct session *next_ptr;
|
|
|
|
|
struct session *prev_ptr;
|
|
|
|
|
|
2023-12-11 16:35:26 +08:00
|
|
|
// session table handle
|
2023-12-14 15:23:13 +08:00
|
|
|
UT_hash_handle hh;
|
2023-12-13 17:56:27 +08:00
|
|
|
|
|
|
|
|
/******************************
|
2023-12-19 10:47:26 +08:00
|
|
|
* Session Queue Zone
|
2023-12-13 17:56:27 +08:00
|
|
|
******************************/
|
|
|
|
|
|
|
|
|
|
struct session *next_ready_ptr;
|
2023-12-11 16:35:26 +08:00
|
|
|
};
|
|
|
|
|
|
2023-12-19 10:47:26 +08:00
|
|
|
// tcp_builtin_ex = session_get_ex_new_index("tcp_builtin_ex", NULL, NULL);
|
|
|
|
|
// udp_builtin_ex = session_get_ex_new_index("udp_builtin_ex", NULL, NULL);
|
|
|
|
|
extern uint8_t tcp_builtin_ex;
|
|
|
|
|
extern uint8_t udp_builtin_ex;
|
|
|
|
|
|
2023-12-11 16:35:26 +08:00
|
|
|
#ifdef __cpluscplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|