summaryrefslogtreecommitdiff
path: root/dependence/include/stellar/session.h
blob: 3f4f4d305949fb7aacce9da322eccd1392689d43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#pragma once

#include "stellar.h"

#include <stdint.h>
#include <stddef.h>

enum session_type
{
	SESSION_TYPE_TCP,
	SESSION_TYPE_UDP,
	__SESSION_TYPE_MAX,
};

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,
};

enum session_type session_get_type(struct session *sess);

#define SESSION_SEEN_C2S_FLOW (1 << 0)
#define SESSION_SEEN_S2C_FLOW (1 << 1)
int session_is_symmetric(struct session *sess, unsigned char *flag);

long long session_get_client_isn(struct session *sess);
long long session_get_server_isn(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)

int session_is_outmost(struct session *sess, uint64_t *flag);
int session_is_innermost(struct session *sess, uint64_t *flag);

#define SESSION_DIRECTION_IN 0
#define SESSION_DIRECTION_OUT 1
int  session_get_direction(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 */
};

#include <netinet/in.h>
#ifndef IPV6_ADDR_LEN
#define IPV6_ADDR_LEN	(sizeof(struct in6_addr))
#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);