diff options
| author | luwenpeng <[email protected]> | 2024-11-27 18:23:59 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-11-27 18:23:59 +0800 |
| commit | 10dc717b073b4532238357eb646aed5a5c531a88 (patch) | |
| tree | 29cc3191e742c6c609b6929e68b0c64687d243a1 | |
| parent | 39948a23adc0736acc105679973d0d92440ad2d5 (diff) | |
reset packet tags on packet exdata runtime new
| -rw-r--r-- | infra/packet_io/pcap_io.c | 1 | ||||
| -rw-r--r-- | infra/packet_manager/packet_internal.h | 2 | ||||
| -rw-r--r-- | infra/packet_manager/packet_manager.c | 12 | ||||
| -rw-r--r-- | infra/packet_manager/packet_utils.c | 6 |
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; |
