diff --git a/net/pkt-gen/Makefile b/net/pkt-gen/Makefile index b33fa11be4e9..34a6a7202e8b 100644 --- a/net/pkt-gen/Makefile +++ b/net/pkt-gen/Makefile @@ -1,51 +1,51 @@ PORTNAME= pkt-gen -PORTVERSION= g2025.10.08 +PORTVERSION= g2026.08.08 CATEGORIES= net MAINTAINER= olivier@FreeBSD.org COMMENT= Packet sink/source and bandwidth/delay emulator using the netmap API WWW= https://github.com/luigirizzo/netmap LICENSE= BSD2CLAUSE USES= gmake USE_GITHUB= yes GH_ACCOUNT= luigirizzo GH_PROJECT= netmap -GH_TAGNAME= bc3a126 +GH_TAGNAME= 389daea MAKEFILE= GNUmakefile OPTIONS_DEFINE= PCAP PCAP_DESC= Support loading packets from pcap file OPTIONS_DEFAULT= PCAP PCAP_MAKE_ARGS= WITH_PCAP=1 PLIST_FILES= bin/pkt-gen \ bin/nmreplay \ bin/tlem \ share/man/man8/nmreplay.8.gz \ share/man/man8/pkt-gen.8.gz \ share/man/man8/tlem.8.gz do-build: cd ${WRKSRC}/libnetmap && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} ${MAKE_FLAGS} ${MAKEFILE} cd ${WRKSRC}/apps/pkt-gen && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} ${MAKE_FLAGS} ${MAKEFILE} cd ${WRKSRC}/apps/nmreplay && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} ${MAKE_FLAGS} ${MAKEFILE} cd ${WRKSRC}/apps/tlem && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} ${MAKE_FLAGS} ${MAKEFILE} do-install: ${INSTALL_PROGRAM} ${WRKSRC}/apps/pkt-gen/pkt-gen \ ${STAGEDIR}${PREFIX}/bin ${INSTALL_PROGRAM} ${WRKSRC}/apps/nmreplay/nmreplay \ ${STAGEDIR}${PREFIX}/bin ${INSTALL_PROGRAM} ${WRKSRC}/apps/tlem/tlem \ ${STAGEDIR}${PREFIX}/bin ${INSTALL_MAN} ${WRKSRC}/apps/pkt-gen/pkt-gen.8 \ ${STAGEDIR}${PREFIX}/share/man/man8 ${INSTALL_MAN} ${WRKSRC}/apps/nmreplay/nmreplay.8 \ ${STAGEDIR}${PREFIX}/share/man/man8 ${INSTALL_MAN} ${WRKSRC}/apps/tlem/tlem.8 \ ${STAGEDIR}${PREFIX}/share/man/man8 .include diff --git a/net/pkt-gen/distinfo b/net/pkt-gen/distinfo index 93c29fdfecdd..8db849f38fae 100644 --- a/net/pkt-gen/distinfo +++ b/net/pkt-gen/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1759939977 -SHA256 (luigirizzo-netmap-g2025.10.08-bc3a126_GH0.tar.gz) = de3abd8353612777784fce661bd56eed9731f24d93216a4bac37a92d66b0dcbd -SIZE (luigirizzo-netmap-g2025.10.08-bc3a126_GH0.tar.gz) = 775215 +TIMESTAMP = 1790262446 +SHA256 (luigirizzo-netmap-g2026.08.08-389daea_GH0.tar.gz) = e102c0a56ccd6d78211d2a542bac979fd3459956c9db3592f175ea3f79da14b1 +SIZE (luigirizzo-netmap-g2026.08.08-389daea_GH0.tar.gz) = 774116 diff --git a/net/pkt-gen/files/patch-apps_pkt-gen_pkt-gen.c b/net/pkt-gen/files/patch-apps_pkt-gen_pkt-gen.c new file mode 100644 index 000000000000..d4ffab6fe0d5 --- /dev/null +++ b/net/pkt-gen/files/patch-apps_pkt-gen_pkt-gen.c @@ -0,0 +1,98 @@ +Fix stale UDP checksum when IPv6 source/destination ranges are used. + +--- apps/pkt-gen/pkt-gen.c.orig 2026-09-24 16:05:21 UTC ++++ apps/pkt-gen/pkt-gen.c +@@ -917,7 +917,7 @@ update_ip6(struct pkt *pkt, struct targ *t) + struct glob_arg *g = t->g; + struct ip6_hdr ip6; + struct udphdr udp; +- uint16_t udp_sum; ++ uint16_t udp_sum = 0; + uint16_t oaddr, naddr; + uint16_t oport, nport; + uint8_t group; +@@ -925,7 +925,6 @@ update_ip6(struct pkt *pkt, struct targ *t) + memcpy(&ip6, &pkt->ipv6.ip, sizeof(ip6)); + memcpy(&udp, &pkt->ipv6.udp, sizeof(udp)); + do { +- udp_sum = 0; + group = g->src_ip.ipv6.sgroup; + naddr = oaddr = ntohs(ip6.ip6_src.s6_addr16[group]); + nport = oport = ntohs(udp.uh_sport); +@@ -934,30 +933,29 @@ update_ip6(struct pkt *pkt, struct targ *t) + udp.uh_sport = nrand48(t->seed); + naddr = ntohs(ip6.ip6_src.s6_addr16[group]); + nport = ntohs(udp.uh_sport); ++ udp_sum = new_udp_sum(udp_sum, oaddr, naddr); ++ udp_sum = new_udp_sum(udp_sum, oport, nport); + break; + } + if (oport < g->src_ip.port1) { + nport = oport + 1; + udp.uh_sport = htons(nport); ++ udp_sum = new_udp_sum(udp_sum, oport, nport); + break; + } + nport = g->src_ip.port0; + udp.uh_sport = htons(nport); ++ udp_sum = new_udp_sum(udp_sum, oport, nport); + if (oaddr < ntohs(g->src_ip.ipv6.end.s6_addr16[group])) { + naddr = oaddr + 1; + ip6.ip6_src.s6_addr16[group] = htons(naddr); ++ udp_sum = new_udp_sum(udp_sum, oaddr, naddr); + break; + } + naddr = ntohs(g->src_ip.ipv6.start.s6_addr16[group]); + ip6.ip6_src.s6_addr16[group] = htons(naddr); ++ udp_sum = new_udp_sum(udp_sum, oaddr, naddr); + +- /* update checksums if needed */ +- if (oaddr != naddr) +- udp_sum = cksum_add(~oaddr, naddr); +- if (oport != nport) +- udp_sum = cksum_add(udp_sum, +- cksum_add(~oport, nport)); +- + group = g->dst_ip.ipv6.egroup; + naddr = oaddr = ntohs(ip6.ip6_dst.s6_addr16[group]); + nport = oport = ntohs(udp.uh_dport); +@@ -966,32 +964,32 @@ update_ip6(struct pkt *pkt, struct targ *t) + udp.uh_dport = nrand48(t->seed); + naddr = ntohs(ip6.ip6_dst.s6_addr16[group]); + nport = ntohs(udp.uh_dport); ++ udp_sum = new_udp_sum(udp_sum, oaddr, naddr); ++ udp_sum = new_udp_sum(udp_sum, oport, nport); + break; + } + if (oport < g->dst_ip.port1) { + nport = oport + 1; + udp.uh_dport = htons(nport); ++ udp_sum = new_udp_sum(udp_sum, oport, nport); + break; + } + nport = g->dst_ip.port0; + udp.uh_dport = htons(nport); ++ udp_sum = new_udp_sum(udp_sum, oport, nport); + if (oaddr < ntohs(g->dst_ip.ipv6.end.s6_addr16[group])) { + naddr = oaddr + 1; + ip6.ip6_dst.s6_addr16[group] = htons(naddr); ++ udp_sum = new_udp_sum(udp_sum, oaddr, naddr); + break; + } + naddr = ntohs(g->dst_ip.ipv6.start.s6_addr16[group]); + ip6.ip6_dst.s6_addr16[group] = htons(naddr); ++ udp_sum = new_udp_sum(udp_sum, oaddr, naddr); + } while (0); + /* update checksums */ +- if (oaddr != naddr) +- udp_sum = cksum_add(udp_sum, +- cksum_add(~oaddr, naddr)); +- if (oport != nport) +- udp_sum = cksum_add(udp_sum, +- cksum_add(~oport, nport)); + if (udp_sum != 0) +- udp.uh_sum = ~cksum_add(~udp.uh_sum, udp_sum); ++ udp.uh_sum = ~cksum_add(~udp.uh_sum, htons(udp_sum)); + memcpy(&pkt->ipv6.ip, &ip6, sizeof(ip6)); + memcpy(&pkt->ipv6.udp, &udp, sizeof(udp)); + }