summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-11-27 18:23:59 +0800
committerluwenpeng <[email protected]>2024-11-27 18:23:59 +0800
commit10dc717b073b4532238357eb646aed5a5c531a88 (patch)
tree29cc3191e742c6c609b6929e68b0c64687d243a1
parent39948a23adc0736acc105679973d0d92440ad2d5 (diff)
reset packet tags on packet exdata runtime new
-rw-r--r--infra/packet_io/pcap_io.c1
-rw-r--r--infra/packet_manager/packet_internal.h2
-rw-r--r--infra/packet_manager/packet_manager.c12
-rw-r--r--infra/packet_manager/packet_utils.c6
4 files changed, 13 insertions, 8 deletions
diff --git a/infra/packet_io/pcap_io.c b/infra/packet_io/pcap_io.c
index 1fc9c6d..0c8a05b 100644
--- a/infra/packet_io/pcap_io.c
+++ b/infra/packet_io/pcap_io.c
@@ -103,7 +103,6 @@ static int ring_buffer_push(struct ring_buffer *ring, void *data)
{
if (__sync_val_compare_and_swap(&ring->buff[ring->tail], 0, data) != 0)
{
- PACKET_IO_LOG_ERROR("ring buffer is full, retry later");
return -1;
}
diff --git a/infra/packet_manager/packet_internal.h b/infra/packet_manager/packet_internal.h
index d5f8643..461b52f 100644
--- a/infra/packet_manager/packet_internal.h
+++ b/infra/packet_manager/packet_internal.h
@@ -185,6 +185,8 @@ struct packet_origin *packet_get_origin(struct packet *pkt);
void packet_set_stage(struct packet *pkt, enum packet_stage stage);
+void packet_tag_clean(struct packet *pkt);
+
const char *packet_stage_to_str(enum packet_stage stage);
#ifdef __cplusplus
diff --git a/infra/packet_manager/packet_manager.c b/infra/packet_manager/packet_manager.c
index a7083fb..6abcd8d 100644
--- a/infra/packet_manager/packet_manager.c
+++ b/infra/packet_manager/packet_manager.c
@@ -229,6 +229,7 @@ void packet_manager_ingress(struct packet_manager *pkt_mgr, uint16_t thread_id,
{
struct packet_manager_rte *pkt_mgr_rte = pkt_mgr->rte[thread_id];
packet_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
+ packet_tag_clean(pkt);
pkt_mgr_rte->stat.pkts_ingress++;
pkt_mgr_rte->stat.queue[PACKET_STAGE_PREROUTING].pkts_in++;
@@ -257,13 +258,6 @@ struct packet *packet_manager_egress(struct packet_manager *pkt_mgr, uint16_t th
static void packet_tag_set_ip_proto(struct packet *pkt)
{
- uint64_t pkt_tag_key_bits = 0;
- packet_tag_get(pkt, &pkt_tag_key_bits, NULL);
- if (pkt_tag_key_bits & PKT_TAG_KEY_IPPROTO)
- {
- return;
- }
-
switch (packet_get_ip_proto(pkt))
{
case IPPROTO_TCP:
@@ -437,6 +431,7 @@ struct packet *packet_manager_build_tcp_packet(struct packet_manager *pkt_mgr, u
}
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_tcp_succ++;
packet_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
+ packet_tag_clean(pkt);
return pkt;
}
@@ -453,6 +448,7 @@ struct packet *packet_manager_build_udp_packet(struct packet_manager *pkt_mgr, u
}
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_udp_succ++;
packet_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
+ packet_tag_clean(pkt);
return pkt;
}
@@ -469,6 +465,7 @@ struct packet *packet_manager_build_l3_packet(struct packet_manager *pkt_mgr, ui
}
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_l3_succ++;
packet_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
+ packet_tag_clean(pkt);
return pkt;
}
@@ -484,6 +481,7 @@ struct packet *packet_manager_dup_packet(struct packet_manager *pkt_mgr, uint16_
}
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_dup_succ++;
packet_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
+ packet_tag_clean(pkt);
return pkt;
}
diff --git a/infra/packet_manager/packet_utils.c b/infra/packet_manager/packet_utils.c
index 32a0170..5a505df 100644
--- a/infra/packet_manager/packet_utils.c
+++ b/infra/packet_manager/packet_utils.c
@@ -968,6 +968,12 @@ void *packet_get_exdata(const struct packet *pkt, int idx)
return exdata_get(exdata_rt, idx);
}
+void packet_tag_clean(struct packet *pkt)
+{
+ pkt->tag_key_bits = 0;
+ pkt->tag_val_bits = 0;
+}
+
void packet_tag_set(struct packet *pkt, uint64_t key_bits, uint64_t val_bits)
{
pkt->tag_key_bits |= key_bits;