diff options
| author | luwenpeng <[email protected]> | 2023-12-15 16:34:53 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2023-12-15 16:35:11 +0800 |
| commit | 7653d646d31c546ea2730bc93ddd79ad6fef4c81 (patch) | |
| tree | 2cba8bda6b1cf2d0d10c00a74eceedf6358d0b47 /src/session/session.cpp | |
| parent | 90a6936fd627e2f63a26e7161012723a5063392d (diff) | |
Add tuple2 & tuple4 & tuple5 & tuple6
Diffstat (limited to 'src/session/session.cpp')
| -rw-r--r-- | src/session/session.cpp | 141 |
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; } |
