reset packet tags on packet exdata runtime new

This commit is contained in:
luwenpeng
2024-11-27 18:23:59 +08:00
parent 39948a23ad
commit 10dc717b07
4 changed files with 13 additions and 8 deletions

View File

@@ -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) 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; return -1;
} }

View File

@@ -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_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); const char *packet_stage_to_str(enum packet_stage stage);
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -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]; 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_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.pkts_ingress++;
pkt_mgr_rte->stat.queue[PACKET_STAGE_PREROUTING].pkts_in++; 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) 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)) switch (packet_get_ip_proto(pkt))
{ {
case IPPROTO_TCP: 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++; 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_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
packet_tag_clean(pkt);
return 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++; 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_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
packet_tag_clean(pkt);
return 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++; 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_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
packet_tag_clean(pkt);
return 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++; 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_set_user_data(pkt, exdata_runtime_new(pkt_mgr->ex_sche));
packet_tag_clean(pkt);
return pkt; return pkt;
} }

View File

@@ -968,6 +968,12 @@ void *packet_get_exdata(const struct packet *pkt, int idx)
return exdata_get(exdata_rt, 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) void packet_tag_set(struct packet *pkt, uint64_t key_bits, uint64_t val_bits)
{ {
pkt->tag_key_bits |= key_bits; pkt->tag_key_bits |= key_bits;