refactor: change session key from address list to six tuple
This commit is contained in:
@@ -7,22 +7,23 @@ extern "C"
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "session_address.h"
|
||||
#include <arpa/inet.h>
|
||||
|
||||
enum session_state
|
||||
{
|
||||
SESSION_STATE_NONE = 0,
|
||||
SESSION_STATE_INIT = 0,
|
||||
SESSION_STATE_OPENING,
|
||||
SESSION_STATE_ACTIVE,
|
||||
SESSION_STATE_CLOSING,
|
||||
SESSION_STATE_DISCARD,
|
||||
SESSION_STATE_CLOSING,
|
||||
SESSION_STATE_CLOSED,
|
||||
};
|
||||
|
||||
enum session_type
|
||||
{
|
||||
SESSION_TYPE_NONE = 0,
|
||||
SESSION_TYPE_TCP,
|
||||
SESSION_TYPE_TCP_STREAM,
|
||||
SESSION_TYPE_UDP,
|
||||
};
|
||||
|
||||
@@ -32,14 +33,37 @@ enum session_event
|
||||
SESSION_EVENT_OPENING,
|
||||
SESSION_EVENT_ACTIVE,
|
||||
SESSION_EVENT_CLOSING,
|
||||
SESSION_EVENT_DISCARD,
|
||||
SESSION_EVENT_TIMEOUT,
|
||||
|
||||
// Add new event before SESSION_EVENT_MAX
|
||||
|
||||
SESSION_EVENT_MAX,
|
||||
};
|
||||
|
||||
union ip_address
|
||||
{
|
||||
struct in_addr v4; /* network order */
|
||||
struct in6_addr v6; /* network order */
|
||||
};
|
||||
|
||||
enum ip_type
|
||||
{
|
||||
IP_TYPE_V4,
|
||||
IP_TYPE_V6,
|
||||
};
|
||||
|
||||
struct session_key
|
||||
{
|
||||
enum ip_type ip_type;
|
||||
|
||||
// six tuple
|
||||
union ip_address src_addr; /* network order */
|
||||
union ip_address dst_addr; /* network order */
|
||||
uint16_t src_port; /* network order */
|
||||
uint16_t dst_port; /* network order */
|
||||
uint16_t ip_proto; /* network order */
|
||||
uint64_t security_zone;
|
||||
};
|
||||
|
||||
struct metadata
|
||||
{
|
||||
char data[64]; // TODO
|
||||
@@ -47,6 +71,15 @@ struct metadata
|
||||
|
||||
struct session;
|
||||
|
||||
/******************************************************************************
|
||||
* session key
|
||||
******************************************************************************/
|
||||
|
||||
uint32_t session_key_hash(const struct session_key *key);
|
||||
int session_key_cmp(const struct session_key *key1, const struct session_key *key2);
|
||||
void session_key_reverse(const struct session_key *in, struct session_key *out);
|
||||
void session_key_tostring(const struct session_key *key, char *buf, uint32_t buf_len);
|
||||
|
||||
/******************************************************************************
|
||||
* session base info
|
||||
******************************************************************************/
|
||||
@@ -57,9 +90,9 @@ void session_init(struct session *sess);
|
||||
void session_set_id(struct session *sess, uint64_t id);
|
||||
uint64_t session_get_id(struct session *sess);
|
||||
|
||||
// session address
|
||||
void session_set_address(struct session *sess, struct session_address *addr);
|
||||
struct session_address *session_get0_address(struct session *sess);
|
||||
// session key
|
||||
void session_set_key(struct session *sess, struct session_key *key);
|
||||
struct session_key *session_get0_key(struct session *sess);
|
||||
|
||||
// session state
|
||||
void session_set_state(struct session *sess, enum session_state state);
|
||||
|
||||
Reference in New Issue
Block a user