refactor: change session key from address list to six tuple

This commit is contained in:
luwenpeng
2023-12-14 15:23:13 +08:00
parent 5620ac211b
commit a232045764
14 changed files with 773 additions and 563 deletions

View File

@@ -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);