【修改】更新依赖的stellar头文件
This commit is contained in:
@@ -1,134 +1,151 @@
|
||||
#pragma once
|
||||
|
||||
#include "stellar.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
enum session_type
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
SESSION_TYPE_TCP,
|
||||
SESSION_TYPE_UDP,
|
||||
__SESSION_TYPE_MAX,
|
||||
};
|
||||
#endif
|
||||
|
||||
#include "stellar/packet.h"
|
||||
|
||||
enum session_state
|
||||
{
|
||||
SESSION_STATE_INVALID = 0,
|
||||
SESSION_STATE_OPENING = 1 ,
|
||||
SESSION_STATE_ACTIVE = 2,
|
||||
SESSION_STATE_CLOSING = 3,
|
||||
SESSION_STATE_CONTROL = 6,
|
||||
__SESSION_STATE_MAX,
|
||||
SESSION_STATE_INIT = 0,
|
||||
SESSION_STATE_OPENING = 1,
|
||||
SESSION_STATE_ACTIVE = 2,
|
||||
SESSION_STATE_CLOSING = 3,
|
||||
SESSION_STATE_DISCARD = 4,
|
||||
SESSION_STATE_CLOSED = 5,
|
||||
MAX_STATE = 6,
|
||||
};
|
||||
|
||||
enum session_type session_get_type(struct session *sess);
|
||||
enum session_type
|
||||
{
|
||||
SESSION_TYPE_TCP = 0x1,
|
||||
SESSION_TYPE_UDP = 0x2,
|
||||
};
|
||||
|
||||
enum session_direction
|
||||
{
|
||||
SESSION_DIRECTION_INBOUND = 0,
|
||||
SESSION_DIRECTION_OUTBOUND = 1,
|
||||
};
|
||||
|
||||
enum flow_type
|
||||
{
|
||||
FLOW_TYPE_NONE = -1,
|
||||
FLOW_TYPE_C2S = 0,
|
||||
FLOW_TYPE_S2C = 1,
|
||||
MAX_FLOW_TYPE = 2,
|
||||
};
|
||||
|
||||
enum closing_reason
|
||||
{
|
||||
CLOSING_BY_TIMEOUT = 0x1,
|
||||
CLOSING_BY_LRU_EVICTED = 0x2,
|
||||
CLOSING_BY_PORT_REUSE_EVICTED = 0x3,
|
||||
CLOSING_BY_CLIENT_FIN = 0x4,
|
||||
CLOSING_BY_CLIENT_RST = 0x5,
|
||||
CLOSING_BY_SERVER_FIN = 0x6,
|
||||
CLOSING_BY_SERVER_RST = 0x7,
|
||||
};
|
||||
|
||||
enum session_stat
|
||||
{
|
||||
// raw packet
|
||||
STAT_RAW_PACKETS_RECEIVED,
|
||||
STAT_RAW_BYTES_RECEIVED,
|
||||
|
||||
STAT_RAW_PACKETS_TRANSMITTED,
|
||||
STAT_RAW_BYTES_TRANSMITTED,
|
||||
|
||||
STAT_RAW_PACKETS_DROPPED,
|
||||
STAT_RAW_BYTES_DROPPED,
|
||||
|
||||
// duplicate packets
|
||||
STAT_DUPLICATE_PACKETS_BYPASS,
|
||||
STAT_DUPLICATE_BYTES_BYPASS,
|
||||
|
||||
// injected packet
|
||||
STAT_INJECTED_PACKETS_FAILED,
|
||||
STAT_INJECTED_PACKETS_SUCCESS,
|
||||
STAT_INJECTED_BYTES_SUCCESS,
|
||||
|
||||
// control packet
|
||||
STAT_CONTROL_PACKETS_RECEIVED, // TODO
|
||||
STAT_CONTROL_BYTES_RECEIVED, // TODO
|
||||
|
||||
STAT_CONTROL_PACKETS_TRANSMITTED,
|
||||
STAT_CONTROL_BYTES_TRANSMITTED,
|
||||
|
||||
STAT_CONTROL_PACKETS_DROPPED,
|
||||
STAT_CONTROL_BYTES_DROPPED,
|
||||
|
||||
// TCP segment
|
||||
STAT_TCP_SEGMENTS_RECEIVED,
|
||||
STAT_TCP_PAYLOADS_RECEIVED,
|
||||
|
||||
STAT_TCP_SEGMENTS_EXPIRED,
|
||||
STAT_TCP_PAYLOADS_EXPIRED,
|
||||
|
||||
STAT_TCP_SEGMENTS_RETRANSMIT,
|
||||
STAT_TCP_PAYLOADS_RETRANSMIT,
|
||||
|
||||
STAT_TCP_SEGMENTS_OVERLAP,
|
||||
STAT_TCP_PAYLOADS_OVERLAP,
|
||||
|
||||
STAT_TCP_SEGMENTS_NOSPACE,
|
||||
STAT_TCP_PAYLOADS_NOSPACE,
|
||||
|
||||
STAT_TCP_SEGMENTS_INORDER,
|
||||
STAT_TCP_PAYLOADS_INORDER,
|
||||
|
||||
STAT_TCP_SEGMENTS_REORDERED,
|
||||
STAT_TCP_PAYLOADS_REORDERED,
|
||||
|
||||
STAT_TCP_SEGMENTS_BUFFERED,
|
||||
STAT_TCP_PAYLOADS_BUFFERED,
|
||||
|
||||
STAT_TCP_SEGMENTS_RELEASED,
|
||||
STAT_TCP_PAYLOADS_RELEASED,
|
||||
|
||||
MAX_STAT,
|
||||
};
|
||||
|
||||
// realtime in milliseconds
|
||||
enum session_timestamp
|
||||
{
|
||||
SESSION_TIMESTAMP_START,
|
||||
SESSION_TIMESTAMP_LAST,
|
||||
MAX_TIMESTAMP,
|
||||
};
|
||||
|
||||
struct session;
|
||||
|
||||
#define SESSION_SEEN_C2S_FLOW (1 << 0)
|
||||
#define SESSION_SEEN_S2C_FLOW (1 << 1)
|
||||
int session_is_symmetric(struct session *sess, unsigned char *flag);
|
||||
int session_is_symmetric(const struct session *sess, unsigned char *flag);
|
||||
|
||||
long long session_get_client_isn(struct session *sess);
|
||||
long long session_get_server_isn(struct session *sess);
|
||||
int session_has_duplicate_traffic(const struct session *sess);
|
||||
enum session_type session_get_type(const struct session *sess);
|
||||
|
||||
#define SESSION_IS_TUNNLE_NON (0) /* default is 0, not tunnel; */
|
||||
#define SESSION_IS_TUNNLE_6OVER4 (1 << 0)
|
||||
#define SESSION_IS_TUNNLE_4OVER6 (1 << 1)
|
||||
#define SESSION_IS_TUNNLE_GRE (1 << 2)
|
||||
#define SESSION_IS_TUNNLE_IP_IN_IP (1 << 3)
|
||||
#define SESSION_IS_TUNNLE_PPTP (1 << 4)
|
||||
#define SESSION_IS_TUNNLE_L2TP (1 << 5)
|
||||
#define SESSION_IS_TUNNLE_TEREDO (1 << 6)
|
||||
#define SESSION_IS_TUNNLE_GTP (1 << 7)
|
||||
#define SESSION_IS_TUNNLE_SOCKS (1 << 8)
|
||||
#define SESSION_IS_TUNNLE_HTTP_PROXY (1 << 9)
|
||||
enum session_state session_get_current_state(const struct session *sess);
|
||||
const struct packet *session_get0_current_packet(const struct session *sess);
|
||||
|
||||
int session_is_outmost(struct session *sess, uint64_t *flag);
|
||||
int session_is_innermost(struct session *sess, uint64_t *flag);
|
||||
enum closing_reason session_get_closing_reason(const struct session *sess);
|
||||
enum session_direction session_get_direction(const struct session *sess);
|
||||
enum flow_type session_get_flow_type(const struct session *sess);
|
||||
const struct packet *session_get_first_packet(const struct session *sess, enum flow_type type);
|
||||
uint64_t session_get_id(const struct session *sess);
|
||||
uint64_t session_get_timestamp(const struct session *sess, enum session_timestamp type);
|
||||
uint64_t session_get_stat(const struct session *sess, enum flow_type type, enum session_stat stat);
|
||||
|
||||
#define SESSION_DIRECTION_IN 0
|
||||
#define SESSION_DIRECTION_OUT 1
|
||||
int session_get_direction(struct session *sess);
|
||||
const char *session_get0_readable_addr(const struct session *sess);
|
||||
|
||||
enum session_addr_type
|
||||
{
|
||||
SESSION_ADDR_TYPE_IPV4_TCP,
|
||||
SESSION_ADDR_TYPE_IPV4_UDP,
|
||||
SESSION_ADDR_TYPE_IPV6_TCP,
|
||||
SESSION_ADDR_TYPE_IPV6_UDP,
|
||||
SESSION_ADDR_TYPE_UNKNOWN,
|
||||
__SESSION_ADDR_TYPE_MAX,
|
||||
};
|
||||
struct session_addr_ipv4{
|
||||
uint32_t saddr; /* network order */
|
||||
uint32_t daddr; /* network order */
|
||||
uint16_t sport; /* network order */
|
||||
uint16_t dport; /* network order */
|
||||
};
|
||||
void session_set_discard(struct session *sess);
|
||||
|
||||
#include <netinet/in.h>
|
||||
#ifndef IPV6_ADDR_LEN
|
||||
#define IPV6_ADDR_LEN (sizeof(struct in6_addr))
|
||||
void session_set_exdata(struct session *sess, int idx, void *ex_ptr);
|
||||
void *session_get_exdata(const struct session *sess, int idx);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
struct session_addr_ipv6
|
||||
{
|
||||
uint8_t saddr[IPV6_ADDR_LEN] ;
|
||||
uint8_t daddr[IPV6_ADDR_LEN] ;
|
||||
uint16_t sport; /* network order */
|
||||
uint16_t dport; /* network order */
|
||||
};
|
||||
|
||||
struct session_addr
|
||||
{
|
||||
union
|
||||
{
|
||||
struct session_addr_ipv4 ipv4;
|
||||
struct session_addr_ipv6 ipv6;
|
||||
};
|
||||
};
|
||||
|
||||
struct session_addr *session_get0_addr(struct session *sess, enum session_addr_type *addr_type);
|
||||
|
||||
const char *session_get0_readable_addr(struct session *sess);
|
||||
const char *session_get0_current_payload(struct session *sess, size_t *payload_len);
|
||||
enum session_state session_get_current_state(struct session *sess);
|
||||
|
||||
int session_get_current_thread_id(struct session *sess);
|
||||
int session_get_current_plugin_id(struct session *sess);
|
||||
|
||||
/* ------------session------------------*/
|
||||
/* |l2|l3|l4|session payload| */
|
||||
const char *session_get0_current_l3_header(struct session *sess);
|
||||
const char *session_get0_current_l4_header(struct session *sess);
|
||||
|
||||
const char *session_get0_l2_l3_hdr(struct session *sess, int session_direction, size_t *l2_l3_hdr_len);
|
||||
|
||||
uint16_t *session_get0_segment_id_list(struct session *sess, int session_direction, size_t *sid_num);
|
||||
const char *session_get0_route_ctx(struct session *sess, int session_direction, size_t *route_ctx_len);
|
||||
|
||||
int session_set_session_id(struct session *sess, uint64_t session_id);
|
||||
int session_set_preappend_segment_id_list(struct session *sess, uint16_t *sid, size_t sid_num);
|
||||
|
||||
const struct packet *session_get0_current_packet(struct session *sess);
|
||||
|
||||
|
||||
//flow direction
|
||||
#define PACKET_DIRECTION_C2S 0
|
||||
#define PACKET_DIRECTION_S2C 1
|
||||
#define PACKET_DIRECTION_UNKNOWN 2
|
||||
int packet_get_direction(const struct packet *pkt);
|
||||
|
||||
//route direction
|
||||
#define PACKET_DIRECTION_INCOMING 0
|
||||
#define PACKET_DIRECTION_OUTGOING 1
|
||||
int packet_get_route_direction(const struct packet *pkt);
|
||||
|
||||
const char *packet_get0_data(const struct packet *pkt, size_t *data_len);
|
||||
int packet_arrive_time(const struct packet *pkt, struct timeval *ts);
|
||||
unsigned char packet_get_ip_protocol(struct packet *pkt);
|
||||
|
||||
void packet_drop(const struct packet *pkt);
|
||||
const char *packet_get0_readable_addr(struct packet *pkt);
|
||||
int packet_get_current_thread_id(struct packet *pkt);
|
||||
|
||||
struct session *packet_get_session(const struct packet *pkt);
|
||||
Reference in New Issue
Block a user