From nobody Thu Aug 27 11:54:56 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hW0Lt0PzRz6ppFs for ; Thu, 27 Aug 2026 11:55:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hW0Ls5p5rz3LD9 for ; Thu, 27 Aug 2026 11:55:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787831701; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mZ/ZP8ukm0u4aSp6KL88Ez1hM87YTe2zKGjVutBPPKY=; b=JnPsKqmHpImqkJahT5+mbcruhFMpuoMk9YwgThKp7URJYYiK/der7Y9Zoi4v+CV6y9dwgo +H9v8WbH4CgryS+xykGPKnJRoticPP0LYwnEUShkp8nPXiWsQGuVPQlRMrfFcCUUne5TKT ejYXLukjskU4HYAi2Do6FZ/clvoNzQgZjX6SabzjK9PyHRvyKNgAR8QjqcYugcKDkeTlOP oT58eV4MaBS/bR7rjb6n4BAvGLsPepl19Y2T8j2nWrXn+D7B5JQ9pCdxMuy+wI4yactMuY +Izr9Hb4Td7Af+fq1/TiUCSB86i6Xqi9zz0pgSV2dge1XGpLiZIxDFmoyWlXgQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787831701; a=rsa-sha256; cv=none; b=QILxRiWGLaSFUzO150UhL2SzG01vhSTk/HKt23FDRSfhRoQr29M4mh6gb9AOPcU7ck3FSQ XKDC9km2IPgQWRaJ6KUDbX11DOvKC7O9YqQgofNJT/7Q3gQ4nAStwRKy+iv/HXrslurFzW tO/d3d2vu+SsCeZPHn1/LR6lK/qUYe1wa46W9LKHt4SCUiEA6RoMXpW+8OnS/w0V+ui0sp PIttjGfwrQZAyC3fSldEn4DFHktdENjewyxTAoLi16A5Fu4mkxt3UMquyrRJk1r9OvNy9B toSym1kdAQzFLj9AkwU8uTOCEymQdWOC6dgCfufDJKxEHBnNSKItX2JACDBqug== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787831701; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mZ/ZP8ukm0u4aSp6KL88Ez1hM87YTe2zKGjVutBPPKY=; b=VJFql4osj6qKBC/AB+b8X8OiCXBUHANzZy8ubDZyBqTNL1rLBNRx55ooATNuiVHXwB7d6K EAWxQvjyrX4elfpzGTHSXK5iHNiAs0/44C4ce75ZqTHTRFNP8JmRi4SueVhS6PIW5fFn5p dfonQrOsvbYmeUApntD6kT2R6ypWhaYAnYRs8RIBGDO//0bY021V/W/hHndKIKgVC/Uzik Q9CtORyt2LsFCt+P06HXFFD9639mC9aDp484/RLKTtnYTYAFtR5ku4IKCtQ3Fk4bEg3g1K j8L1izfDPvRLyRS46mbKd/aU/56cGlfhXl85gxBBU41iSdWbdC4I3Ep3FsANgg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hW0Ls3xJhz6Yk for ; Thu, 27 Aug 2026 11:55:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 18281 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 27 Aug 2026 11:54:56 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Igor Ostapenko Subject: git: 36afb137b699 - main - netpfil tests: Make divapp packet loop handling opt-in List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: igoro X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 36afb137b699845be8ccf4df1da883c117f1b1aa Auto-Submitted: auto-generated Date: Thu, 27 Aug 2026 11:54:56 +0000 Message-Id: <6a902590.18281.6a7fec83@gitrepo.freebsd.org> The branch main has been updated by igoro: URL: https://cgit.FreeBSD.org/src/commit/?id=36afb137b699845be8ccf4df1da883c117f1b1aa commit 36afb137b699845be8ccf4df1da883c117f1b1aa Author: Igor Ostapenko AuthorDate: 2026-08-27 11:42:59 +0000 Commit: Igor Ostapenko CommitDate: 2026-08-27 11:47:24 +0000 netpfil tests: Make divapp packet loop handling opt-in This generalizes the divapp logic and makes it usable for other test scenarios such as diverted TCP connections. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D59067 --- tests/sys/netpfil/common/divapp.c | 26 ++++++++++++++++++------ tests/sys/netpfil/ipfw/divert.sh | 12 +++++------ tests/sys/netpfil/pf/divert-to.sh | 42 +++++++++++++++++++-------------------- 3 files changed, 47 insertions(+), 33 deletions(-) diff --git a/tests/sys/netpfil/common/divapp.c b/tests/sys/netpfil/common/divapp.c index b1c38fdc87b4..59630c8da45f 100644 --- a/tests/sys/netpfil/common/divapp.c +++ b/tests/sys/netpfil/common/divapp.c @@ -43,6 +43,7 @@ struct context { unsigned short divert_port; bool divert_back; + bool expect_single_pkt; int fd; struct sockaddr_in sin; @@ -116,7 +117,8 @@ main(int argc, char *argv[]) if (argc < 2) errx(EX_USAGE, - "Usage: %s [divert-back]", argv[0]); + "Usage: %s [expect-single-pkt] [divert-back]", + argv[0]); memset(&c, 0, sizeof(struct context)); @@ -124,8 +126,12 @@ main(int argc, char *argv[]) if (c.divert_port == 0) errx(EX_USAGE, "divert port is not defined."); - if (argc >= 3 && strcmp(argv[2], "divert-back") == 0) - c.divert_back = true; + for (int i = 2; i < argc; i++) { + if (strcmp(argv[i], "expect-single-pkt") == 0) + c.expect_single_pkt = true; + if (strcmp(argv[i], "divert-back") == 0) + c.divert_back = true; + } init(&c); @@ -135,12 +141,20 @@ main(int argc, char *argv[]) if (c.divert_back) send_pkt(&c); npkt++; - if (npkt >= 20) + if (c.expect_single_pkt && npkt >= 20) { + /* + * Single-packet expectation detects potential packet + * loops, so break the loop eventually. + */ break; + } } - if (npkt != 1) - errx(EXIT_FAILURE, "%d: npkt=%d.", c.divert_port, npkt); + if (npkt == 0) + errx(EXIT_FAILURE, "%d: no packets received.", c.divert_port); + if (c.expect_single_pkt && npkt != 1) + errx(EXIT_FAILURE, "%d: more than one received, npkt=%d.", + c.divert_port, npkt); return (EXIT_SUCCESS); } diff --git a/tests/sys/netpfil/ipfw/divert.sh b/tests/sys/netpfil/ipfw/divert.sh index 62db3f8fce98..42bef65596a4 100644 --- a/tests/sys/netpfil/ipfw/divert.sh +++ b/tests/sys/netpfil/ipfw/divert.sh @@ -88,7 +88,7 @@ in_div_body() jexec div ipfw add 100 divert 2000 icmp from any to any in icmptypes 8 - jexec div $(atf_get_srcdir)/../common/divapp 2000 & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -125,7 +125,7 @@ in_div_in_body() jexec div ipfw add 100 divert 2000 icmp from any to any in icmptypes 8 - jexec div $(atf_get_srcdir)/../common/divapp 2000 divert-back & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt divert-back & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -162,7 +162,7 @@ out_div_body() jexec div ipfw add 100 divert 2000 icmp from any to any out icmptypes 0 - jexec div $(atf_get_srcdir)/../common/divapp 2000 & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -199,7 +199,7 @@ out_div_out_body() jexec div ipfw add 100 divert 2000 icmp from any to any out icmptypes 0 - jexec div $(atf_get_srcdir)/../common/divapp 2000 divert-back & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt divert-back & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -252,9 +252,9 @@ in_div_in_fwd_out_div_out_body() jexec router ipfw add 100 divert 2001 icmp from any to any in icmptypes 8 jexec router ipfw add 200 divert 2002 icmp from any to any out icmptypes 8 - jexec router $(atf_get_srcdir)/../common/divapp 2001 divert-back & + jexec router $(atf_get_srcdir)/../common/divapp 2001 expect-single-pkt divert-back & indivapp_pid=$! - jexec router $(atf_get_srcdir)/../common/divapp 2002 divert-back & + jexec router $(atf_get_srcdir)/../common/divapp 2002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divappS to be ready sleep 1 diff --git a/tests/sys/netpfil/pf/divert-to.sh b/tests/sys/netpfil/pf/divert-to.sh index bc4222c2bd03..30825aae5e4c 100644 --- a/tests/sys/netpfil/pf/divert-to.sh +++ b/tests/sys/netpfil/pf/divert-to.sh @@ -88,7 +88,7 @@ in_div_body() "pass in inet proto icmp icmp-type echoreq divert-to 127.0.0.1 port 2000" \ "pass in inet6 proto icmp6 icmp6-type echoreq divert-to ::1 port 2000" - jexec div $(atf_get_srcdir)/../common/divapp 2000 & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -98,7 +98,7 @@ in_div_body() wait $divapp_pid - jexec div $(atf_get_srcdir)/../common/divapp 2000 & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -141,7 +141,7 @@ in_div_in_body() "pass in inet proto icmp icmp-type echoreq divert-to 127.0.0.1 port 2000 no state" \ "pass in inet6 proto icmp6 icmp6-type echoreq divert-to ::1 port 2000 no state" - jexec div $(atf_get_srcdir)/../common/divapp 2000 divert-back & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt divert-back & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -151,7 +151,7 @@ in_div_in_body() wait $divapp_pid - jexec div $(atf_get_srcdir)/../common/divapp 2000 divert-back & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt divert-back & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -196,7 +196,7 @@ out_div_body() "pass in inet6 proto icmp6 icmp6-type echoreq no state" \ "pass out inet6 proto icmp6 icmp6-type echorep divert-to ::1 port 2000 no state" - jexec div $(atf_get_srcdir)/../common/divapp 2000 & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -206,7 +206,7 @@ out_div_body() wait $divapp_pid - jexec div $(atf_get_srcdir)/../common/divapp 2000 & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -251,7 +251,7 @@ out_div_out_body() "pass in inet6 proto icmp6 icmp6-type echoreq no state" \ "pass out inet6 proto icmp6 icmp6-type echorep divert-to ::1 port 2000 no state" - jexec div $(atf_get_srcdir)/../common/divapp 2000 divert-back & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt divert-back & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -261,7 +261,7 @@ out_div_out_body() wait $divapp_pid - jexec div $(atf_get_srcdir)/../common/divapp 2000 divert-back & + jexec div $(atf_get_srcdir)/../common/divapp 2000 expect-single-pkt divert-back & divapp_pid=$! # Wait for the divapp to be ready sleep 1 @@ -326,9 +326,9 @@ in_div_in_fwd_out_div_out_body() "pass in inet6 proto icmp6 icmp6-type echoreq divert-to ::1 port 2001 no state" \ "pass out inet6 proto icmp6 icmp6-type echoreq divert-to ::1 port 2002 no state" - jexec router $(atf_get_srcdir)/../common/divapp 2001 divert-back & + jexec router $(atf_get_srcdir)/../common/divapp 2001 expect-single-pkt divert-back & indivapp_pid=$! - jexec router $(atf_get_srcdir)/../common/divapp 2002 divert-back & + jexec router $(atf_get_srcdir)/../common/divapp 2002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divapps to be ready sleep 1 @@ -338,9 +338,9 @@ in_div_in_fwd_out_div_out_body() wait $indivapp_pid && wait $outdivapp_pid - jexec router $(atf_get_srcdir)/../common/divapp 2001 divert-back & + jexec router $(atf_get_srcdir)/../common/divapp 2001 expect-single-pkt divert-back & indivapp_pid=$! - jexec router $(atf_get_srcdir)/../common/divapp 2002 divert-back & + jexec router $(atf_get_srcdir)/../common/divapp 2002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divapps to be ready sleep 1 @@ -393,9 +393,9 @@ in_dn_in_div_in_out_div_out_dn_out_body() "pass in inet6 proto icmp6 icmp6-type echoreq divert-to ::1 port 1001 no state" \ "pass out inet6 proto icmp6 icmp6-type echorep divert-to ::1 port 1002 no state" - jexec alcatraz $(atf_get_srcdir)/../common/divapp 1001 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 1001 expect-single-pkt divert-back & indivapp_pid=$! - jexec alcatraz $(atf_get_srcdir)/../common/divapp 1002 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 1002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divapps to be ready sleep 1 @@ -407,9 +407,9 @@ in_dn_in_div_in_out_div_out_dn_out_body() wait $outdivapp_pid atf_check_not_equal 0 $? - jexec alcatraz $(atf_get_srcdir)/../common/divapp 1001 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 1001 expect-single-pkt divert-back & indivapp_pid=$! - jexec alcatraz $(atf_get_srcdir)/../common/divapp 1002 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 1002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divapps to be ready sleep 1 @@ -438,9 +438,9 @@ in_dn_in_div_in_out_div_out_dn_out_body() "pass in inet6 proto icmp6 icmp6-type echoreq divert-to ::1 port 2001 no state" \ "pass out inet6 proto icmp6 icmp6-type echorep divert-to ::1 port 2002 no state" - jexec alcatraz $(atf_get_srcdir)/../common/divapp 2001 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 2001 expect-single-pkt divert-back & indivapp_pid=$! - jexec alcatraz $(atf_get_srcdir)/../common/divapp 2002 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 2002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divapps to be ready sleep 1 @@ -452,9 +452,9 @@ in_dn_in_div_in_out_div_out_dn_out_body() wait $outdivapp_pid atf_check_equal 0 $? - jexec alcatraz $(atf_get_srcdir)/../common/divapp 2001 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 2001 expect-single-pkt divert-back & indivapp_pid=$! - jexec alcatraz $(atf_get_srcdir)/../common/divapp 2002 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 2002 expect-single-pkt divert-back & outdivapp_pid=$! # Wait for the divapps to be ready sleep 1 @@ -498,7 +498,7 @@ pr260867_body() atf_check -o ignore ping -c3 2001:db8::2 jexec alcatraz /usr/sbin/inetd -p ${PWD}/inetd-echo.pid $(atf_get_srcdir)/echo_inetd.conf - jexec alcatraz $(atf_get_srcdir)/../common/divapp 1001 divert-back & + jexec alcatraz $(atf_get_srcdir)/../common/divapp 1001 expect-single-pkt divert-back & jexec alcatraz pfctl -e pft_set_rules alcatraz \