From nobody Tue Sep 29 20:01:26 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 4hvTZz63zzz6v4pl for ; Tue, 29 Sep 2026 20:01:31 +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 4hvTZz5NC0z4fRF for ; Tue, 29 Sep 2026 20:01:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790712091; 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=D2J23C4SGdrUa6uisAWllCHSGbJp/qyKb8Vtdo/1zwcJlSLrbwGoVTjR4MM2pw2XAHTfBo pIilqE1HnFU7QLJZG0lmBM9n1qty7GK9XwE45ikhCgUu59R+p+Hw45klNtTiMv3b7QfW4x fPSpXlQeSH3g8G+mUQFJSs5mt4Nnqs0CrldUkJQwv/JjDmkKDw1xoH3SFLu7wrmRt7M+Jy mStKLvJ87Br5wepgxnGcCQTW05tWSQwnpJA7FpjvJ0WPghu9S/GDJp2pSv4dgXqExlNXIA 0UsuRtFRs9bqZ6JVwFh3SuL2Rg6hg9vwgug0qD+SLbfjwgM1X4KrLJzwGfBPcA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790712091; b=dsqTr4vqe5QI4q9qH2sVwNO7iYdk2na9rYS2iTB1C/y/5htcen0DmKbcx2Ey63JjsjMEFa a7pQZVhIis24EltpnHdWPnpDQwasV9nk6mQF8ZwRzWK6bUGg47X6bMoV+Cl7SVRR3+XmKu I82et1Dk6mOvmTjX8978v0BRcpdW97ilnF6bGgVmIs2WDzfRBLwzb2t+HszLr3A2ry8L31 +7P2vluwqimfVdqPSY1JBHVSBdpGQEdVJKKceiMdBs/nXkhPAiiccE0b40wCYbIvT5Zduv jYHw9dxWX4vv5y71adtnu56kGQP3J1uSzONDu7Tn8x+9+tz+XE8EKXjXVcSZUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790712091; 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=NDpegoftKxFfhhF03N17x7IpNV1HpseahbXQ5gIi6OvgFblMtEFF18VqjpVd4ZFDpNrYKk Abycxmbj62zI+pJ/WEVGyphc/bG8rXOkp8Nl45glB55SSSak3QBwORqZgoCqRFM7+C230G gi2O5ZtJmzEJLqr8gA2EK/V5lEeJQ2g+rUPMOeigQhqVIU8mIhcwmZ+lTlP0B0yxNFZO/G iF/j8b39L0RvtXajLBimxAk1P+bMXvbEzyS9q23LeIiNiIi4Q3i+lttUD4qrm7Xaa0VVqC gP0IKAoBD2cOEGQnjVbJ8OwQrMtpABKzl5yzdGJm+oxUGq63QN1t43QiKndevQ== 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 4hvTZz4RPDz1SNF for ; Tue, 29 Sep 2026 20:01:31 +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 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: 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" }