summaryrefslogtreecommitdiff
path: root/src/session/session.cpp
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2023-12-15 16:34:53 +0800
committerluwenpeng <[email protected]>2023-12-15 16:35:11 +0800
commit7653d646d31c546ea2730bc93ddd79ad6fef4c81 (patch)
tree2cba8bda6b1cf2d0d10c00a74eceedf6358d0b47 /src/session/session.cpp
parent90a6936fd627e2f63a26e7161012723a5063392d (diff)
Add tuple2 & tuple4 & tuple5 & tuple6
Diffstat (limited to 'src/session/session.cpp')
-rw-r--r--src/session/session.cpp141
1 files changed, 6 insertions, 135 deletions
diff --git a/src/session/session.cpp b/src/session/session.cpp
index baa4721..0fbd434 100644
--- a/src/session/session.cpp
+++ b/src/session/session.cpp
@@ -1,6 +1,5 @@
#include <assert.h>
-#include "crc32_hash.h"
#include "session_private.h"
#define EX_KEY_MAX_LEN 64
@@ -67,134 +66,6 @@ static bool event_queue_pop(struct event_queue *queue, uint32_t *event)
}
/******************************************************************************
- * 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;
}