summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2023-11-13 16:56:31 +0800
committerluwenpeng <[email protected]>2023-11-14 18:04:02 +0800
commitb4c688c87c30b3f71f449a892c102f715e724bcb (patch)
tree471e899cf7ccec160a6bbc9e3dd66882becd3322 /platform
parent07f41fc29816cc30712f93f2d41064c5be616a6a (diff)
重构Packet Parser
Diffstat (limited to 'platform')
-rw-r--r--platform/include/policy.h4
-rw-r--r--platform/src/packet_io.cpp52
-rw-r--r--platform/src/policy.cpp6
-rw-r--r--platform/test/gtest_policy.cpp30
4 files changed, 47 insertions, 45 deletions
diff --git a/platform/include/policy.h b/platform/include/policy.h
index 50e6de5..e633478 100644
--- a/platform/include/policy.h
+++ b/platform/include/policy.h
@@ -7,7 +7,7 @@ extern "C"
#endif
#include "utils.h"
-#include "data_packet.h"
+#include "packet.h"
#include <linux/if_ether.h>
enum traffic_type
@@ -138,7 +138,7 @@ void policy_enforcer_destory(struct policy_enforcer *enforcer);
// return -1 : error
int policy_enforcer_register(struct policy_enforcer *enforcer);
int policy_enforce_chaining_size(struct policy_enforcer *enforcer);
-void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct selected_chainings *chainings, struct session_ctx *s_ctx, struct data_packet *data_pkt, uint64_t rule_id, int dir_is_i2e);
+void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct selected_chainings *chainings, struct session_ctx *s_ctx, struct packet *data_pkt, uint64_t rule_id, int dir_is_i2e);
#ifdef __cpluscplus
}
diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp
index 332d76e..13a68f5 100644
--- a/platform/src/packet_io.cpp
+++ b/platform/src/packet_io.cpp
@@ -66,6 +66,15 @@ struct packet_io
* metadata
******************************************************************************/
+void sce_packet_get_innermost_tuple(const struct packet *handler, struct four_tuple *tuple)
+{
+ memset(tuple, 0, sizeof(struct four_tuple));
+ if (packet_get_innermost_four_tuple(handler, tuple) == -1)
+ {
+ packet_get_innermost_two_tuple(handler, &tuple->two_tuple);
+ }
+}
+
// return 0 : success
// return -1 : error
int mbuff_get_metadata(marsio_buff_t *rx_buff, struct metadata *meta)
@@ -349,14 +358,10 @@ static struct session_ctx *data_packet_search_session(struct session_table *tabl
{
struct four_tuple inner_addr;
struct four_tuple reverse_addr;
- struct data_packet data_pkt;
+ struct packet data_pkt;
- memset(&inner_addr, 0, sizeof(struct four_tuple));
- memset(&reverse_addr, 0, sizeof(struct four_tuple));
-
- data_packet_parse(&data_pkt, (const void *)raw_data, raw_len, 0);
-
- data_packet_get_innermost_four_tuple(&data_pkt, &inner_addr);
+ packet_parse(&data_pkt, raw_data, raw_len);
+ sce_packet_get_innermost_tuple(&data_pkt, &inner_addr);
four_tuple_reverse(&inner_addr, &reverse_addr);
struct session_node *node = session_table_search_by_id(table, session_id);
@@ -368,7 +373,7 @@ static struct session_ctx *data_packet_search_session(struct session_table *tabl
struct session_ctx *session_ctx = (struct session_ctx *)node->value;
if (memcmp(&session_ctx->inner_tuple4, &inner_addr, sizeof(struct four_tuple)) != 0 && memcmp(&session_ctx->inner_tuple4, &reverse_addr, sizeof(struct four_tuple)) != 0)
{
- char *addr_str = four_tuple_to_string(&inner_addr);
+ char *addr_str = four_tuple_tostring(&inner_addr);
LOG_ERROR("%s: unexpected raw packet, session %lu expected address tuple4 is %s, but current packet's address tuple4 is %s, bypass !!!", LOG_TAG_PKTIO, session_ctx->session_id, session_ctx->session_addr, addr_str);
free(addr_str);
return NULL;
@@ -382,18 +387,15 @@ static struct session_ctx *data_packet_search_session(struct session_table *tabl
static struct session_ctx *inject_packet_search_session(struct session_table *table, const char *raw_data, int raw_len)
{
struct four_tuple inner_addr;
- struct data_packet data_pkt;
-
- memset(&inner_addr, 0, sizeof(struct four_tuple));
-
- data_packet_parse(&data_pkt, (const void *)raw_data, raw_len, 0);
+ struct packet data_pkt;
- data_packet_get_innermost_four_tuple(&data_pkt, &inner_addr);
+ packet_parse(&data_pkt, raw_data, raw_len);
+ sce_packet_get_innermost_tuple(&data_pkt, &inner_addr);
struct session_node *node = session_table_search_by_addr(table, &inner_addr);
if (node == NULL)
{
- char *addr_str = four_tuple_to_string(&inner_addr);
+ char *addr_str = four_tuple_tostring(&inner_addr);
LOG_ERROR("%s: unexpected inject packet, unable to find session %s from session table, drop !!!", LOG_TAG_PKTIO, addr_str);
free(addr_str);
return NULL;
@@ -878,7 +880,7 @@ static void session_value_free_cb(void *ctx)
session_ctx_free(s_ctx);
}
-static void handle_policy_mutil_hits(struct policy_enforcer *enforcer, struct session_ctx *session_ctx, struct control_packet *ctrl_pkt, data_packet *data_pkt, int is_e2i_dir)
+static void handle_policy_mutil_hits(struct policy_enforcer *enforcer, struct session_ctx *session_ctx, struct control_packet *ctrl_pkt, packet *data_pkt, int is_e2i_dir)
{
for (int i = 0; i < ctrl_pkt->rule_id_num; i++)
{
@@ -913,21 +915,21 @@ static void handle_session_opening(struct metadata *meta, struct control_packet
}
#endif
- struct data_packet data_pkt;
+ struct packet data_pkt;
struct four_tuple inner_tuple4;
- const void *payload = data_packet_parse(&data_pkt, (const void *)meta->raw_data, meta->raw_len, meta->session_id);
- data_packet_get_innermost_four_tuple(&data_pkt, &inner_tuple4);
- uint16_t real_offset = (char *)payload - meta->raw_data;
+ const char *payload = packet_parse(&data_pkt, meta->raw_data, meta->raw_len);
+ sce_packet_get_innermost_tuple(&data_pkt, &inner_tuple4);
+ uint16_t real_offset = payload - meta->raw_data;
if (real_offset != meta->l7offset)
{
- char *addr_str = four_tuple_to_string(&inner_tuple4);
+ char *addr_str = four_tuple_tostring(&inner_tuple4);
LOG_ERROR("%s: incorrect dataoffset %d in the control zone of session %lu %s, the expect value is %d", LOG_TAG_PKTIO, meta->l7offset, meta->session_id, addr_str, real_offset);
free(addr_str);
}
struct session_ctx *session_ctx = session_ctx_new();
session_ctx->session_id = meta->session_id;
- session_ctx->session_addr = four_tuple_to_string(&inner_tuple4);
+ session_ctx->session_addr = four_tuple_tostring(&inner_tuple4);
four_tuple_copy(&session_ctx->inner_tuple4, &inner_tuple4);
metadata_deep_copy(session_ctx->ctrl_meta, meta);
session_ctx->chainings.chaining_raw = selected_chaining_create(chaining_size, session_ctx->session_id, session_ctx->session_addr);
@@ -974,9 +976,9 @@ static void handle_session_active(struct metadata *meta, struct control_packet *
{
struct session_ctx *session_ctx = (struct session_ctx *)node->value;
- struct data_packet data_pkt;
- const void *payload = data_packet_parse(&data_pkt, (const void *)meta->raw_data, meta->raw_len, meta->session_id);
- uint16_t real_offset = (char *)payload - meta->raw_data;
+ struct packet data_pkt;
+ const char *payload = packet_parse(&data_pkt, meta->raw_data, meta->raw_len);
+ uint16_t real_offset = payload - meta->raw_data;
if (real_offset != meta->l7offset)
{
LOG_ERROR("%s: incorrect dataoffset %d in the control zone of session %lu %s, the expect value is %d", LOG_TAG_PKTIO, meta->l7offset, meta->session_id, session_ctx->session_addr, real_offset);
diff --git a/platform/src/policy.cpp b/platform/src/policy.cpp
index 494a2e0..78dca52 100644
--- a/platform/src/policy.cpp
+++ b/platform/src/policy.cpp
@@ -7,7 +7,7 @@
#include "global_metrics.h"
#include "health_check.h"
-#include "data_packet.h"
+#include "packet.h"
#include "policy.h"
#include "utils.h"
#include "log.h"
@@ -1682,7 +1682,7 @@ int policy_enforce_chaining_size(struct policy_enforcer *enforcer)
return enforcer->config.max_chaining_size;
}
-void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct selected_chainings *chainings, struct session_ctx *s_ctx, struct data_packet *data_pkt, uint64_t rule_id, int dir_is_i2e)
+void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct selected_chainings *chainings, struct session_ctx *s_ctx, struct packet *data_pkt, uint64_t rule_id, int dir_is_i2e)
{
char buffer[16] = {0};
struct selected_chaining *chaining = NULL;
@@ -1731,7 +1731,7 @@ void policy_enforce_select_chainings(struct policy_enforcer *enforcer, struct se
// sf_index
selected_sf->sf_index = chaining->chaining_used;
- uint64_t packet_hash = data_packet_get_hash(data_pkt, sff_param->sff_ldbc.method, dir_is_i2e);
+ uint64_t packet_hash = packet_get_hash(data_pkt, sff_param->sff_ldbc.method, dir_is_i2e);
select_sf_from_sff(enforcer, sff_param, selected_sf, s_ctx, packet_hash);
LOG_INFO("%s: session %lu %s enforce chaining [%d/%d]: policy: %lu->%d->%d, action: %s->%s->%s",
diff --git a/platform/test/gtest_policy.cpp b/platform/test/gtest_policy.cpp
index efdfb06..6b74b2b 100644
--- a/platform/test/gtest_policy.cpp
+++ b/platform/test/gtest_policy.cpp
@@ -2,7 +2,7 @@
#include "sce.h"
#include "policy.h"
-#include "data_packet.h"
+#include "packet.h"
#include "global_metrics.h"
unsigned char data1[] = {
@@ -171,9 +171,9 @@ TEST(POLICY, POLICY_ENFORCER_RAW_TRAFFIC1)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
@@ -224,9 +224,9 @@ TEST(POLICY, POLICY_ENFORCER_RAW_TRAFFIC2)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
@@ -318,9 +318,9 @@ TEST(POLICY, POLICY_ENFORCER_RAW_TRAFFIC_MUTIL_HITS)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
@@ -417,9 +417,9 @@ TEST(POLICY, POLICY_ENFORCER_DECRYPTED_TRAFFIC1)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
@@ -471,9 +471,9 @@ TEST(POLICY, POLICY_ENFORCER_DECRYPTED_TRAFFIC2)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
@@ -566,9 +566,9 @@ TEST(POLICY, POLICY_ENFORCER_DECRYPTED_TRAFFIC_MUTIL_HITS)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);
@@ -665,9 +665,9 @@ TEST(POLICY, POLICY_ENFORCER_MIX_TRAFFIC_MUTIL_HITS)
s_ctx.session_id = 1;
s_ctx.session_addr = (char *)"1.1.1.1 11 2.2.2.2 22";
- struct data_packet handler;
+ struct packet handler;
- const void *payload = data_packet_parse(&handler, (const void *)data1, sizeof(data1), 0);
+ const char *payload = packet_parse(&handler, (const char *)data1, sizeof(data1));
EXPECT_TRUE(payload != nullptr);
EXPECT_TRUE((char *)payload - (char *)&data1 == 70);