Add tuple2 & tuple4 & tuple5 & tuple6
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
#include <assert.h>
|
||||
|
||||
#include "crc32_hash.h"
|
||||
#include "session_private.h"
|
||||
|
||||
#define EX_KEY_MAX_LEN 64
|
||||
@@ -66,134 +65,6 @@ static bool event_queue_pop(struct event_queue *queue, uint32_t *event)
|
||||
return true;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* session key
|
||||
******************************************************************************/
|
||||
|
||||
uint32_t session_key_hash(const struct session_key *key)
|
||||
{
|
||||
uint32_t hash = crc32_hash(&key->security_zone, sizeof(key->security_zone), key->ip_proto);
|
||||
|
||||
if (key->ip_type == IP_TYPE_V4)
|
||||
{
|
||||
uint32_t src_addr_hash = crc32_hash(&key->src_addr.v4, sizeof(key->src_addr.v4), hash);
|
||||
uint32_t dst_addr_hash = crc32_hash(&key->dst_addr.v4, sizeof(key->dst_addr.v4), hash);
|
||||
hash = src_addr_hash + dst_addr_hash;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t src_addr_hash = crc32_hash(&key->src_addr.v6, sizeof(key->src_addr.v6), hash);
|
||||
uint32_t dst_addr_hash = crc32_hash(&key->dst_addr.v6, sizeof(key->dst_addr.v6), hash);
|
||||
hash = src_addr_hash + dst_addr_hash;
|
||||
}
|
||||
|
||||
uint32_t src_port_hash = crc32_hash(&key->src_port, sizeof(key->src_port), hash);
|
||||
uint32_t dst_port_hash = crc32_hash(&key->dst_port, sizeof(key->dst_port), hash);
|
||||
hash = src_port_hash + dst_port_hash;
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
// return 0: equal
|
||||
// return -1: not equal
|
||||
int session_key_cmp(const struct session_key *key1, const struct session_key *key2)
|
||||
{
|
||||
if (key1->ip_type != key2->ip_type)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (key1->src_port != key2->src_port)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (key1->dst_port != key2->dst_port)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (key1->ip_proto != key2->ip_proto)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (key1->security_zone != key2->security_zone)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (key1->ip_type == IP_TYPE_V4)
|
||||
{
|
||||
if (key1->src_addr.v4.s_addr != key2->src_addr.v4.s_addr)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (key1->dst_addr.v4.s_addr != key2->dst_addr.v4.s_addr)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (memcmp(&key1->src_addr.v6, &key2->src_addr.v6, sizeof(key1->src_addr.v6)) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (memcmp(&key1->dst_addr.v6, &key2->dst_addr.v6, sizeof(key1->dst_addr.v6)) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void session_key_reverse(const struct session_key *in, struct session_key *out)
|
||||
{
|
||||
out->ip_type = in->ip_type;
|
||||
out->src_port = in->dst_port;
|
||||
out->dst_port = in->src_port;
|
||||
out->ip_proto = in->ip_proto;
|
||||
out->security_zone = in->security_zone;
|
||||
|
||||
if (in->ip_type == IP_TYPE_V4)
|
||||
{
|
||||
out->src_addr.v4.s_addr = in->dst_addr.v4.s_addr;
|
||||
out->dst_addr.v4.s_addr = in->src_addr.v4.s_addr;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(&out->src_addr.v6, &in->dst_addr.v6, sizeof(in->dst_addr.v6));
|
||||
memcpy(&out->dst_addr.v6, &in->src_addr.v6, sizeof(in->src_addr.v6));
|
||||
}
|
||||
}
|
||||
|
||||
void session_key_tostring(const struct session_key *key, char *buf, uint32_t buf_len)
|
||||
{
|
||||
char src_addr[INET6_ADDRSTRLEN] = {0};
|
||||
char dst_addr[INET6_ADDRSTRLEN] = {0};
|
||||
|
||||
if (key->ip_type == IP_TYPE_V4)
|
||||
{
|
||||
inet_ntop(AF_INET, &key->src_addr.v4, src_addr, sizeof(src_addr));
|
||||
inet_ntop(AF_INET, &key->dst_addr.v4, dst_addr, sizeof(dst_addr));
|
||||
}
|
||||
else
|
||||
{
|
||||
inet_ntop(AF_INET6, &key->src_addr.v6, src_addr, sizeof(src_addr));
|
||||
inet_ntop(AF_INET6, &key->dst_addr.v6, dst_addr, sizeof(dst_addr));
|
||||
}
|
||||
|
||||
snprintf(buf, buf_len, "%s:%u -> %s:%u, proto: %u, zone: %lu",
|
||||
src_addr, ntohs(key->src_port),
|
||||
dst_addr, ntohs(key->dst_port),
|
||||
key->ip_proto,
|
||||
key->security_zone);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* session
|
||||
******************************************************************************/
|
||||
@@ -215,15 +86,15 @@ uint64_t session_get_id(struct session *sess)
|
||||
return sess->id;
|
||||
}
|
||||
|
||||
// session key
|
||||
void session_set_key(struct session *sess, struct session_key *key)
|
||||
// session tuple6
|
||||
void session_set_tuple6(struct session *sess, struct tuple6 *tuple)
|
||||
{
|
||||
memcpy(&sess->key, key, sizeof(struct session_key));
|
||||
memcpy(&sess->tuple, tuple, sizeof(struct tuple6));
|
||||
}
|
||||
|
||||
struct session_key *session_get0_key(struct session *sess)
|
||||
struct tuple6 *session_get0_tuple6(struct session *sess)
|
||||
{
|
||||
return &sess->key;
|
||||
return &sess->tuple;
|
||||
}
|
||||
|
||||
// session state
|
||||
@@ -341,7 +212,7 @@ void session_set0_cur_pkt(struct session *sess, const struct packet *pkt)
|
||||
sess->cur_pkt = pkt;
|
||||
}
|
||||
|
||||
struct packet *session_get0_cur_pkt(struct session *sess)
|
||||
const struct packet *session_get0_cur_pkt(struct session *sess)
|
||||
{
|
||||
return sess->cur_pkt;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user