From cb6f2319352b65001db13c32b879d847abf0d90f Mon Sep 17 00:00:00 2001 From: luwenpeng Date: Thu, 24 Oct 2024 11:00:20 +0800 Subject: [PATCH] bugfix: build packet also copy metadata from original packet --- infra/ip_reassembly/ip_reassembly.c | 11 +++++------ infra/packet_manager/packet_builder.c | 3 +++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/infra/ip_reassembly/ip_reassembly.c b/infra/ip_reassembly/ip_reassembly.c index 3ea4e3a..dd4e749 100644 --- a/infra/ip_reassembly/ip_reassembly.c +++ b/infra/ip_reassembly/ip_reassembly.c @@ -529,19 +529,18 @@ static struct packet *ip_reassembly_defrag_fq(struct ip_reassembly *ip_reass, st // create a new packet packet_parse(pkt, ptr, total_len); packet_set_defraged(pkt); + memcpy(&pkt->meta, &first->pkt->meta, sizeof(struct metadata)); - frag = &fq->frags[IP_FIRST_FRAG_IDX]; - packet_push_frag(pkt, frag->pkt); - frag->pkt = NULL; + packet_push_frag(pkt, first->pkt); + first->pkt = NULL; for (uint32_t i = IP_MIN_FRAG_NUM; i < fq->next_fill; i++) { frag = &fq->frags[i]; packet_push_frag(pkt, frag->pkt); frag->pkt = NULL; } - frag = &fq->frags[IP_LAST_FRAG_IDX]; - packet_push_frag(pkt, frag->pkt); - frag->pkt = NULL; + packet_push_frag(pkt, last->pkt); + last->pkt = NULL; STAT_INC(&ip_reass->stat, defrags_succeed, &fq->key) ip_reassembly_del_fq(ip_reass, fq); diff --git a/infra/packet_manager/packet_builder.c b/infra/packet_manager/packet_builder.c index 872e65b..8114412 100644 --- a/infra/packet_manager/packet_builder.c +++ b/infra/packet_manager/packet_builder.c @@ -303,6 +303,7 @@ struct packet *packet_build_tcp(const struct packet *origin_pkt, uint32_t tcp_se .args = NULL, .thr_idx = -1, }; + memcpy(&new_pkt->meta, &origin_pkt->meta, sizeof(struct metadata)); packet_set_origin(new_pkt, &origin); return new_pkt; @@ -352,6 +353,7 @@ struct packet *packet_build_udp(const struct packet *origin_pkt, const char *udp .args = NULL, .thr_idx = -1, }; + memcpy(&new_pkt->meta, &origin_pkt->meta, sizeof(struct metadata)); packet_set_origin(new_pkt, &origin); return new_pkt; @@ -428,6 +430,7 @@ struct packet *packet_build_l3(const struct packet *origin_pkt, uint8_t ip_proto .args = NULL, .thr_idx = -1, }; + memcpy(&new_pkt->meta, &origin_pkt->meta, sizeof(struct metadata)); packet_set_origin(new_pkt, &origin); return new_pkt;