From nobody Tue Sep 29 20:01:26 2026 X-Original-To: dev-commits-src-main@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 4hvTZt5vkMz6v4xH for ; Tue, 29 Sep 2026 20:01:26 +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 4hvTZt37fqz4fSy for ; Tue, 29 Sep 2026 20:01:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790712086; 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=Z2/jd05/TJCGBJHz/JNDrd6dqFIxttbSVTOJgebdufc=; b=CDj/njTt8858AiGYJz8tl5I4190ckWM8Xix93MinKvUKfRbmNf2DXm8t3zJSbZPda4/719 qjAyOYFcfG6mktvCFS/+tc4gen2BncK42uztoo2xPPpnBrXRqNsdYPQF/ADj8Hprm3qbcs ub/sVZ2uYSA2XuctVLr3I0N5UA5USL8V9eT/3S6pYaXQ/e9XxMXM1JXcZKPEMkqEt2DECl YybEMxXJwmrYsa+tDkvTxaMPnG2mRkUJveTniASGmfldzTaScssUdCZ4eCOBAtgoGraFdj A4oaKEV/RRUAUQlNDT4OZjb0Dhz4jxhS6YQTKtX1LGSdNHRQuqw6pViJRAVldQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790712086; b=ICIMaGfLEWE8t5l9IM8zwCtM+on3iHXgA+3aOGIjHGyF9zfGjyBBDhJtu8yHtn3dJpE5lS 3zHMl5REHU0iHsGNfKEjB2YugDg9ezQmbIb0P5JIImySdtORv8oukiyeQKosymBmcxYeCp LTzqdiAXM7zKGu5DTv5OglbpM5b6ixdhurctl6ewnnkLz9XULwN65jyoGPBpSTYePqgNdy txh2WKgatWedM/7kyqOOca+xeu1dApMipKUsPaFkqu/GlSwcotT2WtS3fZfvqStaHMjt0j H6pLqdOJJAor8c249vEu9Ejbez+vxrdrM5SY/I2yONdfYJWa0LA4fT2qtV3wJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790712086; 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=Z2/jd05/TJCGBJHz/JNDrd6dqFIxttbSVTOJgebdufc=; b=qsCFRWwF0b7L2XZ2gLfhHrg9DUhpTs56gBD/grbSjU3E2OSiJMhaLF7KYkGo2WjVhf5uNa hvN3LpTN9eeajy16QlOkt1GIoy1d1d6DAMas0SPsm9w+WmVXQ87/bQo95qPjrnkeH3O4sL bCBR18lEM1SN8RaKUSuNBMRjigocoI52ndBbYm85SrpnHS7Cp8BL2dkLdEsr1fLtkvgGBD AMUMpOkIxVjlbn8ktsCYJ1PuvLxEuhIIFTwQFQzrTGJelgXhaSO1FvH3zMmRMStSnJSHbQ NVL8P6UjaqYB8yeEnaqcAwF/t+G4twOFoVTxLrCCs139E/5K1ZbhioSkKosSIg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hvTZt2D9Pz1S6v for ; Tue, 29 Sep 2026 20:01:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 192be by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 29 Sep 2026 20:01:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: R. Christian McDonald Subject: git: eaba5142bdef - main - pf: carry pfra_fback in the netlink pfr_addr encoding List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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: rcm X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: eaba5142bdefd6b5b249793f6f8ec3528afb12e3 Auto-Submitted: auto-generated Date: Tue, 29 Sep 2026 20:01:26 +0000 Message-Id: <6abc1916.192be.29aabf53@gitrepo.freebsd.org> The branch main has been updated by rcm: URL: https://cgit.FreeBSD.org/src/commit/?id=eaba5142bdefd6b5b249793f6f8ec3528afb12e3 commit eaba5142bdefd6b5b249793f6f8ec3528afb12e3 Author: R. Christian McDonald AuthorDate: 2026-09-29 01:21:56 +0000 Commit: R. Christian McDonald CommitDate: 2026-09-29 19:57:47 +0000 pf: carry pfra_fback in the netlink pfr_addr encoding The netlink encoding of struct pfr_addr omits pfra_fback, so no per-address feedback reaches userspace. In particular, pfr_get_astats() marks entries of tables without counters with PFR_FB_NOCOUNT, which pfctl uses to skip their counters, so "pfctl -v -T show" prints zero counters for such tables. Add PFR_A_FBACK, emit it from the kernel and decode it in libpfctl. Add a regression test. Reviewed by: kp Approved by: kp (mentor) Fixes: 08f54dfca197 ("pf: convert DIOCRGETASTATS to netlink") Sponsored by: Rubicon Communications, LLC ("Netgate") --- lib/libpfctl/libpfctl.c | 1 + sys/netpfil/pf/pf_nl.c | 1 + sys/netpfil/pf/pf_nl.h | 1 + tests/sys/netpfil/pf/table.sh | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+) diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c index 6578cff5e45a..a7dbc0a412aa 100644 --- a/lib/libpfctl/libpfctl.c +++ b/lib/libpfctl/libpfctl.c @@ -2799,6 +2799,7 @@ static const struct snl_attr_parser ap_pfr_addr[] = { { .type = PFR_A_NET, .off = _OUT(pfra_net), .cb = snl_attr_get_uint8 }, { .type = PFR_A_NOT, .off = _OUT(pfra_not), .cb = snl_attr_get_bool }, { .type = PFR_A_ADDR, .off = _OUT(pfra_ip6addr), .cb = snl_attr_get_in6_addr }, + { .type = PFR_A_FBACK, .off = _OUT(pfra_fback), .cb = snl_attr_get_uint8 }, }; #undef _OUT SNL_DECLARE_ATTR_PARSER(pfr_addr_parser, ap_pfr_addr); diff --git a/sys/netpfil/pf/pf_nl.c b/sys/netpfil/pf/pf_nl.c index 8a04c330f4eb..6281b2d0ad19 100644 --- a/sys/netpfil/pf/pf_nl.c +++ b/sys/netpfil/pf/pf_nl.c @@ -2315,6 +2315,7 @@ nlattr_add_pfr_addr(struct nl_writer *nw, int attr, const struct pfr_addr *a) nlattr_add_u8(nw, PFR_A_NET, a->pfra_net); nlattr_add_bool(nw, PFR_A_NOT, a->pfra_not); nlattr_add_in6_addr(nw, PFR_A_ADDR, &a->pfra_u._pfra_ip6addr); + nlattr_add_u8(nw, PFR_A_FBACK, a->pfra_fback); nlattr_set_len(nw, off); diff --git a/sys/netpfil/pf/pf_nl.h b/sys/netpfil/pf/pf_nl.h index 220ef8ea9cd8..d795d33c085a 100644 --- a/sys/netpfil/pf/pf_nl.h +++ b/sys/netpfil/pf/pf_nl.h @@ -498,6 +498,7 @@ enum pfr_addr_t { PFR_A_NET = 2, /* uint8_t */ PFR_A_NOT = 3, /* bool */ PFR_A_ADDR = 4, /* in6_addr */ + PFR_A_FBACK = 5, /* uint8_t */ }; enum pf_table_addrs_t { diff --git a/tests/sys/netpfil/pf/table.sh b/tests/sys/netpfil/pf/table.sh index 7c8cb084b48a..24201588ddbf 100644 --- a/tests/sys/netpfil/pf/table.sh +++ b/tests/sys/netpfil/pf/table.sh @@ -949,6 +949,38 @@ test_cleanup() pft_cleanup } +atf_test_case "show_no_counters" "cleanup" +show_no_counters_head() +{ + atf_set descr 'Test pfctl -v -T show on a table without counters' + atf_set require.user root +} + +show_no_counters_body() +{ + pft_init + + vnet_mkjail alcatraz + jexec alcatraz pfctl -e + + pft_set_rules alcatraz \ + "table persist { 192.0.2.1 }" \ + "table persist counters { 192.0.2.1 }" \ + "pass all" + + atf_check -s exit:0 -e ignore \ + -o match:"Cleared:" -o not-match:"In/Block:" \ + jexec alcatraz pfctl -t foo -v -T show + atf_check -s exit:0 -e ignore \ + -o match:"Cleared:" -o match:"In/Block:" \ + jexec alcatraz pfctl -t bar -v -T show +} + +show_no_counters_cleanup() +{ + pft_cleanup +} + atf_init_test_cases() { atf_add_test_case "v4_counters" @@ -972,4 +1004,5 @@ atf_init_test_cases() atf_add_test_case "replace_verbose" atf_add_test_case "load" atf_add_test_case "test" + atf_add_test_case "show_no_counters" }