From owner-dev-commits-src-branches@freebsd.org  Mon May  3 01:38:39 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 03BAB62358F;
 Mon,  3 May 2021 01:38:39 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYQby6kNhz3nrD;
 Mon,  3 May 2021 01:38:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D8D2A157CB;
 Mon,  3 May 2021 01:38:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1431cc1b045309;
 Mon, 3 May 2021 01:38:38 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1431ccX9045308;
 Mon, 3 May 2021 01:38:38 GMT (envelope-from git)
Date: Mon, 3 May 2021 01:38:38 GMT
Message-Id: <202105030138.1431ccX9045308@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: 46ec1227e793 - stable/13 - connectat(2): clarify that the s
 argument is socket
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 46ec1227e793af8c47c1ad2937c4c955883f529e
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 01:38:39 -0000

The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=46ec1227e793af8c47c1ad2937c4c955883f529e

commit 46ec1227e793af8c47c1ad2937c4c955883f529e
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-28 15:47:31 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-03 01:26:50 +0000

    connectat(2): clarify that the s argument is socket
    
    (cherry picked from commit 07f229d20c0cd6285c5ddf1df45eb69bbea4445b)
---
 lib/libc/sys/connectat.2 | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/libc/sys/connectat.2 b/lib/libc/sys/connectat.2
index 1d7e740b89c4..3b90baa0b6f2 100644
--- a/lib/libc/sys/connectat.2
+++ b/lib/libc/sys/connectat.2
@@ -45,7 +45,8 @@
 .Sh DESCRIPTION
 The
 .Fn connectat
-system call initiates a connection on a socket.
+system call initiates a connection on the socket
+.Fa s .
 When passed the special value
 .Dv AT_FDCWD
 in the

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 01:38:40 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 373FC623059;
 Mon,  3 May 2021 01:38:40 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYQc00fVGz3pJp;
 Mon,  3 May 2021 01:38:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F0C6E157CC;
 Mon,  3 May 2021 01:38:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1431cdiR045337;
 Mon, 3 May 2021 01:38:39 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1431cdbC045336;
 Mon, 3 May 2021 01:38:39 GMT (envelope-from git)
Date: Mon, 3 May 2021 01:38:39 GMT
Message-Id: <202105030138.1431cdbC045336@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: dd93a6270db3 - stable/13 - O_PATH: disable kqfilter for fifos
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: dd93a6270db30ca9ff07a108b0173368c8bf97e3
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 01:38:40 -0000

The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=dd93a6270db30ca9ff07a108b0173368c8bf97e3

commit dd93a6270db30ca9ff07a108b0173368c8bf97e3
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-28 15:45:36 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-03 01:27:05 +0000

    O_PATH: disable kqfilter for fifos
    
    (cherry picked from commit 2082565798041ceb9fb77137f00ea6b0ff50fe5e)
---
 sys/kern/vfs_vnops.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index f715c9828d04..832c717a33b7 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -427,7 +427,10 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
 			return (error);
 	}
 	if ((fmode & O_PATH) != 0) {
-		error = VOP_ACCESS(vp, VREAD, cred, td);
+		if (vp->v_type == VFIFO)
+			error = EPIPE;
+		else
+			error = VOP_ACCESS(vp, VREAD, cred, td);
 		if (error == 0)
 			fp->f_flag |= FKQALLOWED;
 		return (0);

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 01:38:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8071E6230E0;
 Mon,  3 May 2021 01:38:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYQc11NKNz3pQ0;
 Mon,  3 May 2021 01:38:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 21812158C9;
 Mon,  3 May 2021 01:38:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1431cfa6045358;
 Mon, 3 May 2021 01:38:41 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1431cfj4045357;
 Mon, 3 May 2021 01:38:41 GMT (envelope-from git)
Date: Mon, 3 May 2021 01:38:41 GMT
Message-Id: <202105030138.1431cfj4045357@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: df6241fcef9a - stable/13 - amd64: disable LA57 by default for now
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: df6241fcef9a8df76839caeaef61520d5f3a7925
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 01:38:41 -0000

The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=df6241fcef9a8df76839caeaef61520d5f3a7925

commit df6241fcef9a8df76839caeaef61520d5f3a7925
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-28 15:50:16 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-03 01:27:22 +0000

    amd64: disable LA57 by default for now
    
    (cherry picked from commit 72a42ec63b4a98f812f5f6164415eeb9a55e1933)
---
 sys/amd64/amd64/pmap.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 54dbadfb95c3..1fb81384f11e 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -2015,8 +2015,7 @@ pmap_bootstrap_la57(void *arg __unused)
 
 	if ((cpu_stdext_feature2 & CPUID_STDEXT2_LA57) == 0)
 		return;
-	if (!TUNABLE_INT_FETCH("vm.pmap.la57", &la57))
-		la57 = 1;
+	TUNABLE_INT_FETCH("vm.pmap.la57", &la57);
 	if (!la57)
 		return;
 

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 01:39:47 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 643FC62362B;
 Mon,  3 May 2021 01:39:47 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYQdH2PjCz3pSW;
 Mon,  3 May 2021 01:39:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 454F615A0A;
 Mon,  3 May 2021 01:39:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1431dlOG045595;
 Mon, 3 May 2021 01:39:47 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1431dlFx045594;
 Mon, 3 May 2021 01:39:47 GMT (envelope-from git)
Date: Mon, 3 May 2021 01:39:47 GMT
Message-Id: <202105030139.1431dlFx045594@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: 8559a014cd43 - stable/12 - connectat(2): clarify that the s
 argument is socket
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 8559a014cd43399c4b6731d3adca7684dbe468c1
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 01:39:47 -0000

The branch stable/12 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=8559a014cd43399c4b6731d3adca7684dbe468c1

commit 8559a014cd43399c4b6731d3adca7684dbe468c1
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-28 15:47:31 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-03 01:39:27 +0000

    connectat(2): clarify that the s argument is socket
    
    (cherry picked from commit 07f229d20c0cd6285c5ddf1df45eb69bbea4445b)
---
 lib/libc/sys/connectat.2 | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/libc/sys/connectat.2 b/lib/libc/sys/connectat.2
index 1d7e740b89c4..3b90baa0b6f2 100644
--- a/lib/libc/sys/connectat.2
+++ b/lib/libc/sys/connectat.2
@@ -45,7 +45,8 @@
 .Sh DESCRIPTION
 The
 .Fn connectat
-system call initiates a connection on a socket.
+system call initiates a connection on the socket
+.Fa s .
 When passed the special value
 .Dv AT_FDCWD
 in the

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 02:32:45 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id B46686248EF;
 Mon,  3 May 2021 02:32:45 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYRpP4gFfz3rXb;
 Mon,  3 May 2021 02:32:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 932501669F;
 Mon,  3 May 2021 02:32:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1432Wjvr024376;
 Mon, 3 May 2021 02:32:45 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1432WjTq024374;
 Mon, 3 May 2021 02:32:45 GMT (envelope-from git)
Date: Mon, 3 May 2021 02:32:45 GMT
Message-Id: <202105030232.1432WjTq024374@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kevin Bowling <kbowling@FreeBSD.org>
Subject: git: f886c2a0aa7b - stable/13 - e1000: Add support for [Tiger, Alder,
 Meteor] Lake
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kbowling
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: f886c2a0aa7befe3e030f7b4dc5af7758c6573fd
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 02:32:45 -0000

The branch stable/13 has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=f886c2a0aa7befe3e030f7b4dc5af7758c6573fd

commit f886c2a0aa7befe3e030f7b4dc5af7758c6573fd
Author:     Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2021-04-19 02:11:27 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-05-03 02:31:29 +0000

    e1000: Add support for [Tiger, Alder, Meteor] Lake
    
    Add support for current and future client platform PCI IDs. These are
    all I219 variants and have no known driver changes versus previous
    generation client platform I219 variants.
    
    Reviewed by:    markj
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D29801
    
    (cherry picked from commit 59690eab572dde1176886bff7ed0c506df974e5e)
---
 sys/dev/e1000/e1000_api.c     | 23 +++++++++++++++++++++++
 sys/dev/e1000/e1000_hw.h      | 17 +++++++++++++++++
 sys/dev/e1000/e1000_ich8lan.c | 21 +++++++++++++++++++++
 sys/dev/e1000/if_em.c         | 23 +++++++++++++++++++++++
 4 files changed, 84 insertions(+)

diff --git a/sys/dev/e1000/e1000_api.c b/sys/dev/e1000/e1000_api.c
index 4f860166aba4..b1d5ef74c24f 100644
--- a/sys/dev/e1000/e1000_api.c
+++ b/sys/dev/e1000/e1000_api.c
@@ -327,6 +327,26 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
 	case E1000_DEV_ID_PCH_CMP_I219_V11:
 		mac->type = e1000_pch_cnp;
 		break;
+	case E1000_DEV_ID_PCH_TGP_I219_LM13:
+	case E1000_DEV_ID_PCH_TGP_I219_V13:
+	case E1000_DEV_ID_PCH_TGP_I219_LM14:
+	case E1000_DEV_ID_PCH_TGP_I219_V14:
+	case E1000_DEV_ID_PCH_TGP_I219_LM15:
+	case E1000_DEV_ID_PCH_TGP_I219_V15:
+		mac->type = e1000_pch_tgp;
+		break;
+	case E1000_DEV_ID_PCH_ADL_I219_LM16:
+	case E1000_DEV_ID_PCH_ADL_I219_V16:
+	case E1000_DEV_ID_PCH_ADL_I219_LM17:
+	case E1000_DEV_ID_PCH_ADL_I219_V17:
+		mac->type = e1000_pch_adp;
+		break;
+	case E1000_DEV_ID_PCH_MTP_I219_LM18:
+	case E1000_DEV_ID_PCH_MTP_I219_V18:
+	case E1000_DEV_ID_PCH_MTP_I219_LM19:
+	case E1000_DEV_ID_PCH_MTP_I219_V19:
+		mac->type = e1000_pch_mtp;
+		break;
 	case E1000_DEV_ID_82575EB_COPPER:
 	case E1000_DEV_ID_82575EB_FIBER_SERDES:
 	case E1000_DEV_ID_82575GB_QUAD_COPPER:
@@ -479,6 +499,9 @@ s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		e1000_init_function_pointers_ich8lan(hw);
 		break;
 	case e1000_82575:
diff --git a/sys/dev/e1000/e1000_hw.h b/sys/dev/e1000/e1000_hw.h
index f521c2c8c5e6..b3eb1641cca9 100644
--- a/sys/dev/e1000/e1000_hw.h
+++ b/sys/dev/e1000/e1000_hw.h
@@ -161,6 +161,20 @@ struct e1000_hw;
 #define E1000_DEV_ID_PCH_CMP_I219_V11		0x0D4D
 #define E1000_DEV_ID_PCH_CMP_I219_LM12		0x0D53
 #define E1000_DEV_ID_PCH_CMP_I219_V12		0x0D55
+#define E1000_DEV_ID_PCH_TGP_I219_LM13		0x15FB
+#define E1000_DEV_ID_PCH_TGP_I219_V13		0x15FC
+#define E1000_DEV_ID_PCH_TGP_I219_LM14		0x15F9
+#define E1000_DEV_ID_PCH_TGP_I219_V14		0x15FA
+#define E1000_DEV_ID_PCH_TGP_I219_LM15		0x15F4
+#define E1000_DEV_ID_PCH_TGP_I219_V15		0x15F5
+#define E1000_DEV_ID_PCH_ADL_I219_LM16		0x1A1E
+#define E1000_DEV_ID_PCH_ADL_I219_V16		0x1A1F
+#define E1000_DEV_ID_PCH_ADL_I219_LM17		0x1A1C
+#define E1000_DEV_ID_PCH_ADL_I219_V17		0x1A1D
+#define E1000_DEV_ID_PCH_MTP_I219_LM18		0x550A
+#define E1000_DEV_ID_PCH_MTP_I219_V18		0x550B
+#define E1000_DEV_ID_PCH_MTP_I219_LM19		0x550C
+#define E1000_DEV_ID_PCH_MTP_I219_V19		0x550D
 #define E1000_DEV_ID_82576			0x10C9
 #define E1000_DEV_ID_82576_FIBER		0x10E6
 #define E1000_DEV_ID_82576_SERDES		0x10E7
@@ -248,6 +262,9 @@ enum e1000_mac_type {
 	e1000_pch_lpt,
 	e1000_pch_spt,
 	e1000_pch_cnp,
+	e1000_pch_tgp,
+	e1000_pch_adp,
+	e1000_pch_mtp,
 	e1000_82575,
 	e1000_82576,
 	e1000_82580,
diff --git a/sys/dev/e1000/e1000_ich8lan.c b/sys/dev/e1000/e1000_ich8lan.c
index b4f8b6a2b694..b798bacb37a0 100644
--- a/sys/dev/e1000/e1000_ich8lan.c
+++ b/sys/dev/e1000/e1000_ich8lan.c
@@ -346,6 +346,9 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		if (e1000_phy_is_accessible_pchlan(hw))
 			break;
 
@@ -495,6 +498,9 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 		case e1000_pch_lpt:
 		case e1000_pch_spt:
 		case e1000_pch_cnp:
+		case e1000_pch_tgp:
+		case e1000_pch_adp:
+		case e1000_pch_mtp:
 			/* In case the PHY needs to be in mdio slow mode,
 			 * set slow mode and try to get the PHY id again.
 			 */
@@ -794,6 +800,9 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		/* multicast address update for pch2 */
 		mac->ops.update_mc_addr_list =
 			e1000_update_mc_addr_list_pch2lan;
@@ -1832,6 +1841,9 @@ void e1000_init_function_pointers_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		hw->phy.ops.init_params = e1000_init_phy_params_pchlan;
 		break;
 	default:
@@ -2288,6 +2300,9 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
 		break;
 	default:
@@ -3408,6 +3423,9 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
 	switch (hw->mac.type) {
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		bank1_offset = nvm->flash_bank_size;
 		act_offset = E1000_ICH_NVM_SIG_WORD;
 
@@ -4377,6 +4395,9 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		word = NVM_COMPAT;
 		valid_csum_mask = NVM_COMPAT_VALID_CSUM;
 		break;
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 25236bf9cb79..5ac050382ab1 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -180,6 +180,20 @@ static pci_vendor_info_t em_vendor_info_array[] =
 	PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V11, "Intel(R) PRO/1000 Network Connection"),
 	PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM12, "Intel(R) PRO/1000 Network Connection"),
 	PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V12, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_LM13, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_V13, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_LM14, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_V14, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_LM15, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_V15, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_LM16, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_V16, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_LM17, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_V17, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_LM18, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_V18, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_LM19, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_V19, "Intel(R) PRO/1000 Network Connection"),
 	/* required last entry */
 	PVID_END
 };
@@ -1219,6 +1233,9 @@ em_if_mtu_set(if_ctx_t ctx, uint32_t mtu)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 	case e1000_82574:
 	case e1000_82583:
 	case e1000_80003es2lan:
@@ -2514,6 +2531,9 @@ em_reset(if_ctx_t ctx)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		pba = E1000_PBA_26K;
 		break;
 	case e1000_82575:
@@ -2623,6 +2643,9 @@ em_reset(if_ctx_t ctx)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		hw->fc.high_water = 0x5C20;
 		hw->fc.low_water = 0x5048;
 		hw->fc.pause_time = 0x0650;

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 02:32:47 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0AFFD624CA0;
 Mon,  3 May 2021 02:32:47 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYRpQ6FYZz3rjN;
 Mon,  3 May 2021 02:32:46 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B8961166A0;
 Mon,  3 May 2021 02:32:46 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1432WkOK024398;
 Mon, 3 May 2021 02:32:46 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1432Wk91024397;
 Mon, 3 May 2021 02:32:46 GMT (envelope-from git)
Date: Mon, 3 May 2021 02:32:46 GMT
Message-Id: <202105030232.1432Wk91024397@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kevin Bowling <kbowling@FreeBSD.org>
Subject: git: bbe0f3fbc67c - stable/13 - e1000: Fix register name in reg_dump
 sysctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kbowling
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: bbe0f3fbc67c586bd9b8d11b14f7aa2c710931a0
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 02:32:47 -0000

The branch stable/13 has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=bbe0f3fbc67c586bd9b8d11b14f7aa2c710931a0

commit bbe0f3fbc67c586bd9b8d11b14f7aa2c710931a0
Author:     Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2021-04-26 16:30:54 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-05-03 02:31:30 +0000

    e1000: Fix register name in reg_dump sysctl
    
    The correct name of this register is CTRL_EXT.
    
    Approved by:    markj
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D29967
    
    (cherry picked from commit ba7b31b3e967a57c0269330d4e5aacf541d1b479)
---
 sys/dev/e1000/if_em.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 5ac050382ab1..27f498cd3d46 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -654,7 +654,7 @@ static int em_get_regs(SYSCTL_HANDLER_ARGS)
 	sbuf_printf(sb, "General Registers\n");
 	sbuf_printf(sb, "\tCTRL\t %08x\n", regs_buff[0]);
 	sbuf_printf(sb, "\tSTATUS\t %08x\n", regs_buff[1]);
-	sbuf_printf(sb, "\tCTRL_EXIT\t %08x\n\n", regs_buff[2]);
+	sbuf_printf(sb, "\tCTRL_EXT\t %08x\n\n", regs_buff[2]);
 
 	sbuf_printf(sb, "Interrupt Registers\n");
 	sbuf_printf(sb, "\tICR\t %08x\n\n", regs_buff[3]);

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 02:36:07 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 67621624B77;
 Mon,  3 May 2021 02:36:07 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYRtH2Vd5z3rvS;
 Mon,  3 May 2021 02:36:07 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 48B12164A3;
 Mon,  3 May 2021 02:36:07 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1432a7qA024890;
 Mon, 3 May 2021 02:36:07 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1432a73D024889;
 Mon, 3 May 2021 02:36:07 GMT (envelope-from git)
Date: Mon, 3 May 2021 02:36:07 GMT
Message-Id: <202105030236.1432a73D024889@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kevin Bowling <kbowling@FreeBSD.org>
Subject: git: c9c1838988fa - stable/12 - e1000: Add support for [Tiger, Alder,
 Meteor] Lake
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kbowling
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: c9c1838988faa8bcb74af30384ab45a483562727
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 02:36:07 -0000

The branch stable/12 has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=c9c1838988faa8bcb74af30384ab45a483562727

commit c9c1838988faa8bcb74af30384ab45a483562727
Author:     Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2021-04-19 02:11:27 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-05-03 02:34:57 +0000

    e1000: Add support for [Tiger, Alder, Meteor] Lake
    
    Add support for current and future client platform PCI IDs. These are
    all I219 variants and have no known driver changes versus previous
    generation client platform I219 variants.
    
    Reviewed by:    markj
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D29801
    
    (cherry picked from commit 59690eab572dde1176886bff7ed0c506df974e5e)
---
 sys/dev/e1000/e1000_api.c     | 23 +++++++++++++++++++++++
 sys/dev/e1000/e1000_hw.h      | 17 +++++++++++++++++
 sys/dev/e1000/e1000_ich8lan.c | 21 +++++++++++++++++++++
 sys/dev/e1000/if_em.c         | 23 +++++++++++++++++++++++
 4 files changed, 84 insertions(+)

diff --git a/sys/dev/e1000/e1000_api.c b/sys/dev/e1000/e1000_api.c
index 4f860166aba4..b1d5ef74c24f 100644
--- a/sys/dev/e1000/e1000_api.c
+++ b/sys/dev/e1000/e1000_api.c
@@ -327,6 +327,26 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
 	case E1000_DEV_ID_PCH_CMP_I219_V11:
 		mac->type = e1000_pch_cnp;
 		break;
+	case E1000_DEV_ID_PCH_TGP_I219_LM13:
+	case E1000_DEV_ID_PCH_TGP_I219_V13:
+	case E1000_DEV_ID_PCH_TGP_I219_LM14:
+	case E1000_DEV_ID_PCH_TGP_I219_V14:
+	case E1000_DEV_ID_PCH_TGP_I219_LM15:
+	case E1000_DEV_ID_PCH_TGP_I219_V15:
+		mac->type = e1000_pch_tgp;
+		break;
+	case E1000_DEV_ID_PCH_ADL_I219_LM16:
+	case E1000_DEV_ID_PCH_ADL_I219_V16:
+	case E1000_DEV_ID_PCH_ADL_I219_LM17:
+	case E1000_DEV_ID_PCH_ADL_I219_V17:
+		mac->type = e1000_pch_adp;
+		break;
+	case E1000_DEV_ID_PCH_MTP_I219_LM18:
+	case E1000_DEV_ID_PCH_MTP_I219_V18:
+	case E1000_DEV_ID_PCH_MTP_I219_LM19:
+	case E1000_DEV_ID_PCH_MTP_I219_V19:
+		mac->type = e1000_pch_mtp;
+		break;
 	case E1000_DEV_ID_82575EB_COPPER:
 	case E1000_DEV_ID_82575EB_FIBER_SERDES:
 	case E1000_DEV_ID_82575GB_QUAD_COPPER:
@@ -479,6 +499,9 @@ s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		e1000_init_function_pointers_ich8lan(hw);
 		break;
 	case e1000_82575:
diff --git a/sys/dev/e1000/e1000_hw.h b/sys/dev/e1000/e1000_hw.h
index 42b35c4637aa..0a616786e954 100644
--- a/sys/dev/e1000/e1000_hw.h
+++ b/sys/dev/e1000/e1000_hw.h
@@ -161,6 +161,20 @@ struct e1000_hw;
 #define E1000_DEV_ID_PCH_CMP_I219_V11		0x0D4D
 #define E1000_DEV_ID_PCH_CMP_I219_LM12		0x0D53
 #define E1000_DEV_ID_PCH_CMP_I219_V12		0x0D55
+#define E1000_DEV_ID_PCH_TGP_I219_LM13		0x15FB
+#define E1000_DEV_ID_PCH_TGP_I219_V13		0x15FC
+#define E1000_DEV_ID_PCH_TGP_I219_LM14		0x15F9
+#define E1000_DEV_ID_PCH_TGP_I219_V14		0x15FA
+#define E1000_DEV_ID_PCH_TGP_I219_LM15		0x15F4
+#define E1000_DEV_ID_PCH_TGP_I219_V15		0x15F5
+#define E1000_DEV_ID_PCH_ADL_I219_LM16		0x1A1E
+#define E1000_DEV_ID_PCH_ADL_I219_V16		0x1A1F
+#define E1000_DEV_ID_PCH_ADL_I219_LM17		0x1A1C
+#define E1000_DEV_ID_PCH_ADL_I219_V17		0x1A1D
+#define E1000_DEV_ID_PCH_MTP_I219_LM18		0x550A
+#define E1000_DEV_ID_PCH_MTP_I219_V18		0x550B
+#define E1000_DEV_ID_PCH_MTP_I219_LM19		0x550C
+#define E1000_DEV_ID_PCH_MTP_I219_V19		0x550D
 #define E1000_DEV_ID_82576			0x10C9
 #define E1000_DEV_ID_82576_FIBER		0x10E6
 #define E1000_DEV_ID_82576_SERDES		0x10E7
@@ -248,6 +262,9 @@ enum e1000_mac_type {
 	e1000_pch_lpt,
 	e1000_pch_spt,
 	e1000_pch_cnp,
+	e1000_pch_tgp,
+	e1000_pch_adp,
+	e1000_pch_mtp,
 	e1000_82575,
 	e1000_82576,
 	e1000_82580,
diff --git a/sys/dev/e1000/e1000_ich8lan.c b/sys/dev/e1000/e1000_ich8lan.c
index 53d8506054cc..3b480d1d25d1 100644
--- a/sys/dev/e1000/e1000_ich8lan.c
+++ b/sys/dev/e1000/e1000_ich8lan.c
@@ -346,6 +346,9 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		if (e1000_phy_is_accessible_pchlan(hw))
 			break;
 
@@ -495,6 +498,9 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 		case e1000_pch_lpt:
 		case e1000_pch_spt:
 		case e1000_pch_cnp:
+		case e1000_pch_tgp:
+		case e1000_pch_adp:
+		case e1000_pch_mtp:
 			/* In case the PHY needs to be in mdio slow mode,
 			 * set slow mode and try to get the PHY id again.
 			 */
@@ -794,6 +800,9 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		/* multicast address update for pch2 */
 		mac->ops.update_mc_addr_list =
 			e1000_update_mc_addr_list_pch2lan;
@@ -1832,6 +1841,9 @@ void e1000_init_function_pointers_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		hw->phy.ops.init_params = e1000_init_phy_params_pchlan;
 		break;
 	default:
@@ -2288,6 +2300,9 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
 		break;
 	default:
@@ -3408,6 +3423,9 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
 	switch (hw->mac.type) {
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		bank1_offset = nvm->flash_bank_size;
 		act_offset = E1000_ICH_NVM_SIG_WORD;
 
@@ -4377,6 +4395,9 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		word = NVM_COMPAT;
 		valid_csum_mask = NVM_COMPAT_VALID_CSUM;
 		break;
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 2d0f65b34144..79a9d8fdcfe9 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -180,6 +180,20 @@ static pci_vendor_info_t em_vendor_info_array[] =
 	PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V11, "Intel(R) PRO/1000 Network Connection"),
 	PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM12, "Intel(R) PRO/1000 Network Connection"),
 	PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V12, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_LM13, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_V13, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_LM14, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_V14, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_LM15, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_TGP_I219_V15, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_LM16, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_V16, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_LM17, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_ADL_I219_V17, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_LM18, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_V18, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_LM19, "Intel(R) PRO/1000 Network Connection"),
+	PVID(0x8086, E1000_DEV_ID_PCH_MTP_I219_V19, "Intel(R) PRO/1000 Network Connection"),
 	/* required last entry */
 	PVID_END
 };
@@ -1222,6 +1236,9 @@ em_if_mtu_set(if_ctx_t ctx, uint32_t mtu)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 	case e1000_82574:
 	case e1000_82583:
 	case e1000_80003es2lan:
@@ -2504,6 +2521,9 @@ em_reset(if_ctx_t ctx)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		pba = E1000_PBA_26K;
 		break;
 	case e1000_82575:
@@ -2613,6 +2633,9 @@ em_reset(if_ctx_t ctx)
 	case e1000_pch_lpt:
 	case e1000_pch_spt:
 	case e1000_pch_cnp:
+	case e1000_pch_tgp:
+	case e1000_pch_adp:
+	case e1000_pch_mtp:
 		hw->fc.high_water = 0x5C20;
 		hw->fc.low_water = 0x5048;
 		hw->fc.pause_time = 0x0650;

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 02:36:08 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 850F0624A78;
 Mon,  3 May 2021 02:36:08 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYRtJ37vHz3rsF;
 Mon,  3 May 2021 02:36:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5D3A7166A2;
 Mon,  3 May 2021 02:36:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1432a8i7024911;
 Mon, 3 May 2021 02:36:08 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1432a8Pw024910;
 Mon, 3 May 2021 02:36:08 GMT (envelope-from git)
Date: Mon, 3 May 2021 02:36:08 GMT
Message-Id: <202105030236.1432a8Pw024910@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kevin Bowling <kbowling@FreeBSD.org>
Subject: git: d7d72459f2cd - stable/12 - e1000: Fix register name in reg_dump
 sysctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kbowling
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: d7d72459f2cd5ef40683f05f6c6c23bf2a13718a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 02:36:08 -0000

The branch stable/12 has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=d7d72459f2cd5ef40683f05f6c6c23bf2a13718a

commit d7d72459f2cd5ef40683f05f6c6c23bf2a13718a
Author:     Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2021-04-26 16:30:54 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-05-03 02:35:01 +0000

    e1000: Fix register name in reg_dump sysctl
    
    The correct name of this register is CTRL_EXT.
    
    Approved by:    markj
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D29967
    
    (cherry picked from commit ba7b31b3e967a57c0269330d4e5aacf541d1b479)
---
 sys/dev/e1000/if_em.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 79a9d8fdcfe9..32c07f05dec8 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -657,7 +657,7 @@ static int em_get_regs(SYSCTL_HANDLER_ARGS)
 	sbuf_printf(sb, "General Registers\n");
 	sbuf_printf(sb, "\tCTRL\t %08x\n", regs_buff[0]);
 	sbuf_printf(sb, "\tSTATUS\t %08x\n", regs_buff[1]);
-	sbuf_printf(sb, "\tCTRL_EXIT\t %08x\n\n", regs_buff[2]);
+	sbuf_printf(sb, "\tCTRL_EXT\t %08x\n\n", regs_buff[2]);
 
 	sbuf_printf(sb, "Interrupt Registers\n");
 	sbuf_printf(sb, "\tICR\t %08x\n\n", regs_buff[3]);

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 07:53:09 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 02DA062A1B6;
 Mon,  3 May 2021 07:53:09 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYZw46X2Tz4YZF;
 Mon,  3 May 2021 07:53:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D33B61A6BB;
 Mon,  3 May 2021 07:53:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1437r8Up049318;
 Mon, 3 May 2021 07:53:08 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1437r81c049317;
 Mon, 3 May 2021 07:53:08 GMT (envelope-from git)
Date: Mon, 3 May 2021 07:53:08 GMT
Message-Id: <202105030753.1437r81c049317@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Tai-hwa Liang <avatar@FreeBSD.org>
Subject: git: 89ed20a9b6b1 - stable/13 - if_firewire: fixing panic upon packet
 reception for VNET build
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avatar
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 89ed20a9b6b1ae45eb8afba377ef80b202b6d767
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 07:53:09 -0000

The branch stable/13 has been updated by avatar:

URL: https://cgit.FreeBSD.org/src/commit/?id=89ed20a9b6b1ae45eb8afba377ef80b202b6d767

commit 89ed20a9b6b1ae45eb8afba377ef80b202b6d767
Author:     Tai-hwa Liang <avatar@FreeBSD.org>
AuthorDate: 2021-04-10 15:32:27 +0000
Commit:     Tai-hwa Liang <avatar@FreeBSD.org>
CommitDate: 2021-05-03 07:51:53 +0000

    if_firewire: fixing panic upon packet reception for VNET build
    
    netisr_dispatch_src() needs valid VNET pointer or firewire_input() will panic
    when receiving a packet.
    
    Reviewed by:    glebius
    MFC after:      2 weeks
    
    (cherry picked from commit d9b61e7153c64b141436b4d9619b166c6d35a0a6)
---
 sys/net/if_fwsubr.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sys/net/if_fwsubr.c b/sys/net/if_fwsubr.c
index d6296bf33b65..29ca2f713e8e 100644
--- a/sys/net/if_fwsubr.c
+++ b/sys/net/if_fwsubr.c
@@ -634,7 +634,9 @@ firewire_input(struct ifnet *ifp, struct mbuf *m, uint16_t src)
 	}
 
 	M_SETFIB(m, ifp->if_fib);
+	CURVNET_SET_QUIET(ifp->if_vnet);
 	netisr_dispatch(isr, m);
+	CURVNET_RESTORE();
 }
 
 int

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 07:53:10 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 40D4062A49D;
 Mon,  3 May 2021 07:53:10 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYZw60xhJz4YhN;
 Mon,  3 May 2021 07:53:10 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0720A1A838;
 Mon,  3 May 2021 07:53:10 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1437r9wv049340;
 Mon, 3 May 2021 07:53:09 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1437r98a049339;
 Mon, 3 May 2021 07:53:09 GMT (envelope-from git)
Date: Mon, 3 May 2021 07:53:09 GMT
Message-Id: <202105030753.1437r98a049339@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Tai-hwa Liang <avatar@FreeBSD.org>
Subject: git: c59b71fd5414 - stable/13 - arp(8): fixing the deletion failure
 of IEEE1394 associated addresses
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avatar
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: c59b71fd5414b2ae2a175126424cdc58c93d59dd
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 07:53:10 -0000

The branch stable/13 has been updated by avatar:

URL: https://cgit.FreeBSD.org/src/commit/?id=c59b71fd5414b2ae2a175126424cdc58c93d59dd

commit c59b71fd5414b2ae2a175126424cdc58c93d59dd
Author:     Tai-hwa Liang <avatar@FreeBSD.org>
AuthorDate: 2021-04-12 06:27:03 +0000
Commit:     Tai-hwa Liang <avatar@FreeBSD.org>
CommitDate: 2021-05-03 07:51:53 +0000

    arp(8): fixing the deletion failure of IEEE1394 associated addresses
    
    Without this, 'arp -d ${IEEE1394_ADDRESS}' gives the following error:
    
            arp: delete: cannot locate 10.0.0.71
    
    Reviewed by:    glebius
    MFC after:      2 weeks
    
    (cherry picked from commit a0d6d0d0b9aba6d4c025b2f2807e7c4b4c4b2415)
---
 usr.sbin/arp/arp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index 08698c7bc299..f018baa2679e 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -299,6 +299,7 @@ valid_type(int type)
 	switch (type) {
 	case IFT_ETHER:
 	case IFT_FDDI:
+	case IFT_IEEE1394:
 	case IFT_INFINIBAND:
 	case IFT_ISO88023:
 	case IFT_ISO88024:

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 09:49:17 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id BEBC162CD0D;
 Mon,  3 May 2021 09:49:17 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYdV552R6z4d9w;
 Mon,  3 May 2021 09:49:17 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9B5471BFA1;
 Mon,  3 May 2021 09:49:17 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1439nHec095476;
 Mon, 3 May 2021 09:49:17 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1439nH4R095475;
 Mon, 3 May 2021 09:49:17 GMT (envelope-from git)
Date: Mon, 3 May 2021 09:49:17 GMT
Message-Id: <202105030949.1439nH4R095475@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Guangyuan Yang <ygy@FreeBSD.org>
Subject: git: b41a8364fb65 - stable/13 - geom_uzip(4): fix a typo
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: ygy
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: b41a8364fb655f9d84a08e446e850bc98147483b
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 09:49:17 -0000

The branch stable/13 has been updated by ygy (doc committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=b41a8364fb655f9d84a08e446e850bc98147483b

commit b41a8364fb655f9d84a08e446e850bc98147483b
Author:     Ceri Davies <ceri@submonkey.net>
AuthorDate: 2021-04-28 04:55:32 +0000
Commit:     Guangyuan Yang <ygy@FreeBSD.org>
CommitDate: 2021-05-03 09:48:35 +0000

    geom_uzip(4): fix a typo
    
    While I was there, also fixed a whitespace issue reported by mandoc
    -Tlint.
    
    PR:             254338
    
    (cherry picked from commit f33f2365eeefa38730e365bf6813cd0b90c9e9bc)
---
 share/man/man4/geom_uzip.4 | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/share/man/man4/geom_uzip.4 b/share/man/man4/geom_uzip.4
index 359940bd2cf1..4b8e8d355c81 100644
--- a/share/man/man4/geom_uzip.4
+++ b/share/man/man4/geom_uzip.4
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd August 13, 2019
+.Dd April 28, 2021
 .Dt GEOM_UZIP 4
 .Os
 .Sh NAME
@@ -53,7 +53,7 @@ The
 framework provides support for compressed read-only
 disk images.
 This allows significant storage savings at the expense of
-a some CPU time on each read.
+some CPU time on each read.
 Data written in the GEOM label area allows
 .Nm
 to detect compressed images which have been created with
@@ -70,7 +70,7 @@ is not limited to supporting only
 .Xr md 4
 images.
 The image can also reside on a block device.
-.Pq For example, a disk, USB flash drive,  DVD-ROM, etc.
+.Pq For example, a disk, USB flash drive, DVD-ROM, etc .
 The appropriate device node will appear with the
 .Pa .uzip
 suffix.

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 12:35:39 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5E6EF631FA2;
 Mon,  3 May 2021 12:35:39 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYjB324Lbz4mlb;
 Mon,  3 May 2021 12:35:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 39FE51E2B4;
 Mon,  3 May 2021 12:35:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 143CZdMx020960;
 Mon, 3 May 2021 12:35:39 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 143CZdvH020959;
 Mon, 3 May 2021 12:35:39 GMT (envelope-from git)
Date: Mon, 3 May 2021 12:35:39 GMT
Message-Id: <202105031235.143CZdvH020959@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Mark Johnston <markj@FreeBSD.org>
Subject: git: 67dc1da8f32a - stable/13 - imgact_elf: Ensure that the return
 value in parse_notes is initialized
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: markj
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 67dc1da8f32a36e2017cabda4ad6e974a22207b4
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 12:35:39 -0000

The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=67dc1da8f32a36e2017cabda4ad6e974a22207b4

commit 67dc1da8f32a36e2017cabda4ad6e974a22207b4
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-04-26 18:53:16 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-05-03 12:35:33 +0000

    imgact_elf: Ensure that the return value in parse_notes is initialized
    
    parse_notes relies on the caller-supplied callback to initialize "res".
    Two callbacks are used in practice, brandnote_cb and note_fctl_cb, and
    the latter fails to initialize res.  Fix it.
    
    In the worst case, the bug would cause the inner loop of check_note to
    examine more program headers than necessary, and the note header usually
    comes last anyway.
    
    Reviewed by:    kib
    Reported by:    KMSAN
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D29986
    
    (cherry picked from commit 409ab7e109c692014e3484a74af248dd7a4746e8)
---
 sys/kern/imgact_elf.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index 245894926ee1..c4aedbe6bbfa 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -2736,6 +2736,7 @@ note_fctl_cb(const Elf_Note *note, void *arg0, boolean_t *res)
 	desc = (const Elf32_Word *)p;
 	*arg->has_fctl0 = TRUE;
 	*arg->fctl0 = desc[0];
+	*res = TRUE;
 	return (TRUE);
 }
 

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 12:39:34 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D51676320A6;
 Mon,  3 May 2021 12:39:34 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYjGZ5jT5z4n9C;
 Mon,  3 May 2021 12:39:34 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B260C1E5AF;
 Mon,  3 May 2021 12:39:34 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 143CdYVd021343;
 Mon, 3 May 2021 12:39:34 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 143CdYbl021342;
 Mon, 3 May 2021 12:39:34 GMT (envelope-from git)
Date: Mon, 3 May 2021 12:39:34 GMT
Message-Id: <202105031239.143CdYbl021342@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Mark Johnston <markj@FreeBSD.org>
Subject: git: 0048a3237ddb - stable/12 - imgact_elf: Ensure that the return
 value in parse_notes is initialized
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: markj
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 0048a3237ddbf9b83b44a82d9467d65c646e3289
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 12:39:34 -0000

The branch stable/12 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=0048a3237ddbf9b83b44a82d9467d65c646e3289

commit 0048a3237ddbf9b83b44a82d9467d65c646e3289
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-04-26 18:53:16 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-05-03 12:39:02 +0000

    imgact_elf: Ensure that the return value in parse_notes is initialized
    
    parse_notes relies on the caller-supplied callback to initialize "res".
    Two callbacks are used in practice, brandnote_cb and note_fctl_cb, and
    the latter fails to initialize res.  Fix it.
    
    In the worst case, the bug would cause the inner loop of check_note to
    examine more program headers than necessary, and the note header usually
    comes last anyway.
    
    Reviewed by:    kib
    Reported by:    KMSAN
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D29986
    
    (cherry picked from commit 409ab7e109c692014e3484a74af248dd7a4746e8)
---
 sys/kern/imgact_elf.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index 4c05be66e51f..416de09630ae 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -2666,6 +2666,7 @@ note_fctl_cb(const Elf_Note *note, void *arg0, boolean_t *res)
 	p += roundup2(note->n_namesz, ELF_NOTE_ROUNDSIZE);
 	desc = (const Elf32_Word *)p;
 	*arg->fctl0 = desc[0];
+	*res = TRUE;
 	return (TRUE);
 }
 

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 20:11:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2DCB663C58E;
 Mon,  3 May 2021 20:11:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYvJF0m8Gz3hG4;
 Mon,  3 May 2021 20:11:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0D04C2451C;
 Mon,  3 May 2021 20:11:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 143KBe3w032233;
 Mon, 3 May 2021 20:11:40 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 143KBeYW032232;
 Mon, 3 May 2021 20:11:40 GMT (envelope-from git)
Date: Mon, 3 May 2021 20:11:40 GMT
Message-Id: <202105032011.143KBeYW032232@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Andriy Gapon <avg@FreeBSD.org>
Subject: git: dec9f377531d - stable/13 - gpioc_detach: fix freeing of wrong
 pointers
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avg
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: dec9f377531db4ddb6de200d14ee306b61b66bac
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 20:11:41 -0000

The branch stable/13 has been updated by avg:

URL: https://cgit.FreeBSD.org/src/commit/?id=dec9f377531db4ddb6de200d14ee306b61b66bac

commit dec9f377531db4ddb6de200d14ee306b61b66bac
Author:     Andriy Gapon <avg@FreeBSD.org>
AuthorDate: 2021-03-23 10:45:18 +0000
Commit:     Andriy Gapon <avg@FreeBSD.org>
CommitDate: 2021-05-03 20:11:12 +0000

    gpioc_detach: fix freeing of wrong pointers
    
    MFC after:      1 week
    
    (cherry picked from commit 3c6b59567f61277ed487320aa9ad130c6894ad7a)
---
 sys/dev/gpio/gpioc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/gpio/gpioc.c b/sys/dev/gpio/gpioc.c
index 9e46b32ffcba..15d0848fc020 100644
--- a/sys/dev/gpio/gpioc.c
+++ b/sys/dev/gpio/gpioc.c
@@ -618,7 +618,7 @@ gpioc_detach(device_t dev)
 
 	for (int i = 0; i < sc->sc_npins; i++) {
 		mtx_destroy(&sc->sc_pin_intr[i].mtx);
-		free(&sc->sc_pin_intr[i].pin, M_GPIOC);
+		free(sc->sc_pin_intr[i].pin, M_GPIOC);
 	}
 	free(sc->sc_pin_intr, M_GPIOC);
 

From owner-dev-commits-src-branches@freebsd.org  Mon May  3 20:16:25 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8061863C5D1;
 Mon,  3 May 2021 20:16:25 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FYvPj3H8yz3hHW;
 Mon,  3 May 2021 20:16:25 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 63A0A243D3;
 Mon,  3 May 2021 20:16:25 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 143KGPZI034361;
 Mon, 3 May 2021 20:16:25 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 143KGPUX034360;
 Mon, 3 May 2021 20:16:25 GMT (envelope-from git)
Date: Mon, 3 May 2021 20:16:25 GMT
Message-Id: <202105032016.143KGPUX034360@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Andriy Gapon <avg@FreeBSD.org>
Subject: git: 0a28a6a608d0 - stable/12 - gpioc_detach: fix freeing of wrong
 pointers
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avg
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 0a28a6a608d081b819f65a92706392e41764ce5d
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 03 May 2021 20:16:25 -0000

The branch stable/12 has been updated by avg:

URL: https://cgit.FreeBSD.org/src/commit/?id=0a28a6a608d081b819f65a92706392e41764ce5d

commit 0a28a6a608d081b819f65a92706392e41764ce5d
Author:     Andriy Gapon <avg@FreeBSD.org>
AuthorDate: 2021-03-23 10:45:18 +0000
Commit:     Andriy Gapon <avg@FreeBSD.org>
CommitDate: 2021-05-03 20:14:49 +0000

    gpioc_detach: fix freeing of wrong pointers
    
    MFC after:      1 week
    
    (cherry picked from commit 3c6b59567f61277ed487320aa9ad130c6894ad7a)
---
 sys/dev/gpio/gpioc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/gpio/gpioc.c b/sys/dev/gpio/gpioc.c
index 727b07a70589..878f761e6dbc 100644
--- a/sys/dev/gpio/gpioc.c
+++ b/sys/dev/gpio/gpioc.c
@@ -618,7 +618,7 @@ gpioc_detach(device_t dev)
 
 	for (int i = 0; i <= sc->sc_npins; i++) {
 		mtx_destroy(&sc->sc_pin_intr[i].mtx);
-		free(&sc->sc_pin_intr[i].pin, M_GPIOC);
+		free(sc->sc_pin_intr[i].pin, M_GPIOC);
 	}
 	free(sc->sc_pin_intr, M_GPIOC);
 

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 00:43:15 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3E8125F9F98;
 Tue,  4 May 2021 00:43:15 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZ1Kb1DVkz3t8s;
 Tue,  4 May 2021 00:43:15 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1D19327D9E;
 Tue,  4 May 2021 00:43:15 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1440hFC1091320;
 Tue, 4 May 2021 00:43:15 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1440hFA7091319;
 Tue, 4 May 2021 00:43:15 GMT (envelope-from git)
Date: Tue, 4 May 2021 00:43:15 GMT
Message-Id: <202105040043.1440hFA7091319@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Rick Macklem <rmacklem@FreeBSD.org>
Subject: git: bbd5039e9197 - stable/13 - nfsd: fix stripe size reply for the
 File Layout pNFS server
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: rmacklem
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: bbd5039e919728c739d717344f2183c29d142f89
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 00:43:15 -0000

The branch stable/13 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=bbd5039e919728c739d717344f2183c29d142f89

commit bbd5039e919728c739d717344f2183c29d142f89
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-04-20 00:51:07 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-05-04 00:40:01 +0000

    nfsd: fix stripe size reply for the File Layout pNFS server
    
    At a recent testing event I found out that I had misinterpreted
    RFC5661 where it describes the stripe size in the File Layout's
    nfl_util field. This patch fixes the pNFS File Layout server
    so that it returns the correct value to the NFSv4.1/4.2 pNFS
    enabled client.
    
    This affects almost no one, since pNFS server configurations
    are rare and the extant pNFS aware NFS clients seemed to
    function correctly despite the erroneous stripe size.
    It *might* be needed for correct behaviour if a recent
    Linux client mounts a FreeBSD pNFS server configuration
    that is using File Layout (non-mirrored configuration).
    
    (cherry picked from commit 5a89498d19863d0c4cb074f9b93862a70040bf1b)
---
 sys/fs/nfsserver/nfs_nfsdstate.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/sys/fs/nfsserver/nfs_nfsdstate.c b/sys/fs/nfsserver/nfs_nfsdstate.c
index fa7bb3ba9f56..60647ab288d8 100644
--- a/sys/fs/nfsserver/nfs_nfsdstate.c
+++ b/sys/fs/nfsserver/nfs_nfsdstate.c
@@ -6873,14 +6873,8 @@ nfsrv_filelayout(struct nfsrv_descript *nd, int iomode, fhandle_t *fhp,
 	NFSBCOPY(devid, tl, NFSX_V4DEVICEID);		/* Device ID. */
 	tl += (NFSX_V4DEVICEID / NFSX_UNSIGNED);
 
-	/*
-	 * Make the stripe size as many 64K blocks as will fit in the stripe
-	 * mask. Since there is only one stripe, the stripe size doesn't really
-	 * matter, except that the Linux client will only handle an exact
-	 * multiple of their PAGE_SIZE (usually 4K).  I chose 64K as a value
-	 * that should cover most/all arches w.r.t. PAGE_SIZE.
-	 */
-	*tl++ = txdr_unsigned(NFSFLAYUTIL_STRIPE_MASK & ~0xffff);
+	/* Set the stripe size to the maximum I/O size. */
+	*tl++ = txdr_unsigned(NFS_SRVMAXIO & NFSFLAYUTIL_STRIPE_MASK);
 	*tl++ = 0;					/* 1st stripe index. */
 	pattern_offset = 0;
 	txdr_hyper(pattern_offset, tl); tl += 2;	/* Pattern offset. */

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 00:44:38 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id B32755F9AF6;
 Tue,  4 May 2021 00:44:38 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZ1MB4grKz3t6p;
 Tue,  4 May 2021 00:44:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 937A627ECE;
 Tue,  4 May 2021 00:44:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1440ic3U091533;
 Tue, 4 May 2021 00:44:38 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1440icIT091532;
 Tue, 4 May 2021 00:44:38 GMT (envelope-from git)
Date: Tue, 4 May 2021 00:44:38 GMT
Message-Id: <202105040044.1440icIT091532@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Rick Macklem <rmacklem@FreeBSD.org>
Subject: git: d0fbb03a4dc5 - stable/13 - nfscommon: fix function name in
 comment
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: rmacklem
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: d0fbb03a4dc51d78f92c1ef37fd4b6beecb0d724
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 00:44:38 -0000

The branch stable/13 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=d0fbb03a4dc51d78f92c1ef37fd4b6beecb0d724

commit d0fbb03a4dc51d78f92c1ef37fd4b6beecb0d724
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-04-20 03:09:46 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-05-04 00:41:48 +0000

    nfscommon: fix function name in comment
    
    (cherry picked from commit 78ffcb86d98fc9c27ac7a723c65621667036c42d)
---
 sys/fs/nfs/nfs_commonsubs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c
index 4afa4c2d9ab4..a30ee458e06c 100644
--- a/sys/fs/nfs/nfs_commonsubs.c
+++ b/sys/fs/nfs/nfs_commonsubs.c
@@ -4614,7 +4614,7 @@ nfsmout:
  * Handle an NFSv4.1 Sequence request for the session.
  * If reply != NULL, use it to return the cached reply, as required.
  * The client gets a cached reply via this call for callbacks, however the
- * server gets a cached reply via the nfsv4_seqsess_cachereply() call.
+ * server gets a cached reply via the nfsv4_seqsess_cacherep() call.
  */
 int
 nfsv4_seqsession(uint32_t seqid, uint32_t slotid, uint32_t highslot,

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 00:48:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id EBDE05FA1A1;
 Tue,  4 May 2021 00:48:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZ1Rs6JyZz3tCv;
 Tue,  4 May 2021 00:48:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C6F5C27C25;
 Tue,  4 May 2021 00:48:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1440mfuL091911;
 Tue, 4 May 2021 00:48:41 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1440mf46091910;
 Tue, 4 May 2021 00:48:41 GMT (envelope-from git)
Date: Tue, 4 May 2021 00:48:41 GMT
Message-Id: <202105040048.1440mf46091910@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Rick Macklem <rmacklem@FreeBSD.org>
Subject: git: 51c1b8c6e2b9 - stable/12 - nfsd: fix stripe size reply for the
 File Layout pNFS server
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: rmacklem
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 51c1b8c6e2b90dddbd7515416ab7fd3362c44df9
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 00:48:42 -0000

The branch stable/12 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=51c1b8c6e2b90dddbd7515416ab7fd3362c44df9

commit 51c1b8c6e2b90dddbd7515416ab7fd3362c44df9
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-04-20 00:51:07 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-05-04 00:45:30 +0000

    nfsd: fix stripe size reply for the File Layout pNFS server
    
    At a recent testing event I found out that I had misinterpreted
    RFC5661 where it describes the stripe size in the File Layout's
    nfl_util field. This patch fixes the pNFS File Layout server
    so that it returns the correct value to the NFSv4.1/4.2 pNFS
    enabled client.
    
    This affects almost no one, since pNFS server configurations
    are rare and the extant pNFS aware NFS clients seemed to
    function correctly despite the erroneous stripe size.
    It *might* be needed for correct behaviour if a recent
    Linux client mounts a FreeBSD pNFS server configuration
    that is using File Layout (non-mirrored configuration).
    
    (cherry picked from commit 5a89498d19863d0c4cb074f9b93862a70040bf1b)
---
 sys/fs/nfsserver/nfs_nfsdstate.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/sys/fs/nfsserver/nfs_nfsdstate.c b/sys/fs/nfsserver/nfs_nfsdstate.c
index 5aafebf0dd77..f0c72487121c 100644
--- a/sys/fs/nfsserver/nfs_nfsdstate.c
+++ b/sys/fs/nfsserver/nfs_nfsdstate.c
@@ -6849,14 +6849,8 @@ nfsrv_filelayout(struct nfsrv_descript *nd, int iomode, fhandle_t *fhp,
 	NFSBCOPY(devid, tl, NFSX_V4DEVICEID);		/* Device ID. */
 	tl += (NFSX_V4DEVICEID / NFSX_UNSIGNED);
 
-	/*
-	 * Make the stripe size as many 64K blocks as will fit in the stripe
-	 * mask. Since there is only one stripe, the stripe size doesn't really
-	 * matter, except that the Linux client will only handle an exact
-	 * multiple of their PAGE_SIZE (usually 4K).  I chose 64K as a value
-	 * that should cover most/all arches w.r.t. PAGE_SIZE.
-	 */
-	*tl++ = txdr_unsigned(NFSFLAYUTIL_STRIPE_MASK & ~0xffff);
+	/* Set the stripe size to the maximum I/O size. */
+	*tl++ = txdr_unsigned(NFS_SRVMAXIO & NFSFLAYUTIL_STRIPE_MASK);
 	*tl++ = 0;					/* 1st stripe index. */
 	pattern_offset = 0;
 	txdr_hyper(pattern_offset, tl); tl += 2;	/* Pattern offset. */

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 00:50:13 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E71A65FA32E;
 Tue,  4 May 2021 00:50:13 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZ1Td6GcKz3t7H;
 Tue,  4 May 2021 00:50:13 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CA3AF27D63;
 Tue,  4 May 2021 00:50:13 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1440oDIL096693;
 Tue, 4 May 2021 00:50:13 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1440oDLi096690;
 Tue, 4 May 2021 00:50:13 GMT (envelope-from git)
Date: Tue, 4 May 2021 00:50:13 GMT
Message-Id: <202105040050.1440oDLi096690@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Rick Macklem <rmacklem@FreeBSD.org>
Subject: git: 832f2982a1cc - stable/12 - nfscommon: fix function name in
 comment
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: rmacklem
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 832f2982a1cc5c81521cb93712662e23c8eb380b
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 00:50:14 -0000

The branch stable/12 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=832f2982a1cc5c81521cb93712662e23c8eb380b

commit 832f2982a1cc5c81521cb93712662e23c8eb380b
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-04-20 03:09:46 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-05-04 00:47:34 +0000

    nfscommon: fix function name in comment
    
    (cherry picked from commit 78ffcb86d98fc9c27ac7a723c65621667036c42d)
---
 sys/fs/nfs/nfs_commonsubs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c
index 07652fbdb911..39cf9e9fc819 100644
--- a/sys/fs/nfs/nfs_commonsubs.c
+++ b/sys/fs/nfs/nfs_commonsubs.c
@@ -4556,7 +4556,7 @@ nfsmout:
  * Handle an NFSv4.1 Sequence request for the session.
  * If reply != NULL, use it to return the cached reply, as required.
  * The client gets a cached reply via this call for callbacks, however the
- * server gets a cached reply via the nfsv4_seqsess_cachereply() call.
+ * server gets a cached reply via the nfsv4_seqsess_cacherep() call.
  */
 int
 nfsv4_seqsession(uint32_t seqid, uint32_t slotid, uint32_t highslot,

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 12:02:22 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 35D9062FB7D;
 Tue,  4 May 2021 12:02:22 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZJPB0WdNz3CNp;
 Tue,  4 May 2021 12:02:22 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 04E5C1124A;
 Tue,  4 May 2021 12:02:22 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144C2L5T093206;
 Tue, 4 May 2021 12:02:21 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144C2L6q093205;
 Tue, 4 May 2021 12:02:21 GMT (envelope-from git)
Date: Tue, 4 May 2021 12:02:21 GMT
Message-Id: <202105041202.144C2L6q093205@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: fc58438ca26b - stable/12 - pfctl: Revert "pfctl: Another set
 skip <group> fix"
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: fc58438ca26b46f65439bcfc89052de1008b9774
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 12:02:22 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=fc58438ca26b46f65439bcfc89052de1008b9774

commit fc58438ca26b46f65439bcfc89052de1008b9774
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-26 08:07:07 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-04 07:52:00 +0000

    pfctl: Revert "pfctl: Another set skip <group> fix"
    
    This reverts commit 0c156a3c32cd0d9168570da5686ddc96abcbbc5a.
    This fix broke using '<ifgroup>:network' in tables.
    
    MFC after:      1 week
    
    (cherry picked from commit d5b08e13dd6beb3436e181ff1f3e034cc8186584)
---
 sbin/pfctl/pfctl_parser.c | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c
index 2efb97285798..7416ae26be48 100644
--- a/sbin/pfctl/pfctl_parser.c
+++ b/sbin/pfctl/pfctl_parser.c
@@ -1392,26 +1392,6 @@ ifa_exists(char *ifa_name)
 	return (NULL);
 }
 
-static struct node_host *
-if_lookup(char *if_name)
-{
-	struct node_host *p, *n;
-
-	for (p = iftab; p; p = p->next) {
-		if (! strcmp(if_name, p->ifname)) {
-			n = calloc(1, sizeof(struct node_host));
-			bcopy(p, n, sizeof(struct node_host));
-
-			n->next = NULL;
-			n->tail = n;
-
-			return (n);
-		}
-	}
-
-	return (NULL);
-}
-
 struct node_host *
 ifa_grouplookup(char *ifa_name, int flags)
 {
@@ -1435,7 +1415,7 @@ ifa_grouplookup(char *ifa_name, int flags)
 	for (ifg = ifgr.ifgr_groups; ifg && len >= sizeof(struct ifg_req);
 	    ifg++) {
 		len -= sizeof(struct ifg_req);
-		if ((n = if_lookup(ifg->ifgrq_member)) == NULL)
+		if ((n = ifa_lookup(ifg->ifgrq_member, flags)) == NULL)
 			continue;
 		if (h == NULL)
 			h = n;

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 12:02:23 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8A35662FBDC;
 Tue,  4 May 2021 12:02:23 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZJPC2YCJz3CZk;
 Tue,  4 May 2021 12:02:23 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3C1B0113A9;
 Tue,  4 May 2021 12:02:23 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144C2N6X093231;
 Tue, 4 May 2021 12:02:23 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144C2MF7093230;
 Tue, 4 May 2021 12:02:22 GMT (envelope-from git)
Date: Tue, 4 May 2021 12:02:22 GMT
Message-Id: <202105041202.144C2MF7093230@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: dbe42afd0a95 - stable/12 - pf tests: Test using
 '<ifgroup>:network' in tables
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: dbe42afd0a95d943331c2552582df8c4b8a23222
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 12:02:23 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=dbe42afd0a95d943331c2552582df8c4b8a23222

commit dbe42afd0a95d943331c2552582df8c4b8a23222
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-25 10:18:48 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-04 07:54:45 +0000

    pf tests: Test using '<ifgroup>:network' in tables
    
    MFC after:      1 week
    
    (cherry picked from commit daa5350d0e0c5fbe42c5a057dd37b9d22df91bb7)
---
 tests/sys/netpfil/pf/table.sh | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/tests/sys/netpfil/pf/table.sh b/tests/sys/netpfil/pf/table.sh
index 8aae4cf492c5..5826fab245d8 100644
--- a/tests/sys/netpfil/pf/table.sh
+++ b/tests/sys/netpfil/pf/table.sh
@@ -146,9 +146,41 @@ pr251414_cleanup()
 	pft_cleanup
 }
 
+atf_test_case "network" "cleanup"
+network_head()
+{
+	atf_set descr 'Test <ifgroup>:network'
+	atf_set require.user root
+}
+
+network_body()
+{
+	pft_init
+
+	epair=$(vnet_mkepair)
+	ifconfig ${epair}a 192.0.2.1/24 up
+
+	vnet_mkjail alcatraz ${epair}b
+	jexec alcatraz ifconfig ${epair}b 192.0.2.2/24 up
+	jexec alcatraz pfctl -e
+
+	pft_set_rules alcatraz \
+		"table <allow> const { epair:network }"\
+		"block in" \
+		"pass in from <allow>"
+
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2
+}
+
+network_cleanup()
+{
+	pft_cleanup
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case "v4_counters"
 	atf_add_test_case "v6_counters"
 	atf_add_test_case "pr251414"
+	atf_add_test_case "network"
 }

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 12:02:25 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id C3CFC62FD4F;
 Tue,  4 May 2021 12:02:25 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZJPF50hxz3CFW;
 Tue,  4 May 2021 12:02:25 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9BAE111374;
 Tue,  4 May 2021 12:02:25 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144C2PJP093343;
 Tue, 4 May 2021 12:02:25 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144C2PRs093342;
 Tue, 4 May 2021 12:02:25 GMT (envelope-from git)
Date: Tue, 4 May 2021 12:02:25 GMT
Message-Id: <202105041202.144C2PRs093342@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 487633009f6f - stable/13 - pfctl: Revert "pfctl: Another set
 skip <group> fix"
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 487633009f6f1c819d947f53d903c7716f27d682
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 12:02:25 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=487633009f6f1c819d947f53d903c7716f27d682

commit 487633009f6f1c819d947f53d903c7716f27d682
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-26 08:07:07 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-04 07:50:34 +0000

    pfctl: Revert "pfctl: Another set skip <group> fix"
    
    This reverts commit 0c156a3c32cd0d9168570da5686ddc96abcbbc5a.
    This fix broke using '<ifgroup>:network' in tables.
    
    MFC after:      1 week
    
    (cherry picked from commit d5b08e13dd6beb3436e181ff1f3e034cc8186584)
---
 sbin/pfctl/pfctl_parser.c | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c
index 1fd26711ea86..47a3992da128 100644
--- a/sbin/pfctl/pfctl_parser.c
+++ b/sbin/pfctl/pfctl_parser.c
@@ -1392,26 +1392,6 @@ ifa_exists(char *ifa_name)
 	return (NULL);
 }
 
-static struct node_host *
-if_lookup(char *if_name)
-{
-	struct node_host *p, *n;
-
-	for (p = iftab; p; p = p->next) {
-		if (! strcmp(if_name, p->ifname)) {
-			n = calloc(1, sizeof(struct node_host));
-			bcopy(p, n, sizeof(struct node_host));
-
-			n->next = NULL;
-			n->tail = n;
-
-			return (n);
-		}
-	}
-
-	return (NULL);
-}
-
 struct node_host *
 ifa_grouplookup(char *ifa_name, int flags)
 {
@@ -1435,7 +1415,7 @@ ifa_grouplookup(char *ifa_name, int flags)
 	for (ifg = ifgr.ifgr_groups; ifg && len >= sizeof(struct ifg_req);
 	    ifg++) {
 		len -= sizeof(struct ifg_req);
-		if ((n = if_lookup(ifg->ifgrq_member)) == NULL)
+		if ((n = ifa_lookup(ifg->ifgrq_member, flags)) == NULL)
 			continue;
 		if (h == NULL)
 			h = n;

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 12:02:27 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0765C62FF80;
 Tue,  4 May 2021 12:02:27 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZJPG5p56z3CZy;
 Tue,  4 May 2021 12:02:26 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B6F5111582;
 Tue,  4 May 2021 12:02:26 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144C2QGa093364;
 Tue, 4 May 2021 12:02:26 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144C2QBa093363;
 Tue, 4 May 2021 12:02:26 GMT (envelope-from git)
Date: Tue, 4 May 2021 12:02:26 GMT
Message-Id: <202105041202.144C2QBa093363@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: d6d039ea74a2 - stable/13 - pf tests: Test using
 '<ifgroup>:network' in tables
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: d6d039ea74a26357173d1263682d4f5119037434
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 12:02:27 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=d6d039ea74a26357173d1263682d4f5119037434

commit d6d039ea74a26357173d1263682d4f5119037434
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-25 10:18:48 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-04 07:51:25 +0000

    pf tests: Test using '<ifgroup>:network' in tables
    
    MFC after:      1 week
    
    (cherry picked from commit daa5350d0e0c5fbe42c5a057dd37b9d22df91bb7)
---
 tests/sys/netpfil/pf/table.sh | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/tests/sys/netpfil/pf/table.sh b/tests/sys/netpfil/pf/table.sh
index 9003f61ba189..516895ae1759 100644
--- a/tests/sys/netpfil/pf/table.sh
+++ b/tests/sys/netpfil/pf/table.sh
@@ -146,9 +146,41 @@ pr251414_cleanup()
 	pft_cleanup
 }
 
+atf_test_case "network" "cleanup"
+network_head()
+{
+	atf_set descr 'Test <ifgroup>:network'
+	atf_set require.user root
+}
+
+network_body()
+{
+	pft_init
+
+	epair=$(vnet_mkepair)
+	ifconfig ${epair}a 192.0.2.1/24 up
+
+	vnet_mkjail alcatraz ${epair}b
+	jexec alcatraz ifconfig ${epair}b 192.0.2.2/24 up
+	jexec alcatraz pfctl -e
+
+	pft_set_rules alcatraz \
+		"table <allow> const { epair:network }"\
+		"block in" \
+		"pass in from <allow>"
+
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2
+}
+
+network_cleanup()
+{
+	pft_cleanup
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case "v4_counters"
 	atf_add_test_case "v6_counters"
 	atf_add_test_case "pr251414"
+	atf_add_test_case "network"
 }

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 21:43:07 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5616E6247C5;
 Tue,  4 May 2021 21:43:07 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZYHH23Ftz4Xry;
 Tue,  4 May 2021 21:43:07 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3957219382;
 Tue,  4 May 2021 21:43:07 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144Lh7hC072617;
 Tue, 4 May 2021 21:43:07 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144Lh7u9072616;
 Tue, 4 May 2021 21:43:07 GMT (envelope-from git)
Date: Tue, 4 May 2021 21:43:07 GMT
Message-Id: <202105042143.144Lh7u9072616@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Subject: git: 3fd9848f1593 - stable/13 - [rtsock] Enforce netmask/RTF_HOST
 consistency.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: melifaro
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 3fd9848f15930d5ddde4375e540045cc4dc214d6
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 21:43:07 -0000

The branch stable/13 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=3fd9848f15930d5ddde4375e540045cc4dc214d6

commit 3fd9848f15930d5ddde4375e540045cc4dc214d6
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2021-04-23 21:53:47 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2021-05-04 21:29:36 +0000

    [rtsock] Enforce netmask/RTF_HOST consistency.
    
    Traditionally we had 2 sources of information whether the
     added/delete route request targets network or a host route:
    netmask (RTA_NETMASK) and RTF_HOST flag.
    
    The former one is tricky: netmask can be empty or can explicitly
     specify the host netmask. Parsing netmask sockaddr requires per-family
     parsing and that's what rtsock code traditionally avoided. As a result,
     consistency was not enforced and it was possible to specify network with
     the RTF_HOST flag and vice versa.
    
    Continue normalization efforts from D29826 and D29826 and ensure that
     RTF_HOST flag always reflects host/network data from netmask field.
    
    Differential Revision: https://reviews.freebsd.org/D29958
    MFC after:      2 days
    
    (cherry picked from commit 5d1403a79a3e56403fb63c062252a23fce81e5f1)
---
 sys/net/rtsock.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 405300a394de..6930bd167ac1 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -1503,6 +1503,7 @@ cleanup_xaddrs_inet(struct rt_addrinfo *info, struct linear_buffer *lb)
 			return (ENOBUFS);
 		fill_sockaddr_inet(mask_sa, mask);
 		info->rti_info[RTAX_NETMASK] = (struct sockaddr *)mask_sa;
+		info->rti_flags &= ~RTF_HOST;
 	} else
 		remove_netmask(info);
 
@@ -1563,6 +1564,7 @@ cleanup_xaddrs_inet6(struct rt_addrinfo *info, struct linear_buffer *lb)
 			return (ENOBUFS);
 		fill_sockaddr_inet6((struct sockaddr_in6 *)sa, &mask, 0);
 		info->rti_info[RTAX_NETMASK] = sa;
+		info->rti_flags &= ~RTF_HOST;
 	} else
 		remove_netmask(info);
 

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 21:43:08 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 857136246BC;
 Tue,  4 May 2021 21:43:08 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZYHJ37X8z4Xb6;
 Tue,  4 May 2021 21:43:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5CE7C190AA;
 Tue,  4 May 2021 21:43:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144Lh8dx072640;
 Tue, 4 May 2021 21:43:08 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144Lh8al072639;
 Tue, 4 May 2021 21:43:08 GMT (envelope-from git)
Date: Tue, 4 May 2021 21:43:08 GMT
Message-Id: <202105042143.144Lh8al072639@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Subject: git: 83add84c00ed - stable/13 - [fib algo] Delay algo init at fib
 growth to to allow to reliably use rib KPI.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: melifaro
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 83add84c00edfe0e690568a2bb23fcaf3ccfbb20
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 21:43:08 -0000

The branch stable/13 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=83add84c00edfe0e690568a2bb23fcaf3ccfbb20

commit 83add84c00edfe0e690568a2bb23fcaf3ccfbb20
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2021-04-25 10:22:45 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2021-05-04 21:30:35 +0000

    [fib algo] Delay algo init at fib growth to to allow to reliably use rib KPI.
    
    Currently, most of the rib(9) KPI does not use rnh pointers, using
     fibnum and family parameters to determine the rib pointer instead.
    This works well except for the case when we initialize new rib pointers
     during fib growth.
    In that case, there is no mapping between fib/family and the new rib,
     as an entirely new rib pointer array is populated.
    
    Address this by delaying fib algo initialization till after switching
     to the new pointer array and updating the number of fibs.
    Set datapath pointer to the dummy function, so the potential callers
     won't crash the kernel in the brief moment when the rib exists, but
     no fib algo is attached.
    
    This change allows to avoid creating duplicates of existing rib functions,
     with altered signature.
    
    Differential Revision: https://reviews.freebsd.org/D29969
    MFC after:      1 week
    
    (cherry picked from commit 8a0d57baecf70aa7f49b0b1468f6264c75d8e6df)
---
 sys/net/route/fib_algo.c     | 89 ++++++++++++++++++++++++++++++++------------
 sys/net/route/route_tables.c | 17 +++++----
 sys/net/route/route_var.h    |  3 +-
 3 files changed, 76 insertions(+), 33 deletions(-)

diff --git a/sys/net/route/fib_algo.c b/sys/net/route/fib_algo.c
index 9fdc80001986..837ea7c2b43b 100644
--- a/sys/net/route/fib_algo.c
+++ b/sys/net/route/fib_algo.c
@@ -1538,6 +1538,12 @@ SYSCTL_PROC(_net_route_algo_inet6, OID_AUTO, algo,
     set_algo_inet6_sysctl_handler, "A", "Set IPv6 lookup algo");
 #endif
 
+static struct nhop_object *
+dummy_lookup(void *algo_data, const struct flm_lookup_key key, uint32_t scopeid)
+{
+	return (NULL);
+}
+
 static void
 destroy_fdh_epoch(epoch_context_t ctx)
 {
@@ -1556,8 +1562,15 @@ alloc_fib_dp_array(uint32_t num_tables, bool waitok)
 	sz = sizeof(struct fib_dp_header);
 	sz += sizeof(struct fib_dp) * num_tables;
 	fdh = malloc(sz, M_RTABLE, (waitok ? M_WAITOK : M_NOWAIT) | M_ZERO);
-	if (fdh != NULL)
+	if (fdh != NULL) {
 		fdh->fdh_num_tables = num_tables;
+		/*
+		 * Set dummy lookup function ptr always returning NULL, so
+		 * we can delay algo init.
+		 */
+		for (uint32_t i = 0; i < num_tables; i++)
+			fdh->fdh_idx[i].f = dummy_lookup;
+	}
 	return (fdh);
 }
 
@@ -1933,19 +1946,18 @@ fib_check_best_algo(struct rib_head *rh, struct fib_lookup_module *orig_flm)
  * Called when new route table is created.
  * Selects, allocates and attaches fib algo for the table.
  */
-int
-fib_select_algo_initial(struct rib_head *rh)
+static bool
+fib_select_algo_initial(struct rib_head *rh, struct fib_dp *dp)
 {
 	struct fib_lookup_module *flm;
 	struct fib_data *fd = NULL;
 	enum flm_op_result result;
 	struct epoch_tracker et;
-	int error = 0;
 
 	flm = fib_check_best_algo(rh, NULL);
 	if (flm == NULL) {
 		RH_PRINTF(LOG_CRIT, rh, "no algo selected");
-		return (ENOENT);
+		return (false);
 	}
 	RH_PRINTF(LOG_INFO, rh, "selected algo %s", flm->flm_name);
 
@@ -1956,29 +1968,58 @@ fib_select_algo_initial(struct rib_head *rh)
 	NET_EPOCH_EXIT(et);
 
 	RH_PRINTF(LOG_DEBUG, rh, "result=%d fd=%p", result, fd);
-	if (result == FLM_SUCCESS) {
-
-		/*
-		 * Attach datapath directly to avoid multiple reallocations
-		 * during fib growth
-		 */
-		struct fib_dp_header *fdp;
-		struct fib_dp **pdp;
-
-		pdp = get_family_dp_ptr(rh->rib_family);
-		if (pdp != NULL) {
-			fdp = get_fib_dp_header(*pdp);
-			fdp->fdh_idx[fd->fd_fibnum] = fd->fd_dp;
-			FD_PRINTF(LOG_INFO, fd, "datapath attached");
-		}
-	} else {
-		error = EINVAL;
+	if (result == FLM_SUCCESS)
+		*dp = fd->fd_dp;
+	else
 		RH_PRINTF(LOG_CRIT, rh, "unable to setup algo %s", flm->flm_name);
-	}
 
 	fib_unref_algo(flm);
 
-	return (error);
+	return (result == FLM_SUCCESS);
+}
+
+/*
+ * Sets up fib algo instances for the non-initialized RIBs in the @family.
+ * Allocates temporary datapath index to amortize datapaint index updates
+ * with large @num_tables.
+ */
+void
+fib_setup_family(int family, uint32_t num_tables)
+{
+	struct fib_dp_header *new_fdh = alloc_fib_dp_array(num_tables, false);
+	if (new_fdh == NULL) {
+		ALGO_PRINTF(LOG_CRIT, "Unable to setup framework for %s", print_family(family));
+		return;
+	}
+
+	for (int i = 0; i < num_tables; i++) {
+		struct rib_head *rh = rt_tables_get_rnh(i, family);
+		if (rh->rib_algo_init)
+			continue;
+		if (!fib_select_algo_initial(rh, &new_fdh->fdh_idx[i]))
+			continue;
+
+		rh->rib_algo_init = true;
+	}
+
+	FIB_MOD_LOCK();
+	struct fib_dp **pdp = get_family_dp_ptr(family);
+	struct fib_dp_header *old_fdh = get_fib_dp_header(*pdp);
+
+	/* Update the items not touched by the new init, from the old data pointer */
+	for (int i = 0; i < num_tables; i++) {
+		if (new_fdh->fdh_idx[i].f == dummy_lookup)
+			new_fdh->fdh_idx[i] = old_fdh->fdh_idx[i];
+	}
+
+	/* Ensure all index writes have completed */
+	atomic_thread_fence_rel();
+	/* Set new datapath pointer */
+	*pdp = &new_fdh->fdh_idx[0];
+
+	FIB_MOD_UNLOCK();
+
+	fib_epoch_call(destroy_fdh_epoch, &old_fdh->fdh_epoch_ctx);
 }
 
 /*
diff --git a/sys/net/route/route_tables.c b/sys/net/route/route_tables.c
index e3743d55404d..c9a9d6a915eb 100644
--- a/sys/net/route/route_tables.c
+++ b/sys/net/route/route_tables.c
@@ -214,13 +214,6 @@ grow_rtables(uint32_t num_tables)
 			if (rh == NULL)
 				log(LOG_ERR, "unable to create routing table for %d.%d\n",
 				    dom->dom_family, i);
-#ifdef FIB_ALGO
-			if (fib_select_algo_initial(rh) != 0) {
-				log(LOG_ERR, "unable to select algo for table %d.%d\n",
-				    dom->dom_family, i);
-				// TODO: detach table
-			}
-#endif
 			*prnh = rh;
 		}
 	}
@@ -238,9 +231,17 @@ grow_rtables(uint32_t num_tables)
 	atomic_thread_fence_rel();
 	epoch_wait_preempt(net_epoch_preempt);
 
-	/* Finally, set number of fibs to a new value */
+	/* Set number of fibs to a new value */
 	V_rt_numfibs = num_tables;
 
+#ifdef FIB_ALGO
+	/* Attach fib algo to the new rtables */
+	for (dom = domains; dom; dom = dom->dom_next) {
+		if (dom->dom_rtattach != NULL)
+			fib_setup_family(dom->dom_family, num_tables);
+	}
+#endif
+
 	if (old_rt_tables != NULL)
 		free(old_rt_tables, M_RTABLE);
 }
diff --git a/sys/net/route/route_var.h b/sys/net/route/route_var.h
index f12931476fd3..ad397104209b 100644
--- a/sys/net/route/route_var.h
+++ b/sys/net/route/route_var.h
@@ -76,6 +76,7 @@ struct rib_head {
 #endif
 	uint32_t		rib_dying:1;	/* rib is detaching */
 	uint32_t		rib_algo_fixed:1;/* fixed algorithm */
+	uint32_t		rib_algo_init:1;/* algo init done */
 	struct nh_control	*nh_control;	/* nexthop subsystem data */
 	CK_STAILQ_HEAD(, rib_subscription)	rnh_subscribers;/* notification subscribers */
 };
@@ -328,7 +329,7 @@ int rtsock_addrmsg(int cmd, struct ifaddr *ifa, int fibnum);
 
 /* lookup_framework.c */
 void fib_grow_rtables(uint32_t new_num_tables);
-int fib_select_algo_initial(struct rib_head *rh);
+void fib_setup_family(int family, uint32_t num_tables);
 void fib_destroy_rib(struct rib_head *rh);
 void vnet_fib_init(void);
 void vnet_fib_destroy(void);

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 21:43:11 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 309986249F4;
 Tue,  4 May 2021 21:43:11 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZYHM0bvPz4XsB;
 Tue,  4 May 2021 21:43:11 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C222718F2E;
 Tue,  4 May 2021 21:43:10 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144LhAr6072689;
 Tue, 4 May 2021 21:43:10 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144LhAUW072688;
 Tue, 4 May 2021 21:43:10 GMT (envelope-from git)
Date: Tue, 4 May 2021 21:43:10 GMT
Message-Id: <202105042143.144LhAUW072688@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Subject: git: 939c41f3b89b - stable/13 - Fix drace CTF for the rib_head.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: melifaro
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 939c41f3b89b18054b59a4432fdf18d583377849
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 21:43:11 -0000

The branch stable/13 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=939c41f3b89b18054b59a4432fdf18d583377849

commit 939c41f3b89b18054b59a4432fdf18d583377849
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2021-04-27 07:47:53 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2021-05-04 21:31:25 +0000

    Fix drace CTF for the rib_head.
    
    33cb3cb2e321 introduced an `rib_head` structure field under the
    FIB_ALGO define. This may be problematic for the CTF, as some
     of the files including `route_var.h` do not have `fib_algo`
     defined.
    
    Make dtrace happy by making the field unconditional.
    
    Suggested by:   markj
    
    (cherry picked from commit bc5ef45aec3fa8acf2dd3408cebd207317543a8b)
---
 sys/net/route/route_var.h | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/sys/net/route/route_var.h b/sys/net/route/route_var.h
index ad397104209b..b29b79c88864 100644
--- a/sys/net/route/route_var.h
+++ b/sys/net/route/route_var.h
@@ -71,9 +71,7 @@ struct rib_head {
 	struct callout		expire_callout;	/* Callout for expiring dynamic routes */
 	time_t			next_expire;	/* Next expire run ts */
 	uint32_t		rnh_prefixes;	/* Number of prefixes */
-#ifdef FIB_ALGO
-	rt_gen_t		rnh_gen_rib;	/* rib generation counter */
-#endif
+	rt_gen_t		rnh_gen_rib;	/* fib algo: rib generation counter */
 	uint32_t		rib_dying:1;	/* rib is detaching */
 	uint32_t		rib_algo_fixed:1;/* fixed algorithm */
 	uint32_t		rib_algo_init:1;/* algo init done */

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 21:43:11 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1E230624A98;
 Tue,  4 May 2021 21:43:11 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZYHL1qSlz4Xpc;
 Tue,  4 May 2021 21:43:09 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 89D031930B;
 Tue,  4 May 2021 21:43:09 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144Lh9u4072661;
 Tue, 4 May 2021 21:43:09 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144Lh9ZZ072660;
 Tue, 4 May 2021 21:43:09 GMT (envelope-from git)
Date: Tue, 4 May 2021 21:43:09 GMT
Message-Id: <202105042143.144Lh9ZZ072660@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Subject: git: d0666c87184f - stable/13 - Add rib_walk_from() wrapper for
 selective rib tree traversal.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: melifaro
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: d0666c87184f977442fec32a820cac63b5334bbd
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 21:43:11 -0000

The branch stable/13 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=d0666c87184f977442fec32a820cac63b5334bbd

commit d0666c87184f977442fec32a820cac63b5334bbd
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2021-04-25 11:59:40 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2021-05-04 21:30:35 +0000

    Add rib_walk_from() wrapper for selective rib tree traversal.
    
    Provide wrapper for the rnh_walktree_from() rib callback.
    As currently `struct rib_head` is considered internal to the
     routing subsystem, this wrapper is necessary to maintain isolation
     from the external code.
    
    Differential Revision: https://reviews.freebsd.org/D29971
    MFC after:      1 week
    
    (cherry picked from commit f9668e42b44f22c9ab213eb9a4792d5acfcf6903)
---
 sys/net/route/route_ctl.h     |  6 ++++++
 sys/net/route/route_helpers.c | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git a/sys/net/route/route_ctl.h b/sys/net/route/route_ctl.h
index 46dba759f8df..4fe45cc8a970 100644
--- a/sys/net/route/route_ctl.h
+++ b/sys/net/route/route_ctl.h
@@ -62,6 +62,10 @@ int rib_add_redirect(u_int fibnum, struct sockaddr *dst,
   struct sockaddr *gateway, struct sockaddr *author, struct ifnet *ifp,
   int flags, int expire_sec);
 
+/* common flags for the functions below */
+#define	RIB_FLAG_WLOCK		0x01	/* Need exclusive rnh lock */
+#define	RIB_FLAG_LOCKED		0x02	/* Do not explicitly acquire rnh lock */
+
 enum rib_walk_hook {
 	RIB_WALK_HOOK_PRE,	/* Hook is called before iteration */
 	RIB_WALK_HOOK_POST,	/* Hook is called after iteration */
@@ -77,6 +81,8 @@ void rib_walk_ext_internal(struct rib_head *rnh, bool wlock,
     rib_walktree_f_t *wa_f, rib_walk_hook_f_t *hook_f, void *arg);
 void rib_walk_ext_locked(struct rib_head *rnh, rib_walktree_f_t *wa_f,
     rib_walk_hook_f_t *hook_f, void *arg);
+void rib_walk_from(uint32_t fibnum, int family, uint32_t flags, struct sockaddr *prefix,
+    struct sockaddr *mask, rib_walktree_f_t *wa_f, void *arg);
 
 void rib_walk_del(u_int fibnum, int family, rib_filter_f_t *filter_f,
     void *arg, bool report);
diff --git a/sys/net/route/route_helpers.c b/sys/net/route/route_helpers.c
index 782e160ca51b..5d29197cc4fb 100644
--- a/sys/net/route/route_helpers.c
+++ b/sys/net/route/route_helpers.c
@@ -128,6 +128,38 @@ rib_walk(uint32_t fibnum, int family, bool wlock, rib_walktree_f_t *wa_f,
 	rib_walk_ext(fibnum, family, wlock, wa_f, NULL, arg);
 }
 
+/*
+ * Calls @wa_f with @arg for each entry in the table matching @prefix/@mask.
+ *
+ * The following flags are supported:
+ *  RIB_FLAG_WLOCK: acquire exclusive lock
+ *  RIB_FLAG_LOCKED: Assumes the table is already locked & skip locking
+ *
+ * By default, table is traversed under read lock.
+ */
+void
+rib_walk_from(uint32_t fibnum, int family, uint32_t flags, struct sockaddr *prefix,
+    struct sockaddr *mask, rib_walktree_f_t *wa_f, void *arg)
+{
+	RIB_RLOCK_TRACKER;
+	struct rib_head *rnh = rt_tables_get_rnh(fibnum, family);
+
+	if (rnh == NULL)
+		return;
+
+	if (flags & RIB_FLAG_WLOCK)
+		RIB_WLOCK(rnh);
+	else if (!(flags & RIB_FLAG_LOCKED))
+		RIB_RLOCK(rnh);
+
+	rnh->rnh_walktree_from(&rnh->head, prefix, mask, (walktree_f_t *)wa_f, arg);
+
+	if (flags & RIB_FLAG_WLOCK)
+		RIB_WUNLOCK(rnh);
+	else if (!(flags & RIB_FLAG_LOCKED))
+		RIB_RUNLOCK(rnh);
+}
+
 /*
  * Iterates over all existing fibs in system calling
  *  @hook_f function before/after traversing each fib.

From owner-dev-commits-src-branches@freebsd.org  Tue May  4 21:43:14 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E351E624B04;
 Tue,  4 May 2021 21:43:13 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZYHM75Rhz4Xn9;
 Tue,  4 May 2021 21:43:11 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BF46E19383;
 Tue,  4 May 2021 21:43:11 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 144LhBIU072712;
 Tue, 4 May 2021 21:43:11 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 144LhBMZ072711;
 Tue, 4 May 2021 21:43:11 GMT (envelope-from git)
Date: Tue, 4 May 2021 21:43:11 GMT
Message-Id: <202105042143.144LhBMZ072711@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alexander V. Chernikov" <melifaro@FreeBSD.org>
Subject: git: 972fcfb34b0d - stable/13 - [fib algo] Update fib_gen counter
 under FIB_MOD_LOCK.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: melifaro
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 972fcfb34b0d84dc1d869c351da8e19c702a3c35
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 04 May 2021 21:43:14 -0000

The branch stable/13 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=972fcfb34b0d84dc1d869c351da8e19c702a3c35

commit 972fcfb34b0d84dc1d869c351da8e19c702a3c35
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2021-04-28 20:21:58 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2021-05-04 21:31:36 +0000

    [fib algo] Update fib_gen counter under FIB_MOD_LOCK.
    
    MFC after:      3 days
    
    (cherry picked from commit 41ce0e34ea42a4f7113d1ba15d25b9b64d5921b8)
---
 sys/net/route/fib_algo.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys/net/route/fib_algo.c b/sys/net/route/fib_algo.c
index 837ea7c2b43b..3a09408c92b1 100644
--- a/sys/net/route/fib_algo.c
+++ b/sys/net/route/fib_algo.c
@@ -1169,19 +1169,19 @@ try_setup_fd_instance(struct fib_lookup_module *flm, struct rib_head *rh,
 	estimate_nhop_scale(old_fd, fd);
 
 	fd->fd_rh = rh;
-	fd->fd_gen = ++fib_gen;
 	fd->fd_family = rh->rib_family;
 	fd->fd_fibnum = rh->rib_fibnum;
 	callout_init_rm(&fd->fd_callout, &rh->rib_lock, 0);
 	fd->fd_vnet = curvnet;
 	fd->fd_flm = flm;
 
-	FD_PRINTF(LOG_DEBUG, fd, "allocated fd %p", fd);
-
 	FIB_MOD_LOCK();
 	flm->flm_refcount++;
+	fd->fd_gen = ++fib_gen;
 	FIB_MOD_UNLOCK();
 
+	FD_PRINTF(LOG_DEBUG, fd, "allocated fd %p", fd);
+
 	/* Allocate nhidx -> nhop_ptr table */
 	size = fd->number_nhops * sizeof(void *);
 	fd->nh_idx = malloc(size, M_RTABLE, M_NOWAIT | M_ZERO);

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 00:56:21 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9CAFA629A91;
 Wed,  5 May 2021 00:56:21 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZdZF43GYz4hTf;
 Wed,  5 May 2021 00:56:21 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 73BC41BA10;
 Wed,  5 May 2021 00:56:21 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1450uLkg028134;
 Wed, 5 May 2021 00:56:21 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1450uLG6028133;
 Wed, 5 May 2021 00:56:21 GMT (envelope-from git)
Date: Wed, 5 May 2021 00:56:21 GMT
Message-Id: <202105050056.1450uLG6028133@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Alexander Motin <mav@FreeBSD.org>
Subject: git: 22b9f618e873 - stable/13 - Set PCIe device's Max_Payload_Size to
 match PCIe root's.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mav
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 22b9f618e873140127570e629c19e25d13edc568
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 00:56:21 -0000

The branch stable/13 has been updated by mav:

URL: https://cgit.FreeBSD.org/src/commit/?id=22b9f618e873140127570e629c19e25d13edc568

commit 22b9f618e873140127570e629c19e25d13edc568
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-04-05 14:34:40 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-05-05 00:53:55 +0000

    Set PCIe device's Max_Payload_Size to match PCIe root's.
    
    Usually on boot the MPS is already configured by BIOS.  But we've
    found that on hot-plug it is not true at least for our Supermicro
    X11 boards.  As result, mismatch between root's configuration of
    256 bytes and device's default of 128 bytes cause problems for some
    devices, while others seem to work fine.
    
    MFC after:      1 month
    Sponsored by:   iXsystems, Inc.
    
    (cherry picked from commit 5a898b2b78ce04d608bbaaa0813424b11f921ae7)
---
 sys/dev/pci/pci.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index d85ce5baa7bc..54d7957dcbf1 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -4267,6 +4267,45 @@ pci_create_iov_child_method(device_t bus, device_t pf, uint16_t rid,
 }
 #endif
 
+/*
+ * For PCIe device set Max_Payload_Size to match PCIe root's.
+ */
+static void
+pcie_setup_mps(device_t dev)
+{
+	struct pci_devinfo *dinfo = device_get_ivars(dev);
+	device_t root;
+	uint16_t rmps, mmps, mps;
+
+	if (dinfo->cfg.pcie.pcie_location == 0)
+		return;
+	root = pci_find_pcie_root_port(dev);
+	if (root == NULL)
+		return;
+	/* Check whether the MPS is already configured. */
+	rmps = pcie_read_config(root, PCIER_DEVICE_CTL, 2) &
+	    PCIEM_CTL_MAX_PAYLOAD;
+	mps = pcie_read_config(dev, PCIER_DEVICE_CTL, 2) &
+	    PCIEM_CTL_MAX_PAYLOAD;
+	if (mps == rmps)
+		return;
+	/* Check whether the device is capable of the root's MPS. */
+	mmps = (pcie_read_config(dev, PCIER_DEVICE_CAP, 2) &
+	    PCIEM_CAP_MAX_PAYLOAD) << 5;
+	if (rmps > mmps) {
+		/*
+		 * The device is unable to handle root's MPS.  Limit root.
+		 * XXX: We should traverse through all the tree, applying
+		 * it to all the devices.
+		 */
+		pcie_adjust_config(root, PCIER_DEVICE_CTL,
+		    PCIEM_CTL_MAX_PAYLOAD, mmps, 2);
+	} else {
+		pcie_adjust_config(dev, PCIER_DEVICE_CTL,
+		    PCIEM_CTL_MAX_PAYLOAD, rmps, 2);
+	}
+}
+
 static void
 pci_add_child_clear_aer(device_t dev, struct pci_devinfo *dinfo)
 {
@@ -4354,6 +4393,7 @@ pci_add_child(device_t bus, struct pci_devinfo *dinfo)
 	pci_cfg_restore(dev, dinfo);
 	pci_print_verbose(dinfo);
 	pci_add_resources(bus, dev, 0, 0);
+	pcie_setup_mps(dev);
 	pci_child_added(dinfo->cfg.dev);
 
 	if (pci_clear_aer_on_attach)

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 00:58:42 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9E3A5629C4D;
 Wed,  5 May 2021 00:58:42 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZdcy44X2z4hV5;
 Wed,  5 May 2021 00:58:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7F0AF1B830;
 Wed,  5 May 2021 00:58:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1450wg4B028391;
 Wed, 5 May 2021 00:58:42 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1450wgbE028390;
 Wed, 5 May 2021 00:58:42 GMT (envelope-from git)
Date: Wed, 5 May 2021 00:58:42 GMT
Message-Id: <202105050058.1450wgbE028390@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Alexander Motin <mav@FreeBSD.org>
Subject: git: 96033da5c38e - stable/12 - Set PCIe device's Max_Payload_Size to
 match PCIe root's.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mav
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 96033da5c38e20c27e2ca9007cca8bfab7e350cc
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 00:58:42 -0000

The branch stable/12 has been updated by mav:

URL: https://cgit.FreeBSD.org/src/commit/?id=96033da5c38e20c27e2ca9007cca8bfab7e350cc

commit 96033da5c38e20c27e2ca9007cca8bfab7e350cc
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-04-05 14:34:40 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-05-05 00:57:07 +0000

    Set PCIe device's Max_Payload_Size to match PCIe root's.
    
    Usually on boot the MPS is already configured by BIOS.  But we've
    found that on hot-plug it is not true at least for our Supermicro
    X11 boards.  As result, mismatch between root's configuration of
    256 bytes and device's default of 128 bytes cause problems for some
    devices, while others seem to work fine.
    
    MFC after:      1 month
    Sponsored by:   iXsystems, Inc.
    
    (cherry picked from commit 5a898b2b78ce04d608bbaaa0813424b11f921ae7)
---
 sys/dev/pci/pci.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index f3a0309c5202..e167465db9b3 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -4248,6 +4248,45 @@ pci_create_iov_child_method(device_t bus, device_t pf, uint16_t rid,
 }
 #endif
 
+/*
+ * For PCIe device set Max_Payload_Size to match PCIe root's.
+ */
+static void
+pcie_setup_mps(device_t dev)
+{
+	struct pci_devinfo *dinfo = device_get_ivars(dev);
+	device_t root;
+	uint16_t rmps, mmps, mps;
+
+	if (dinfo->cfg.pcie.pcie_location == 0)
+		return;
+	root = pci_find_pcie_root_port(dev);
+	if (root == NULL)
+		return;
+	/* Check whether the MPS is already configured. */
+	rmps = pcie_read_config(root, PCIER_DEVICE_CTL, 2) &
+	    PCIEM_CTL_MAX_PAYLOAD;
+	mps = pcie_read_config(dev, PCIER_DEVICE_CTL, 2) &
+	    PCIEM_CTL_MAX_PAYLOAD;
+	if (mps == rmps)
+		return;
+	/* Check whether the device is capable of the root's MPS. */
+	mmps = (pcie_read_config(dev, PCIER_DEVICE_CAP, 2) &
+	    PCIEM_CAP_MAX_PAYLOAD) << 5;
+	if (rmps > mmps) {
+		/*
+		 * The device is unable to handle root's MPS.  Limit root.
+		 * XXX: We should traverse through all the tree, applying
+		 * it to all the devices.
+		 */
+		pcie_adjust_config(root, PCIER_DEVICE_CTL,
+		    PCIEM_CTL_MAX_PAYLOAD, mmps, 2);
+	} else {
+		pcie_adjust_config(dev, PCIER_DEVICE_CTL,
+		    PCIEM_CTL_MAX_PAYLOAD, rmps, 2);
+	}
+}
+
 static void
 pci_add_child_clear_aer(device_t dev, struct pci_devinfo *dinfo)
 {
@@ -4335,6 +4374,7 @@ pci_add_child(device_t bus, struct pci_devinfo *dinfo)
 	pci_cfg_restore(dev, dinfo);
 	pci_print_verbose(dinfo);
 	pci_add_resources(bus, dev, 0, 0);
+	pcie_setup_mps(dev);
 	pci_child_added(dinfo->cfg.dev);
 
 	if (pci_clear_aer_on_attach)

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 05:03:51 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E0F3563014E;
 Wed,  5 May 2021 05:03:51 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZl3q63vLz4tGR;
 Wed,  5 May 2021 05:03:51 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C33ED1EF0E;
 Wed,  5 May 2021 05:03:51 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 14553p53061628;
 Wed, 5 May 2021 05:03:51 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 14553pwh061627;
 Wed, 5 May 2021 05:03:51 GMT (envelope-from git)
Date: Wed, 5 May 2021 05:03:51 GMT
Message-Id: <202105050503.14553pwh061627@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Xin LI <delphij@FreeBSD.org>
Subject: git: 2941198570cd - stable/13 - arcmsr(4): Fix SCSI command timeout
 on ARC-1886.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: delphij
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 2941198570cde6357de80064d70bcafdbef17353
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 05:03:51 -0000

The branch stable/13 has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=2941198570cde6357de80064d70bcafdbef17353

commit 2941198570cde6357de80064d70bcafdbef17353
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2021-04-21 08:03:54 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2021-05-05 05:03:22 +0000

    arcmsr(4): Fix SCSI command timeout on ARC-1886.
    
    Many thanks to Areca for continuing to support FreeBSD.
    
    Submitted by:   黃清隆 <ching2048 areca com tw>
    
    (cherry picked from commit 438b5532070f7c52e88f514380ee8662de1f600b)
---
 sys/dev/arcmsr/arcmsr.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/dev/arcmsr/arcmsr.c b/sys/dev/arcmsr/arcmsr.c
index f2217deb1ce0..f7f913de89af 100644
--- a/sys/dev/arcmsr/arcmsr.c
+++ b/sys/dev/arcmsr/arcmsr.c
@@ -83,6 +83,8 @@
 ** 1.40.00.01   10/30/2017  Ching Huang     Fixed release memory resource
 ** 1.50.00.00   09/30/2020  Ching Huang     Added support ARC-1886, NVMe/SAS/SATA controller
 ** 1.50.00.01   02/26/2021  Ching Huang     Fixed no action of hot plugging device on type_F adapter
+** 1.50.00.02   04/16/2021  Ching Huang     Fixed scsi command timeout on ARC-1886 when
+**                                          scatter-gather count large than some number
 ******************************************************************************************
 */
 
@@ -140,7 +142,7 @@ __FBSDID("$FreeBSD$");
 
 #define arcmsr_callout_init(a)	callout_init(a, /*mpsafe*/1);
 
-#define ARCMSR_DRIVER_VERSION	"arcmsr version 1.50.00.01 2021-02-26"
+#define ARCMSR_DRIVER_VERSION	"arcmsr version 1.50.00.02 2021-04-16"
 #include <dev/arcmsr/arcmsr.h>
 /*
 **************************************************************************
@@ -1183,8 +1185,12 @@ static void arcmsr_post_srb(struct AdapterControlBlock *acb, struct CommandContr
 
 			if (srb->arc_cdb_size <= 0x300)
 				arc_cdb_size = (srb->arc_cdb_size - 1) >> 6 | 1;
-			else
-				arc_cdb_size = (((srb->arc_cdb_size + 0xff) >> 8) + 2) << 1 | 1;
+			else {
+				arc_cdb_size = ((srb->arc_cdb_size + 0xff) >> 8) + 2;
+				if (arc_cdb_size > 0xF)
+					arc_cdb_size = 0xF;
+				arc_cdb_size = (arc_cdb_size << 1) | 1;
+			}
 			ccb_post_stamp = (srb->smid | arc_cdb_size);
 			CHIP_REG_WRITE32(HBF_MessageUnit, 0, inbound_queueport_high, 0);
 			CHIP_REG_WRITE32(HBF_MessageUnit, 0, inbound_queueport_low, ccb_post_stamp);

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 05:06:08 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id B62A163048C;
 Wed,  5 May 2021 05:06:08 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZl6S4nhgz4tC9;
 Wed,  5 May 2021 05:06:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 974F31ECF3;
 Wed,  5 May 2021 05:06:08 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145568bx062040;
 Wed, 5 May 2021 05:06:08 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145568g6062039;
 Wed, 5 May 2021 05:06:08 GMT (envelope-from git)
Date: Wed, 5 May 2021 05:06:08 GMT
Message-Id: <202105050506.145568g6062039@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Xin LI <delphij@FreeBSD.org>
Subject: git: 5a37780dd84c - stable/12 - arcmsr(4): Fix SCSI command timeout
 on ARC-1886.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: delphij
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 5a37780dd84c61bd9a3ad92e2dbe3f4e3116c671
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 05:06:08 -0000

The branch stable/12 has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=5a37780dd84c61bd9a3ad92e2dbe3f4e3116c671

commit 5a37780dd84c61bd9a3ad92e2dbe3f4e3116c671
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2021-04-21 08:03:54 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2021-05-05 05:05:57 +0000

    arcmsr(4): Fix SCSI command timeout on ARC-1886.
    
    Many thanks to Areca for continuing to support FreeBSD.
    
    Submitted by:   黃清隆 <ching2048 areca com tw>
    
    (cherry picked from commit 438b5532070f7c52e88f514380ee8662de1f600b)
---
 sys/dev/arcmsr/arcmsr.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/dev/arcmsr/arcmsr.c b/sys/dev/arcmsr/arcmsr.c
index 16fe5ee959e6..375f1f114d13 100644
--- a/sys/dev/arcmsr/arcmsr.c
+++ b/sys/dev/arcmsr/arcmsr.c
@@ -83,6 +83,8 @@
 ** 1.40.00.01   10/30/2017  Ching Huang     Fixed release memory resource
 ** 1.50.00.00   09/30/2020  Ching Huang     Added support ARC-1886, NVMe/SAS/SATA controller
 ** 1.50.00.01   02/26/2021  Ching Huang     Fixed no action of hot plugging device on type_F adapter
+** 1.50.00.02   04/16/2021  Ching Huang     Fixed scsi command timeout on ARC-1886 when
+**                                          scatter-gather count large than some number
 ******************************************************************************************
 */
 
@@ -140,7 +142,7 @@ __FBSDID("$FreeBSD$");
 
 #define arcmsr_callout_init(a)	callout_init(a, /*mpsafe*/1);
 
-#define ARCMSR_DRIVER_VERSION	"arcmsr version 1.50.00.01 2021-02-26"
+#define ARCMSR_DRIVER_VERSION	"arcmsr version 1.50.00.02 2021-04-16"
 #include <dev/arcmsr/arcmsr.h>
 /*
 **************************************************************************
@@ -1183,8 +1185,12 @@ static void arcmsr_post_srb(struct AdapterControlBlock *acb, struct CommandContr
 
 			if (srb->arc_cdb_size <= 0x300)
 				arc_cdb_size = (srb->arc_cdb_size - 1) >> 6 | 1;
-			else
-				arc_cdb_size = (((srb->arc_cdb_size + 0xff) >> 8) + 2) << 1 | 1;
+			else {
+				arc_cdb_size = ((srb->arc_cdb_size + 0xff) >> 8) + 2;
+				if (arc_cdb_size > 0xF)
+					arc_cdb_size = 0xF;
+				arc_cdb_size = (arc_cdb_size << 1) | 1;
+			}
 			ccb_post_stamp = (srb->smid | arc_cdb_size);
 			CHIP_REG_WRITE32(HBF_MessageUnit, 0, inbound_queueport_high, 0);
 			CHIP_REG_WRITE32(HBF_MessageUnit, 0, inbound_queueport_low, ccb_post_stamp);

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 05:17:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3D65B6305DC;
 Wed,  5 May 2021 05:17:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZlMn1GpFz4tkf;
 Wed,  5 May 2021 05:17:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 19B6E1F0EC;
 Wed,  5 May 2021 05:17:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1455He5t075109;
 Wed, 5 May 2021 05:17:40 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1455HeE1075108;
 Wed, 5 May 2021 05:17:40 GMT (envelope-from git)
Date: Wed, 5 May 2021 05:17:40 GMT
Message-Id: <202105050517.1455HeE1075108@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Xin LI <delphij@FreeBSD.org>
Subject: git: 32ba69e6a320 - stable/11 - arcmsr(4): Fix SCSI command timeout
 on ARC-1886.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: delphij
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/11
X-Git-Reftype: branch
X-Git-Commit: 32ba69e6a320eabfb0b6afe80911481470c36dc5
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 05:17:41 -0000

The branch stable/11 has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=32ba69e6a320eabfb0b6afe80911481470c36dc5

commit 32ba69e6a320eabfb0b6afe80911481470c36dc5
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2021-04-21 08:03:54 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2021-05-05 05:17:31 +0000

    arcmsr(4): Fix SCSI command timeout on ARC-1886.
    
    Many thanks to Areca for continuing to support FreeBSD.
    
    Submitted by:   黃清隆 <ching2048 areca com tw>
    
    (cherry picked from commit 438b5532070f7c52e88f514380ee8662de1f600b)
---
 sys/dev/arcmsr/arcmsr.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/dev/arcmsr/arcmsr.c b/sys/dev/arcmsr/arcmsr.c
index c2027eb8e987..bc9ddffe4960 100644
--- a/sys/dev/arcmsr/arcmsr.c
+++ b/sys/dev/arcmsr/arcmsr.c
@@ -81,6 +81,8 @@
 ** 1.40.00.01   10/30/2017  Ching Huang     Fixed release memory resource
 ** 1.50.00.00   09/30/2020  Ching Huang     Added support ARC-1886, NVMe/SAS/SATA controller
 ** 1.50.00.01   02/26/2021  Ching Huang     Fixed no action of hot plugging device on type_F adapter
+** 1.50.00.02   04/16/2021  Ching Huang     Fixed scsi command timeout on ARC-1886 when
+**                                          scatter-gather count large than some number
 ******************************************************************************************
 */
 
@@ -138,7 +140,7 @@ __FBSDID("$FreeBSD$");
 
 #define arcmsr_callout_init(a)	callout_init(a, /*mpsafe*/1);
 
-#define ARCMSR_DRIVER_VERSION	"arcmsr version 1.50.00.01 2021-02-26"
+#define ARCMSR_DRIVER_VERSION	"arcmsr version 1.50.00.02 2021-04-16"
 #include <dev/arcmsr/arcmsr.h>
 /*
 **************************************************************************
@@ -1181,8 +1183,12 @@ static void arcmsr_post_srb(struct AdapterControlBlock *acb, struct CommandContr
 
 			if (srb->arc_cdb_size <= 0x300)
 				arc_cdb_size = (srb->arc_cdb_size - 1) >> 6 | 1;
-			else
-				arc_cdb_size = (((srb->arc_cdb_size + 0xff) >> 8) + 2) << 1 | 1;
+			else {
+				arc_cdb_size = ((srb->arc_cdb_size + 0xff) >> 8) + 2;
+				if (arc_cdb_size > 0xF)
+					arc_cdb_size = 0xF;
+				arc_cdb_size = (arc_cdb_size << 1) | 1;
+			}
 			ccb_post_stamp = (srb->smid | arc_cdb_size);
 			CHIP_REG_WRITE32(HBF_MessageUnit, 0, inbound_queueport_high, 0);
 			CHIP_REG_WRITE32(HBF_MessageUnit, 0, inbound_queueport_low, ccb_post_stamp);

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:23:58 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E5393632ADF;
 Wed,  5 May 2021 07:23:58 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9V6832z3G5r;
 Wed,  5 May 2021 07:23:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C5F4C20A46;
 Wed,  5 May 2021 07:23:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457Nwgm048285;
 Wed, 5 May 2021 07:23:58 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457Nwpw048284;
 Wed, 5 May 2021 07:23:58 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:23:58 GMT
Message-Id: <202105050723.1457Nwpw048284@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 2abb724cad0f - stable/13 - sh: improve emacs mode
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 2abb724cad0faac54dcab7155c684afa724cb3d5
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:23:59 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=2abb724cad0faac54dcab7155c684afa724cb3d5

commit 2abb724cad0faac54dcab7155c684afa724cb3d5
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-30 09:37:29 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:17:09 +0000

    sh: improve emacs mode
    
    In emacs mode, force ^R to backware search the history
    This behaviour is the default in emacs mode for most of the other shells
    
    Note: Note that this can still be overridden via $EDITRC, ~/.editrc or a
    bind command after set -o emacs.
    
    Approved by:            jilles
    Reviewed by:            jilles, arichardson, pstef
    Differential Revision:  https://reviews.freebsd.org/D29494
    
    (cherry picked from commit 660045fb5360d328da199ae78c89d5cc15b6d1ca)
---
 bin/sh/histedit.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c
index 4c596c82257e..e59967b255b1 100644
--- a/bin/sh/histedit.c
+++ b/bin/sh/histedit.c
@@ -137,8 +137,10 @@ bad:
 		if (el) {
 			if (Vflag)
 				el_set(el, EL_EDITOR, "vi");
-			else if (Eflag)
+			else if (Eflag) {
 				el_set(el, EL_EDITOR, "emacs");
+				el_set(el, EL_BIND, "^R", "em-inc-search-prev", NULL);
+			}
 			el_set(el, EL_BIND, "^I", "sh-complete", NULL);
 			el_source(el, NULL);
 		}

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:00 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 20B3C632CE8;
 Wed,  5 May 2021 07:24:00 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9X0DTPz3G3K;
 Wed,  5 May 2021 07:24:00 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E95EE20A47;
 Wed,  5 May 2021 07:23:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457Nxce048306;
 Wed, 5 May 2021 07:23:59 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457NxGs048305;
 Wed, 5 May 2021 07:23:59 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:23:59 GMT
Message-Id: <202105050723.1457NxGs048305@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 3c5d1c587c59 - stable/13 - Make pkg(7) use environment variables
 specified in pkg.conf
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 3c5d1c587c59e58a3b9f85b93ecee7156c219972
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:00 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=3c5d1c587c59e58a3b9f85b93ecee7156c219972

commit 3c5d1c587c59e58a3b9f85b93ecee7156c219972
Author:     Moritz Schmitt <moritz@schmi.tt>
AuthorDate: 2021-04-27 01:59:12 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:17:14 +0000

    Make pkg(7) use environment variables specified in pkg.conf
    
    Modify /usr/sbin/pkg to use environment variables specified in pkg.conf.
    This allows control over underlying libraries like fetch(3), which can
    be configured by setting HTTP_PROXY.
    
    Differential Revision:  https://reviews.freebsd.org/D29820
    
    (cherry picked from commit e869d3c60147bbb226b5ad97d2ef73391aeebafa)
---
 usr.sbin/pkg/config.c | 29 +++++++++++++++++++++++++----
 usr.sbin/pkg/config.h |  2 ++
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 3a5434639d6d..2bcfd9c405f3 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <paths.h>
 #include <stdbool.h>
 #include <unistd.h>
+#include <ctype.h>
 
 #include "config.h"
 
@@ -136,6 +137,15 @@ static struct config_entry c[] = {
 		NULL,
 		false,
 		false
+	},
+	[PKG_ENV] = {
+		PKG_CONFIG_OBJECT,
+		"PKG_ENV",
+		NULL,
+		NULL,
+		NULL,
+		false,
+		false,
 	}
 };
 
@@ -207,11 +217,11 @@ static void
 config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 {
 	struct sbuf *buf = sbuf_new_auto();
-	const ucl_object_t *cur, *seq;
-	ucl_object_iter_t it = NULL, itseq = NULL;
+	const ucl_object_t *cur, *seq, *tmp;
+	ucl_object_iter_t it = NULL, itseq = NULL, it_obj = NULL;
 	struct config_entry *temp_config;
 	struct config_value *cv;
-	const char *key;
+	const char *key, *evkey;
 	int i;
 	size_t j;
 
@@ -226,7 +236,7 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 
 		if (conftype == CONFFILE_PKG) {
 			for (j = 0; j < strlen(key); ++j)
-				sbuf_putc(buf, key[j]);
+				sbuf_putc(buf, toupper(key[j]));
 			sbuf_finish(buf);
 		} else if (conftype == CONFFILE_REPO) {
 			if (strcasecmp(key, "url") == 0)
@@ -287,6 +297,17 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 			temp_config[i].value =
 			    strdup(ucl_object_toboolean(cur) ? "yes" : "no");
 			break;
+		case PKG_CONFIG_OBJECT:
+			if (strcmp(c[i].key, "PKG_ENV") == 0) {
+				while ((tmp =
+				    ucl_iterate_object(cur, &it_obj, true))) {
+					evkey = ucl_object_key(tmp);
+					if (evkey != NULL && *evkey != '\0') {
+						setenv(evkey, ucl_object_tostring_forced(tmp), 1);
+					}
+				}
+			}
+			break;
 		default:
 			/* Normal string value. */
 			temp_config[i].value = strdup(ucl_object_tostring(cur));
diff --git a/usr.sbin/pkg/config.h b/usr.sbin/pkg/config.h
index afcd728abd92..87efd3c29e94 100644
--- a/usr.sbin/pkg/config.h
+++ b/usr.sbin/pkg/config.h
@@ -44,6 +44,7 @@ typedef enum {
 	FINGERPRINTS,
 	REPOS_DIR,
 	PUBKEY,
+	PKG_ENV,
 	CONFIG_SIZE
 } pkg_config_key;
 
@@ -51,6 +52,7 @@ typedef enum {
 	PKG_CONFIG_STRING=0,
 	PKG_CONFIG_BOOL,
 	PKG_CONFIG_LIST,
+	PKG_CONFIG_OBJECT
 } pkg_config_t;
 
 typedef enum {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:01 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5D92663296D;
 Wed,  5 May 2021 07:24:01 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9Y1fHtz3G3N;
 Wed,  5 May 2021 07:24:01 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1869420E14;
 Wed,  5 May 2021 07:24:01 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457O1a7048327;
 Wed, 5 May 2021 07:24:01 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457O0YM048326;
 Wed, 5 May 2021 07:24:00 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:24:00 GMT
Message-Id: <202105050724.1457O0YM048326@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 2cd8c2e5959d - stable/13 - libucl: vendor import snapshort
 20210314
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 2cd8c2e5959de8c72c3e75d80afc4e01bbb320a8
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:01 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=2cd8c2e5959de8c72c3e75d80afc4e01bbb320a8

commit 2cd8c2e5959de8c72c3e75d80afc4e01bbb320a8
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-22 14:13:02 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:18:44 +0000

    libucl: vendor import snapshort 20210314
    
    (cherry picked from commit a0409676120c1e558d0ade943019934e0f15118d)
---
 contrib/libucl/CMakeLists.txt                      | 105 ++-
 contrib/libucl/ChangeLog.md                        |  38 +-
 contrib/libucl/README.md                           |  64 +-
 contrib/libucl/configure.ac                        |   8 +-
 contrib/libucl/doc/api.md                          |  17 +-
 contrib/libucl/doc/libucl.3                        |  26 +-
 contrib/libucl/doc/lua_api.md                      |   4 +-
 contrib/libucl/include/lua_ucl.h                   |  20 +-
 contrib/libucl/include/ucl++.h                     | 191 ++++-
 contrib/libucl/include/ucl.h                       | 191 ++++-
 contrib/libucl/klib/kvec.h                         |  78 ++-
 contrib/libucl/lua/lua_ucl.c                       | 450 ++++++++++--
 contrib/libucl/python/MANIFEST.in                  |   5 +
 contrib/libucl/python/setup.py                     |  42 +-
 contrib/libucl/python/src/uclmodule.c              |   3 +-
 contrib/libucl/python/tests/test_example.py        |  59 ++
 contrib/libucl/python/tests/test_load.py           |  17 +-
 contrib/libucl/src/mum.h                           |   8 +-
 contrib/libucl/src/ucl_chartable.h                 |   4 +-
 contrib/libucl/src/ucl_emitter.c                   |  12 +-
 contrib/libucl/src/ucl_emitter_utils.c             |  57 +-
 contrib/libucl/src/ucl_hash.c                      | 218 +++++-
 contrib/libucl/src/ucl_hash.h                      |  20 +-
 contrib/libucl/src/ucl_internal.h                  | 105 ++-
 contrib/libucl/src/ucl_msgpack.c                   |  82 ++-
 contrib/libucl/src/ucl_parser.c                    | 552 ++++++++++++---
 contrib/libucl/src/ucl_schema.c                    |  29 +-
 contrib/libucl/src/ucl_util.c                      | 780 ++++++++++++++++-----
 contrib/libucl/tests/basic.test                    |   2 +-
 contrib/libucl/tests/basic/13.in                   |   2 +-
 contrib/libucl/tests/basic/20.in                   |   2 -
 contrib/libucl/tests/basic/20.res                  |   5 -
 contrib/libucl/tests/basic/21.in                   |   2 -
 contrib/libucl/tests/basic/21.res                  |  10 -
 contrib/libucl/tests/basic/9.in                    |   2 +-
 contrib/libucl/tests/basic/9.res                   |   8 +-
 contrib/libucl/tests/basic/squote.in               |   8 +
 contrib/libucl/tests/basic/squote.res              |   7 +
 .../libucl/tests/fuzzers/ucl_add_string_fuzzer.c   |  25 +
 contrib/libucl/tests/fuzzers/ucl_msgpack_fuzzer.c  |  29 +
 contrib/libucl/tests/generate.test                 |   2 +-
 contrib/libucl/tests/run_tests.sh                  |   4 +-
 contrib/libucl/tests/streamline.test               |   2 +-
 contrib/libucl/tests/test_basic.c                  |  11 +-
 contrib/libucl/tests/test_generate.c               |  15 +-
 contrib/libucl/tests/test_msgpack.c                |   1 +
 contrib/libucl/utils/CMakeLists.txt                |  12 +
 contrib/libucl/utils/objdump.c                     |  17 +-
 contrib/libucl/utils/ucl-tool.c                    | 100 +--
 49 files changed, 2820 insertions(+), 631 deletions(-)

diff --git a/contrib/libucl/CMakeLists.txt b/contrib/libucl/CMakeLists.txt
index 7b55faf8243f..5fe772a30f88 100644
--- a/contrib/libucl/CMakeLists.txt
+++ b/contrib/libucl/CMakeLists.txt
@@ -9,13 +9,16 @@ SET(LIBUCL_VERSION
         "${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
 
 INCLUDE(CheckCCompilerFlag)
+INCLUDE(CheckCSourceCompiles)
 INCLUDE(FindOpenSSL)
+INCLUDE(GNUInstallDirs)
 
 OPTION(ENABLE_URL_INCLUDE  "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
 OPTION(ENABLE_URL_SIGN  "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
 OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
 OPTION(ENABLE_LUA "Enable lua support [default: OFF]" OFF)
 OPTION(ENABLE_LUAJIT "Enable luajit support [default: OFF]" OFF)
+OPTION(ENABLE_UTILS "Enable building utility binaries [default: OFF]" OFF)
 
 # Find lua installation
 MACRO(FindLua)
@@ -150,40 +153,47 @@ IF(ENABLE_URL_INCLUDE MATCHES "ON")
     				DOC "Path to libfetch header")
     ELSE(LIBFETCH_LIBRARY)
     	# Try to find libcurl
-    	ProcessPackage(CURL libcurl)
+        FIND_PACKAGE(CURL)
     	IF(NOT CURL_FOUND)
     		MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
     	ENDIF(NOT CURL_FOUND)
     ENDIF(LIBFETCH_LIBRARY)
 ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
 
+set(SYNC_BUILTINS_TEST_SOURCE [====[
+int main()
+{
+    unsigned long val;
+
+    __sync_bool_compare_and_swap(&val, 0, 1);
+    __sync_add_and_fetch(&val, 1);
+    __sync_fetch_and_add(&val, 0);
+    __sync_sub_and_fetch(&val, 1);
+
+    return 0;
+}
+]====])
+
+CHECK_C_SOURCE_COMPILES("${SYNC_BUILTINS_TEST_SOURCE}" HAVE_ATOMIC_BUILTINS)
+IF(NOT HAVE_ATOMIC_BUILTINS)
+    MESSAGE(WARNING "Libucl references could be thread-unsafe because atomic builtins are missing")
+ENDIF(NOT HAVE_ATOMIC_BUILTINS)
+
 SET(CMAKE_C_WARN_FLAGS "")
-CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
 CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
-CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
 CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
-CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
-IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
-	CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
-ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
+CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WUNUSED_PARAMETER)
 IF(SUPPORT_W)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
+    SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
 ENDIF(SUPPORT_W)
-IF(SUPPORT_WALL)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
-ENDIF(SUPPORT_WALL)
-IF(SUPPORT_WPARAM)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
-ENDIF(SUPPORT_WPARAM)
 IF(SUPPORT_WPOINTER_SIGN)
 	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
 ENDIF(SUPPORT_WPOINTER_SIGN)
-IF(SUPPORT_WSTRICT_PROTOTYPES)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
-ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
-IF(SUPPORT_STD_FLAG)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
-ENDIF(SUPPORT_STD_FLAG)
+IF(SUPPORT_WUNUSED_PARAMETER)
+	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
+ENDIF(SUPPORT_WUNUSED_PARAMETER)
+
+SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_WARN_FLAGS}" )
 
 IF(ENABLE_URL_SIGN MATCHES "ON")
 	IF(OPENSSL_FOUND)
@@ -192,10 +202,19 @@ IF(ENABLE_URL_SIGN MATCHES "ON")
 	ENDIF(OPENSSL_FOUND)
 ENDIF(ENABLE_URL_SIGN MATCHES "ON")
 
-INCLUDE_DIRECTORIES("src")
-INCLUDE_DIRECTORIES("include")
-INCLUDE_DIRECTORIES("uthash")
-INCLUDE_DIRECTORIES("klib")
+SET(UCL_COMPILE_DEFS)
+IF(HAVE_FETCH_H)
+    LIST(APPEND UCL_COMPILE_DEFS -DHAVE_FETCH_H=1)
+ENDIF(HAVE_FETCH_H)
+IF(CURL_FOUND)
+    LIST(APPEND UCL_COMPILE_DEFS -DCURL_FOUND=1)
+ENDIF(CURL_FOUND)
+IF(HAVE_OPENSSL)
+    LIST(APPEND UCL_COMPILE_DEFS -DHAVE_OPENSSL=1)
+ENDIF(HAVE_OPENSSL)
+IF(HAVE_ATOMIC_BUILTINS)
+    LIST(APPEND UCL_COMPILE_DEFS -DHAVE_ATOMIC_BUILTINS=1)
+ENDIF(HAVE_ATOMIC_BUILTINS)
 
 SET(UCLSRC src/ucl_util.c
 		src/ucl_parser.c
@@ -207,13 +226,27 @@ SET(UCLSRC src/ucl_util.c
 		src/ucl_msgpack.c
 		src/ucl_sexp.c)
 
+SET(UCLHDR include/ucl.h
+		include/ucl++.h)
 
 SET (LIB_TYPE STATIC)
 IF (BUILD_SHARED_LIBS)
   SET (LIB_TYPE SHARED)
 ENDIF (BUILD_SHARED_LIBS)
 ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
+ADD_LIBRARY(ucl::ucl ALIAS ucl)
 SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
+TARGET_INCLUDE_DIRECTORIES(ucl
+	PUBLIC
+	  include
+	PRIVATE
+	  src
+	  uthash
+	  klib)
+TARGET_COMPILE_DEFINITIONS(ucl
+    PRIVATE
+    ${UCL_COMPILE_DEFS}
+)
 
 IF(ENABLE_LUA MATCHES "ON")
 	IF(ENABLE_LUAJIT MATCHES "ON")
@@ -236,13 +269,20 @@ IF(ENABLE_LUA MATCHES "ON")
 	ENDIF(ENABLE_LUAJIT MATCHES "ON")
 	SET(UCL_LUA_SRC lua/lua_ucl.c)
 	ADD_LIBRARY(lua-ucl ${LIB_TYPE} ${UCL_LUA_SRC})
+	ADD_LIBRARY(ucl::lua ALIAS lua-ucl)
 	IF(ENABLE_LUAJIT MATCHES "ON")
 		TARGET_LINK_LIBRARIES(lua-ucl "${LUAJIT_LIBRARY}")
 	ELSE(ENABLE_LUAJIT MATCHES "ON")
 		TARGET_LINK_LIBRARIES(lua-ucl "${LUA_LIBRARY}")
 	ENDIF(ENABLE_LUAJIT MATCHES "ON")
 	TARGET_LINK_LIBRARIES(lua-ucl ucl)
-	SET_TARGET_PROPERTIES(lua-ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
+	TARGET_INCLUDE_DIRECTORIES(lua-ucl PUBLIC include PRIVATE src uthash)
+	SET_TARGET_PROPERTIES(lua-ucl PROPERTIES
+		VERSION ${LIBUCL_VERSION}
+		SOVERSION ${LIBUCL_VERSION_MAJOR}
+		PUBLIC_HEADER include/lua_ucl.h)
+	INSTALL(TARGETS lua-ucl DESTINATION ${CMAKE_INSTALL_LIBDIR}
+			PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 ENDIF()
 
 IF(HAVE_FETCH_H)
@@ -257,3 +297,18 @@ IF(ENABLE_URL_SIGN MATCHES "ON")
 		TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
 	ENDIF(OPENSSL_FOUND)
 ENDIF(ENABLE_URL_SIGN MATCHES "ON")
+
+IF(UNIX)
+    TARGET_LINK_LIBRARIES(ucl -lm)
+ENDIF(UNIX)
+
+SET_TARGET_PROPERTIES(ucl PROPERTIES
+	PUBLIC_HEADER "${UCLHDR}")
+
+INSTALL(TARGETS ucl DESTINATION ${CMAKE_INSTALL_LIBDIR}
+		PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+IF(ENABLE_UTILS MATCHES "ON")
+    ADD_SUBDIRECTORY(utils)
+ENDIF()
+
diff --git a/contrib/libucl/ChangeLog.md b/contrib/libucl/ChangeLog.md
index e4c1263bccb7..cba29aa9a7b5 100644
--- a/contrib/libucl/ChangeLog.md
+++ b/contrib/libucl/ChangeLog.md
@@ -64,4 +64,40 @@
 
 **Incompatible changes**:
 
-- `ucl_object_emit_full` now accepts additional argument `comments` that could be used to emit comments with UCL output
\ No newline at end of file
+- `ucl_object_emit_full` now accepts additional argument `comments` that could be used to emit comments with UCL output
+
+### Libucl 0.8.1
+
+- Create ucl_parser_add_file_full() to be able to specify merge mode and parser type (by Allan Jude)
+- C++ wrapper improvements (by @ftilde)
+- C++ wrapper: add convenience method at() and lookup() (by Yonghee Kim)
+- C++ wrapper: add assignment operator to Ucl class (by Yonghee Kim)
+- C++ wrapper: support variables in parser (by Yonghee Kim)
+- C++ wrapper: refactoring C++ interface (by Yonghee Kim):
+    - use auto variables (if possible)
+    - remove dangling expressions
+    - use std::set::emplace instead of std::set::insert
+    - not use std::move in return statement; considering copy elision
+- C++ wrapper: fix compilation error and warnings (by Zhe Wang)
+- C++ wrapper: fix iteration over objects in which the first value is `false` (by Zhe Wang)
+- C++ wrapper: Macro helper functions (by Chris Meacham)
+- C++ wrapper: Changing the duplicate strategy in the C++ API (by Chris Meacham)
+- C++ wrapper: Added access functions for the size of a UCL_ARRAY (by Chris Meacham)
+- Fix caseless comparison
+- Fix include when EPERM is issued
+- Fix Windows build
+- Allow to reserve space in arrays and hashes
+- Fix bug with including of empty files
+- Move to mum_hash from xxhash
+- Fix msgpack on non-x86
+- python: Add support to Python 3 (by Denis Volpato Martins)
+- python: Add support for Python 2.6 tests (by Denis Volpato Martins)
+- python: Implement validation function and tests (by Denis Volpato Martins)
+- python: Added UCL_NULL handling and tests (by Denis Volpato Martins)
+- Fix schema validation for patternProperties with object data (by Denis Volpato Martins)
+- Remove the dependency on NBBY, add missing <strings.h> include (by Ed Schouten)
+- Allow to emit msgpack from Lua
+- Performance improvements in Lua API
+- Allow to pass opaque objects in Lua API for transparent C passthrough
+- Various bugs fixed
+- Couple of memory leaks plugged
\ No newline at end of file
diff --git a/contrib/libucl/README.md b/contrib/libucl/README.md
index 44983c57d643..53d8a651d73b 100644
--- a/contrib/libucl/README.md
+++ b/contrib/libucl/README.md
@@ -1,6 +1,6 @@
 # LIBUCL
 
-[![Build Status](https://travis-ci.org/vstakhov/libucl.svg?branch=master)](https://travis-ci.org/vstakhov/libucl)
+[![CircleCI](https://circleci.com/gh/vstakhov/libucl.svg?style=svg)](https://circleci.com/gh/vstakhov/libucl)
 [![Coverity](https://scan.coverity.com/projects/4138/badge.svg)](https://scan.coverity.com/projects/4138)
 [![Coverage Status](https://coveralls.io/repos/github/vstakhov/libucl/badge.svg?branch=master)](https://coveralls.io/github/vstakhov/libucl?branch=master)
 
@@ -18,6 +18,7 @@
 	- [Macros support](#macros-support)
 	- [Variables support](#variables-support)
 	- [Multiline strings](#multiline-strings)
+	- [Single quoted strings](#single-quoted-strings)
 - [Emitter](#emitter)
 - [Validation](#validation)
 - [Performance](#performance)
@@ -65,19 +66,25 @@ section {
 ```json
 {
     "param": "value",
-    "param1": "value1",
-    "flag": true,
-    "subsection": {
-        "host": [
-        {
-            "host": "hostname",
-            "port": 900
-        },
-        {
-            "host": "hostname",
-            "port": 901
+    "section": {
+        "param": "value",
+        "param1": "value1",
+        "flag": true,
+        "number": 10000,
+        "time": "0.2s",
+        "string": "something",
+        "subsection": {
+            "host": [
+                {
+                    "host": "hostname",
+                    "port": 900
+                },
+                {
+                    "host": "hostname",
+                    "port": 901
+                }
+            ]
         }
-        ]
     }
 }
 ```
@@ -288,7 +295,22 @@ as following:
 
 By default, the priority of top-level object is set to zero (lowest priority). Currently,
 you can define up to 16 priorities (from 0 to 15). Includes with bigger priorities will
-rewrite keys from the objects with lower priorities as specified by the policy.
+rewrite keys from the objects with lower priorities as specified by the policy. The priority
+of the top-level or any other object can be changed with the `.priority` macro, which has no
+options and takes the new priority:
+
+```
+# Default priority: 0.
+foo = 6
+.priority 5
+# The following will have priority 5.
+bar = 6
+baz = 7
+# The following will be included with a priority of 3, 5, and 6 respectively.
+.include(priority=3) "path.conf"
+.include(priority=5) "equivalent-path.conf"
+.include(priority=6) "highpriority-path.conf"
+```
 
 ### Variables support
 
@@ -333,9 +355,21 @@ text
 EOD
 ```
 
+### Single quoted strings
+
+It is possible to use single quoted strings to simplify escaping rules. All values passed in single quoted strings are *NOT* escaped, with two exceptions: a single `'` character just before `\` character, and a newline character just after `\` character that is ignored.
+
+```
+key = 'value'; # Read as value
+key = 'value\n\'; # Read as  value\n\
+key = 'value\''; # Read as value'
+key = 'value\
+bla'; # Read as valuebla
+```
+
 ## Emitter
 
-Each UCL object can be serialized to one of the three supported formats:
+Each UCL object can be serialized to one of the four supported formats:
 
 * `JSON` - canonic json notation (with spaces indented structure);
 * `Compacted JSON` - compact json notation (without spaces or newlines);
diff --git a/contrib/libucl/configure.ac b/contrib/libucl/configure.ac
index 6457268854ac..731b7113e689 100644
--- a/contrib/libucl/configure.ac
+++ b/contrib/libucl/configure.ac
@@ -1,7 +1,7 @@
 m4_define([maj_ver], [0])
 m4_define([med_ver], [8])
-m4_define([min_ver], [0])
-m4_define([so_version], [6:0:0])
+m4_define([min_ver], [1])
+m4_define([so_version], [6:0:1])
 m4_define([ucl_version], [maj_ver.med_ver.min_ver])
 
 AC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl])
@@ -73,11 +73,11 @@ AC_ARG_ENABLE([utils],
 AM_CONDITIONAL([UTILS], [test x$utils = xtrue])
 
 AS_IF([test "x$enable_signatures" = "xyes"], [
-	AC_SEARCH_LIBS([EVP_MD_CTX_create], [crypto], [
+	AC_SEARCH_LIBS([CRYPTO_new_ex_data], [crypto], [
 		AC_DEFINE(HAVE_OPENSSL, 1, [Define to 1 if you have the 'crypto' library (-lcrypto).])
 		LIBCRYPTO_LIB="-lcrypto"
 		LIBS_EXTRA="${LIBS_EXTRA} -lcrypto"
-		], [AC_MSG_ERROR([unable to find the EVP_MD_CTX_create() function])])
+		], [AC_MSG_ERROR([unable to find the CRYPTO_new_ex_data() function])])
 ])
 AC_SUBST(LIBCRYPTO_LIB)
 AC_PATH_PROG(PANDOC, pandoc, [/non/existent])
diff --git a/contrib/libucl/doc/api.md b/contrib/libucl/doc/api.md
index 75b954bb302c..a0d33c0e68a9 100644
--- a/contrib/libucl/doc/api.md
+++ b/contrib/libucl/doc/api.md
@@ -243,7 +243,7 @@ return ret;
 
 # Emitting functions
 
-Libucl can transform UCL objects to a number of tectual formats:
+Libucl can transform UCL objects to a number of textual formats:
 
 - configuration (`UCL_EMIT_CONFIG`) - nginx like human readable configuration file where implicit arrays are transformed to the duplicate keys
 - compact json: `UCL_EMIT_JSON_COMPACT` - single line valid json without spaces
@@ -349,7 +349,7 @@ This object should be released by caller.
 Libucl provides the functions similar to inverse conversion functions called with the specific C type:
 - `ucl_object_fromint` - converts `int64_t` to UCL object
 - `ucl_object_fromdouble` - converts `double` to UCL object
-- `ucl_object_fromboolean` - converts `bool` to UCL object
+- `ucl_object_frombool` - converts `bool` to UCL object
 - `ucl_object_fromstring` - converts `const char *` to UCL object (this string should be NULL terminated)
 - `ucl_object_fromlstring` - converts `const char *` and `size_t` len to UCL object (string does not need to be NULL terminated)
 
@@ -432,7 +432,8 @@ UCL defines the following functions to manage safe iterators:
 
 - `ucl_object_iterate_new` - creates new safe iterator
 - `ucl_object_iterate_reset` - resets iterator to a new object
-- `ucl_object_iterate_safe` - safely iterate the object inside iterator
+- `ucl_object_iterate_safe` - safely iterate the object inside iterator. Note: function may allocate and free memory during its operation. Therefore it returns `NULL` either while trying to access item after the last one or when exception (such as memory allocation failure) happens.
+- `ucl_object_iter_chk_excpn` -  check if the last call to `ucl_object_iterate_safe` ended up in unrecoverable exception (e.g. `ENOMEM`).
 - `ucl_object_iterate_free` - free memory associated with the safe iterator
 
 Please note that unlike unsafe iterators, safe iterators *must* be explicitly initialized and freed.
@@ -447,6 +448,11 @@ it = ucl_object_iterate_new (obj);
 while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
 	/* Do something */
 }
+/* Check error condition */
+if (ucl_object_iter_chk_excpn (it)) {
+    ucl_object_iterate_free (it);
+    exit (1);
+}
 
 /* Switch to another object */
 it = ucl_object_iterate_reset (it, another_obj);
@@ -454,6 +460,11 @@ it = ucl_object_iterate_reset (it, another_obj);
 while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
 	/* Do something else */
 }
+/* Check error condition */
+if (ucl_object_iter_chk_excpn (it)) {
+    ucl_object_iterate_free (it);
+    exit (1);
+}
 
 ucl_object_iterate_free (it);
 ~~~
diff --git a/contrib/libucl/doc/libucl.3 b/contrib/libucl/doc/libucl.3
index ec5046325700..b5fef09f7691 100644
--- a/contrib/libucl/doc/libucl.3
+++ b/contrib/libucl/doc/libucl.3
@@ -612,15 +612,23 @@ Iteration\ without\ expansion:
 .PP
 UCL defines the following functions to manage safe iterators:
 .IP \[bu] 2
-\f[C]ucl_object_iterate_new\f[] \- creates new safe iterator
+\f[C]ucl_object_iterate_new\f[] \- creates new safe iterator.
 .IP \[bu] 2
-\f[C]ucl_object_iterate_reset\f[] \- resets iterator to a new object
+\f[C]ucl_object_iterate_reset\f[] \- resets iterator to a new object.
 .IP \[bu] 2
 \f[C]ucl_object_iterate_safe\f[] \- safely iterate the object inside
-iterator
+iterator.
+Note: function may allocate and free memory during its operation.
+Therefore it returns \f[C]NULL\f[] either while trying to access item
+after the last one or when exception (such as memory allocation
+failure) happens.
+.IP \[bu] 2
+\f[C]ucl_object_iter_chk_excpn\f[] \- check if the last call to
+\f[C]ucl_object_iterate_safe\f[] ended up in unrecoverable exception
+(e.g. \f[C]ENOMEM\f[]).
 .IP \[bu] 2
 \f[C]ucl_object_iterate_free\f[] \- free memory associated with the safe
-iterator
+iterator.
 .PP
 Please note that unlike unsafe iterators, safe iterators \f[I]must\f[]
 be explicitly initialized and freed.
@@ -637,6 +645,11 @@ it\ =\ ucl_object_iterate_new\ (obj);
 while\ ((cur\ =\ ucl_object_iterate_safe\ (it,\ true))\ !=\ NULL)\ {
 \ \ \ \ /*\ Do\ something\ */
 }
+/*\ Check\ error\ condition\ */
+if\ (ucl_object_iter_chk_excpn\ (it))\ {
+\ \ \ \ ucl_object_iterate_free\ (it);
+\ \ \ \ exit\ (1);
+}
 
 /*\ Switch\ to\ another\ object\ */
 it\ =\ ucl_object_iterate_reset\ (it,\ another_obj);
@@ -644,6 +657,11 @@ it\ =\ ucl_object_iterate_reset\ (it,\ another_obj);
 while\ ((cur\ =\ ucl_object_iterate_safe\ (it,\ true))\ !=\ NULL)\ {
 \ \ \ \ /*\ Do\ something\ else\ */
 }
+/*\ Check\ error\ condition\ */
+if\ (ucl_object_iter_chk_excpn\ (it))\ {
+\ \ \ \ ucl_object_iterate_free\ (it);
+\ \ \ \ exit\ (1);
+}
 
 ucl_object_iterate_free\ (it);
 \f[]
diff --git a/contrib/libucl/doc/lua_api.md b/contrib/libucl/doc/lua_api.md
index f7af3caffff4..7da414903b01 100644
--- a/contrib/libucl/doc/lua_api.md
+++ b/contrib/libucl/doc/lua_api.md
@@ -69,8 +69,8 @@ converts `obj` to lua representation using the following conversions:
 - *scalar* values are directly presented by lua objects
 - *userdata* values are converted to lua function objects using `LUA_REGISTRYINDEX`,
 this can be used to pass functions from lua to c and vice-versa
-- *arrays* are converted to lua tables with numeric indicies suitable for `ipairs` iterations
-- *objects* are converted to lua tables with string indicies
+- *arrays* are converted to lua tables with numeric indices suitable for `ipairs` iterations
+- *objects* are converted to lua tables with string indices
 
 **Parameters:**
 
diff --git a/contrib/libucl/include/lua_ucl.h b/contrib/libucl/include/lua_ucl.h
index 38e74d3f619d..5b7f88e031e1 100644
--- a/contrib/libucl/include/lua_ucl.h
+++ b/contrib/libucl/include/lua_ucl.h
@@ -54,6 +54,14 @@ UCL_EXTERN int luaopen_ucl (lua_State *L);
  */
 UCL_EXTERN ucl_object_t* ucl_object_lua_import (lua_State *L, int idx);
 
+/**
+ * Import UCL object from lua state, escaping JSON strings
+ * @param L lua state
+ * @param idx index of object at the lua stack to convert to UCL
+ * @return new UCL object or NULL, the caller should unref object after using
+ */
+UCL_EXTERN ucl_object_t* ucl_object_lua_import_escape (lua_State *L, int idx);
+
 /**
  * Push an object to lua
  * @param L lua state
@@ -62,8 +70,16 @@ UCL_EXTERN ucl_object_t* ucl_object_lua_import (lua_State *L, int idx);
  */
 UCL_EXTERN int ucl_object_push_lua (lua_State *L,
 		const ucl_object_t *obj, bool allow_array);
+/**
+ * Push an object to lua replacing all ucl.null with `false`
+ * @param L lua state
+ * @param obj object to push
+ * @param allow_array traverse over implicit arrays
+ */
+UCL_EXTERN int ucl_object_push_lua_filter_nil (lua_State *L,
+											   const ucl_object_t *obj,
+											   bool allow_array);
 
-UCL_EXTERN struct ucl_lua_funcdata* ucl_object_toclosure (
-		const ucl_object_t *obj);
+UCL_EXTERN struct ucl_lua_funcdata* ucl_object_toclosure (const ucl_object_t *obj);
 
 #endif /* LUA_UCL_H_ */
diff --git a/contrib/libucl/include/ucl++.h b/contrib/libucl/include/ucl++.h
index 2c2bdde51559..fb63430d400d 100644
--- a/contrib/libucl/include/ucl++.h
+++ b/contrib/libucl/include/ucl++.h
@@ -29,6 +29,7 @@
 #include <set>
 #include <memory>
 #include <iostream>
+#include <tuple>
 
 #include "ucl.h"
 
@@ -106,7 +107,7 @@ private:
 	static bool ucl_variable_getter(const unsigned char *data, size_t len,
 			unsigned char ** /*replace*/, size_t * /*replace_len*/, bool *need_free, void* ud)
 	{
-        *need_free = false;
+		*need_free = false;
 
 		auto vars = reinterpret_cast<std::set<std::string> *>(ud);
 		if (vars && data && len != 0) {
@@ -123,17 +124,17 @@ private:
 		auto replacer = reinterpret_cast<variable_replacer *>(ud);
 		if (!replacer) {
 			return false;
-        }
+		}
 
 		std::string var_name (data, data + len);
 		if (!replacer->is_variable (var_name)) {
 			return false;
-        }
+		}
 
 		std::string var_value = replacer->replace (var_name);
 		if (var_value.empty ()) {
 			return false;
-        }
+ 		}
 
 		*replace = (unsigned char *)UCL_ALLOC (var_value.size ());
 		memcpy (*replace, var_value.data (), var_value.size ());
@@ -152,7 +153,8 @@ private:
 		config_func (parser);
 
 		if (!parse_func (parser)) {
-			err.assign (ucl_parser_get_error (parser));
+			const char *error = ucl_parser_get_error (parser); //Assigning here without checking result first causes a
+			if( error != NULL ) err.assign(error);             //	crash if ucl_parser_get_error returns NULL
 			ucl_parser_free (parser);
 
 			return nullptr;
@@ -168,6 +170,16 @@ private:
 	std::unique_ptr<ucl_object_t, ucl_deleter> obj;
 
 public:
+	struct macro_handler_s {
+		ucl_macro_handler         handler;
+		ucl_context_macro_handler ctx_handler;
+	};
+
+	struct macro_userdata_s {
+		ucl_parser    *parser;
+		void          *userdata;
+	};
+
 	class const_iterator {
 	private:
 		struct ucl_iter_deleter {
@@ -184,7 +196,7 @@ public:
 			it = std::shared_ptr<void>(ucl_object_iterate_new (obj.obj.get()),
 				ucl_iter_deleter());
 			cur.reset (new Ucl(ucl_object_iterate_safe (it.get(), true)));
-			if (cur->type() == UCL_NULL) {
+			if (!cur->obj) {
 				it.reset ();
 				cur.reset ();
 			}
@@ -218,7 +230,7 @@ public:
 				cur.reset (new Ucl(ucl_object_iterate_safe (it.get(), true)));
 			}
 
-			if (cur && cur->type() == UCL_NULL) {
+			if (cur && !cur->obj) {
 				it.reset ();
 				cur.reset ();
 			}
@@ -330,7 +342,7 @@ public:
 		return UCL_NULL;
 	}
 
-	const std::string key () const {
+	std::string key () const {
 		std::string res;
 
 		if (obj->key) {
@@ -373,7 +385,7 @@ public:
 		return default_val;
 	}
 
-	const std::string string_value (const std::string& default_val = "") const
+	std::string string_value (const std::string& default_val = "") const
 	{
 		const char* res = nullptr;
 
@@ -384,7 +396,16 @@ public:
 		return default_val;
 	}
 
-	const Ucl at (size_t i) const
+	size_t size () const
+	{
+		if (type () == UCL_ARRAY) {
+			return ucl_array_size (obj.get());
+		}
+
+		return 0;
+	}
+
+	Ucl at (size_t i) const
 	{
 		if (type () == UCL_ARRAY) {
 			return Ucl (ucl_array_find_index (obj.get(), i));
@@ -393,7 +414,7 @@ public:
 		return Ucl (nullptr);
 	}
 
-	const Ucl lookup (const std::string &key) const
+	Ucl lookup (const std::string &key) const
 	{
 		if (type () == UCL_OBJECT) {
 			return Ucl (ucl_object_lookup_len (obj.get(),
@@ -403,12 +424,12 @@ public:
 		return Ucl (nullptr);
 	}
 
-	inline const Ucl operator[] (size_t i) const
+	inline Ucl operator[] (size_t i) const
 	{
 		return at(i);
 	}
 
-	inline const Ucl operator[](const std::string &key) const
+	inline Ucl operator[](const std::string &key) const
 	{
 		return lookup(key);
 	}
@@ -432,43 +453,116 @@ public:
 		return out;
 	}
 
-	static Ucl parse (const std::string &in, std::string &err)
+	static Ucl parse (const std::string &in, std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
-		return parse (in, std::map<std::string, std::string>(), err);
+		return parse (in, std::map<std::string, std::string>(), err, duplicate_strategy);
 	}
 
-	static Ucl parse (const std::string &in, const std::map<std::string, std::string> &vars, std::string &err)
+	static Ucl parse (const std::string &in, const std::map<std::string, std::string> &vars,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
-		auto config_func = [&vars] (ucl_parser *parser) {
+		std::vector< std::tuple< std::string, macro_handler_s, void * > > emptyVector;
+		return parse ( in, vars, emptyVector, err, duplicate_strategy );
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const std::string &in,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		return parse (in, std::map<std::string, std::string>(), macros, err, duplicate_strategy);
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const std::string &in, const std::map<std::string, std::string> &vars,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		//Preserve macro_userdata_s memory for later use in parse_with_strategy_function()
+		std::vector<macro_userdata_s> userdata_list;
+		userdata_list.reserve (macros.size());
+		auto config_func = [&userdata_list, &vars, &macros] (ucl_parser *parser) {
 			for (const auto & item : vars) {
 				ucl_parser_register_variable (parser, item.first.c_str (), item.second.c_str ());
-            }
+			}
+			for (auto & macro : macros) {
+				userdata_list.push_back ({parser, std::get<2>(macro)});
+				if (std::get<1>(macro).handler != NULL) {
+					ucl_parser_register_macro (parser,
+								std::get<0>(macro).c_str(),
+								std::get<1>(macro).handler,
+								reinterpret_cast<void*>(&userdata_list.back()));
+				}
+				else if (std::get<1>(macro).ctx_handler != NULL) {
+					ucl_parser_register_context_macro (parser,
+									std::get<0>(macro).c_str(),
+									std::get<1>(macro).ctx_handler,
+									reinterpret_cast<void*>(&userdata_list.back()));
+				}
+			}
 		};
 
-		auto parse_func = [&in] (ucl_parser *parser) {
-			return ucl_parser_add_chunk (parser, (unsigned char *)in.data (), in.size ());
+		auto parse_func = [&in, &duplicate_strategy] (struct ucl_parser *parser) -> bool {
+			return ucl_parser_add_chunk_full (parser,
+							(unsigned char *) in.data (),
+							in.size (),
+							(unsigned int)ucl_parser_get_default_priority (parser),
+							duplicate_strategy,
+							UCL_PARSE_UCL);
 		};
 
 		return parse_with_strategy_function (config_func, parse_func, err);
 	}
 
-	static Ucl parse (const std::string &in, const variable_replacer &replacer, std::string &err)
-	{
-		auto config_func = [&replacer] (ucl_parser *parser) {
-			ucl_parser_set_variables_handler (parser, ucl_variable_replacer,
-				&const_cast<variable_replacer &>(replacer));
+	static Ucl parse (const std::string &in, const variable_replacer &replacer,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		std::vector< std::tuple< std::string, macro_handler_s, void * > > emptyVector;
+		return parse ( in, replacer, emptyVector, err, duplicate_strategy );
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const std::string &in, const variable_replacer &replacer,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		//Preserve macro_userdata_s memory for later use in parse_with_strategy_function()
+		std::vector<macro_userdata_s> userdata_list;
+		userdata_list.reserve (macros.size());
+		auto config_func = [&userdata_list, &replacer, &macros] (ucl_parser *parser) {
+			ucl_parser_set_variables_handler (parser, ucl_variable_replacer, &const_cast<variable_replacer &>(replacer));
+			for (auto & macro : macros) {
+				userdata_list.push_back ({parser, std::get<2>(macro)});
+				if (std::get<1>(macro).handler != NULL) {
+					ucl_parser_register_macro (parser,
+								std::get<0>(macro).c_str(),
+								std::get<1>(macro).handler,
+								reinterpret_cast<void*>(&userdata_list.back()));
+				}
+				else if (std::get<1>(macro).ctx_handler != NULL) {
+					ucl_parser_register_context_macro (parser,
+									std::get<0>(macro).c_str(),
+									std::get<1>(macro).ctx_handler,
+									reinterpret_cast<void*>(&userdata_list.back()));
+				}
+			}
 		};
 
-		auto parse_func = [&in] (ucl_parser *parser) {
-			return ucl_parser_add_chunk (parser, (unsigned char *) in.data (), in.size ());
+		auto parse_func = [&in, &duplicate_strategy] (struct ucl_parser *parser) -> bool {
+			return ucl_parser_add_chunk_full (parser,
+							(unsigned char *) in.data (),
+							in.size (),
+							(unsigned int)ucl_parser_get_default_priority (parser),
+							duplicate_strategy,
+							UCL_PARSE_UCL);
 		};
 
 		return parse_with_strategy_function (config_func, parse_func, err);
 	}
 
-	static Ucl parse (const char *in, std::string &err)
+	static Ucl parse (const char *in, std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
-		return parse (in, std::map<std::string, std::string>(), err);
+		return parse (in, std::map<std::string, std::string>(), err, duplicate_strategy);
 	}
 
 	static Ucl parse (const char *in, const std::map<std::string, std::string> &vars, std::string &err)
@@ -480,13 +574,46 @@ public:
 		return parse (std::string (in), vars, err);
 	}
 
-	static Ucl parse (const char *in, const variable_replacer &replacer, std::string &err)
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const char *in,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		return parse (in, std::map<std::string, std::string>(), macros, err, duplicate_strategy);
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const char *in, const std::map<std::string, std::string> &vars,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
 		if (!in) {
 			err = "null input";
 			return nullptr;
 		}
-		return parse (std::string(in), replacer, err);
+		return parse (std::string (in), vars, macros, err, duplicate_strategy);
+	}
+
+	static Ucl parse (const char *in, const variable_replacer &replacer,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		if (!in) {
+			err = "null input";
+			return nullptr;
+		}
+		return parse (std::string(in), replacer, err, duplicate_strategy);
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const char *in, const variable_replacer &replacer,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		if (!in) {
+			err = "null input";
+			return nullptr;
+		}
+		return parse (std::string (in), replacer, macros, err, duplicate_strategy);
 	}
 
 	static Ucl parse_from_file (const std::string &filename, std::string &err)
@@ -556,7 +683,7 @@ public:
 
 		std::vector<std::string> result;
 		std::move (vars.begin (), vars.end (), std::back_inserter (result));
-		return std::move (result);
+		return result;
 	}
 
 	Ucl& operator= (Ucl rhs)
diff --git a/contrib/libucl/include/ucl.h b/contrib/libucl/include/ucl.h
index fccf6fcb2237..39da2593648d 100644
--- a/contrib/libucl/include/ucl.h
+++ b/contrib/libucl/include/ucl.h
@@ -105,10 +105,11 @@ typedef enum ucl_error {
 	UCL_EIO, /**< IO error occurred during parsing */
 	UCL_ESTATE, /**< Invalid state machine state */
 	UCL_ENESTED, /**< Input has too many recursion levels */
+	UCL_EUNPAIRED, /**< Input has too many recursion levels */
 	UCL_EMACRO, /**< Error processing a macro */
 	UCL_EINTERNAL, /**< Internal unclassified error */
 	UCL_ESSL, /**< SSL error */
-	UCL_EMERGE /**< A merge error occured */
+	UCL_EMERGE /**< A merge error occurred */
 } ucl_error_t;
 
 /**
@@ -177,7 +178,8 @@ typedef enum ucl_string_flags {
 } ucl_string_flags_t;
 
 /**
- * Basic flags for an object
+ * Basic flags for an object (can use up to 12 bits as higher 4 bits are used
+ * for priorities)
  */
 typedef enum ucl_object_flags {
 	UCL_OBJECT_ALLOCATED_KEY = (1 << 0), /**< An object has key allocated internally */
@@ -187,7 +189,8 @@ typedef enum ucl_object_flags {
 	UCL_OBJECT_MULTILINE = (1 << 4), /**< String should be displayed as multiline string */
 	UCL_OBJECT_MULTIVALUE = (1 << 5), /**< Object is a key with multiple values */
 	UCL_OBJECT_INHERITED = (1 << 6), /**< Object has been inherited from another */
-	UCL_OBJECT_BINARY = (1 << 7) /**< Object contains raw binary data */
+	UCL_OBJECT_BINARY = (1 << 7), /**< Object contains raw binary data */
+	UCL_OBJECT_SQUOTED = (1 << 8) /**< Object has been enclosed in single quotes */
 } ucl_object_flags_t;
 
 /**
@@ -462,6 +465,14 @@ UCL_EXTERN ucl_object_t* ucl_object_pop_key (ucl_object_t *top, const char *key)
 UCL_EXTERN bool ucl_object_insert_key_merged (ucl_object_t *top, ucl_object_t *elt,
 		const char *key, size_t keylen, bool copy_key);
 
+/**
+ * Reserve space in ucl array or object for `elt` elements
+ * @param obj object to reserve
+ * @param reserved size to reserve in an object
+ * @return 0 on success, -1 on failure (i.e. ENOMEM)
+ */
+UCL_EXTERN bool ucl_object_reserve (ucl_object_t *obj, size_t reserved);
+
 /**
  * Append an element to the end of array object
  * @param top destination object (must NOT be NULL)
@@ -533,6 +544,13 @@ UCL_EXTERN ucl_object_t* ucl_array_pop_last (ucl_object_t *top);
  */
 UCL_EXTERN ucl_object_t* ucl_array_pop_first (ucl_object_t *top);
 
*** 5210 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:02 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6EAE0632B6D;
 Wed,  5 May 2021 07:24: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9Z1Q05z3GMT;
 Wed,  5 May 2021 07:24:02 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2126020E15;
 Wed,  5 May 2021 07:24:02 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457O2FG048354;
 Wed, 5 May 2021 07:24:02 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457O2xr048353;
 Wed, 5 May 2021 07:24:02 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:24:02 GMT
Message-Id: <202105050724.1457O2xr048353@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 59a02060673d - stable/13 - libedit: vendor import libedit
 2021-03-28
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 59a02060673da4c978c7ae8db00ebb814a2605e5
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:02 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=59a02060673da4c978c7ae8db00ebb814a2605e5

commit 59a02060673da4c978c7ae8db00ebb814a2605e5
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-22 14:34:14 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:21:54 +0000

    libedit: vendor import libedit 2021-03-28
    
    (cherry picked from commit f9a159da2a292968cd5c37b56a6c43b6af8c5eed)
    (cherry picked from commit 19318a62d7f8cfe2f0f5c24178fa33e8844ae5d1)
---
 contrib/libedit/Makefile       |   6 +-
 contrib/libedit/chartype.h     |   2 +-
 contrib/libedit/common.c       |   8 +-
 contrib/libedit/filecomplete.c | 258 ++++++++++++++++++++++-------------------
 contrib/libedit/filecomplete.h |   8 +-
 contrib/libedit/history.c      |  14 ++-
 contrib/libedit/map.c          |  10 +-
 contrib/libedit/readline.c     |  18 ++-
 contrib/libedit/refresh.c      |   5 +-
 contrib/libedit/search.c       |  26 ++---
 contrib/libedit/terminal.c     |  61 +++++-----
 contrib/libedit/tty.c          |   7 +-
 12 files changed, 230 insertions(+), 193 deletions(-)

diff --git a/contrib/libedit/Makefile b/contrib/libedit/Makefile
index 8a02211504a8..105a6a92e0ee 100644
--- a/contrib/libedit/Makefile
+++ b/contrib/libedit/Makefile
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.65 2017/06/30 20:26:52 kre Exp $
+#	$NetBSD: Makefile,v 1.66 2019/10/13 07:28:10 mrg Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/4/93
 
 USE_SHLIBDIR=	yes
@@ -137,3 +137,7 @@ COPTS.literal.c+=	-Wno-sign-conversion
 COPTS.tokenizer.c+=	-Wno-cast-qual
 COPTS.tokenizern.c+=	-Wno-cast-qual
 .endif
+
+COPTS.history.c+=	${GCC_NO_STRINGOP_OVERFLOW}
+COPTS.historyn.c+=	${GCC_NO_STRINGOP_OVERFLOW}
+COPTS.readline.c+=	${GCC_NO_STRINGOP_TRUNCATION} ${GCC_NO_STRINGOP_OVERFLOW}
diff --git a/contrib/libedit/chartype.h b/contrib/libedit/chartype.h
index 3eda7da07296..bfa3d54ec36c 100644
--- a/contrib/libedit/chartype.h
+++ b/contrib/libedit/chartype.h
@@ -1,4 +1,4 @@
-/*	$NetBSD: chartype.h,v 1.35 2017/05/22 19:16:25 christos Exp $	*/
+/*	$NetBSD: chartype.h,v 1.36 2019/09/15 21:09:11 christos Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
diff --git a/contrib/libedit/common.c b/contrib/libedit/common.c
index bc6c057cf51d..f33c29650d79 100644
--- a/contrib/libedit/common.c
+++ b/contrib/libedit/common.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: common.c,v 1.48 2018/02/26 17:36:14 christos Exp $	*/
+/*	$NetBSD: common.c,v 1.49 2020/03/30 06:54:37 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)common.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: common.c,v 1.48 2018/02/26 17:36:14 christos Exp $");
+__RCSID("$NetBSD: common.c,v 1.49 2020/03/30 06:54:37 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -658,7 +658,7 @@ ed_search_prev_history(EditLine *el, wint_t c __attribute__((__unused__)))
 
 	while (hp != NULL) {
 #ifdef SDEBUG
-		(void) fprintf(el->el_errfile, "Comparing with \"%s\"\n", hp);
+		(void) fprintf(el->el_errfile, "Comparing with \"%ls\"\n", hp);
 #endif
 		if ((wcsncmp(hp, el->el_line.buffer, (size_t)
 			    (el->el_line.lastchar - el->el_line.buffer)) ||
@@ -713,7 +713,7 @@ ed_search_next_history(EditLine *el, wint_t c __attribute__((__unused__)))
 
 	for (h = 1; h < el->el_history.eventno && hp; h++) {
 #ifdef SDEBUG
-		(void) fprintf(el->el_errfile, "Comparing with \"%s\"\n", hp);
+		(void) fprintf(el->el_errfile, "Comparing with \"%ls\"\n", hp);
 #endif
 		if ((wcsncmp(hp, el->el_line.buffer, (size_t)
 			    (el->el_line.lastchar - el->el_line.buffer)) ||
diff --git a/contrib/libedit/filecomplete.c b/contrib/libedit/filecomplete.c
index 662a0bb85d0b..8279d7ff82b6 100644
--- a/contrib/libedit/filecomplete.c
+++ b/contrib/libedit/filecomplete.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.c,v 1.58 2019/09/08 05:50:58 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.c,v 1.67 2021/03/28 13:39:39 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: filecomplete.c,v 1.58 2019/09/08 05:50:58 abhinav Exp $");
+__RCSID("$NetBSD: filecomplete.c,v 1.67 2021/03/28 13:39:39 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -86,8 +86,7 @@ fn_tilde_expand(const char *txt)
 		temp = el_calloc(len, sizeof(*temp));
 		if (temp == NULL)
 			return NULL;
-		(void)strncpy(temp, txt + 1, len - 2);
-		temp[len - 2] = '\0';
+		(void)strlcpy(temp, txt + 1, len - 1);
 	}
 	if (temp[0] == 0) {
 #ifdef HAVE_GETPW_R_POSIX
@@ -292,7 +291,7 @@ escape_filename(EditLine * el, const char *filename, int single_match,
 
 	if (single_match && app_func) {
 		escaped_str[offset] = 0;
-		append_char = app_func(escaped_str);
+		append_char = app_func(filename);
 		/* we want to append space only if we are not inside quotes */
 		if (append_char[0] == ' ') {
 			if (!s_quoted && !d_quoted)
@@ -354,8 +353,7 @@ fn_filename_completion_function(const char *text, int state)
 				return NULL;
 			}
 			dirname = nptr;
-			(void)strncpy(dirname, text, len);
-			dirname[len] = '\0';
+			(void)strlcpy(dirname, text, len + 1);
 		} else {
 			el_free(filename);
 			if (*text == 0)
@@ -509,8 +507,7 @@ completion_matches(const char *text, char *(*genfunc)(const char *, int))
 		el_free(match_list);
 		return NULL;
 	}
-	(void)strncpy(retstr, match_list[1], max_equal);
-	retstr[max_equal] = '\0';
+	(void)strlcpy(retstr, match_list[1], max_equal + 1);
 	match_list[0] = retstr;
 
 	/* add NULL as last pointer to the array */
@@ -586,10 +583,12 @@ fn_display_match_list(EditLine * el, char **matches, size_t num, size_t width,
 
 static wchar_t *
 find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
-    const wchar_t * word_break, const wchar_t * special_prefixes, size_t * length)
+    const wchar_t * word_break, const wchar_t * special_prefixes, size_t * length,
+	int do_unescape)
 {
 	/* We now look backwards for the start of a filename/variable word */
 	const wchar_t *ctemp = cursor;
+	wchar_t *temp;
 	size_t len;
 
 	/* if the cursor is placed at a slash or a quote, we need to find the
@@ -614,12 +613,8 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
 			if (ctemp - buffer >= 2 && ctemp[-2] == '\\') {
 				ctemp -= 2;
 				continue;
-			} else if (ctemp - buffer >= 2 &&
-			    (ctemp[-2] == '\'' || ctemp[-2] == '"')) {
-				ctemp--;
-				continue;
-			} else
-				break;
+			}
+			break;
 		}
 		if (special_prefixes && wcschr(special_prefixes, ctemp[-1]))
 			break;
@@ -632,10 +627,16 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
 		ctemp++;
 	}
 	*length = len;
-	wchar_t *unescaped_word = unescape_string(ctemp, len);
-	if (unescaped_word == NULL)
-		return NULL;
-	return unescaped_word;
+	if (do_unescape) {
+		wchar_t *unescaped_word = unescape_string(ctemp, len);
+		if (unescaped_word == NULL)
+			return NULL;
+		return unescaped_word;
+	}
+	temp = el_malloc((len + 1) * sizeof(*temp));
+	(void) wcsncpy(temp, ctemp, len);
+	temp[len] = '\0';
+	return temp;
 }
 
 /*
@@ -651,12 +652,13 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
  *       '!' could never be invoked
  */
 int
-fn_complete(EditLine *el,
-	char *(*complet_func)(const char *, int),
-	char **(*attempted_completion_function)(const char *, int, int),
-	const wchar_t *word_break, const wchar_t *special_prefixes,
-	const char *(*app_func)(const char *), size_t query_items,
-	int *completion_type, int *over, int *point, int *end)
+fn_complete2(EditLine *el,
+    char *(*complete_func)(const char *, int),
+    char **(*attempted_completion_function)(const char *, int, int),
+    const wchar_t *word_break, const wchar_t *special_prefixes,
+    const char *(*app_func)(const char *), size_t query_items,
+    int *completion_type, int *over, int *point, int *end,
+    unsigned int flags)
 {
 	const LineInfoW *li;
 	wchar_t *temp;
@@ -665,6 +667,7 @@ fn_complete(EditLine *el,
 	size_t len;
 	int what_to_do = '\t';
 	int retval = CC_NORM;
+	int do_unescape = flags & FN_QUOTE_MATCH;
 
 	if (el->el_state.lastcmd == el->el_state.thiscmd)
 		what_to_do = '?';
@@ -673,14 +676,14 @@ fn_complete(EditLine *el,
 	if (completion_type != NULL)
 		*completion_type = what_to_do;
 
-	if (!complet_func)
-		complet_func = fn_filename_completion_function;
+	if (!complete_func)
+		complete_func = fn_filename_completion_function;
 	if (!app_func)
 		app_func = append_char_function;
 
 	li = el_wline(el);
 	temp = find_word_to_complete(li->cursor,
-	    li->buffer, word_break, special_prefixes, &len);
+	    li->buffer, word_break, special_prefixes, &len, do_unescape);
 	if (temp == NULL)
 		goto out;
 
@@ -701,117 +704,136 @@ fn_complete(EditLine *el,
 	if (!attempted_completion_function ||
 	    (over != NULL && !*over && !matches))
 		matches = completion_matches(
-		    ct_encode_string(temp, &el->el_scratch), complet_func);
+		    ct_encode_string(temp, &el->el_scratch), complete_func);
 
 	if (over != NULL)
 		*over = 0;
 
-	if (matches) {
-		int i;
-		size_t matches_num, maxlen, match_len, match_display=1;
-		int single_match = matches[2] == NULL &&
-			(matches[1] == NULL || strcmp(matches[0], matches[1]) == 0);
-
-		retval = CC_REFRESH;
-
-		if (matches[0][0] != '\0') {
-			el_deletestr(el, (int)len);
-			if (!attempted_completion_function)
-				completion = escape_filename(el, matches[0],
-				    single_match, app_func);
-			else
-				completion = strdup(matches[0]);
-			if (completion == NULL)
-				goto out;
-			if (single_match) {
-				/* We found exact match. Add a space after it,
-				 * unless we do filename completion and the
-				 * object is a directory. Also do necessary
-				 * escape quoting
-				 */
-				el_winsertstr(el,
-				    ct_decode_string(completion, &el->el_scratch));
-			} else {
-				/* Only replace the completed string with
-				 * common part of possible matches if there is
-				 * possible completion.
-				 */
-				el_winsertstr(el,
-				    ct_decode_string(completion, &el->el_scratch));
-			}
-			free(completion);
-		}
+	if (matches == NULL) {
+		goto out;
+	}
+	int i;
+	size_t matches_num, maxlen, match_len, match_display=1;
+	int single_match = matches[2] == NULL &&
+		(matches[1] == NULL || strcmp(matches[0], matches[1]) == 0);
+
+	retval = CC_REFRESH;
+
+	if (matches[0][0] != '\0') {
+		el_deletestr(el, (int)len);
+		if (flags & FN_QUOTE_MATCH)
+			completion = escape_filename(el, matches[0],
+			    single_match, app_func);
+		else
+			completion = strdup(matches[0]);
+		if (completion == NULL)
+			goto out;
 
+		/*
+		 * Replace the completed string with the common part of
+		 * all possible matches if there is a possible completion.
+		 */
+		el_winsertstr(el,
+		    ct_decode_string(completion, &el->el_scratch));
 
-		if (!single_match && (what_to_do == '!' || what_to_do == '?')) {
+		if (single_match && attempted_completion_function &&
+		    !(flags & FN_QUOTE_MATCH))
+		{
 			/*
-			 * More than one match and requested to list possible
-			 * matches.
+			 * We found an exact match. Add a space after
+			 * it, unless we do filename completion and the
+			 * object is a directory. Also do necessary
+			 * escape quoting
 			 */
+			el_winsertstr(el, ct_decode_string(
+			    (*app_func)(completion), &el->el_scratch));
+		}
+		free(completion);
+	}
 
-			for(i = 1, maxlen = 0; matches[i]; i++) {
-				match_len = strlen(matches[i]);
-				if (match_len > maxlen)
-					maxlen = match_len;
-			}
-			/* matches[1] through matches[i-1] are available */
-			matches_num = (size_t)(i - 1);
 
-			/* newline to get on next line from command line */
-			(void)fprintf(el->el_outfile, "\n");
+	if (!single_match && (what_to_do == '!' || what_to_do == '?')) {
+		/*
+		 * More than one match and requested to list possible
+		 * matches.
+		 */
 
-			/*
-			 * If there are too many items, ask user for display
-			 * confirmation.
-			 */
-			if (matches_num > query_items) {
-				(void)fprintf(el->el_outfile,
-				    "Display all %zu possibilities? (y or n) ",
-				    matches_num);
-				(void)fflush(el->el_outfile);
-				if (getc(stdin) != 'y')
-					match_display = 0;
-				(void)fprintf(el->el_outfile, "\n");
-			}
+		for(i = 1, maxlen = 0; matches[i]; i++) {
+			match_len = strlen(matches[i]);
+			if (match_len > maxlen)
+				maxlen = match_len;
+		}
+		/* matches[1] through matches[i-1] are available */
+		matches_num = (size_t)(i - 1);
 
-			if (match_display) {
-				/*
-				 * Interface of this function requires the
-				 * strings be matches[1..num-1] for compat.
-				 * We have matches_num strings not counting
-				 * the prefix in matches[0], so we need to
-				 * add 1 to matches_num for the call.
-				 */
-				fn_display_match_list(el, matches,
-				    matches_num+1, maxlen, app_func);
-			}
-			retval = CC_REDISPLAY;
-		} else if (matches[0][0]) {
+		/* newline to get on next line from command line */
+		(void)fprintf(el->el_outfile, "\n");
+
+		/*
+		 * If there are too many items, ask user for display
+		 * confirmation.
+		 */
+		if (matches_num > query_items) {
+			(void)fprintf(el->el_outfile,
+			    "Display all %zu possibilities? (y or n) ",
+			    matches_num);
+			(void)fflush(el->el_outfile);
+			if (getc(stdin) != 'y')
+				match_display = 0;
+			(void)fprintf(el->el_outfile, "\n");
+		}
+
+		if (match_display) {
 			/*
-			 * There was some common match, but the name was
-			 * not complete enough. Next tab will print possible
-			 * completions.
+			 * Interface of this function requires the
+			 * strings be matches[1..num-1] for compat.
+			 * We have matches_num strings not counting
+			 * the prefix in matches[0], so we need to
+			 * add 1 to matches_num for the call.
 			 */
-			el_beep(el);
-		} else {
-			/* lcd is not a valid object - further specification */
-			/* is needed */
-			el_beep(el);
-			retval = CC_NORM;
+			fn_display_match_list(el, matches,
+			    matches_num+1, maxlen, app_func);
 		}
-
-		/* free elements of array and the array itself */
-		for (i = 0; matches[i]; i++)
-			el_free(matches[i]);
-		el_free(matches);
-		matches = NULL;
+		retval = CC_REDISPLAY;
+	} else if (matches[0][0]) {
+		/*
+		 * There was some common match, but the name was
+		 * not complete enough. Next tab will print possible
+		 * completions.
+		 */
+		el_beep(el);
+	} else {
+		/* lcd is not a valid object - further specification */
+		/* is needed */
+		el_beep(el);
+		retval = CC_NORM;
 	}
 
+	/* free elements of array and the array itself */
+	for (i = 0; matches[i]; i++)
+		el_free(matches[i]);
+	el_free(matches);
+	matches = NULL;
+
 out:
 	el_free(temp);
 	return retval;
 }
 
+int
+fn_complete(EditLine *el,
+    char *(*complete_func)(const char *, int),
+    char **(*attempted_completion_function)(const char *, int, int),
+    const wchar_t *word_break, const wchar_t *special_prefixes,
+    const char *(*app_func)(const char *), size_t query_items,
+    int *completion_type, int *over, int *point, int *end)
+{
+	return fn_complete2(el, complete_func, attempted_completion_function,
+	    word_break, special_prefixes, app_func, query_items,
+	    completion_type, over, point, end,
+	    attempted_completion_function ? 0 : FN_QUOTE_MATCH);
+}
+
 /*
  * el-compatible wrapper around rl_complete; needed for key binding
  */
diff --git a/contrib/libedit/filecomplete.h b/contrib/libedit/filecomplete.h
index 61d81389a0f7..60ea4894414b 100644
--- a/contrib/libedit/filecomplete.h
+++ b/contrib/libedit/filecomplete.h
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.h,v 1.11 2017/04/21 05:38:03 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.h,v 1.13 2021/03/28 13:38:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -36,6 +36,12 @@ int fn_complete(EditLine *,
     char **(*)(const char *, int, int),
     const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
     int *, int *, int *, int *);
+int fn_complete2(EditLine *,
+    char *(*)(const char *, int),
+    char **(*)(const char *, int, int),
+    const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
+    int *, int *, int *, int *, unsigned int);
+#define FN_QUOTE_MATCH 1		/* Quote the returned match */
 
 void fn_display_match_list(EditLine *, char **, size_t, size_t,
 	const char *(*)(const char *));
diff --git a/contrib/libedit/history.c b/contrib/libedit/history.c
index 227f72c4a102..73cfa6b8ead9 100644
--- a/contrib/libedit/history.c
+++ b/contrib/libedit/history.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: history.c,v 1.62 2018/09/13 09:03:40 kre Exp $	*/
+/*	$NetBSD: history.c,v 1.63 2019/10/08 19:17:57 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)history.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: history.c,v 1.62 2018/09/13 09:03:40 kre Exp $");
+__RCSID("$NetBSD: history.c,v 1.63 2019/10/08 19:17:57 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -411,21 +411,23 @@ static int
 history_def_add(void *p, TYPE(HistEvent) *ev, const Char *str)
 {
 	history_t *h = (history_t *) p;
-	size_t len;
+	size_t len, elen, slen;
 	Char *s;
 	HistEventPrivate *evp = (void *)&h->cursor->ev;
 
 	if (h->cursor == &h->list)
 		return history_def_enter(p, ev, str);
-	len = Strlen(evp->str) + Strlen(str) + 1;
+	elen = Strlen(evp->str);
+	slen = Strlen(str);
+	len = elen + slen + 1;
 	s = h_malloc(len * sizeof(*s));
 	if (s == NULL) {
 		he_seterrev(ev, _HE_MALLOC_FAILED);
 		return -1;
 	}
-	(void) Strncpy(s, h->cursor->ev.str, len);
+	memcpy(s, evp->str, elen * sizeof(*s));
+	memcpy(s + elen, str, slen * sizeof(*s)); 
         s[len - 1] = '\0';
-	(void) Strncat(s, str, len - Strlen(s) - 1);
 	h_free(evp->str);
 	evp->str = s;
 	*ev = h->cursor->ev;
diff --git a/contrib/libedit/map.c b/contrib/libedit/map.c
index 0c489593335a..46bf6f1c9472 100644
--- a/contrib/libedit/map.c
+++ b/contrib/libedit/map.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: map.c,v 1.52 2019/07/23 10:18:52 christos Exp $	*/
+/*	$NetBSD: map.c,v 1.53 2020/03/30 06:54:37 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)map.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: map.c,v 1.52 2019/07/23 10:18:52 christos Exp $");
+__RCSID("$NetBSD: map.c,v 1.53 2020/03/30 06:54:37 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -906,11 +906,11 @@ map_init(EditLine *el)
          */
 #ifdef MAP_DEBUG
 	if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
-		EL_ABORT((el->errfile, "Emacs map incorrect\n"));
+		EL_ABORT((el->el_errfile, "Emacs map incorrect\n"));
 	if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
-		EL_ABORT((el->errfile, "Vi command map incorrect\n"));
+		EL_ABORT((el->el_errfile, "Vi command map incorrect\n"));
 	if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
-		EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
+		EL_ABORT((el->el_errfile, "Vi insert map incorrect\n"));
 #endif
 
 	el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt));
diff --git a/contrib/libedit/readline.c b/contrib/libedit/readline.c
index dc852f5539c1..792dddbaf70b 100644
--- a/contrib/libedit/readline.c
+++ b/contrib/libedit/readline.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: readline.c,v 1.157 2019/08/21 11:11:48 christos Exp $	*/
+/*	$NetBSD: readline.c,v 1.159 2019/10/09 14:31:07 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: readline.c,v 1.157 2019/08/21 11:11:48 christos Exp $");
+__RCSID("$NetBSD: readline.c,v 1.159 2019/10/09 14:31:07 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -521,7 +521,7 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
 	s = str;
 	while (*s) {
 		if (*s == *what && !strncmp(s, what, what_len)) {
-			(void)strncpy(r, with, with_len);
+			memcpy(r, with, with_len);
 			r += with_len;
 			s += what_len;
 			if (!globally) {
@@ -607,8 +607,7 @@ get_history_event(const char *cmd, int *cindex, int qchar)
 	else {
 		if ((pat = el_calloc(len + 1, sizeof(*pat))) == NULL)
 			return NULL;
-		(void)strncpy(pat, cmd + begin, len);
-		pat[len] = '\0';
+		(void)strlcpy(pat, cmd + begin, len + 1);
 	}
 
 	if (history(h, &ev, H_CURR) != 0) {
@@ -702,8 +701,7 @@ _history_expand_command(const char *command, size_t offs, size_t cmdlen,
 			if ((aptr = el_calloc(offs + 1, sizeof(*aptr)))
 			    == NULL)
 				return -1;
-			(void)strncpy(aptr, command, offs);
-			aptr[offs] = '\0';
+			(void)strlcpy(aptr, command, offs + 1);
 			idx = 1;
 		} else {
 			int	qchar;
@@ -960,9 +958,8 @@ history_expand(char *str, char **output)
 			}						\
 			result = nresult;				\
 		}							\
-		(void)strncpy(&result[idx], what, len);			\
+		(void)strlcpy(&result[idx], what, len + 1);		\
 		idx += len;						\
-		result[idx] = '\0';					\
 	}
 
 	result = NULL;
@@ -1150,8 +1147,7 @@ history_tokenize(const char *str)
 			el_free(result);
 			return NULL;
 		}
-		(void)strncpy(temp, &str[start], len);
-		temp[len] = '\0';
+		(void)strlcpy(temp, &str[start], len + 1);
 		result[idx++] = temp;
 		result[idx] = NULL;
 		if (str[i])
diff --git a/contrib/libedit/refresh.c b/contrib/libedit/refresh.c
index 584eec624976..fab29746478c 100644
--- a/contrib/libedit/refresh.c
+++ b/contrib/libedit/refresh.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: refresh.c,v 1.56 2019/01/04 03:03:44 uwe Exp $	*/
+/*	$NetBSD: refresh.c,v 1.57 2020/03/30 06:54:37 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)refresh.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: refresh.c,v 1.56 2019/01/04 03:03:44 uwe Exp $");
+__RCSID("$NetBSD: refresh.c,v 1.57 2020/03/30 06:54:37 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -45,6 +45,7 @@ __RCSID("$NetBSD: refresh.c,v 1.56 2019/01/04 03:03:44 uwe Exp $");
  * refresh.c: Lower level screen refreshing functions
  */
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
diff --git a/contrib/libedit/search.c b/contrib/libedit/search.c
index 78e15d720cb8..e909d1475725 100644
--- a/contrib/libedit/search.c
+++ b/contrib/libedit/search.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: search.c,v 1.49 2019/07/23 10:18:52 christos Exp $	*/
+/*	$NetBSD: search.c,v 1.51 2020/03/30 06:56:38 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)search.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: search.c,v 1.49 2019/07/23 10:18:52 christos Exp $");
+__RCSID("$NetBSD: search.c,v 1.51 2020/03/30 06:56:38 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -162,7 +162,7 @@ libedit_private int
 c_hmatch(EditLine *el, const wchar_t *str)
 {
 #ifdef SDEBUG
-	(void) fprintf(el->el_errfile, "match `%s' with `%s'\n",
+	(void) fprintf(el->el_errfile, "match `%ls' with `%ls'\n",
 	    el->el_search.patbuf, str);
 #endif /* SDEBUG */
 
@@ -182,20 +182,17 @@ c_setpat(EditLine *el)
 		    (size_t)(EL_CURSOR(el) - el->el_line.buffer);
 		if (el->el_search.patlen >= EL_BUFSIZ)
 			el->el_search.patlen = EL_BUFSIZ - 1;
-		if (el->el_search.patlen != 0) {
-			(void) wcsncpy(el->el_search.patbuf, el->el_line.buffer,
-			    el->el_search.patlen);
-			el->el_search.patbuf[el->el_search.patlen] = '\0';
-		} else
-			el->el_search.patlen = wcslen(el->el_search.patbuf);
+		(void) wcsncpy(el->el_search.patbuf, el->el_line.buffer,
+		    el->el_search.patlen);
+		el->el_search.patbuf[el->el_search.patlen] = '\0';
 	}
 #ifdef SDEBUG
 	(void) fprintf(el->el_errfile, "\neventno = %d\n",
 	    el->el_history.eventno);
-	(void) fprintf(el->el_errfile, "patlen = %d\n", el->el_search.patlen);
-	(void) fprintf(el->el_errfile, "patbuf = \"%s\"\n",
+	(void) fprintf(el->el_errfile, "patlen = %ld\n", el->el_search.patlen);
+	(void) fprintf(el->el_errfile, "patbuf = \"%ls\"\n",
 	    el->el_search.patbuf);
-	(void) fprintf(el->el_errfile, "cursor %d lastchar %d\n",
+	(void) fprintf(el->el_errfile, "cursor %ld lastchar %ld\n",
 	    EL_CURSOR(el) - el->el_line.buffer,
 	    el->el_line.lastchar - el->el_line.buffer);
 #endif
@@ -573,8 +570,9 @@ cv_repeat_srch(EditLine *el, wint_t c)
 {
 
 #ifdef SDEBUG
-	(void) fprintf(el->el_errfile, "dir %d patlen %d patbuf %s\n",
-	    c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf));
+	static ct_buffer_t conv;
+	(void) fprintf(el->el_errfile, "dir %d patlen %ld patbuf %s\n",
+	    c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf, &conv));
 #endif
 
 	el->el_state.lastcmd = (el_action_t) c;	/* Hack to stop c_setpat */
diff --git a/contrib/libedit/terminal.c b/contrib/libedit/terminal.c
index 34f4985a90bc..b3ab5bfb6244 100644
--- a/contrib/libedit/terminal.c
+++ b/contrib/libedit/terminal.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: terminal.c,v 1.39 2019/07/23 10:18:52 christos Exp $	*/
+/*	$NetBSD: terminal.c,v 1.43 2020/07/10 20:34:24 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)term.c	8.2 (Berkeley) 4/30/95";
 #else
-__RCSID("$NetBSD: terminal.c,v 1.39 2019/07/23 10:18:52 christos Exp $");
+__RCSID("$NetBSD: terminal.c,v 1.43 2020/07/10 20:34:24 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -497,7 +497,7 @@ terminal_move_to_line(EditLine *el, int where)
 	if (where == el->el_cursor.v)
 		return;
 
-	if (where > el->el_terminal.t_size.v) {
+	if (where >= el->el_terminal.t_size.v) {
 #ifdef DEBUG_SCREEN
 		(void) fprintf(el->el_errfile,
 		    "%s: where is ridiculous: %d\r\n", __func__, where);
@@ -647,7 +647,8 @@ terminal_overwrite(EditLine *el, const wchar_t *cp, size_t n)
 	if (el->el_cursor.h >= el->el_terminal.t_size.h) {	/* wrap? */
 		if (EL_HAS_AUTO_MARGINS) {	/* yes */
 			el->el_cursor.h = 0;
-			el->el_cursor.v++;
+			if (el->el_cursor.v + 1 < el->el_terminal.t_size.v)
+				el->el_cursor.v++;
 			if (EL_HAS_MAGIC_MARGINS) {
 				/* force the wrap to avoid the "magic"
 				 * situation */
@@ -1314,14 +1315,14 @@ terminal_settc(EditLine *el, int argc __attribute__((__unused__)),
 	const struct termcapstr *ts;
 	const struct termcapval *tv;
 	char what[8], how[8];
+	long i;
+	char *ep;
 
 	if (argv == NULL || argv[1] == NULL || argv[2] == NULL)
 		return -1;
 
-	strncpy(what, ct_encode_string(argv[1], &el->el_scratch), sizeof(what));
-	what[sizeof(what) - 1] = '\0';
-	strncpy(how,  ct_encode_string(argv[2], &el->el_scratch), sizeof(how));
-	how[sizeof(how) - 1] = '\0';
+	strlcpy(what, ct_encode_string(argv[1], &el->el_scratch), sizeof(what));
+	strlcpy(how,  ct_encode_string(argv[2], &el->el_scratch), sizeof(how));
 
 	/*
          * Do the strings first
@@ -1342,11 +1343,17 @@ terminal_settc(EditLine *el, int argc __attribute__((__unused__)),
 		if (strcmp(tv->name, what) == 0)
 			break;
 
-	if (tv->name != NULL)
+	if (tv->name == NULL) {
+		(void) fprintf(el->el_errfile,
+		    "%ls: Bad capability `%s'.\n", argv[0], what);
 		return -1;
+	}
 
 	if (tv == &tval[T_pt] || tv == &tval[T_km] ||
 	    tv == &tval[T_am] || tv == &tval[T_xn]) {
+		/*
+		 * Booleans
+		 */
 		if (strcmp(how, "yes") == 0)
 			el->el_terminal.t_val[tv - tval] = 1;
 		else if (strcmp(how, "no") == 0)
@@ -1357,28 +1364,30 @@ terminal_settc(EditLine *el, int argc __attribute__((__unused__)),
 			return -1;
 		}
 		terminal_setflags(el);
-		if (terminal_change_size(el, Val(T_li), Val(T_co)) == -1)
-			return -1;
 		return 0;
-	} else {
-		long i;
-		char *ep;
+	}
 
-		i = strtol(how, &ep, 10);
-		if (*ep != '\0') {
-			(void) fprintf(el->el_errfile,
-			    "%ls: Bad value `%s'.\n", argv[0], how);
-			return -1;
-		}
-		el->el_terminal.t_val[tv - tval] = (int) i;
+	/*
+	 * Numerics
+	 */
+	i = strtol(how, &ep, 10);
+	if (*ep != '\0') {
+		(void) fprintf(el->el_errfile,
+		    "%ls: Bad value `%s'.\n", argv[0], how);
+		return -1;
+	}
+	el->el_terminal.t_val[tv - tval] = (int) i;
+	i = 0;
+	if (tv == &tval[T_co]) {
 		el->el_terminal.t_size.v = Val(T_co);
+		i++;
+	} else if (tv == &tval[T_li]) {
 		el->el_terminal.t_size.h = Val(T_li);
-		if (tv == &tval[T_co] || tv == &tval[T_li])
-			if (terminal_change_size(el, Val(T_li), Val(T_co))
-			    == -1)
-				return -1;
-		return 0;
+		i++;
 	}
+	if (i && terminal_change_size(el, Val(T_li), Val(T_co)) == -1)
+		return -1;
+	return 0;
 }
 
 
diff --git a/contrib/libedit/tty.c b/contrib/libedit/tty.c
index 743075e08b3f..bafc906ccc4e 100644
--- a/contrib/libedit/tty.c
+++ b/contrib/libedit/tty.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.c,v 1.68 2018/12/02 16:58:13 christos Exp $	*/
+/*	$NetBSD: tty.c,v 1.69 2020/05/31 23:24:23 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)tty.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: tty.c,v 1.68 2018/12/02 16:58:13 christos Exp $");
+__RCSID("$NetBSD: tty.c,v 1.69 2020/05/31 23:24:23 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -1163,8 +1163,7 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)),
 
 	if (argv == NULL)
 		return -1;
-	strncpy(name, ct_encode_string(*argv++, &el->el_scratch), sizeof(name));
-        name[sizeof(name) - 1] = '\0';
+	strlcpy(name, ct_encode_string(*argv++, &el->el_scratch), sizeof(name));
 
 	while (argv && *argv && argv[0][0] == '-' && argv[0][2] == '\0')
 		switch (argv[0][1]) {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:09 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 27D1A63297C;
 Wed,  5 May 2021 07:24:09 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9j0VLTz3GHp;
 Wed,  5 May 2021 07:24:09 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 042BB20A48;
 Wed,  5 May 2021 07:24:09 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457O82W048498;
 Wed, 5 May 2021 07:24:08 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457O84q048497;
 Wed, 5 May 2021 07:24:08 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:24:08 GMT
Message-Id: <202105050724.1457O84q048497@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 2f2bbc485f22 - stable/12 - sh: improve emacs mode
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 2f2bbc485f2263ab8eb9d272a22d32c06f9e94e9
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:09 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=2f2bbc485f2263ab8eb9d272a22d32c06f9e94e9

commit 2f2bbc485f2263ab8eb9d272a22d32c06f9e94e9
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-30 09:37:29 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:16:23 +0000

    sh: improve emacs mode
    
    In emacs mode, force ^R to backware search the history
    This behaviour is the default in emacs mode for most of the other shells
    
    Note: Note that this can still be overridden via $EDITRC, ~/.editrc or a
    bind command after set -o emacs.
    
    Approved by:            jilles
    Reviewed by:            jilles, arichardson, pstef
    Differential Revision:  https://reviews.freebsd.org/D29494
    
    (cherry picked from commit 660045fb5360d328da199ae78c89d5cc15b6d1ca)
---
 bin/sh/histedit.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c
index a46fe946df18..81967a8a503d 100644
--- a/bin/sh/histedit.c
+++ b/bin/sh/histedit.c
@@ -139,8 +139,10 @@ bad:
 		if (el) {
 			if (Vflag)
 				el_set(el, EL_EDITOR, "vi");
-			else if (Eflag)
+			else if (Eflag) {
 				el_set(el, EL_EDITOR, "emacs");
+				el_set(el, EL_BIND, "^R", "em-inc-search-prev", NULL);
+			}
 			el_set(el, EL_BIND, "^I", "sh-complete", NULL);
 			el_source(el, NULL);
 		}

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:10 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 72E5B632E41;
 Wed,  5 May 2021 07:24:10 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9k2C1bz3GLS;
 Wed,  5 May 2021 07:24:10 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 349D720F00;
 Wed,  5 May 2021 07:24:10 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457OA8X048519;
 Wed, 5 May 2021 07:24:10 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457OAWP048518;
 Wed, 5 May 2021 07:24:10 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:24:10 GMT
Message-Id: <202105050724.1457OAWP048518@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 3e1022b4eb5f - stable/12 - Make pkg(7) use environment variables
 specified in pkg.conf
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 3e1022b4eb5f452a8bbcb651f3367417988e75ab
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:10 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=3e1022b4eb5f452a8bbcb651f3367417988e75ab

commit 3e1022b4eb5f452a8bbcb651f3367417988e75ab
Author:     Moritz Schmitt <moritz@schmi.tt>
AuthorDate: 2021-04-27 01:59:12 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:16:30 +0000

    Make pkg(7) use environment variables specified in pkg.conf
    
    Modify /usr/sbin/pkg to use environment variables specified in pkg.conf.
    This allows control over underlying libraries like fetch(3), which can
    be configured by setting HTTP_PROXY.
    
    Differential Revision:  https://reviews.freebsd.org/D29820
    
    (cherry picked from commit e869d3c60147bbb226b5ad97d2ef73391aeebafa)
---
 usr.sbin/pkg/config.c | 29 +++++++++++++++++++++++++----
 usr.sbin/pkg/config.h |  2 ++
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index e467a3c34357..80469bf2b5a5 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
 #include <errno.h>
 #include <stdbool.h>
 #include <unistd.h>
+#include <ctype.h>
 
 #include "config.h"
 
@@ -134,6 +135,15 @@ static struct config_entry c[] = {
 		NULL,
 		false,
 		false
+	},
+	[PKG_ENV] = {
+		PKG_CONFIG_OBJECT,
+		"PKG_ENV",
+		NULL,
+		NULL,
+		NULL,
+		false,
+		false,
 	}
 };
 
@@ -205,11 +215,11 @@ static void
 config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 {
 	struct sbuf *buf = sbuf_new_auto();
-	const ucl_object_t *cur, *seq;
-	ucl_object_iter_t it = NULL, itseq = NULL;
+	const ucl_object_t *cur, *seq, *tmp;
+	ucl_object_iter_t it = NULL, itseq = NULL, it_obj = NULL;
 	struct config_entry *temp_config;
 	struct config_value *cv;
-	const char *key;
+	const char *key, *evkey;
 	int i;
 	size_t j;
 
@@ -224,7 +234,7 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 
 		if (conftype == CONFFILE_PKG) {
 			for (j = 0; j < strlen(key); ++j)
-				sbuf_putc(buf, key[j]);
+				sbuf_putc(buf, toupper(key[j]));
 			sbuf_finish(buf);
 		} else if (conftype == CONFFILE_REPO) {
 			if (strcasecmp(key, "url") == 0)
@@ -285,6 +295,17 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 			temp_config[i].value =
 			    strdup(ucl_object_toboolean(cur) ? "yes" : "no");
 			break;
+		case PKG_CONFIG_OBJECT:
+			if (strcmp(c[i].key, "PKG_ENV") == 0) {
+				while ((tmp =
+				    ucl_iterate_object(cur, &it_obj, true))) {
+					evkey = ucl_object_key(tmp);
+					if (evkey != NULL && *evkey != '\0') {
+						setenv(evkey, ucl_object_tostring_forced(tmp), 1);
+					}
+				}
+			}
+			break;
 		default:
 			/* Normal string value. */
 			temp_config[i].value = strdup(ucl_object_tostring(cur));
diff --git a/usr.sbin/pkg/config.h b/usr.sbin/pkg/config.h
index a63997a7a60d..b5553111c610 100644
--- a/usr.sbin/pkg/config.h
+++ b/usr.sbin/pkg/config.h
@@ -43,6 +43,7 @@ typedef enum {
 	FINGERPRINTS,
 	REPOS_DIR,
 	PUBKEY,
+	PKG_ENV,
 	CONFIG_SIZE
 } pkg_config_key;
 
@@ -50,6 +51,7 @@ typedef enum {
 	PKG_CONFIG_STRING=0,
 	PKG_CONFIG_BOOL,
 	PKG_CONFIG_LIST,
+	PKG_CONFIG_OBJECT
 } pkg_config_t;
 
 typedef enum {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:11 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D811C632F6B;
 Wed,  5 May 2021 07:24:11 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9l59ptz3GNJ;
 Wed,  5 May 2021 07:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5B64020E88;
 Wed,  5 May 2021 07:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457OB74048540;
 Wed, 5 May 2021 07:24:11 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457OB7C048539;
 Wed, 5 May 2021 07:24:11 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:24:11 GMT
Message-Id: <202105050724.1457OB7C048539@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: c57a440af2da - stable/12 - libucl: vendor import snapshort
 20210314
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: c57a440af2daf752a99d4e3d7791226734090f06
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:12 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=c57a440af2daf752a99d4e3d7791226734090f06

commit c57a440af2daf752a99d4e3d7791226734090f06
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-22 14:13:02 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:18:53 +0000

    libucl: vendor import snapshort 20210314
    
    (cherry picked from commit a0409676120c1e558d0ade943019934e0f15118d)
---
 contrib/libucl/CMakeLists.txt                      | 105 ++-
 contrib/libucl/ChangeLog.md                        |  38 +-
 contrib/libucl/README.md                           |  64 +-
 contrib/libucl/configure.ac                        |   8 +-
 contrib/libucl/doc/api.md                          |  17 +-
 contrib/libucl/doc/libucl.3                        |  26 +-
 contrib/libucl/doc/lua_api.md                      |   4 +-
 contrib/libucl/include/lua_ucl.h                   |  20 +-
 contrib/libucl/include/ucl++.h                     | 191 ++++-
 contrib/libucl/include/ucl.h                       | 191 ++++-
 contrib/libucl/klib/kvec.h                         |  78 ++-
 contrib/libucl/lua/lua_ucl.c                       | 450 ++++++++++--
 contrib/libucl/python/MANIFEST.in                  |   5 +
 contrib/libucl/python/setup.py                     |  42 +-
 contrib/libucl/python/src/uclmodule.c              |   3 +-
 contrib/libucl/python/tests/test_example.py        |  59 ++
 contrib/libucl/python/tests/test_load.py           |  17 +-
 contrib/libucl/src/mum.h                           |   8 +-
 contrib/libucl/src/ucl_chartable.h                 |   4 +-
 contrib/libucl/src/ucl_emitter.c                   |  12 +-
 contrib/libucl/src/ucl_emitter_utils.c             |  57 +-
 contrib/libucl/src/ucl_hash.c                      | 218 +++++-
 contrib/libucl/src/ucl_hash.h                      |  20 +-
 contrib/libucl/src/ucl_internal.h                  | 105 ++-
 contrib/libucl/src/ucl_msgpack.c                   |  82 ++-
 contrib/libucl/src/ucl_parser.c                    | 552 ++++++++++++---
 contrib/libucl/src/ucl_schema.c                    |  29 +-
 contrib/libucl/src/ucl_util.c                      | 780 ++++++++++++++++-----
 contrib/libucl/tests/basic.test                    |   2 +-
 contrib/libucl/tests/basic/13.in                   |   2 +-
 contrib/libucl/tests/basic/20.in                   |   2 -
 contrib/libucl/tests/basic/20.res                  |   5 -
 contrib/libucl/tests/basic/21.in                   |   2 -
 contrib/libucl/tests/basic/21.res                  |  10 -
 contrib/libucl/tests/basic/9.in                    |   2 +-
 contrib/libucl/tests/basic/9.res                   |   8 +-
 contrib/libucl/tests/basic/squote.in               |   8 +
 contrib/libucl/tests/basic/squote.res              |   7 +
 .../libucl/tests/fuzzers/ucl_add_string_fuzzer.c   |  25 +
 contrib/libucl/tests/fuzzers/ucl_msgpack_fuzzer.c  |  29 +
 contrib/libucl/tests/generate.test                 |   2 +-
 contrib/libucl/tests/run_tests.sh                  |   4 +-
 contrib/libucl/tests/streamline.test               |   2 +-
 contrib/libucl/tests/test_basic.c                  |  11 +-
 contrib/libucl/tests/test_generate.c               |  15 +-
 contrib/libucl/tests/test_msgpack.c                |   1 +
 contrib/libucl/utils/CMakeLists.txt                |  12 +
 contrib/libucl/utils/objdump.c                     |  17 +-
 contrib/libucl/utils/ucl-tool.c                    | 100 +--
 49 files changed, 2820 insertions(+), 631 deletions(-)

diff --git a/contrib/libucl/CMakeLists.txt b/contrib/libucl/CMakeLists.txt
index 7b55faf8243f..5fe772a30f88 100644
--- a/contrib/libucl/CMakeLists.txt
+++ b/contrib/libucl/CMakeLists.txt
@@ -9,13 +9,16 @@ SET(LIBUCL_VERSION
         "${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
 
 INCLUDE(CheckCCompilerFlag)
+INCLUDE(CheckCSourceCompiles)
 INCLUDE(FindOpenSSL)
+INCLUDE(GNUInstallDirs)
 
 OPTION(ENABLE_URL_INCLUDE  "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
 OPTION(ENABLE_URL_SIGN  "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
 OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
 OPTION(ENABLE_LUA "Enable lua support [default: OFF]" OFF)
 OPTION(ENABLE_LUAJIT "Enable luajit support [default: OFF]" OFF)
+OPTION(ENABLE_UTILS "Enable building utility binaries [default: OFF]" OFF)
 
 # Find lua installation
 MACRO(FindLua)
@@ -150,40 +153,47 @@ IF(ENABLE_URL_INCLUDE MATCHES "ON")
     				DOC "Path to libfetch header")
     ELSE(LIBFETCH_LIBRARY)
     	# Try to find libcurl
-    	ProcessPackage(CURL libcurl)
+        FIND_PACKAGE(CURL)
     	IF(NOT CURL_FOUND)
     		MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
     	ENDIF(NOT CURL_FOUND)
     ENDIF(LIBFETCH_LIBRARY)
 ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
 
+set(SYNC_BUILTINS_TEST_SOURCE [====[
+int main()
+{
+    unsigned long val;
+
+    __sync_bool_compare_and_swap(&val, 0, 1);
+    __sync_add_and_fetch(&val, 1);
+    __sync_fetch_and_add(&val, 0);
+    __sync_sub_and_fetch(&val, 1);
+
+    return 0;
+}
+]====])
+
+CHECK_C_SOURCE_COMPILES("${SYNC_BUILTINS_TEST_SOURCE}" HAVE_ATOMIC_BUILTINS)
+IF(NOT HAVE_ATOMIC_BUILTINS)
+    MESSAGE(WARNING "Libucl references could be thread-unsafe because atomic builtins are missing")
+ENDIF(NOT HAVE_ATOMIC_BUILTINS)
+
 SET(CMAKE_C_WARN_FLAGS "")
-CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
 CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
-CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
 CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
-CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
-IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
-	CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
-ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
+CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WUNUSED_PARAMETER)
 IF(SUPPORT_W)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
+    SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
 ENDIF(SUPPORT_W)
-IF(SUPPORT_WALL)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
-ENDIF(SUPPORT_WALL)
-IF(SUPPORT_WPARAM)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
-ENDIF(SUPPORT_WPARAM)
 IF(SUPPORT_WPOINTER_SIGN)
 	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
 ENDIF(SUPPORT_WPOINTER_SIGN)
-IF(SUPPORT_WSTRICT_PROTOTYPES)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
-ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
-IF(SUPPORT_STD_FLAG)
-	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
-ENDIF(SUPPORT_STD_FLAG)
+IF(SUPPORT_WUNUSED_PARAMETER)
+	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
+ENDIF(SUPPORT_WUNUSED_PARAMETER)
+
+SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_WARN_FLAGS}" )
 
 IF(ENABLE_URL_SIGN MATCHES "ON")
 	IF(OPENSSL_FOUND)
@@ -192,10 +202,19 @@ IF(ENABLE_URL_SIGN MATCHES "ON")
 	ENDIF(OPENSSL_FOUND)
 ENDIF(ENABLE_URL_SIGN MATCHES "ON")
 
-INCLUDE_DIRECTORIES("src")
-INCLUDE_DIRECTORIES("include")
-INCLUDE_DIRECTORIES("uthash")
-INCLUDE_DIRECTORIES("klib")
+SET(UCL_COMPILE_DEFS)
+IF(HAVE_FETCH_H)
+    LIST(APPEND UCL_COMPILE_DEFS -DHAVE_FETCH_H=1)
+ENDIF(HAVE_FETCH_H)
+IF(CURL_FOUND)
+    LIST(APPEND UCL_COMPILE_DEFS -DCURL_FOUND=1)
+ENDIF(CURL_FOUND)
+IF(HAVE_OPENSSL)
+    LIST(APPEND UCL_COMPILE_DEFS -DHAVE_OPENSSL=1)
+ENDIF(HAVE_OPENSSL)
+IF(HAVE_ATOMIC_BUILTINS)
+    LIST(APPEND UCL_COMPILE_DEFS -DHAVE_ATOMIC_BUILTINS=1)
+ENDIF(HAVE_ATOMIC_BUILTINS)
 
 SET(UCLSRC src/ucl_util.c
 		src/ucl_parser.c
@@ -207,13 +226,27 @@ SET(UCLSRC src/ucl_util.c
 		src/ucl_msgpack.c
 		src/ucl_sexp.c)
 
+SET(UCLHDR include/ucl.h
+		include/ucl++.h)
 
 SET (LIB_TYPE STATIC)
 IF (BUILD_SHARED_LIBS)
   SET (LIB_TYPE SHARED)
 ENDIF (BUILD_SHARED_LIBS)
 ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
+ADD_LIBRARY(ucl::ucl ALIAS ucl)
 SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
+TARGET_INCLUDE_DIRECTORIES(ucl
+	PUBLIC
+	  include
+	PRIVATE
+	  src
+	  uthash
+	  klib)
+TARGET_COMPILE_DEFINITIONS(ucl
+    PRIVATE
+    ${UCL_COMPILE_DEFS}
+)
 
 IF(ENABLE_LUA MATCHES "ON")
 	IF(ENABLE_LUAJIT MATCHES "ON")
@@ -236,13 +269,20 @@ IF(ENABLE_LUA MATCHES "ON")
 	ENDIF(ENABLE_LUAJIT MATCHES "ON")
 	SET(UCL_LUA_SRC lua/lua_ucl.c)
 	ADD_LIBRARY(lua-ucl ${LIB_TYPE} ${UCL_LUA_SRC})
+	ADD_LIBRARY(ucl::lua ALIAS lua-ucl)
 	IF(ENABLE_LUAJIT MATCHES "ON")
 		TARGET_LINK_LIBRARIES(lua-ucl "${LUAJIT_LIBRARY}")
 	ELSE(ENABLE_LUAJIT MATCHES "ON")
 		TARGET_LINK_LIBRARIES(lua-ucl "${LUA_LIBRARY}")
 	ENDIF(ENABLE_LUAJIT MATCHES "ON")
 	TARGET_LINK_LIBRARIES(lua-ucl ucl)
-	SET_TARGET_PROPERTIES(lua-ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
+	TARGET_INCLUDE_DIRECTORIES(lua-ucl PUBLIC include PRIVATE src uthash)
+	SET_TARGET_PROPERTIES(lua-ucl PROPERTIES
+		VERSION ${LIBUCL_VERSION}
+		SOVERSION ${LIBUCL_VERSION_MAJOR}
+		PUBLIC_HEADER include/lua_ucl.h)
+	INSTALL(TARGETS lua-ucl DESTINATION ${CMAKE_INSTALL_LIBDIR}
+			PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 ENDIF()
 
 IF(HAVE_FETCH_H)
@@ -257,3 +297,18 @@ IF(ENABLE_URL_SIGN MATCHES "ON")
 		TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
 	ENDIF(OPENSSL_FOUND)
 ENDIF(ENABLE_URL_SIGN MATCHES "ON")
+
+IF(UNIX)
+    TARGET_LINK_LIBRARIES(ucl -lm)
+ENDIF(UNIX)
+
+SET_TARGET_PROPERTIES(ucl PROPERTIES
+	PUBLIC_HEADER "${UCLHDR}")
+
+INSTALL(TARGETS ucl DESTINATION ${CMAKE_INSTALL_LIBDIR}
+		PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+IF(ENABLE_UTILS MATCHES "ON")
+    ADD_SUBDIRECTORY(utils)
+ENDIF()
+
diff --git a/contrib/libucl/ChangeLog.md b/contrib/libucl/ChangeLog.md
index e4c1263bccb7..cba29aa9a7b5 100644
--- a/contrib/libucl/ChangeLog.md
+++ b/contrib/libucl/ChangeLog.md
@@ -64,4 +64,40 @@
 
 **Incompatible changes**:
 
-- `ucl_object_emit_full` now accepts additional argument `comments` that could be used to emit comments with UCL output
\ No newline at end of file
+- `ucl_object_emit_full` now accepts additional argument `comments` that could be used to emit comments with UCL output
+
+### Libucl 0.8.1
+
+- Create ucl_parser_add_file_full() to be able to specify merge mode and parser type (by Allan Jude)
+- C++ wrapper improvements (by @ftilde)
+- C++ wrapper: add convenience method at() and lookup() (by Yonghee Kim)
+- C++ wrapper: add assignment operator to Ucl class (by Yonghee Kim)
+- C++ wrapper: support variables in parser (by Yonghee Kim)
+- C++ wrapper: refactoring C++ interface (by Yonghee Kim):
+    - use auto variables (if possible)
+    - remove dangling expressions
+    - use std::set::emplace instead of std::set::insert
+    - not use std::move in return statement; considering copy elision
+- C++ wrapper: fix compilation error and warnings (by Zhe Wang)
+- C++ wrapper: fix iteration over objects in which the first value is `false` (by Zhe Wang)
+- C++ wrapper: Macro helper functions (by Chris Meacham)
+- C++ wrapper: Changing the duplicate strategy in the C++ API (by Chris Meacham)
+- C++ wrapper: Added access functions for the size of a UCL_ARRAY (by Chris Meacham)
+- Fix caseless comparison
+- Fix include when EPERM is issued
+- Fix Windows build
+- Allow to reserve space in arrays and hashes
+- Fix bug with including of empty files
+- Move to mum_hash from xxhash
+- Fix msgpack on non-x86
+- python: Add support to Python 3 (by Denis Volpato Martins)
+- python: Add support for Python 2.6 tests (by Denis Volpato Martins)
+- python: Implement validation function and tests (by Denis Volpato Martins)
+- python: Added UCL_NULL handling and tests (by Denis Volpato Martins)
+- Fix schema validation for patternProperties with object data (by Denis Volpato Martins)
+- Remove the dependency on NBBY, add missing <strings.h> include (by Ed Schouten)
+- Allow to emit msgpack from Lua
+- Performance improvements in Lua API
+- Allow to pass opaque objects in Lua API for transparent C passthrough
+- Various bugs fixed
+- Couple of memory leaks plugged
\ No newline at end of file
diff --git a/contrib/libucl/README.md b/contrib/libucl/README.md
index 44983c57d643..53d8a651d73b 100644
--- a/contrib/libucl/README.md
+++ b/contrib/libucl/README.md
@@ -1,6 +1,6 @@
 # LIBUCL
 
-[![Build Status](https://travis-ci.org/vstakhov/libucl.svg?branch=master)](https://travis-ci.org/vstakhov/libucl)
+[![CircleCI](https://circleci.com/gh/vstakhov/libucl.svg?style=svg)](https://circleci.com/gh/vstakhov/libucl)
 [![Coverity](https://scan.coverity.com/projects/4138/badge.svg)](https://scan.coverity.com/projects/4138)
 [![Coverage Status](https://coveralls.io/repos/github/vstakhov/libucl/badge.svg?branch=master)](https://coveralls.io/github/vstakhov/libucl?branch=master)
 
@@ -18,6 +18,7 @@
 	- [Macros support](#macros-support)
 	- [Variables support](#variables-support)
 	- [Multiline strings](#multiline-strings)
+	- [Single quoted strings](#single-quoted-strings)
 - [Emitter](#emitter)
 - [Validation](#validation)
 - [Performance](#performance)
@@ -65,19 +66,25 @@ section {
 ```json
 {
     "param": "value",
-    "param1": "value1",
-    "flag": true,
-    "subsection": {
-        "host": [
-        {
-            "host": "hostname",
-            "port": 900
-        },
-        {
-            "host": "hostname",
-            "port": 901
+    "section": {
+        "param": "value",
+        "param1": "value1",
+        "flag": true,
+        "number": 10000,
+        "time": "0.2s",
+        "string": "something",
+        "subsection": {
+            "host": [
+                {
+                    "host": "hostname",
+                    "port": 900
+                },
+                {
+                    "host": "hostname",
+                    "port": 901
+                }
+            ]
         }
-        ]
     }
 }
 ```
@@ -288,7 +295,22 @@ as following:
 
 By default, the priority of top-level object is set to zero (lowest priority). Currently,
 you can define up to 16 priorities (from 0 to 15). Includes with bigger priorities will
-rewrite keys from the objects with lower priorities as specified by the policy.
+rewrite keys from the objects with lower priorities as specified by the policy. The priority
+of the top-level or any other object can be changed with the `.priority` macro, which has no
+options and takes the new priority:
+
+```
+# Default priority: 0.
+foo = 6
+.priority 5
+# The following will have priority 5.
+bar = 6
+baz = 7
+# The following will be included with a priority of 3, 5, and 6 respectively.
+.include(priority=3) "path.conf"
+.include(priority=5) "equivalent-path.conf"
+.include(priority=6) "highpriority-path.conf"
+```
 
 ### Variables support
 
@@ -333,9 +355,21 @@ text
 EOD
 ```
 
+### Single quoted strings
+
+It is possible to use single quoted strings to simplify escaping rules. All values passed in single quoted strings are *NOT* escaped, with two exceptions: a single `'` character just before `\` character, and a newline character just after `\` character that is ignored.
+
+```
+key = 'value'; # Read as value
+key = 'value\n\'; # Read as  value\n\
+key = 'value\''; # Read as value'
+key = 'value\
+bla'; # Read as valuebla
+```
+
 ## Emitter
 
-Each UCL object can be serialized to one of the three supported formats:
+Each UCL object can be serialized to one of the four supported formats:
 
 * `JSON` - canonic json notation (with spaces indented structure);
 * `Compacted JSON` - compact json notation (without spaces or newlines);
diff --git a/contrib/libucl/configure.ac b/contrib/libucl/configure.ac
index 6457268854ac..731b7113e689 100644
--- a/contrib/libucl/configure.ac
+++ b/contrib/libucl/configure.ac
@@ -1,7 +1,7 @@
 m4_define([maj_ver], [0])
 m4_define([med_ver], [8])
-m4_define([min_ver], [0])
-m4_define([so_version], [6:0:0])
+m4_define([min_ver], [1])
+m4_define([so_version], [6:0:1])
 m4_define([ucl_version], [maj_ver.med_ver.min_ver])
 
 AC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl])
@@ -73,11 +73,11 @@ AC_ARG_ENABLE([utils],
 AM_CONDITIONAL([UTILS], [test x$utils = xtrue])
 
 AS_IF([test "x$enable_signatures" = "xyes"], [
-	AC_SEARCH_LIBS([EVP_MD_CTX_create], [crypto], [
+	AC_SEARCH_LIBS([CRYPTO_new_ex_data], [crypto], [
 		AC_DEFINE(HAVE_OPENSSL, 1, [Define to 1 if you have the 'crypto' library (-lcrypto).])
 		LIBCRYPTO_LIB="-lcrypto"
 		LIBS_EXTRA="${LIBS_EXTRA} -lcrypto"
-		], [AC_MSG_ERROR([unable to find the EVP_MD_CTX_create() function])])
+		], [AC_MSG_ERROR([unable to find the CRYPTO_new_ex_data() function])])
 ])
 AC_SUBST(LIBCRYPTO_LIB)
 AC_PATH_PROG(PANDOC, pandoc, [/non/existent])
diff --git a/contrib/libucl/doc/api.md b/contrib/libucl/doc/api.md
index 75b954bb302c..a0d33c0e68a9 100644
--- a/contrib/libucl/doc/api.md
+++ b/contrib/libucl/doc/api.md
@@ -243,7 +243,7 @@ return ret;
 
 # Emitting functions
 
-Libucl can transform UCL objects to a number of tectual formats:
+Libucl can transform UCL objects to a number of textual formats:
 
 - configuration (`UCL_EMIT_CONFIG`) - nginx like human readable configuration file where implicit arrays are transformed to the duplicate keys
 - compact json: `UCL_EMIT_JSON_COMPACT` - single line valid json without spaces
@@ -349,7 +349,7 @@ This object should be released by caller.
 Libucl provides the functions similar to inverse conversion functions called with the specific C type:
 - `ucl_object_fromint` - converts `int64_t` to UCL object
 - `ucl_object_fromdouble` - converts `double` to UCL object
-- `ucl_object_fromboolean` - converts `bool` to UCL object
+- `ucl_object_frombool` - converts `bool` to UCL object
 - `ucl_object_fromstring` - converts `const char *` to UCL object (this string should be NULL terminated)
 - `ucl_object_fromlstring` - converts `const char *` and `size_t` len to UCL object (string does not need to be NULL terminated)
 
@@ -432,7 +432,8 @@ UCL defines the following functions to manage safe iterators:
 
 - `ucl_object_iterate_new` - creates new safe iterator
 - `ucl_object_iterate_reset` - resets iterator to a new object
-- `ucl_object_iterate_safe` - safely iterate the object inside iterator
+- `ucl_object_iterate_safe` - safely iterate the object inside iterator. Note: function may allocate and free memory during its operation. Therefore it returns `NULL` either while trying to access item after the last one or when exception (such as memory allocation failure) happens.
+- `ucl_object_iter_chk_excpn` -  check if the last call to `ucl_object_iterate_safe` ended up in unrecoverable exception (e.g. `ENOMEM`).
 - `ucl_object_iterate_free` - free memory associated with the safe iterator
 
 Please note that unlike unsafe iterators, safe iterators *must* be explicitly initialized and freed.
@@ -447,6 +448,11 @@ it = ucl_object_iterate_new (obj);
 while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
 	/* Do something */
 }
+/* Check error condition */
+if (ucl_object_iter_chk_excpn (it)) {
+    ucl_object_iterate_free (it);
+    exit (1);
+}
 
 /* Switch to another object */
 it = ucl_object_iterate_reset (it, another_obj);
@@ -454,6 +460,11 @@ it = ucl_object_iterate_reset (it, another_obj);
 while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
 	/* Do something else */
 }
+/* Check error condition */
+if (ucl_object_iter_chk_excpn (it)) {
+    ucl_object_iterate_free (it);
+    exit (1);
+}
 
 ucl_object_iterate_free (it);
 ~~~
diff --git a/contrib/libucl/doc/libucl.3 b/contrib/libucl/doc/libucl.3
index ec5046325700..b5fef09f7691 100644
--- a/contrib/libucl/doc/libucl.3
+++ b/contrib/libucl/doc/libucl.3
@@ -612,15 +612,23 @@ Iteration\ without\ expansion:
 .PP
 UCL defines the following functions to manage safe iterators:
 .IP \[bu] 2
-\f[C]ucl_object_iterate_new\f[] \- creates new safe iterator
+\f[C]ucl_object_iterate_new\f[] \- creates new safe iterator.
 .IP \[bu] 2
-\f[C]ucl_object_iterate_reset\f[] \- resets iterator to a new object
+\f[C]ucl_object_iterate_reset\f[] \- resets iterator to a new object.
 .IP \[bu] 2
 \f[C]ucl_object_iterate_safe\f[] \- safely iterate the object inside
-iterator
+iterator.
+Note: function may allocate and free memory during its operation.
+Therefore it returns \f[C]NULL\f[] either while trying to access item
+after the last one or when exception (such as memory allocation
+failure) happens.
+.IP \[bu] 2
+\f[C]ucl_object_iter_chk_excpn\f[] \- check if the last call to
+\f[C]ucl_object_iterate_safe\f[] ended up in unrecoverable exception
+(e.g. \f[C]ENOMEM\f[]).
 .IP \[bu] 2
 \f[C]ucl_object_iterate_free\f[] \- free memory associated with the safe
-iterator
+iterator.
 .PP
 Please note that unlike unsafe iterators, safe iterators \f[I]must\f[]
 be explicitly initialized and freed.
@@ -637,6 +645,11 @@ it\ =\ ucl_object_iterate_new\ (obj);
 while\ ((cur\ =\ ucl_object_iterate_safe\ (it,\ true))\ !=\ NULL)\ {
 \ \ \ \ /*\ Do\ something\ */
 }
+/*\ Check\ error\ condition\ */
+if\ (ucl_object_iter_chk_excpn\ (it))\ {
+\ \ \ \ ucl_object_iterate_free\ (it);
+\ \ \ \ exit\ (1);
+}
 
 /*\ Switch\ to\ another\ object\ */
 it\ =\ ucl_object_iterate_reset\ (it,\ another_obj);
@@ -644,6 +657,11 @@ it\ =\ ucl_object_iterate_reset\ (it,\ another_obj);
 while\ ((cur\ =\ ucl_object_iterate_safe\ (it,\ true))\ !=\ NULL)\ {
 \ \ \ \ /*\ Do\ something\ else\ */
 }
+/*\ Check\ error\ condition\ */
+if\ (ucl_object_iter_chk_excpn\ (it))\ {
+\ \ \ \ ucl_object_iterate_free\ (it);
+\ \ \ \ exit\ (1);
+}
 
 ucl_object_iterate_free\ (it);
 \f[]
diff --git a/contrib/libucl/doc/lua_api.md b/contrib/libucl/doc/lua_api.md
index f7af3caffff4..7da414903b01 100644
--- a/contrib/libucl/doc/lua_api.md
+++ b/contrib/libucl/doc/lua_api.md
@@ -69,8 +69,8 @@ converts `obj` to lua representation using the following conversions:
 - *scalar* values are directly presented by lua objects
 - *userdata* values are converted to lua function objects using `LUA_REGISTRYINDEX`,
 this can be used to pass functions from lua to c and vice-versa
-- *arrays* are converted to lua tables with numeric indicies suitable for `ipairs` iterations
-- *objects* are converted to lua tables with string indicies
+- *arrays* are converted to lua tables with numeric indices suitable for `ipairs` iterations
+- *objects* are converted to lua tables with string indices
 
 **Parameters:**
 
diff --git a/contrib/libucl/include/lua_ucl.h b/contrib/libucl/include/lua_ucl.h
index 38e74d3f619d..5b7f88e031e1 100644
--- a/contrib/libucl/include/lua_ucl.h
+++ b/contrib/libucl/include/lua_ucl.h
@@ -54,6 +54,14 @@ UCL_EXTERN int luaopen_ucl (lua_State *L);
  */
 UCL_EXTERN ucl_object_t* ucl_object_lua_import (lua_State *L, int idx);
 
+/**
+ * Import UCL object from lua state, escaping JSON strings
+ * @param L lua state
+ * @param idx index of object at the lua stack to convert to UCL
+ * @return new UCL object or NULL, the caller should unref object after using
+ */
+UCL_EXTERN ucl_object_t* ucl_object_lua_import_escape (lua_State *L, int idx);
+
 /**
  * Push an object to lua
  * @param L lua state
@@ -62,8 +70,16 @@ UCL_EXTERN ucl_object_t* ucl_object_lua_import (lua_State *L, int idx);
  */
 UCL_EXTERN int ucl_object_push_lua (lua_State *L,
 		const ucl_object_t *obj, bool allow_array);
+/**
+ * Push an object to lua replacing all ucl.null with `false`
+ * @param L lua state
+ * @param obj object to push
+ * @param allow_array traverse over implicit arrays
+ */
+UCL_EXTERN int ucl_object_push_lua_filter_nil (lua_State *L,
+											   const ucl_object_t *obj,
+											   bool allow_array);
 
-UCL_EXTERN struct ucl_lua_funcdata* ucl_object_toclosure (
-		const ucl_object_t *obj);
+UCL_EXTERN struct ucl_lua_funcdata* ucl_object_toclosure (const ucl_object_t *obj);
 
 #endif /* LUA_UCL_H_ */
diff --git a/contrib/libucl/include/ucl++.h b/contrib/libucl/include/ucl++.h
index 2c2bdde51559..fb63430d400d 100644
--- a/contrib/libucl/include/ucl++.h
+++ b/contrib/libucl/include/ucl++.h
@@ -29,6 +29,7 @@
 #include <set>
 #include <memory>
 #include <iostream>
+#include <tuple>
 
 #include "ucl.h"
 
@@ -106,7 +107,7 @@ private:
 	static bool ucl_variable_getter(const unsigned char *data, size_t len,
 			unsigned char ** /*replace*/, size_t * /*replace_len*/, bool *need_free, void* ud)
 	{
-        *need_free = false;
+		*need_free = false;
 
 		auto vars = reinterpret_cast<std::set<std::string> *>(ud);
 		if (vars && data && len != 0) {
@@ -123,17 +124,17 @@ private:
 		auto replacer = reinterpret_cast<variable_replacer *>(ud);
 		if (!replacer) {
 			return false;
-        }
+		}
 
 		std::string var_name (data, data + len);
 		if (!replacer->is_variable (var_name)) {
 			return false;
-        }
+		}
 
 		std::string var_value = replacer->replace (var_name);
 		if (var_value.empty ()) {
 			return false;
-        }
+ 		}
 
 		*replace = (unsigned char *)UCL_ALLOC (var_value.size ());
 		memcpy (*replace, var_value.data (), var_value.size ());
@@ -152,7 +153,8 @@ private:
 		config_func (parser);
 
 		if (!parse_func (parser)) {
-			err.assign (ucl_parser_get_error (parser));
+			const char *error = ucl_parser_get_error (parser); //Assigning here without checking result first causes a
+			if( error != NULL ) err.assign(error);             //	crash if ucl_parser_get_error returns NULL
 			ucl_parser_free (parser);
 
 			return nullptr;
@@ -168,6 +170,16 @@ private:
 	std::unique_ptr<ucl_object_t, ucl_deleter> obj;
 
 public:
+	struct macro_handler_s {
+		ucl_macro_handler         handler;
+		ucl_context_macro_handler ctx_handler;
+	};
+
+	struct macro_userdata_s {
+		ucl_parser    *parser;
+		void          *userdata;
+	};
+
 	class const_iterator {
 	private:
 		struct ucl_iter_deleter {
@@ -184,7 +196,7 @@ public:
 			it = std::shared_ptr<void>(ucl_object_iterate_new (obj.obj.get()),
 				ucl_iter_deleter());
 			cur.reset (new Ucl(ucl_object_iterate_safe (it.get(), true)));
-			if (cur->type() == UCL_NULL) {
+			if (!cur->obj) {
 				it.reset ();
 				cur.reset ();
 			}
@@ -218,7 +230,7 @@ public:
 				cur.reset (new Ucl(ucl_object_iterate_safe (it.get(), true)));
 			}
 
-			if (cur && cur->type() == UCL_NULL) {
+			if (cur && !cur->obj) {
 				it.reset ();
 				cur.reset ();
 			}
@@ -330,7 +342,7 @@ public:
 		return UCL_NULL;
 	}
 
-	const std::string key () const {
+	std::string key () const {
 		std::string res;
 
 		if (obj->key) {
@@ -373,7 +385,7 @@ public:
 		return default_val;
 	}
 
-	const std::string string_value (const std::string& default_val = "") const
+	std::string string_value (const std::string& default_val = "") const
 	{
 		const char* res = nullptr;
 
@@ -384,7 +396,16 @@ public:
 		return default_val;
 	}
 
-	const Ucl at (size_t i) const
+	size_t size () const
+	{
+		if (type () == UCL_ARRAY) {
+			return ucl_array_size (obj.get());
+		}
+
+		return 0;
+	}
+
+	Ucl at (size_t i) const
 	{
 		if (type () == UCL_ARRAY) {
 			return Ucl (ucl_array_find_index (obj.get(), i));
@@ -393,7 +414,7 @@ public:
 		return Ucl (nullptr);
 	}
 
-	const Ucl lookup (const std::string &key) const
+	Ucl lookup (const std::string &key) const
 	{
 		if (type () == UCL_OBJECT) {
 			return Ucl (ucl_object_lookup_len (obj.get(),
@@ -403,12 +424,12 @@ public:
 		return Ucl (nullptr);
 	}
 
-	inline const Ucl operator[] (size_t i) const
+	inline Ucl operator[] (size_t i) const
 	{
 		return at(i);
 	}
 
-	inline const Ucl operator[](const std::string &key) const
+	inline Ucl operator[](const std::string &key) const
 	{
 		return lookup(key);
 	}
@@ -432,43 +453,116 @@ public:
 		return out;
 	}
 
-	static Ucl parse (const std::string &in, std::string &err)
+	static Ucl parse (const std::string &in, std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
-		return parse (in, std::map<std::string, std::string>(), err);
+		return parse (in, std::map<std::string, std::string>(), err, duplicate_strategy);
 	}
 
-	static Ucl parse (const std::string &in, const std::map<std::string, std::string> &vars, std::string &err)
+	static Ucl parse (const std::string &in, const std::map<std::string, std::string> &vars,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
-		auto config_func = [&vars] (ucl_parser *parser) {
+		std::vector< std::tuple< std::string, macro_handler_s, void * > > emptyVector;
+		return parse ( in, vars, emptyVector, err, duplicate_strategy );
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const std::string &in,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		return parse (in, std::map<std::string, std::string>(), macros, err, duplicate_strategy);
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const std::string &in, const std::map<std::string, std::string> &vars,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		//Preserve macro_userdata_s memory for later use in parse_with_strategy_function()
+		std::vector<macro_userdata_s> userdata_list;
+		userdata_list.reserve (macros.size());
+		auto config_func = [&userdata_list, &vars, &macros] (ucl_parser *parser) {
 			for (const auto & item : vars) {
 				ucl_parser_register_variable (parser, item.first.c_str (), item.second.c_str ());
-            }
+			}
+			for (auto & macro : macros) {
+				userdata_list.push_back ({parser, std::get<2>(macro)});
+				if (std::get<1>(macro).handler != NULL) {
+					ucl_parser_register_macro (parser,
+								std::get<0>(macro).c_str(),
+								std::get<1>(macro).handler,
+								reinterpret_cast<void*>(&userdata_list.back()));
+				}
+				else if (std::get<1>(macro).ctx_handler != NULL) {
+					ucl_parser_register_context_macro (parser,
+									std::get<0>(macro).c_str(),
+									std::get<1>(macro).ctx_handler,
+									reinterpret_cast<void*>(&userdata_list.back()));
+				}
+			}
 		};
 
-		auto parse_func = [&in] (ucl_parser *parser) {
-			return ucl_parser_add_chunk (parser, (unsigned char *)in.data (), in.size ());
+		auto parse_func = [&in, &duplicate_strategy] (struct ucl_parser *parser) -> bool {
+			return ucl_parser_add_chunk_full (parser,
+							(unsigned char *) in.data (),
+							in.size (),
+							(unsigned int)ucl_parser_get_default_priority (parser),
+							duplicate_strategy,
+							UCL_PARSE_UCL);
 		};
 
 		return parse_with_strategy_function (config_func, parse_func, err);
 	}
 
-	static Ucl parse (const std::string &in, const variable_replacer &replacer, std::string &err)
-	{
-		auto config_func = [&replacer] (ucl_parser *parser) {
-			ucl_parser_set_variables_handler (parser, ucl_variable_replacer,
-				&const_cast<variable_replacer &>(replacer));
+	static Ucl parse (const std::string &in, const variable_replacer &replacer,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		std::vector< std::tuple< std::string, macro_handler_s, void * > > emptyVector;
+		return parse ( in, replacer, emptyVector, err, duplicate_strategy );
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const std::string &in, const variable_replacer &replacer,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		//Preserve macro_userdata_s memory for later use in parse_with_strategy_function()
+		std::vector<macro_userdata_s> userdata_list;
+		userdata_list.reserve (macros.size());
+		auto config_func = [&userdata_list, &replacer, &macros] (ucl_parser *parser) {
+			ucl_parser_set_variables_handler (parser, ucl_variable_replacer, &const_cast<variable_replacer &>(replacer));
+			for (auto & macro : macros) {
+				userdata_list.push_back ({parser, std::get<2>(macro)});
+				if (std::get<1>(macro).handler != NULL) {
+					ucl_parser_register_macro (parser,
+								std::get<0>(macro).c_str(),
+								std::get<1>(macro).handler,
+								reinterpret_cast<void*>(&userdata_list.back()));
+				}
+				else if (std::get<1>(macro).ctx_handler != NULL) {
+					ucl_parser_register_context_macro (parser,
+									std::get<0>(macro).c_str(),
+									std::get<1>(macro).ctx_handler,
+									reinterpret_cast<void*>(&userdata_list.back()));
+				}
+			}
 		};
 
-		auto parse_func = [&in] (ucl_parser *parser) {
-			return ucl_parser_add_chunk (parser, (unsigned char *) in.data (), in.size ());
+		auto parse_func = [&in, &duplicate_strategy] (struct ucl_parser *parser) -> bool {
+			return ucl_parser_add_chunk_full (parser,
+							(unsigned char *) in.data (),
+							in.size (),
+							(unsigned int)ucl_parser_get_default_priority (parser),
+							duplicate_strategy,
+							UCL_PARSE_UCL);
 		};
 
 		return parse_with_strategy_function (config_func, parse_func, err);
 	}
 
-	static Ucl parse (const char *in, std::string &err)
+	static Ucl parse (const char *in, std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
-		return parse (in, std::map<std::string, std::string>(), err);
+		return parse (in, std::map<std::string, std::string>(), err, duplicate_strategy);
 	}
 
 	static Ucl parse (const char *in, const std::map<std::string, std::string> &vars, std::string &err)
@@ -480,13 +574,46 @@ public:
 		return parse (std::string (in), vars, err);
 	}
 
-	static Ucl parse (const char *in, const variable_replacer &replacer, std::string &err)
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const char *in,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		return parse (in, std::map<std::string, std::string>(), macros, err, duplicate_strategy);
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const char *in, const std::map<std::string, std::string> &vars,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
 	{
 		if (!in) {
 			err = "null input";
 			return nullptr;
 		}
-		return parse (std::string(in), replacer, err);
+		return parse (std::string (in), vars, macros, err, duplicate_strategy);
+	}
+
+	static Ucl parse (const char *in, const variable_replacer &replacer,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		if (!in) {
+			err = "null input";
+			return nullptr;
+		}
+		return parse (std::string(in), replacer, err, duplicate_strategy);
+	}
+
+	//Macro handler will receive a macro_userdata_s as void *ud
+	static Ucl parse (const char *in, const variable_replacer &replacer,
+			std::vector< std::tuple< std::string /*name*/, macro_handler_s, void * /*userdata*/ > > &macros,
+			std::string &err, enum ucl_duplicate_strategy duplicate_strategy = UCL_DUPLICATE_APPEND)
+	{
+		if (!in) {
+			err = "null input";
+			return nullptr;
+		}
+		return parse (std::string (in), replacer, macros, err, duplicate_strategy);
 	}
 
 	static Ucl parse_from_file (const std::string &filename, std::string &err)
@@ -556,7 +683,7 @@ public:
 
 		std::vector<std::string> result;
 		std::move (vars.begin (), vars.end (), std::back_inserter (result));
-		return std::move (result);
+		return result;
 	}
 
 	Ucl& operator= (Ucl rhs)
diff --git a/contrib/libucl/include/ucl.h b/contrib/libucl/include/ucl.h
index fccf6fcb2237..39da2593648d 100644
--- a/contrib/libucl/include/ucl.h
+++ b/contrib/libucl/include/ucl.h
@@ -105,10 +105,11 @@ typedef enum ucl_error {
 	UCL_EIO, /**< IO error occurred during parsing */
 	UCL_ESTATE, /**< Invalid state machine state */
 	UCL_ENESTED, /**< Input has too many recursion levels */
+	UCL_EUNPAIRED, /**< Input has too many recursion levels */
 	UCL_EMACRO, /**< Error processing a macro */
 	UCL_EINTERNAL, /**< Internal unclassified error */
 	UCL_ESSL, /**< SSL error */
-	UCL_EMERGE /**< A merge error occured */
+	UCL_EMERGE /**< A merge error occurred */
 } ucl_error_t;
 
 /**
@@ -177,7 +178,8 @@ typedef enum ucl_string_flags {
 } ucl_string_flags_t;
 
 /**
- * Basic flags for an object
+ * Basic flags for an object (can use up to 12 bits as higher 4 bits are used
+ * for priorities)
  */
 typedef enum ucl_object_flags {
 	UCL_OBJECT_ALLOCATED_KEY = (1 << 0), /**< An object has key allocated internally */
@@ -187,7 +189,8 @@ typedef enum ucl_object_flags {
 	UCL_OBJECT_MULTILINE = (1 << 4), /**< String should be displayed as multiline string */
 	UCL_OBJECT_MULTIVALUE = (1 << 5), /**< Object is a key with multiple values */
 	UCL_OBJECT_INHERITED = (1 << 6), /**< Object has been inherited from another */
-	UCL_OBJECT_BINARY = (1 << 7) /**< Object contains raw binary data */
+	UCL_OBJECT_BINARY = (1 << 7), /**< Object contains raw binary data */
+	UCL_OBJECT_SQUOTED = (1 << 8) /**< Object has been enclosed in single quotes */
 } ucl_object_flags_t;
 
 /**
@@ -462,6 +465,14 @@ UCL_EXTERN ucl_object_t* ucl_object_pop_key (ucl_object_t *top, const char *key)
 UCL_EXTERN bool ucl_object_insert_key_merged (ucl_object_t *top, ucl_object_t *elt,
 		const char *key, size_t keylen, bool copy_key);
 
+/**
+ * Reserve space in ucl array or object for `elt` elements
+ * @param obj object to reserve
+ * @param reserved size to reserve in an object
+ * @return 0 on success, -1 on failure (i.e. ENOMEM)
+ */
+UCL_EXTERN bool ucl_object_reserve (ucl_object_t *obj, size_t reserved);
+
 /**
  * Append an element to the end of array object
  * @param top destination object (must NOT be NULL)
@@ -533,6 +544,13 @@ UCL_EXTERN ucl_object_t* ucl_array_pop_last (ucl_object_t *top);
  */
 UCL_EXTERN ucl_object_t* ucl_array_pop_first (ucl_object_t *top);
 
*** 5210 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:24:13 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 49527632AF3;
 Wed,  5 May 2021 07:24:13 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZp9m5smVz3GNQ;
 Wed,  5 May 2021 07:24:12 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6939C20A49;
 Wed,  5 May 2021 07:24:12 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457OCmd048561;
 Wed, 5 May 2021 07:24:12 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457OCS2048560;
 Wed, 5 May 2021 07:24:12 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:24:12 GMT
Message-Id: <202105050724.1457OCS2048560@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: b7367d87d9c8 - stable/12 - libedit: vendor import libedit
 2021-03-28
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: b7367d87d9c8cbb2dd707d1fadb9b96234f4dbd7
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:24:13 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=b7367d87d9c8cbb2dd707d1fadb9b96234f4dbd7

commit b7367d87d9c8cbb2dd707d1fadb9b96234f4dbd7
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-22 14:34:14 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:22:42 +0000

    libedit: vendor import libedit 2021-03-28
    
    (cherry picked from commit f9a159da2a292968cd5c37b56a6c43b6af8c5eed)
    (cherry picked from commit 19318a62d7f8cfe2f0f5c24178fa33e8844ae5d1)
---
 contrib/libedit/Makefile       |   6 +-
 contrib/libedit/chartype.h     |   2 +-
 contrib/libedit/common.c       |   8 +-
 contrib/libedit/filecomplete.c | 258 ++++++++++++++++++++++-------------------
 contrib/libedit/filecomplete.h |   8 +-
 contrib/libedit/history.c      |  14 ++-
 contrib/libedit/map.c          |  10 +-
 contrib/libedit/readline.c     |  18 ++-
 contrib/libedit/refresh.c      |   5 +-
 contrib/libedit/search.c       |  26 ++---
 contrib/libedit/terminal.c     |  61 +++++-----
 contrib/libedit/tty.c          |   7 +-
 12 files changed, 230 insertions(+), 193 deletions(-)

diff --git a/contrib/libedit/Makefile b/contrib/libedit/Makefile
index 8a02211504a8..105a6a92e0ee 100644
--- a/contrib/libedit/Makefile
+++ b/contrib/libedit/Makefile
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.65 2017/06/30 20:26:52 kre Exp $
+#	$NetBSD: Makefile,v 1.66 2019/10/13 07:28:10 mrg Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/4/93
 
 USE_SHLIBDIR=	yes
@@ -137,3 +137,7 @@ COPTS.literal.c+=	-Wno-sign-conversion
 COPTS.tokenizer.c+=	-Wno-cast-qual
 COPTS.tokenizern.c+=	-Wno-cast-qual
 .endif
+
+COPTS.history.c+=	${GCC_NO_STRINGOP_OVERFLOW}
+COPTS.historyn.c+=	${GCC_NO_STRINGOP_OVERFLOW}
+COPTS.readline.c+=	${GCC_NO_STRINGOP_TRUNCATION} ${GCC_NO_STRINGOP_OVERFLOW}
diff --git a/contrib/libedit/chartype.h b/contrib/libedit/chartype.h
index 3eda7da07296..bfa3d54ec36c 100644
--- a/contrib/libedit/chartype.h
+++ b/contrib/libedit/chartype.h
@@ -1,4 +1,4 @@
-/*	$NetBSD: chartype.h,v 1.35 2017/05/22 19:16:25 christos Exp $	*/
+/*	$NetBSD: chartype.h,v 1.36 2019/09/15 21:09:11 christos Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
diff --git a/contrib/libedit/common.c b/contrib/libedit/common.c
index bc6c057cf51d..f33c29650d79 100644
--- a/contrib/libedit/common.c
+++ b/contrib/libedit/common.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: common.c,v 1.48 2018/02/26 17:36:14 christos Exp $	*/
+/*	$NetBSD: common.c,v 1.49 2020/03/30 06:54:37 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)common.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: common.c,v 1.48 2018/02/26 17:36:14 christos Exp $");
+__RCSID("$NetBSD: common.c,v 1.49 2020/03/30 06:54:37 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -658,7 +658,7 @@ ed_search_prev_history(EditLine *el, wint_t c __attribute__((__unused__)))
 
 	while (hp != NULL) {
 #ifdef SDEBUG
-		(void) fprintf(el->el_errfile, "Comparing with \"%s\"\n", hp);
+		(void) fprintf(el->el_errfile, "Comparing with \"%ls\"\n", hp);
 #endif
 		if ((wcsncmp(hp, el->el_line.buffer, (size_t)
 			    (el->el_line.lastchar - el->el_line.buffer)) ||
@@ -713,7 +713,7 @@ ed_search_next_history(EditLine *el, wint_t c __attribute__((__unused__)))
 
 	for (h = 1; h < el->el_history.eventno && hp; h++) {
 #ifdef SDEBUG
-		(void) fprintf(el->el_errfile, "Comparing with \"%s\"\n", hp);
+		(void) fprintf(el->el_errfile, "Comparing with \"%ls\"\n", hp);
 #endif
 		if ((wcsncmp(hp, el->el_line.buffer, (size_t)
 			    (el->el_line.lastchar - el->el_line.buffer)) ||
diff --git a/contrib/libedit/filecomplete.c b/contrib/libedit/filecomplete.c
index 662a0bb85d0b..8279d7ff82b6 100644
--- a/contrib/libedit/filecomplete.c
+++ b/contrib/libedit/filecomplete.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.c,v 1.58 2019/09/08 05:50:58 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.c,v 1.67 2021/03/28 13:39:39 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: filecomplete.c,v 1.58 2019/09/08 05:50:58 abhinav Exp $");
+__RCSID("$NetBSD: filecomplete.c,v 1.67 2021/03/28 13:39:39 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -86,8 +86,7 @@ fn_tilde_expand(const char *txt)
 		temp = el_calloc(len, sizeof(*temp));
 		if (temp == NULL)
 			return NULL;
-		(void)strncpy(temp, txt + 1, len - 2);
-		temp[len - 2] = '\0';
+		(void)strlcpy(temp, txt + 1, len - 1);
 	}
 	if (temp[0] == 0) {
 #ifdef HAVE_GETPW_R_POSIX
@@ -292,7 +291,7 @@ escape_filename(EditLine * el, const char *filename, int single_match,
 
 	if (single_match && app_func) {
 		escaped_str[offset] = 0;
-		append_char = app_func(escaped_str);
+		append_char = app_func(filename);
 		/* we want to append space only if we are not inside quotes */
 		if (append_char[0] == ' ') {
 			if (!s_quoted && !d_quoted)
@@ -354,8 +353,7 @@ fn_filename_completion_function(const char *text, int state)
 				return NULL;
 			}
 			dirname = nptr;
-			(void)strncpy(dirname, text, len);
-			dirname[len] = '\0';
+			(void)strlcpy(dirname, text, len + 1);
 		} else {
 			el_free(filename);
 			if (*text == 0)
@@ -509,8 +507,7 @@ completion_matches(const char *text, char *(*genfunc)(const char *, int))
 		el_free(match_list);
 		return NULL;
 	}
-	(void)strncpy(retstr, match_list[1], max_equal);
-	retstr[max_equal] = '\0';
+	(void)strlcpy(retstr, match_list[1], max_equal + 1);
 	match_list[0] = retstr;
 
 	/* add NULL as last pointer to the array */
@@ -586,10 +583,12 @@ fn_display_match_list(EditLine * el, char **matches, size_t num, size_t width,
 
 static wchar_t *
 find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
-    const wchar_t * word_break, const wchar_t * special_prefixes, size_t * length)
+    const wchar_t * word_break, const wchar_t * special_prefixes, size_t * length,
+	int do_unescape)
 {
 	/* We now look backwards for the start of a filename/variable word */
 	const wchar_t *ctemp = cursor;
+	wchar_t *temp;
 	size_t len;
 
 	/* if the cursor is placed at a slash or a quote, we need to find the
@@ -614,12 +613,8 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
 			if (ctemp - buffer >= 2 && ctemp[-2] == '\\') {
 				ctemp -= 2;
 				continue;
-			} else if (ctemp - buffer >= 2 &&
-			    (ctemp[-2] == '\'' || ctemp[-2] == '"')) {
-				ctemp--;
-				continue;
-			} else
-				break;
+			}
+			break;
 		}
 		if (special_prefixes && wcschr(special_prefixes, ctemp[-1]))
 			break;
@@ -632,10 +627,16 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
 		ctemp++;
 	}
 	*length = len;
-	wchar_t *unescaped_word = unescape_string(ctemp, len);
-	if (unescaped_word == NULL)
-		return NULL;
-	return unescaped_word;
+	if (do_unescape) {
+		wchar_t *unescaped_word = unescape_string(ctemp, len);
+		if (unescaped_word == NULL)
+			return NULL;
+		return unescaped_word;
+	}
+	temp = el_malloc((len + 1) * sizeof(*temp));
+	(void) wcsncpy(temp, ctemp, len);
+	temp[len] = '\0';
+	return temp;
 }
 
 /*
@@ -651,12 +652,13 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
  *       '!' could never be invoked
  */
 int
-fn_complete(EditLine *el,
-	char *(*complet_func)(const char *, int),
-	char **(*attempted_completion_function)(const char *, int, int),
-	const wchar_t *word_break, const wchar_t *special_prefixes,
-	const char *(*app_func)(const char *), size_t query_items,
-	int *completion_type, int *over, int *point, int *end)
+fn_complete2(EditLine *el,
+    char *(*complete_func)(const char *, int),
+    char **(*attempted_completion_function)(const char *, int, int),
+    const wchar_t *word_break, const wchar_t *special_prefixes,
+    const char *(*app_func)(const char *), size_t query_items,
+    int *completion_type, int *over, int *point, int *end,
+    unsigned int flags)
 {
 	const LineInfoW *li;
 	wchar_t *temp;
@@ -665,6 +667,7 @@ fn_complete(EditLine *el,
 	size_t len;
 	int what_to_do = '\t';
 	int retval = CC_NORM;
+	int do_unescape = flags & FN_QUOTE_MATCH;
 
 	if (el->el_state.lastcmd == el->el_state.thiscmd)
 		what_to_do = '?';
@@ -673,14 +676,14 @@ fn_complete(EditLine *el,
 	if (completion_type != NULL)
 		*completion_type = what_to_do;
 
-	if (!complet_func)
-		complet_func = fn_filename_completion_function;
+	if (!complete_func)
+		complete_func = fn_filename_completion_function;
 	if (!app_func)
 		app_func = append_char_function;
 
 	li = el_wline(el);
 	temp = find_word_to_complete(li->cursor,
-	    li->buffer, word_break, special_prefixes, &len);
+	    li->buffer, word_break, special_prefixes, &len, do_unescape);
 	if (temp == NULL)
 		goto out;
 
@@ -701,117 +704,136 @@ fn_complete(EditLine *el,
 	if (!attempted_completion_function ||
 	    (over != NULL && !*over && !matches))
 		matches = completion_matches(
-		    ct_encode_string(temp, &el->el_scratch), complet_func);
+		    ct_encode_string(temp, &el->el_scratch), complete_func);
 
 	if (over != NULL)
 		*over = 0;
 
-	if (matches) {
-		int i;
-		size_t matches_num, maxlen, match_len, match_display=1;
-		int single_match = matches[2] == NULL &&
-			(matches[1] == NULL || strcmp(matches[0], matches[1]) == 0);
-
-		retval = CC_REFRESH;
-
-		if (matches[0][0] != '\0') {
-			el_deletestr(el, (int)len);
-			if (!attempted_completion_function)
-				completion = escape_filename(el, matches[0],
-				    single_match, app_func);
-			else
-				completion = strdup(matches[0]);
-			if (completion == NULL)
-				goto out;
-			if (single_match) {
-				/* We found exact match. Add a space after it,
-				 * unless we do filename completion and the
-				 * object is a directory. Also do necessary
-				 * escape quoting
-				 */
-				el_winsertstr(el,
-				    ct_decode_string(completion, &el->el_scratch));
-			} else {
-				/* Only replace the completed string with
-				 * common part of possible matches if there is
-				 * possible completion.
-				 */
-				el_winsertstr(el,
-				    ct_decode_string(completion, &el->el_scratch));
-			}
-			free(completion);
-		}
+	if (matches == NULL) {
+		goto out;
+	}
+	int i;
+	size_t matches_num, maxlen, match_len, match_display=1;
+	int single_match = matches[2] == NULL &&
+		(matches[1] == NULL || strcmp(matches[0], matches[1]) == 0);
+
+	retval = CC_REFRESH;
+
+	if (matches[0][0] != '\0') {
+		el_deletestr(el, (int)len);
+		if (flags & FN_QUOTE_MATCH)
+			completion = escape_filename(el, matches[0],
+			    single_match, app_func);
+		else
+			completion = strdup(matches[0]);
+		if (completion == NULL)
+			goto out;
 
+		/*
+		 * Replace the completed string with the common part of
+		 * all possible matches if there is a possible completion.
+		 */
+		el_winsertstr(el,
+		    ct_decode_string(completion, &el->el_scratch));
 
-		if (!single_match && (what_to_do == '!' || what_to_do == '?')) {
+		if (single_match && attempted_completion_function &&
+		    !(flags & FN_QUOTE_MATCH))
+		{
 			/*
-			 * More than one match and requested to list possible
-			 * matches.
+			 * We found an exact match. Add a space after
+			 * it, unless we do filename completion and the
+			 * object is a directory. Also do necessary
+			 * escape quoting
 			 */
+			el_winsertstr(el, ct_decode_string(
+			    (*app_func)(completion), &el->el_scratch));
+		}
+		free(completion);
+	}
 
-			for(i = 1, maxlen = 0; matches[i]; i++) {
-				match_len = strlen(matches[i]);
-				if (match_len > maxlen)
-					maxlen = match_len;
-			}
-			/* matches[1] through matches[i-1] are available */
-			matches_num = (size_t)(i - 1);
 
-			/* newline to get on next line from command line */
-			(void)fprintf(el->el_outfile, "\n");
+	if (!single_match && (what_to_do == '!' || what_to_do == '?')) {
+		/*
+		 * More than one match and requested to list possible
+		 * matches.
+		 */
 
-			/*
-			 * If there are too many items, ask user for display
-			 * confirmation.
-			 */
-			if (matches_num > query_items) {
-				(void)fprintf(el->el_outfile,
-				    "Display all %zu possibilities? (y or n) ",
-				    matches_num);
-				(void)fflush(el->el_outfile);
-				if (getc(stdin) != 'y')
-					match_display = 0;
-				(void)fprintf(el->el_outfile, "\n");
-			}
+		for(i = 1, maxlen = 0; matches[i]; i++) {
+			match_len = strlen(matches[i]);
+			if (match_len > maxlen)
+				maxlen = match_len;
+		}
+		/* matches[1] through matches[i-1] are available */
+		matches_num = (size_t)(i - 1);
 
-			if (match_display) {
-				/*
-				 * Interface of this function requires the
-				 * strings be matches[1..num-1] for compat.
-				 * We have matches_num strings not counting
-				 * the prefix in matches[0], so we need to
-				 * add 1 to matches_num for the call.
-				 */
-				fn_display_match_list(el, matches,
-				    matches_num+1, maxlen, app_func);
-			}
-			retval = CC_REDISPLAY;
-		} else if (matches[0][0]) {
+		/* newline to get on next line from command line */
+		(void)fprintf(el->el_outfile, "\n");
+
+		/*
+		 * If there are too many items, ask user for display
+		 * confirmation.
+		 */
+		if (matches_num > query_items) {
+			(void)fprintf(el->el_outfile,
+			    "Display all %zu possibilities? (y or n) ",
+			    matches_num);
+			(void)fflush(el->el_outfile);
+			if (getc(stdin) != 'y')
+				match_display = 0;
+			(void)fprintf(el->el_outfile, "\n");
+		}
+
+		if (match_display) {
 			/*
-			 * There was some common match, but the name was
-			 * not complete enough. Next tab will print possible
-			 * completions.
+			 * Interface of this function requires the
+			 * strings be matches[1..num-1] for compat.
+			 * We have matches_num strings not counting
+			 * the prefix in matches[0], so we need to
+			 * add 1 to matches_num for the call.
 			 */
-			el_beep(el);
-		} else {
-			/* lcd is not a valid object - further specification */
-			/* is needed */
-			el_beep(el);
-			retval = CC_NORM;
+			fn_display_match_list(el, matches,
+			    matches_num+1, maxlen, app_func);
 		}
-
-		/* free elements of array and the array itself */
-		for (i = 0; matches[i]; i++)
-			el_free(matches[i]);
-		el_free(matches);
-		matches = NULL;
+		retval = CC_REDISPLAY;
+	} else if (matches[0][0]) {
+		/*
+		 * There was some common match, but the name was
+		 * not complete enough. Next tab will print possible
+		 * completions.
+		 */
+		el_beep(el);
+	} else {
+		/* lcd is not a valid object - further specification */
+		/* is needed */
+		el_beep(el);
+		retval = CC_NORM;
 	}
 
+	/* free elements of array and the array itself */
+	for (i = 0; matches[i]; i++)
+		el_free(matches[i]);
+	el_free(matches);
+	matches = NULL;
+
 out:
 	el_free(temp);
 	return retval;
 }
 
+int
+fn_complete(EditLine *el,
+    char *(*complete_func)(const char *, int),
+    char **(*attempted_completion_function)(const char *, int, int),
+    const wchar_t *word_break, const wchar_t *special_prefixes,
+    const char *(*app_func)(const char *), size_t query_items,
+    int *completion_type, int *over, int *point, int *end)
+{
+	return fn_complete2(el, complete_func, attempted_completion_function,
+	    word_break, special_prefixes, app_func, query_items,
+	    completion_type, over, point, end,
+	    attempted_completion_function ? 0 : FN_QUOTE_MATCH);
+}
+
 /*
  * el-compatible wrapper around rl_complete; needed for key binding
  */
diff --git a/contrib/libedit/filecomplete.h b/contrib/libedit/filecomplete.h
index 61d81389a0f7..60ea4894414b 100644
--- a/contrib/libedit/filecomplete.h
+++ b/contrib/libedit/filecomplete.h
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.h,v 1.11 2017/04/21 05:38:03 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.h,v 1.13 2021/03/28 13:38:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -36,6 +36,12 @@ int fn_complete(EditLine *,
     char **(*)(const char *, int, int),
     const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
     int *, int *, int *, int *);
+int fn_complete2(EditLine *,
+    char *(*)(const char *, int),
+    char **(*)(const char *, int, int),
+    const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
+    int *, int *, int *, int *, unsigned int);
+#define FN_QUOTE_MATCH 1		/* Quote the returned match */
 
 void fn_display_match_list(EditLine *, char **, size_t, size_t,
 	const char *(*)(const char *));
diff --git a/contrib/libedit/history.c b/contrib/libedit/history.c
index 227f72c4a102..73cfa6b8ead9 100644
--- a/contrib/libedit/history.c
+++ b/contrib/libedit/history.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: history.c,v 1.62 2018/09/13 09:03:40 kre Exp $	*/
+/*	$NetBSD: history.c,v 1.63 2019/10/08 19:17:57 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)history.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: history.c,v 1.62 2018/09/13 09:03:40 kre Exp $");
+__RCSID("$NetBSD: history.c,v 1.63 2019/10/08 19:17:57 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -411,21 +411,23 @@ static int
 history_def_add(void *p, TYPE(HistEvent) *ev, const Char *str)
 {
 	history_t *h = (history_t *) p;
-	size_t len;
+	size_t len, elen, slen;
 	Char *s;
 	HistEventPrivate *evp = (void *)&h->cursor->ev;
 
 	if (h->cursor == &h->list)
 		return history_def_enter(p, ev, str);
-	len = Strlen(evp->str) + Strlen(str) + 1;
+	elen = Strlen(evp->str);
+	slen = Strlen(str);
+	len = elen + slen + 1;
 	s = h_malloc(len * sizeof(*s));
 	if (s == NULL) {
 		he_seterrev(ev, _HE_MALLOC_FAILED);
 		return -1;
 	}
-	(void) Strncpy(s, h->cursor->ev.str, len);
+	memcpy(s, evp->str, elen * sizeof(*s));
+	memcpy(s + elen, str, slen * sizeof(*s)); 
         s[len - 1] = '\0';
-	(void) Strncat(s, str, len - Strlen(s) - 1);
 	h_free(evp->str);
 	evp->str = s;
 	*ev = h->cursor->ev;
diff --git a/contrib/libedit/map.c b/contrib/libedit/map.c
index 0c489593335a..46bf6f1c9472 100644
--- a/contrib/libedit/map.c
+++ b/contrib/libedit/map.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: map.c,v 1.52 2019/07/23 10:18:52 christos Exp $	*/
+/*	$NetBSD: map.c,v 1.53 2020/03/30 06:54:37 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)map.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: map.c,v 1.52 2019/07/23 10:18:52 christos Exp $");
+__RCSID("$NetBSD: map.c,v 1.53 2020/03/30 06:54:37 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -906,11 +906,11 @@ map_init(EditLine *el)
          */
 #ifdef MAP_DEBUG
 	if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
-		EL_ABORT((el->errfile, "Emacs map incorrect\n"));
+		EL_ABORT((el->el_errfile, "Emacs map incorrect\n"));
 	if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
-		EL_ABORT((el->errfile, "Vi command map incorrect\n"));
+		EL_ABORT((el->el_errfile, "Vi command map incorrect\n"));
 	if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
-		EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
+		EL_ABORT((el->el_errfile, "Vi insert map incorrect\n"));
 #endif
 
 	el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt));
diff --git a/contrib/libedit/readline.c b/contrib/libedit/readline.c
index dc852f5539c1..792dddbaf70b 100644
--- a/contrib/libedit/readline.c
+++ b/contrib/libedit/readline.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: readline.c,v 1.157 2019/08/21 11:11:48 christos Exp $	*/
+/*	$NetBSD: readline.c,v 1.159 2019/10/09 14:31:07 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: readline.c,v 1.157 2019/08/21 11:11:48 christos Exp $");
+__RCSID("$NetBSD: readline.c,v 1.159 2019/10/09 14:31:07 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -521,7 +521,7 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
 	s = str;
 	while (*s) {
 		if (*s == *what && !strncmp(s, what, what_len)) {
-			(void)strncpy(r, with, with_len);
+			memcpy(r, with, with_len);
 			r += with_len;
 			s += what_len;
 			if (!globally) {
@@ -607,8 +607,7 @@ get_history_event(const char *cmd, int *cindex, int qchar)
 	else {
 		if ((pat = el_calloc(len + 1, sizeof(*pat))) == NULL)
 			return NULL;
-		(void)strncpy(pat, cmd + begin, len);
-		pat[len] = '\0';
+		(void)strlcpy(pat, cmd + begin, len + 1);
 	}
 
 	if (history(h, &ev, H_CURR) != 0) {
@@ -702,8 +701,7 @@ _history_expand_command(const char *command, size_t offs, size_t cmdlen,
 			if ((aptr = el_calloc(offs + 1, sizeof(*aptr)))
 			    == NULL)
 				return -1;
-			(void)strncpy(aptr, command, offs);
-			aptr[offs] = '\0';
+			(void)strlcpy(aptr, command, offs + 1);
 			idx = 1;
 		} else {
 			int	qchar;
@@ -960,9 +958,8 @@ history_expand(char *str, char **output)
 			}						\
 			result = nresult;				\
 		}							\
-		(void)strncpy(&result[idx], what, len);			\
+		(void)strlcpy(&result[idx], what, len + 1);		\
 		idx += len;						\
-		result[idx] = '\0';					\
 	}
 
 	result = NULL;
@@ -1150,8 +1147,7 @@ history_tokenize(const char *str)
 			el_free(result);
 			return NULL;
 		}
-		(void)strncpy(temp, &str[start], len);
-		temp[len] = '\0';
+		(void)strlcpy(temp, &str[start], len + 1);
 		result[idx++] = temp;
 		result[idx] = NULL;
 		if (str[i])
diff --git a/contrib/libedit/refresh.c b/contrib/libedit/refresh.c
index 584eec624976..fab29746478c 100644
--- a/contrib/libedit/refresh.c
+++ b/contrib/libedit/refresh.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: refresh.c,v 1.56 2019/01/04 03:03:44 uwe Exp $	*/
+/*	$NetBSD: refresh.c,v 1.57 2020/03/30 06:54:37 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)refresh.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: refresh.c,v 1.56 2019/01/04 03:03:44 uwe Exp $");
+__RCSID("$NetBSD: refresh.c,v 1.57 2020/03/30 06:54:37 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -45,6 +45,7 @@ __RCSID("$NetBSD: refresh.c,v 1.56 2019/01/04 03:03:44 uwe Exp $");
  * refresh.c: Lower level screen refreshing functions
  */
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
diff --git a/contrib/libedit/search.c b/contrib/libedit/search.c
index 78e15d720cb8..e909d1475725 100644
--- a/contrib/libedit/search.c
+++ b/contrib/libedit/search.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: search.c,v 1.49 2019/07/23 10:18:52 christos Exp $	*/
+/*	$NetBSD: search.c,v 1.51 2020/03/30 06:56:38 ryo Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)search.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: search.c,v 1.49 2019/07/23 10:18:52 christos Exp $");
+__RCSID("$NetBSD: search.c,v 1.51 2020/03/30 06:56:38 ryo Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -162,7 +162,7 @@ libedit_private int
 c_hmatch(EditLine *el, const wchar_t *str)
 {
 #ifdef SDEBUG
-	(void) fprintf(el->el_errfile, "match `%s' with `%s'\n",
+	(void) fprintf(el->el_errfile, "match `%ls' with `%ls'\n",
 	    el->el_search.patbuf, str);
 #endif /* SDEBUG */
 
@@ -182,20 +182,17 @@ c_setpat(EditLine *el)
 		    (size_t)(EL_CURSOR(el) - el->el_line.buffer);
 		if (el->el_search.patlen >= EL_BUFSIZ)
 			el->el_search.patlen = EL_BUFSIZ - 1;
-		if (el->el_search.patlen != 0) {
-			(void) wcsncpy(el->el_search.patbuf, el->el_line.buffer,
-			    el->el_search.patlen);
-			el->el_search.patbuf[el->el_search.patlen] = '\0';
-		} else
-			el->el_search.patlen = wcslen(el->el_search.patbuf);
+		(void) wcsncpy(el->el_search.patbuf, el->el_line.buffer,
+		    el->el_search.patlen);
+		el->el_search.patbuf[el->el_search.patlen] = '\0';
 	}
 #ifdef SDEBUG
 	(void) fprintf(el->el_errfile, "\neventno = %d\n",
 	    el->el_history.eventno);
-	(void) fprintf(el->el_errfile, "patlen = %d\n", el->el_search.patlen);
-	(void) fprintf(el->el_errfile, "patbuf = \"%s\"\n",
+	(void) fprintf(el->el_errfile, "patlen = %ld\n", el->el_search.patlen);
+	(void) fprintf(el->el_errfile, "patbuf = \"%ls\"\n",
 	    el->el_search.patbuf);
-	(void) fprintf(el->el_errfile, "cursor %d lastchar %d\n",
+	(void) fprintf(el->el_errfile, "cursor %ld lastchar %ld\n",
 	    EL_CURSOR(el) - el->el_line.buffer,
 	    el->el_line.lastchar - el->el_line.buffer);
 #endif
@@ -573,8 +570,9 @@ cv_repeat_srch(EditLine *el, wint_t c)
 {
 
 #ifdef SDEBUG
-	(void) fprintf(el->el_errfile, "dir %d patlen %d patbuf %s\n",
-	    c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf));
+	static ct_buffer_t conv;
+	(void) fprintf(el->el_errfile, "dir %d patlen %ld patbuf %s\n",
+	    c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf, &conv));
 #endif
 
 	el->el_state.lastcmd = (el_action_t) c;	/* Hack to stop c_setpat */
diff --git a/contrib/libedit/terminal.c b/contrib/libedit/terminal.c
index 34f4985a90bc..b3ab5bfb6244 100644
--- a/contrib/libedit/terminal.c
+++ b/contrib/libedit/terminal.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: terminal.c,v 1.39 2019/07/23 10:18:52 christos Exp $	*/
+/*	$NetBSD: terminal.c,v 1.43 2020/07/10 20:34:24 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)term.c	8.2 (Berkeley) 4/30/95";
 #else
-__RCSID("$NetBSD: terminal.c,v 1.39 2019/07/23 10:18:52 christos Exp $");
+__RCSID("$NetBSD: terminal.c,v 1.43 2020/07/10 20:34:24 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -497,7 +497,7 @@ terminal_move_to_line(EditLine *el, int where)
 	if (where == el->el_cursor.v)
 		return;
 
-	if (where > el->el_terminal.t_size.v) {
+	if (where >= el->el_terminal.t_size.v) {
 #ifdef DEBUG_SCREEN
 		(void) fprintf(el->el_errfile,
 		    "%s: where is ridiculous: %d\r\n", __func__, where);
@@ -647,7 +647,8 @@ terminal_overwrite(EditLine *el, const wchar_t *cp, size_t n)
 	if (el->el_cursor.h >= el->el_terminal.t_size.h) {	/* wrap? */
 		if (EL_HAS_AUTO_MARGINS) {	/* yes */
 			el->el_cursor.h = 0;
-			el->el_cursor.v++;
+			if (el->el_cursor.v + 1 < el->el_terminal.t_size.v)
+				el->el_cursor.v++;
 			if (EL_HAS_MAGIC_MARGINS) {
 				/* force the wrap to avoid the "magic"
 				 * situation */
@@ -1314,14 +1315,14 @@ terminal_settc(EditLine *el, int argc __attribute__((__unused__)),
 	const struct termcapstr *ts;
 	const struct termcapval *tv;
 	char what[8], how[8];
+	long i;
+	char *ep;
 
 	if (argv == NULL || argv[1] == NULL || argv[2] == NULL)
 		return -1;
 
-	strncpy(what, ct_encode_string(argv[1], &el->el_scratch), sizeof(what));
-	what[sizeof(what) - 1] = '\0';
-	strncpy(how,  ct_encode_string(argv[2], &el->el_scratch), sizeof(how));
-	how[sizeof(how) - 1] = '\0';
+	strlcpy(what, ct_encode_string(argv[1], &el->el_scratch), sizeof(what));
+	strlcpy(how,  ct_encode_string(argv[2], &el->el_scratch), sizeof(how));
 
 	/*
          * Do the strings first
@@ -1342,11 +1343,17 @@ terminal_settc(EditLine *el, int argc __attribute__((__unused__)),
 		if (strcmp(tv->name, what) == 0)
 			break;
 
-	if (tv->name != NULL)
+	if (tv->name == NULL) {
+		(void) fprintf(el->el_errfile,
+		    "%ls: Bad capability `%s'.\n", argv[0], what);
 		return -1;
+	}
 
 	if (tv == &tval[T_pt] || tv == &tval[T_km] ||
 	    tv == &tval[T_am] || tv == &tval[T_xn]) {
+		/*
+		 * Booleans
+		 */
 		if (strcmp(how, "yes") == 0)
 			el->el_terminal.t_val[tv - tval] = 1;
 		else if (strcmp(how, "no") == 0)
@@ -1357,28 +1364,30 @@ terminal_settc(EditLine *el, int argc __attribute__((__unused__)),
 			return -1;
 		}
 		terminal_setflags(el);
-		if (terminal_change_size(el, Val(T_li), Val(T_co)) == -1)
-			return -1;
 		return 0;
-	} else {
-		long i;
-		char *ep;
+	}
 
-		i = strtol(how, &ep, 10);
-		if (*ep != '\0') {
-			(void) fprintf(el->el_errfile,
-			    "%ls: Bad value `%s'.\n", argv[0], how);
-			return -1;
-		}
-		el->el_terminal.t_val[tv - tval] = (int) i;
+	/*
+	 * Numerics
+	 */
+	i = strtol(how, &ep, 10);
+	if (*ep != '\0') {
+		(void) fprintf(el->el_errfile,
+		    "%ls: Bad value `%s'.\n", argv[0], how);
+		return -1;
+	}
+	el->el_terminal.t_val[tv - tval] = (int) i;
+	i = 0;
+	if (tv == &tval[T_co]) {
 		el->el_terminal.t_size.v = Val(T_co);
+		i++;
+	} else if (tv == &tval[T_li]) {
 		el->el_terminal.t_size.h = Val(T_li);
-		if (tv == &tval[T_co] || tv == &tval[T_li])
-			if (terminal_change_size(el, Val(T_li), Val(T_co))
-			    == -1)
-				return -1;
-		return 0;
+		i++;
 	}
+	if (i && terminal_change_size(el, Val(T_li), Val(T_co)) == -1)
+		return -1;
+	return 0;
 }
 
 
diff --git a/contrib/libedit/tty.c b/contrib/libedit/tty.c
index 743075e08b3f..bafc906ccc4e 100644
--- a/contrib/libedit/tty.c
+++ b/contrib/libedit/tty.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.c,v 1.68 2018/12/02 16:58:13 christos Exp $	*/
+/*	$NetBSD: tty.c,v 1.69 2020/05/31 23:24:23 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)tty.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: tty.c,v 1.68 2018/12/02 16:58:13 christos Exp $");
+__RCSID("$NetBSD: tty.c,v 1.69 2020/05/31 23:24:23 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -1163,8 +1163,7 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)),
 
 	if (argv == NULL)
 		return -1;
-	strncpy(name, ct_encode_string(*argv++, &el->el_scratch), sizeof(name));
-        name[sizeof(name) - 1] = '\0';
+	strlcpy(name, ct_encode_string(*argv++, &el->el_scratch), sizeof(name));
 
 	while (argv && *argv && argv[0][0] == '-' && argv[0][2] == '\0')
 		switch (argv[0][1]) {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:50:26 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 90A92633B8A;
 Wed,  5 May 2021 07:50: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZpm23jzqz3H4g;
 Wed,  5 May 2021 07:50:26 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 727C42111E;
 Wed,  5 May 2021 07:50:26 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457oQDD083175;
 Wed, 5 May 2021 07:50:26 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457oQtK083174;
 Wed, 5 May 2021 07:50:26 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:50:26 GMT
Message-Id: <202105050750.1457oQtK083174@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: c80150333627 - stable/13 - pw(8): use open_memstream(3) instead
 of sbuf(9)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: c80150333627af3f2adbbdcfda4781a9f0c279dd
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:50:26 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=c80150333627af3f2adbbdcfda4781a9f0c279dd

commit c80150333627af3f2adbbdcfda4781a9f0c279dd
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-27 03:05:13 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:37:01 +0000

    pw(8): use open_memstream(3) instead of sbuf(9)
    
    open_memstream(3) is a standard function that brings here the same
    functionnality what we were doing with sbuf(9).
    
    (cherry picked from commit 0cd4b781a6fa1ed4ca04a7b642f41652e25bbc9b)
---
 usr.sbin/pw/Makefile  |  2 +-
 usr.sbin/pw/pw_conf.c | 86 +++++++++++++++++++++++++++------------------------
 2 files changed, 47 insertions(+), 41 deletions(-)

diff --git a/usr.sbin/pw/Makefile b/usr.sbin/pw/Makefile
index 8db96d90f6e2..353eac132c7d 100644
--- a/usr.sbin/pw/Makefile
+++ b/usr.sbin/pw/Makefile
@@ -8,7 +8,7 @@ SRCS=	pw.c pw_conf.c pw_user.c pw_group.c pw_log.c pw_nis.c pw_vpw.c \
 
 WARNS?=	3
 
-LIBADD=	crypt util sbuf
+LIBADD=	crypt util
 
 .include <src.opts.mk>
 
diff --git a/usr.sbin/pw/pw_conf.c b/usr.sbin/pw/pw_conf.c
index c446a663f082..b9b80f85cd48 100644
--- a/usr.sbin/pw/pw_conf.c
+++ b/usr.sbin/pw/pw_conf.c
@@ -31,9 +31,6 @@ static const char rcsid[] =
   "$FreeBSD$";
 #endif /* not lint */
 
-#include <sys/types.h>
-#include <sys/sbuf.h>
-
 #include <err.h>
 #include <fcntl.h>
 #include <string.h>
@@ -414,9 +411,11 @@ write_userconfig(struct userconf *cnf, const char *file)
 {
 	int             fd;
 	int             i, j;
-	struct sbuf	*buf;
+	FILE           *buffp;
 	FILE           *fp;
 	char		cfgfile[MAXPATHLEN];
+	char           *buf;
+	size_t          sz;
 
 	if (file == NULL) {
 		snprintf(cfgfile, sizeof(cfgfile), "%s/" _PW_CONF,
@@ -431,117 +430,124 @@ write_userconfig(struct userconf *cnf, const char *file)
 		close(fd);
 		return (0);
 	}
-			
-	buf = sbuf_new_auto();
+
+	sz = 0;
+	buf = NULL;
+	buffp = open_memstream(&buf, &sz);
+	if (buffp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
+
 	for (i = _UC_NONE; i < _UC_FIELDS; i++) {
 		int             quote = 1;
 
-		sbuf_clear(buf);
+		if (buf != NULL)
+			memset(buf, 0, sz);
+		rewind(buffp);
 		switch (i) {
 		case _UC_DEFAULTPWD:
-			sbuf_cat(buf, boolean_str(cnf->default_password));
+			fputs(boolean_str(cnf->default_password), buffp);
 			break;
 		case _UC_REUSEUID:
-			sbuf_cat(buf, boolean_str(cnf->reuse_uids));
+			fputs(boolean_str(cnf->reuse_uids), buffp);
 			break;
 		case _UC_REUSEGID:
-			sbuf_cat(buf, boolean_str(cnf->reuse_gids));
+			fputs(boolean_str(cnf->reuse_gids), buffp);
 			break;
 		case _UC_NISPASSWD:
-			sbuf_cat(buf, cnf->nispasswd ?  cnf->nispasswd : "");
+			fputs(cnf->nispasswd ?  cnf->nispasswd : "", buffp);
 			quote = 0;
 			break;
 		case _UC_DOTDIR:
-			sbuf_cat(buf, cnf->dotdir ?  cnf->dotdir :
-			    boolean_str(0));
+			fputs(cnf->dotdir ?  cnf->dotdir : boolean_str(0),
+			    buffp);
 			break;
 		case _UC_NEWMAIL:
-			sbuf_cat(buf, cnf->newmail ?  cnf->newmail :
-			    boolean_str(0));
+			fputs(cnf->newmail ?  cnf->newmail : boolean_str(0),
+			    buffp);
 			break;
 		case _UC_LOGFILE:
-			sbuf_cat(buf, cnf->logfile ?  cnf->logfile :
-			    boolean_str(0));
+			fputs(cnf->logfile ?  cnf->logfile : boolean_str(0),
+			    buffp);
 			break;
 		case _UC_HOMEROOT:
-			sbuf_cat(buf, cnf->home);
+			fputs(cnf->home, buffp);
 			break;
 		case _UC_HOMEMODE:
-			sbuf_printf(buf, "%04o", cnf->homemode);
+			fprintf(buffp, "%04o", cnf->homemode);
 			quote = 0;
 			break;
 		case _UC_SHELLPATH:
-			sbuf_cat(buf, cnf->shelldir);
+			fputs(cnf->shelldir, buffp);
 			break;
 		case _UC_SHELLS:
 			for (j = 0; j < _UC_MAXSHELLS &&
 			    system_shells[j] != NULL; j++)
-				sbuf_printf(buf, "%s\"%s\"", j ?
+				fprintf(buffp, "%s\"%s\"", j ?
 				    "," : "", system_shells[j]);
 			quote = 0;
 			break;
 		case _UC_DEFAULTSHELL:
-			sbuf_cat(buf, cnf->shell_default ?
-			    cnf->shell_default : bourne_shell);
+			fputs(cnf->shell_default ?  cnf->shell_default :
+			    bourne_shell, buffp);
 			break;
 		case _UC_DEFAULTGROUP:
-			sbuf_cat(buf, cnf->default_group ?
-			    cnf->default_group : "");
+			fputs(cnf->default_group ?  cnf->default_group : "",
+			    buffp);
 			break;
 		case _UC_EXTRAGROUPS:
 			for (j = 0; cnf->groups != NULL &&
 			    j < (int)cnf->groups->sl_cur; j++)
-				sbuf_printf(buf, "%s\"%s\"", j ?
+				fprintf(buffp, "%s\"%s\"", j ?
 				    "," : "", cnf->groups->sl_str[j]);
 			quote = 0;
 			break;
 		case _UC_DEFAULTCLASS:
-			sbuf_cat(buf, cnf->default_class ?
-			    cnf->default_class : "");
+			fputs(cnf->default_class ?  cnf->default_class : "",
+			    buffp);
 			break;
 		case _UC_MINUID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->min_uid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->min_uid);
 			quote = 0;
 			break;
 		case _UC_MAXUID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->max_uid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->max_uid);
 			quote = 0;
 			break;
 		case _UC_MINGID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->min_gid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->min_gid);
 			quote = 0;
 			break;
 		case _UC_MAXGID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->max_gid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->max_gid);
 			quote = 0;
 			break;
 		case _UC_EXPIRE:
-			sbuf_printf(buf, "%jd", (intmax_t)cnf->expire_days);
+			fprintf(buffp, "%jd", (intmax_t)cnf->expire_days);
 			quote = 0;
 			break;
 		case _UC_PASSWORD:
-			sbuf_printf(buf, "%jd", (intmax_t)cnf->password_days);
+			fprintf(buffp, "%jd", (intmax_t)cnf->password_days);
 			quote = 0;
 			break;
 		case _UC_NONE:
 			break;
 		}
-		sbuf_finish(buf);
+		fflush(buffp);
 
 		if (comments[i])
 			fputs(comments[i], fp);
 
 		if (*kwds[i]) {
 			if (quote)
-				fprintf(fp, "%s = \"%s\"\n", kwds[i],
-				    sbuf_data(buf));
+				fprintf(fp, "%s = \"%s\"\n", kwds[i], buf);
 			else
-				fprintf(fp, "%s = %s\n", kwds[i], sbuf_data(buf));
+				fprintf(fp, "%s = %s\n", kwds[i], buf);
 #if debugging
-			printf("WROTE: %s = %s\n", kwds[i], sbuf_data(buf));
+			printf("WROTE: %s = %s\n", kwds[i], buf);
 #endif
 		}
 	}
-	sbuf_delete(buf);
+	fclose(buffp);
+	free(buf);
 	return (fclose(fp) != EOF);
 }

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:50:27 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id BDF13633A13;
 Wed,  5 May 2021 07:50:27 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZpm34m8Sz3HJP;
 Wed,  5 May 2021 07:50:27 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 94A3A21305;
 Wed,  5 May 2021 07:50:27 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457oRdP083203;
 Wed, 5 May 2021 07:50:27 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457oRxx083202;
 Wed, 5 May 2021 07:50:27 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:50:27 GMT
Message-Id: <202105050750.1457oRxx083202@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 78ee2a028ec5 - stable/13 - pkg(7): when bootstrapping first
 search for pkg.pkg file then pkg.txz
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 78ee2a028ec5f5e4fe3336d41967de8d521cfe60
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:50:27 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=78ee2a028ec5f5e4fe3336d41967de8d521cfe60

commit 78ee2a028ec5f5e4fe3336d41967de8d521cfe60
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-12 17:36:30 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:49:37 +0000

    pkg(7): when bootstrapping first search for pkg.pkg file then pkg.txz
    
    The package extension is going to be changed to .pkg to be among other
    things resilient to the change of compression format used and reduce
    the impact of all third party tool of that change.
    
    Ensure the bootstrap knows about it
    
    Reviewed by:    manu
    Differential revision:  https://reviews.freebsd.org/D29232
    
    (cherry picked from commit a2aac2f5e5642740507a3cadb98046f3dd434ce4)
    (cherry picked from commit c244b1d8a38731041d0f3ff4191192a85dd8608b)
---
 usr.sbin/pkg/pkg.c | 43 +++++++++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index 1f787e3dd246..04232672ac39 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -84,6 +84,12 @@ struct fingerprint {
 	STAILQ_ENTRY(fingerprint) next;
 };
 
+static const char *bootstrap_names []  = {
+	"pkg.pkg",
+	"pkg.txz",
+	NULL
+};
+
 STAILQ_HEAD(fingerprint_list, fingerprint);
 
 static int
@@ -836,6 +842,7 @@ bootstrap_pkg(bool force, const char *fetchOpts)
 	const char *packagesite;
 	const char *signature_type;
 	char pkgstatic[MAXPATHLEN];
+	const char *bootstrap_name;
 
 	fd_sig = -1;
 	ret = -1;
@@ -858,22 +865,29 @@ bootstrap_pkg(bool force, const char *fetchOpts)
 	if (strncmp(URL_SCHEME_PREFIX, packagesite,
 	    strlen(URL_SCHEME_PREFIX)) == 0)
 		packagesite += strlen(URL_SCHEME_PREFIX);
-	snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz", packagesite);
-
-	snprintf(tmppkg, MAXPATHLEN, "%s/pkg.txz.XXXXXX",
-	    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
-
-	if ((fd_pkg = fetch_to_fd(url, tmppkg, fetchOpts)) == -1)
+	for (int j = 0; bootstrap_names[j] != NULL; j++) {
+		bootstrap_name = bootstrap_names[j];
+
+		snprintf(url, MAXPATHLEN, "%s/Latest/%s", packagesite, bootstrap_name);
+		snprintf(tmppkg, MAXPATHLEN, "%s/%s.XXXXXX",
+		    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP,
+		    bootstrap_name);
+		if ((fd_pkg = fetch_to_fd(url, tmppkg, fetchOpts)) != -1)
+			break;
+		bootstrap_name = NULL;
+	}
+	if (bootstrap_name == NULL)
 		goto fetchfail;
 
 	if (signature_type != NULL &&
 	    strcasecmp(signature_type, "NONE") != 0) {
 		if (strcasecmp(signature_type, "FINGERPRINTS") == 0) {
 
-			snprintf(tmpsig, MAXPATHLEN, "%s/pkg.txz.sig.XXXXXX",
-			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
-			snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz.sig",
-			    packagesite);
+			snprintf(tmpsig, MAXPATHLEN, "%s/%s.sig.XXXXXX",
+			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP,
+			    bootstrap_name);
+			snprintf(url, MAXPATHLEN, "%s/Latest/%s.sig",
+			    packagesite, bootstrap_name);
 
 			if ((fd_sig = fetch_to_fd(url, tmpsig, fetchOpts)) == -1) {
 				fprintf(stderr, "Signature for pkg not "
@@ -886,10 +900,11 @@ bootstrap_pkg(bool force, const char *fetchOpts)
 		} else if (strcasecmp(signature_type, "PUBKEY") == 0) {
 
 			snprintf(tmpsig, MAXPATHLEN,
-			    "%s/pkg.txz.pubkeysig.XXXXXX",
-			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
-			snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz.pubkeysig",
-			    packagesite);
+			    "%s/%s.pubkeysig.XXXXXX",
+			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP,
+			    bootstrap_name);
+			snprintf(url, MAXPATHLEN, "%s/Latest/%s.pubkeysig",
+			    packagesite, bootstrap_name);
 
 			if ((fd_sig = fetch_to_fd(url, tmpsig, fetchOpts)) == -1) {
 				fprintf(stderr, "Signature for pkg not "

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:50:28 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D7AD3633B22;
 Wed,  5 May 2021 07:50:28 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZpm45jj8z3HJS;
 Wed,  5 May 2021 07:50:28 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B6E47211A1;
 Wed,  5 May 2021 07:50:28 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457oSdR083224;
 Wed, 5 May 2021 07:50:28 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457oSVt083223;
 Wed, 5 May 2021 07:50:28 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:50:28 GMT
Message-Id: <202105050750.1457oSVt083223@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: d39a1652d4e4 - stable/13 - pkg(7): indentation fixes
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: d39a1652d4e402344deee0f31d32e393314c7907
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:50:28 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=d39a1652d4e402344deee0f31d32e393314c7907

commit d39a1652d4e402344deee0f31d32e393314c7907
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-27 02:07:05 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:50:02 +0000

    pkg(7): indentation fixes
    
    Non functional changes
    
    (cherry picked from commit f648d757b76d70d58bbda7c3ed3ff79261d24d0f)
---
 usr.sbin/pkg/config.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 2bcfd9c405f3..70c745900931 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -51,8 +51,8 @@ __FBSDID("$FreeBSD$");
 #define roundup2(x, y)	(((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
 
 struct config_value {
-       char *value;
-       STAILQ_ENTRY(config_value) next;
+	char *value;
+	STAILQ_ENTRY(config_value) next;
 };
 
 struct config_entry {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 07:50:30 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 22660633A98;
 Wed,  5 May 2021 07:50:30 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZpm572Ytz3H4q;
 Wed,  5 May 2021 07:50:29 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DB7A1211A2;
 Wed,  5 May 2021 07:50:29 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1457oTPV083245;
 Wed, 5 May 2021 07:50:29 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1457oTTb083244;
 Wed, 5 May 2021 07:50:29 GMT (envelope-from git)
Date: Wed, 5 May 2021 07:50:29 GMT
Message-Id: <202105050750.1457oTTb083244@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 63d098d8d8d6 - stable/13 - pkg(7): replace usage of sbuf(9) with
 open_memstream(3)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 63d098d8d8d6bb12e7e2652ebb338e526906d83a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 07:50:30 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=63d098d8d8d6bb12e7e2652ebb338e526906d83a

commit 63d098d8d8d6bb12e7e2652ebb338e526906d83a
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-27 02:38:55 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:50:02 +0000

    pkg(7): replace usage of sbuf(9) with open_memstream(3)
    
    open_memstream(3) is a standard way to obtain the same feature we do get
    by using sbuf(9) (aka dynamic size buffer), switching to using it makes
    pkg(7) more portable, and reduces its number of dependencies.
    
    Reviewed by:    manu
    Differential Revision:  https://reviews.freebsd.org/D30005
    
    (cherry picked from commit cc9a8a116d19daf224222506441e91a3d329160e)
---
 usr.sbin/pkg/Makefile |  2 +-
 usr.sbin/pkg/config.c | 33 +++++++++++++++----------
 usr.sbin/pkg/pkg.c    | 67 +++++++++++++++++++++++++++------------------------
 3 files changed, 56 insertions(+), 46 deletions(-)

diff --git a/usr.sbin/pkg/Makefile b/usr.sbin/pkg/Makefile
index 980faafc6b6c..a71f0b2acb86 100644
--- a/usr.sbin/pkg/Makefile
+++ b/usr.sbin/pkg/Makefile
@@ -25,6 +25,6 @@ MAN=	pkg.7
 
 CFLAGS+=-I${SRCTOP}/contrib/libucl/include
 .PATH:	${SRCTOP}/contrib/libucl/include
-LIBADD=	archive fetch ucl sbuf crypto ssl util
+LIBADD=	archive fetch ucl crypto ssl util
 
 .include <bsd.prog.mk>
diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 70c745900931..97983ea1f58a 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -33,7 +33,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/queue.h>
 #include <sys/utsname.h>
-#include <sys/sbuf.h>
 #include <sys/sysctl.h>
 
 #include <dirent.h>
@@ -216,7 +215,9 @@ boolstr_to_bool(const char *str)
 static void
 config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 {
-	struct sbuf *buf = sbuf_new_auto();
+	FILE *buffp;
+	char *buf = NULL;
+	size_t bufsz = 0;
 	const ucl_object_t *cur, *seq, *tmp;
 	ucl_object_iter_t it = NULL, itseq = NULL, it_obj = NULL;
 	struct config_entry *temp_config;
@@ -227,39 +228,44 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 
 	/* Temporary config for configs that may be disabled. */
 	temp_config = calloc(CONFIG_SIZE, sizeof(struct config_entry));
+	buffp = open_memstream(&buf, &bufsz);
+	if (buffp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
 
 	while ((cur = ucl_iterate_object(obj, &it, true))) {
 		key = ucl_object_key(cur);
 		if (key == NULL)
 			continue;
-		sbuf_clear(buf);
+		if (buf != NULL)
+			memset(buf, 0, bufsz);
+		rewind(buffp);
 
 		if (conftype == CONFFILE_PKG) {
 			for (j = 0; j < strlen(key); ++j)
-				sbuf_putc(buf, toupper(key[j]));
-			sbuf_finish(buf);
+				fputc(toupper(key[j]), buffp);
+			fflush(buffp);
 		} else if (conftype == CONFFILE_REPO) {
 			if (strcasecmp(key, "url") == 0)
-				sbuf_cpy(buf, "PACKAGESITE");
+				fputs("PACKAGESITE", buffp);
 			else if (strcasecmp(key, "mirror_type") == 0)
-				sbuf_cpy(buf, "MIRROR_TYPE");
+				fputs("MIRROR_TYPE", buffp);
 			else if (strcasecmp(key, "signature_type") == 0)
-				sbuf_cpy(buf, "SIGNATURE_TYPE");
+				fputs("SIGNATURE_TYPE", buffp);
 			else if (strcasecmp(key, "fingerprints") == 0)
-				sbuf_cpy(buf, "FINGERPRINTS");
+				fputs("FINGERPRINTS", buffp);
 			else if (strcasecmp(key, "pubkey") == 0)
-				sbuf_cpy(buf, "PUBKEY");
+				fputs("PUBKEY", buffp);
 			else if (strcasecmp(key, "enabled") == 0) {
 				if ((cur->type != UCL_BOOLEAN) ||
 				    !ucl_object_toboolean(cur))
 					goto cleanup;
 			} else
 				continue;
-			sbuf_finish(buf);
+			fflush(buffp);
 		}
 
 		for (i = 0; i < CONFIG_SIZE; i++) {
-			if (strcmp(sbuf_data(buf), c[i].key) == 0)
+			if (strcmp(buf, c[i].key) == 0)
 				break;
 		}
 
@@ -334,7 +340,8 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 
 cleanup:
 	free(temp_config);
-	sbuf_delete(buf);
+	fclose(buffp);
+	free(buf);
 }
 
 /*-
diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index 04232672ac39..8193dc79a430 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -33,7 +33,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/queue.h>
 #include <sys/types.h>
-#include <sys/sbuf.h>
 #include <sys/wait.h>
 
 #include <archive.h>
@@ -595,7 +594,9 @@ static struct pubkey *
 read_pubkey(int fd)
 {
 	struct pubkey *pk;
-	struct sbuf *sig;
+	char *sigb;
+	size_t sigsz;
+	FILE *sig;
 	char buf[4096];
 	int r;
 
@@ -604,18 +605,22 @@ read_pubkey(int fd)
 		return (NULL);
 	}
 
-	sig = sbuf_new_auto();
+	sigsz = 0;
+	sigb = NULL;
+	sig = open_memstream(&sigb, &sigsz);
+	if (sig == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
 
 	while ((r = read(fd, buf, sizeof(buf))) >0) {
-		sbuf_bcat(sig, buf, r);
+		fwrite(buf, 1, r, sig);
 	}
 
-	sbuf_finish(sig);
+	fclose(sig);
 	pk = calloc(1, sizeof(struct pubkey));
-	pk->siglen = sbuf_len(sig);
+	pk->siglen = sigsz;
 	pk->sig = calloc(1, pk->siglen);
-	memcpy(pk->sig, sbuf_data(sig), pk->siglen);
-	sbuf_delete(sig);
+	memcpy(pk->sig, sigb, pk->siglen);
+	free(sigb);
 
 	return (pk);
 }
@@ -624,16 +629,17 @@ static struct sig_cert *
 parse_cert(int fd) {
 	int my_fd;
 	struct sig_cert *sc;
-	FILE *fp;
-	struct sbuf *buf, *sig, *cert;
+	FILE *fp, *sigfp, *certfp, *tmpfp;
 	char *line;
-	size_t linecap;
+	char *sig, *cert;
+	size_t linecap, sigsz, certsz;
 	ssize_t linelen;
 
-	buf = NULL;
 	sc = NULL;
 	line = NULL;
 	linecap = 0;
+	sig = cert = NULL;
+	sigfp = certfp = tmpfp = NULL;
 
 	if (lseek(fd, 0, 0) == -1) {
 		warn("lseek");
@@ -652,41 +658,38 @@ parse_cert(int fd) {
 		return (NULL);
 	}
 
-	sig = sbuf_new_auto();
-	cert = sbuf_new_auto();
+	sigsz = certsz = 0;
+	sigfp = open_memstream(&sig, &sigsz);
+	if (sigfp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
+	certfp = open_memstream(&cert, &certsz);
+	if (certfp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
 
 	while ((linelen = getline(&line, &linecap, fp)) > 0) {
 		if (strcmp(line, "SIGNATURE\n") == 0) {
-			buf = sig;
+			tmpfp = sigfp;
 			continue;
 		} else if (strcmp(line, "CERT\n") == 0) {
-			buf = cert;
+			tmpfp = certfp;
 			continue;
 		} else if (strcmp(line, "END\n") == 0) {
 			break;
 		}
-		if (buf != NULL)
-			sbuf_bcat(buf, line, linelen);
+		if (tmpfp != NULL)
+			fwrite(line, 1, linelen, tmpfp);
 	}
 
 	fclose(fp);
-
-	/* Trim out unrelated trailing newline */
-	sbuf_setpos(sig, sbuf_len(sig) - 1);
-
-	sbuf_finish(sig);
-	sbuf_finish(cert);
+	fclose(sigfp);
+	fclose(certfp);
 
 	sc = calloc(1, sizeof(struct sig_cert));
-	sc->siglen = sbuf_len(sig);
-	sc->sig = calloc(1, sc->siglen);
-	memcpy(sc->sig, sbuf_data(sig), sc->siglen);
-
-	sc->certlen = sbuf_len(cert);
-	sc->cert = strdup(sbuf_data(cert));
+	sc->siglen = sigsz -1; /* Trim out unrelated trailing newline */
+	sc->sig = sig;
 
-	sbuf_delete(sig);
-	sbuf_delete(cert);
+	sc->certlen = certsz;
+	sc->cert = cert;
 
 	return (sc);
 }

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:25 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5B6E5634BFC;
 Wed,  5 May 2021 08:25:25 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXP275Pz3JQ7;
 Wed,  5 May 2021 08:25:25 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3B90721B7F;
 Wed,  5 May 2021 08:25:25 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PPTI028718;
 Wed, 5 May 2021 08:25:25 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PPb7028717;
 Wed, 5 May 2021 08:25:25 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:25 GMT
Message-Id: <202105050825.1458PPb7028717@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 432610226b1c - stable/12 - pw(8): use open_memstream(3) instead
 of sbuf(9)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 432610226b1ca188c5e7a7029e4852a5ad00edf5
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:25 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=432610226b1ca188c5e7a7029e4852a5ad00edf5

commit 432610226b1ca188c5e7a7029e4852a5ad00edf5
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-27 03:05:13 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:37:17 +0000

    pw(8): use open_memstream(3) instead of sbuf(9)
    
    open_memstream(3) is a standard function that brings here the same
    functionnality what we were doing with sbuf(9).
    
    (cherry picked from commit 0cd4b781a6fa1ed4ca04a7b642f41652e25bbc9b)
---
 usr.sbin/pw/Makefile  |  2 +-
 usr.sbin/pw/pw_conf.c | 86 +++++++++++++++++++++++++++------------------------
 2 files changed, 47 insertions(+), 41 deletions(-)

diff --git a/usr.sbin/pw/Makefile b/usr.sbin/pw/Makefile
index 8db96d90f6e2..353eac132c7d 100644
--- a/usr.sbin/pw/Makefile
+++ b/usr.sbin/pw/Makefile
@@ -8,7 +8,7 @@ SRCS=	pw.c pw_conf.c pw_user.c pw_group.c pw_log.c pw_nis.c pw_vpw.c \
 
 WARNS?=	3
 
-LIBADD=	crypt util sbuf
+LIBADD=	crypt util
 
 .include <src.opts.mk>
 
diff --git a/usr.sbin/pw/pw_conf.c b/usr.sbin/pw/pw_conf.c
index 9dff3fe03efa..38df8cd8f50d 100644
--- a/usr.sbin/pw/pw_conf.c
+++ b/usr.sbin/pw/pw_conf.c
@@ -31,9 +31,6 @@ static const char rcsid[] =
   "$FreeBSD$";
 #endif /* not lint */
 
-#include <sys/types.h>
-#include <sys/sbuf.h>
-
 #include <err.h>
 #include <fcntl.h>
 #include <string.h>
@@ -412,9 +409,11 @@ write_userconfig(struct userconf *cnf, const char *file)
 {
 	int             fd;
 	int             i, j;
-	struct sbuf	*buf;
+	FILE           *buffp;
 	FILE           *fp;
 	char		cfgfile[MAXPATHLEN];
+	char           *buf;
+	size_t          sz;
 
 	if (file == NULL) {
 		snprintf(cfgfile, sizeof(cfgfile), "%s/" _PW_CONF,
@@ -429,117 +428,124 @@ write_userconfig(struct userconf *cnf, const char *file)
 		close(fd);
 		return (0);
 	}
-			
-	buf = sbuf_new_auto();
+
+	sz = 0;
+	buf = NULL;
+	buffp = open_memstream(&buf, &sz);
+	if (buffp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
+
 	for (i = _UC_NONE; i < _UC_FIELDS; i++) {
 		int             quote = 1;
 
-		sbuf_clear(buf);
+		if (buf != NULL)
+			memset(buf, 0, sz);
+		rewind(buffp);
 		switch (i) {
 		case _UC_DEFAULTPWD:
-			sbuf_cat(buf, boolean_str(cnf->default_password));
+			fputs(boolean_str(cnf->default_password), buffp);
 			break;
 		case _UC_REUSEUID:
-			sbuf_cat(buf, boolean_str(cnf->reuse_uids));
+			fputs(boolean_str(cnf->reuse_uids), buffp);
 			break;
 		case _UC_REUSEGID:
-			sbuf_cat(buf, boolean_str(cnf->reuse_gids));
+			fputs(boolean_str(cnf->reuse_gids), buffp);
 			break;
 		case _UC_NISPASSWD:
-			sbuf_cat(buf, cnf->nispasswd ?  cnf->nispasswd : "");
+			fputs(cnf->nispasswd ?  cnf->nispasswd : "", buffp);
 			quote = 0;
 			break;
 		case _UC_DOTDIR:
-			sbuf_cat(buf, cnf->dotdir ?  cnf->dotdir :
-			    boolean_str(0));
+			fputs(cnf->dotdir ?  cnf->dotdir : boolean_str(0),
+			    buffp);
 			break;
 		case _UC_NEWMAIL:
-			sbuf_cat(buf, cnf->newmail ?  cnf->newmail :
-			    boolean_str(0));
+			fputs(cnf->newmail ?  cnf->newmail : boolean_str(0),
+			    buffp);
 			break;
 		case _UC_LOGFILE:
-			sbuf_cat(buf, cnf->logfile ?  cnf->logfile :
-			    boolean_str(0));
+			fputs(cnf->logfile ?  cnf->logfile : boolean_str(0),
+			    buffp);
 			break;
 		case _UC_HOMEROOT:
-			sbuf_cat(buf, cnf->home);
+			fputs(cnf->home, buffp);
 			break;
 		case _UC_HOMEMODE:
-			sbuf_printf(buf, "%04o", cnf->homemode);
+			fprintf(buffp, "%04o", cnf->homemode);
 			quote = 0;
 			break;
 		case _UC_SHELLPATH:
-			sbuf_cat(buf, cnf->shelldir);
+			fputs(cnf->shelldir, buffp);
 			break;
 		case _UC_SHELLS:
 			for (j = 0; j < _UC_MAXSHELLS &&
 			    system_shells[j] != NULL; j++)
-				sbuf_printf(buf, "%s\"%s\"", j ?
+				fprintf(buffp, "%s\"%s\"", j ?
 				    "," : "", system_shells[j]);
 			quote = 0;
 			break;
 		case _UC_DEFAULTSHELL:
-			sbuf_cat(buf, cnf->shell_default ?
-			    cnf->shell_default : bourne_shell);
+			fputs(cnf->shell_default ?  cnf->shell_default :
+			    bourne_shell, buffp);
 			break;
 		case _UC_DEFAULTGROUP:
-			sbuf_cat(buf, cnf->default_group ?
-			    cnf->default_group : "");
+			fputs(cnf->default_group ?  cnf->default_group : "",
+			    buffp);
 			break;
 		case _UC_EXTRAGROUPS:
 			for (j = 0; cnf->groups != NULL &&
 			    j < (int)cnf->groups->sl_cur; j++)
-				sbuf_printf(buf, "%s\"%s\"", j ?
+				fprintf(buffp, "%s\"%s\"", j ?
 				    "," : "", cnf->groups->sl_str[j]);
 			quote = 0;
 			break;
 		case _UC_DEFAULTCLASS:
-			sbuf_cat(buf, cnf->default_class ?
-			    cnf->default_class : "");
+			fputs(cnf->default_class ?  cnf->default_class : "",
+			    buffp);
 			break;
 		case _UC_MINUID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->min_uid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->min_uid);
 			quote = 0;
 			break;
 		case _UC_MAXUID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->max_uid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->max_uid);
 			quote = 0;
 			break;
 		case _UC_MINGID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->min_gid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->min_gid);
 			quote = 0;
 			break;
 		case _UC_MAXGID:
-			sbuf_printf(buf, "%ju", (uintmax_t)cnf->max_gid);
+			fprintf(buffp, "%ju", (uintmax_t)cnf->max_gid);
 			quote = 0;
 			break;
 		case _UC_EXPIRE:
-			sbuf_printf(buf, "%jd", (intmax_t)cnf->expire_days);
+			fprintf(buffp, "%jd", (intmax_t)cnf->expire_days);
 			quote = 0;
 			break;
 		case _UC_PASSWORD:
-			sbuf_printf(buf, "%jd", (intmax_t)cnf->password_days);
+			fprintf(buffp, "%jd", (intmax_t)cnf->password_days);
 			quote = 0;
 			break;
 		case _UC_NONE:
 			break;
 		}
-		sbuf_finish(buf);
+		fflush(buffp);
 
 		if (comments[i])
 			fputs(comments[i], fp);
 
 		if (*kwds[i]) {
 			if (quote)
-				fprintf(fp, "%s = \"%s\"\n", kwds[i],
-				    sbuf_data(buf));
+				fprintf(fp, "%s = \"%s\"\n", kwds[i], buf);
 			else
-				fprintf(fp, "%s = %s\n", kwds[i], sbuf_data(buf));
+				fprintf(fp, "%s = %s\n", kwds[i], buf);
 #if debugging
-			printf("WROTE: %s = %s\n", kwds[i], sbuf_data(buf));
+			printf("WROTE: %s = %s\n", kwds[i], buf);
 #endif
 		}
 	}
-	sbuf_delete(buf);
+	fclose(buffp);
+	free(buf);
 	return (fclose(fp) != EOF);
 }

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:26 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8CD67634F17;
 Wed,  5 May 2021 08:25: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXQ3Sqdz3JhV;
 Wed,  5 May 2021 08:25:26 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 61CB821B99;
 Wed,  5 May 2021 08:25:26 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PQWS028739;
 Wed, 5 May 2021 08:25:26 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PQqP028738;
 Wed, 5 May 2021 08:25:26 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:26 GMT
Message-Id: <202105050825.1458PQqP028738@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: d1cba26deb90 - stable/12 - fix up docs,
 if signature checking is enabled, the file MUST exist...
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: d1cba26deb90a0f13e5816d69237a061bf4841fd
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:26 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=d1cba26deb90a0f13e5816d69237a061bf4841fd

commit d1cba26deb90a0f13e5816d69237a061bf4841fd
Author:     John-Mark Gurney <jmg@FreeBSD.org>
AuthorDate: 2020-11-06 22:11:05 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 07:51:43 +0000

    fix up docs, if signature checking is enabled, the file MUST exist...
    
    (cherry picked from commit e771d590741ea39be83558bda72854c65e1084ae)
---
 usr.sbin/pkg/pkg.7 | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/usr.sbin/pkg/pkg.7 b/usr.sbin/pkg/pkg.7
index 342c93420b6a..f7116f5da828 100644
--- a/usr.sbin/pkg/pkg.7
+++ b/usr.sbin/pkg/pkg.7
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 12, 2013
+.Dd November 6, 2020
 .Dt PKG 7
 .Os
 .Sh NAME
@@ -69,11 +69,8 @@ If already installed, the command requested will be forwarded to the real
 Install
 .Xr pkg 8
 from a local package instead of fetching from remote.
-If a
-.Pa pkg.txz.sig
-file exists and
-signature checking is enabled, then the signature will be verified
-before installing the package.
+If signature checking is enabled, then the correct signature file
+must exist and the signature valid before the package will be installed.
 If the
 .Fl f
 flag is specified, then

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:27 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D5878634C53;
 Wed,  5 May 2021 08:25:27 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXR52w7z3Jxm;
 Wed,  5 May 2021 08:25:27 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 83DE5217CA;
 Wed,  5 May 2021 08:25:27 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PRMW028760;
 Wed, 5 May 2021 08:25:27 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PRXa028759;
 Wed, 5 May 2021 08:25:27 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:27 GMT
Message-Id: <202105050825.1458PRXa028759@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: fb8d0baa3acd - stable/12 - Use asprintf instead of sbuf
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: fb8d0baa3acd6d0e639dcabaa2039cd0100b5dbb
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:28 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=fb8d0baa3acd6d0e639dcabaa2039cd0100b5dbb

commit fb8d0baa3acd6d0e639dcabaa2039cd0100b5dbb
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2020-10-19 07:26:42 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:11:10 +0000

    Use asprintf instead of sbuf
---
 usr.sbin/pkg/config.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 80469bf2b5a5..69bdece6c1a9 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -32,8 +32,8 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/queue.h>
-#include <sys/sbuf.h>
 #include <sys/utsname.h>
+#include <sys/sbuf.h>
 #include <sys/sysctl.h>
 
 #include <dirent.h>
@@ -178,7 +178,7 @@ pkg_get_myabi(char *dest, size_t sz)
 static void
 subst_packagesite(const char *abi)
 {
-	struct sbuf *newval;
+	char *newval;
 	const char *variable_string;
 	const char *oldval;
 
@@ -190,14 +190,14 @@ subst_packagesite(const char *abi)
 	if ((variable_string = strstr(oldval, "${ABI}")) == NULL)
 		return;
 
-	newval = sbuf_new_auto();
-	sbuf_bcat(newval, oldval, variable_string - oldval);
-	sbuf_cat(newval, abi);
-	sbuf_cat(newval, variable_string + strlen("${ABI}"));
-	sbuf_finish(newval);
+	asprintf(&newval, "%.*s%s%s",
+	    (int)(variable_string - oldval), oldval, abi,
+	    variable_string + strlen("${ABI}"));
+	if (newval == NULL)
+		errx(EXIT_FAILURE, "asprintf");
 
 	free(c[PACKAGESITE].value);
-	c[PACKAGESITE].value = strdup(sbuf_data(newval));
+	c[PACKAGESITE].value = newval;
 }
 
 static int

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:29 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 33FEE634FAC;
 Wed,  5 May 2021 08:25:29 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXS5W46z3JyT;
 Wed,  5 May 2021 08:25:28 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A46CC21C00;
 Wed,  5 May 2021 08:25:28 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PSQV028781;
 Wed, 5 May 2021 08:25:28 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PSCw028780;
 Wed, 5 May 2021 08:25:28 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:28 GMT
Message-Id: <202105050825.1458PSCw028780@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 0543e10e950d - stable/12 - pkg(7): rework the arguments handling
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 0543e10e950dd5c8b17cdb7cf60b9f95aece094a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:29 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=0543e10e950dd5c8b17cdb7cf60b9f95aece094a

commit 0543e10e950dd5c8b17cdb7cf60b9f95aece094a
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-06 10:35:22 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:16:47 +0000

    pkg(7): rework the arguments handling
    
    Rework the arguments handling around using getopt_long:
    * add long option support
    * add -4 and -6 support to enforce ipv4 or ipv6
    
    While here fix a regression which occured between FreeBSD 12.1 and
    FreeBSD 12.2 where pkg bootstrap -y stopped working
    
    PR:             252270
    Submitted by:   evilham <contact@evilham.com>
    Differential Revision:  https://reviews.freebsd.org/D27860
    
    (cherry picked from commit ae994fdc5bd2ccc0ac0b8745fd1f1be67ad6e071)
---
 usr.sbin/pkg/pkg.7 |  25 ++++++++++--
 usr.sbin/pkg/pkg.c | 117 ++++++++++++++++++++++++++++++++++++-----------------
 2 files changed, 102 insertions(+), 40 deletions(-)

diff --git a/usr.sbin/pkg/pkg.7 b/usr.sbin/pkg/pkg.7
index f7116f5da828..c672306ac08d 100644
--- a/usr.sbin/pkg/pkg.7
+++ b/usr.sbin/pkg/pkg.7
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd November 6, 2020
+.Dd December 31, 2020
 .Dt PKG 7
 .Os
 .Sh NAME
@@ -36,12 +36,15 @@
 .Nm
 add
 .Op Fl f
+.Op Fl y
 .Ao Pa pkg.txz Ac
 .Nm
 .Fl N
 .Nm
+.Op Fl 4 | Fl 6
 bootstrap
 .Op Fl f
+.Op Fl y
 .Sh DESCRIPTION
 .Nm
 is the package management tool.
@@ -65,7 +68,7 @@ is not installed yet, it will be fetched, have its signature verified,
 installed, and then have the original command forwarded to it.
 If already installed, the command requested will be forwarded to the real
 .Xr pkg 8 .
-.It Nm Li add Oo Fl f Oc Ao Pa pkg.txz Ac
+.It Nm Li add Oo Fl f Oc Oo Fl y Oc Ao Pa pkg.txz Ac
 Install
 .Xr pkg 8
 from a local package instead of fetching from remote.
@@ -76,21 +79,37 @@ If the
 flag is specified, then
 .Xr pkg 8
 will be installed regardless if it is already installed.
+If the
+.Fl y
+flag is specified, no confirmation will be asked when bootstrapping
+.Xr pkg 8 .
 .It Nm Fl N
 Do not bootstrap, just determine if
 .Xr pkg 8
 is actually installed or not.
 Returns 0 and the number of packages installed
 if it is, otherwise 1.
-.It Nm Li bootstrap Op Fl f
+.It Nm Oo Fl 4 | Fl 6 Oc Li bootstrap Oo Fl f Oc Oo Fl y Oc
 Attempt to bootstrap and do not forward anything to
 .Xr pkg 8
 after it is installed.
+With
+.Fl 4
+and
+.Fl 6 ,
+.Nm
+will force IPv4 or IPv6 respectively to fetch
+.Xr pkg 8
+and its signatures as needed.
 If the
 .Fl f
 flag is specified, then
 .Xr pkg 8
 will be fetched and installed regardless if it is already installed.
+If the
+.Fl y
+flag is specified, no confirmation will be asked when bootstrapping
+.Xr pkg 8 .
 .El
 .Sh CONFIGURATION
 Configuration varies in whether it is in a repository configuration file
diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index 54eaf0882372..aa45a96683ec 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include <errno.h>
 #include <fcntl.h>
 #include <fetch.h>
+#include <getopt.h>
 #include <paths.h>
 #include <stdbool.h>
 #include <stdlib.h>
@@ -173,7 +174,7 @@ install_pkg_static(const char *path, const char *pkgpath, bool force)
 }
 
 static int
-fetch_to_fd(const char *url, char *path)
+fetch_to_fd(const char *url, char *path, const char *fetchOpts)
 {
 	struct url *u;
 	struct dns_srvinfo *mirrors, *current;
@@ -225,7 +226,7 @@ fetch_to_fd(const char *url, char *path)
 			u->port = current->port;
 		}
 
-		remote = fetchXGet(u, &st, "");
+		remote = fetchXGet(u, &st, fetchOpts);
 		if (remote == NULL) {
 			--retry;
 			if (retry <= 0)
@@ -825,7 +826,7 @@ cleanup:
 }
 
 static int
-bootstrap_pkg(bool force)
+bootstrap_pkg(bool force, const char *fetchOpts)
 {
 	int fd_pkg, fd_sig;
 	int ret;
@@ -862,7 +863,7 @@ bootstrap_pkg(bool force)
 	snprintf(tmppkg, MAXPATHLEN, "%s/pkg.txz.XXXXXX",
 	    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
 
-	if ((fd_pkg = fetch_to_fd(url, tmppkg)) == -1)
+	if ((fd_pkg = fetch_to_fd(url, tmppkg, fetchOpts)) == -1)
 		goto fetchfail;
 
 	if (signature_type != NULL &&
@@ -874,7 +875,7 @@ bootstrap_pkg(bool force)
 			snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz.sig",
 			    packagesite);
 
-			if ((fd_sig = fetch_to_fd(url, tmpsig)) == -1) {
+			if ((fd_sig = fetch_to_fd(url, tmpsig, fetchOpts)) == -1) {
 				fprintf(stderr, "Signature for pkg not "
 				    "available.\n");
 				goto fetchfail;
@@ -890,7 +891,7 @@ bootstrap_pkg(bool force)
 			snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz.pubkeysig",
 			    packagesite);
 
-			if ((fd_sig = fetch_to_fd(url, tmpsig)) == -1) {
+			if ((fd_sig = fetch_to_fd(url, tmpsig, fetchOpts)) == -1) {
 				fprintf(stderr, "Signature for pkg not "
 				    "available.\n");
 				goto fetchfail;
@@ -945,6 +946,14 @@ static const char non_interactive_message[] =
 "Please set ASSUME_ALWAYS_YES=yes environment variable to be able to bootstrap "
 "in non-interactive (stdin not being a tty)\n";
 
+static const char args_bootstrap_message[] =
+"Too many arguments\n"
+"Usage: pkg [-4|-6] bootstrap [-f] [-y]\n";
+
+static const char args_add_message[] =
+"Too many arguments\n"
+"Usage: pkg add [-f] [-y] {pkg.txz}\n";
+
 static int
 pkg_query_yes_no(void)
 {
@@ -1034,28 +1043,75 @@ main(int argc, char *argv[])
 {
 	char pkgpath[MAXPATHLEN];
 	const char *pkgarg;
-	int i;
-	bool bootstrap_only, force, yes;
+	bool activation_test, add_pkg, bootstrap_only, force, yes;
+	signed char ch;
+	const char *fetchOpts;
+	char *command;
 
+	activation_test = false;
+	add_pkg = false;
 	bootstrap_only = false;
+	command = NULL;
+	fetchOpts = "";
 	force = false;
 	pkgarg = NULL;
 	yes = false;
 
+	struct option longopts[] = {
+		{ "force",		no_argument,		NULL,	'f' },
+		{ "only-ipv4",		no_argument,		NULL,	'4' },
+		{ "only-ipv6",		no_argument,		NULL,	'6' },
+		{ "yes",		no_argument,		NULL,	'y' },
+		{ NULL,			0,			NULL,	0   },
+	};
+
 	snprintf(pkgpath, MAXPATHLEN, "%s/sbin/pkg",
 	    getenv("LOCALBASE") ? getenv("LOCALBASE") : _LOCALBASE);
 
-	if (argc > 1 && strcmp(argv[1], "bootstrap") == 0) {
-		bootstrap_only = true;
-		if (argc > 3) {
-			fprintf(stderr, "Too many arguments\nUsage: pkg bootstrap [-f]\n");
-			exit(EXIT_FAILURE);
-		}
-		if (argc == 3 && strcmp(argv[2], "-f") == 0) {
+	while ((ch = getopt_long(argc, argv, "-:fyN46", longopts, NULL)) != -1) {
+		switch (ch) {
+		case 'f':
 			force = true;
-		} else if (argc == 3) {
-			fprintf(stderr, "Invalid argument specified\nUsage: pkg bootstrap [-f]\n");
-			exit(EXIT_FAILURE);
+			break;
+		case 'N':
+			activation_test = true;
+			break;
+		case 'y':
+			yes = true;
+			break;
+		case '4':
+			fetchOpts = "4";
+			break;
+		case '6':
+			fetchOpts = "6";
+			break;
+		case 1:
+			// Non-option arguments, first one is the command
+			if (command == NULL) {
+				command = argv[optind-1];
+				if (strcmp(command, "add") == 0) {
+					add_pkg = true;
+				}
+				else if (strcmp(command, "bootstrap") == 0) {
+					bootstrap_only = true;
+				}
+			}
+			// bootstrap doesn't accept other arguments
+			else if (bootstrap_only) {
+				fprintf(stderr, args_bootstrap_message);
+				exit(EXIT_FAILURE);
+			}
+			// For add, we accept exactly one further argument
+			else if (add_pkg && pkgarg != NULL) {
+				fprintf(stderr, args_add_message);
+				exit(EXIT_FAILURE);
+			}
+			else if (add_pkg) {
+				pkgarg = argv[optind-1];
+			}
+			break;
+		default:
+			break;
 		}
 	}
 
@@ -1063,19 +1119,14 @@ main(int argc, char *argv[])
 		/* 
 		 * To allow 'pkg -N' to be used as a reliable test for whether
 		 * a system is configured to use pkg, don't bootstrap pkg
-		 * when that argument is given as argv[1].
+		 * when that that option is passed.
 		 */
-		if (argv[1] != NULL && strcmp(argv[1], "-N") == 0)
+		if (activation_test)
 			errx(EXIT_FAILURE, "pkg is not installed");
 
 		config_init();
 
-		if (argc > 1 && strcmp(argv[1], "add") == 0) {
-			if (argc > 2 && strcmp(argv[2], "-f") == 0) {
-				force = true;
-				pkgarg = argv[3];
-			} else
-				pkgarg = argv[2];
+		if (add_pkg) {
 			if (pkgarg == NULL) {
 				fprintf(stderr, "Path to pkg.txz required\n");
 				exit(EXIT_FAILURE);
@@ -1093,16 +1144,8 @@ main(int argc, char *argv[])
 		 * not tty. Check the environment to see if user has answer
 		 * tucked in there already.
 		 */
-		config_bool(ASSUME_ALWAYS_YES, &yes);
-		if (!yes) {
-			for (i = 1; i < argc; i++) {
-				if (strcmp(argv[i], "-y") == 0 ||
-				    strcmp(argv[i], "--yes") == 0) {
-					yes = true;
-					break;
-				}
-			}
-		}
+		if (!yes)
+			config_bool(ASSUME_ALWAYS_YES, &yes);
 		if (!yes) {
 			if (!isatty(fileno(stdin))) {
 				fprintf(stderr, non_interactive_message);
@@ -1113,7 +1156,7 @@ main(int argc, char *argv[])
 			if (pkg_query_yes_no() == 0)
 				exit(EXIT_FAILURE);
 		}
-		if (bootstrap_pkg(force) != 0)
+		if (bootstrap_pkg(force, fetchOpts) != 0)
 			exit(EXIT_FAILURE);
 		config_finish();
 

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:30 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0CAAB634FAE;
 Wed,  5 May 2021 08:25:30 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXT69vdz3K4Z;
 Wed,  5 May 2021 08:25:29 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C3A3E21A1F;
 Wed,  5 May 2021 08:25:29 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PTt7028813;
 Wed, 5 May 2021 08:25:29 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PTgR028812;
 Wed, 5 May 2021 08:25:29 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:29 GMT
Message-Id: <202105050825.1458PTgR028812@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: c669cd841847 - stable/12 - usr.sbin/pkg: Don't re-define roundup2
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: c669cd841847766952492eff0566210d35ce93f9
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:30 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=c669cd841847766952492eff0566210d35ce93f9

commit c669cd841847766952492eff0566210d35ce93f9
Author:     Alex Richardson <arichardson@FreeBSD.org>
AuthorDate: 2021-01-28 17:25:50 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:17:19 +0000

    usr.sbin/pkg: Don't re-define roundup2
    
    The file already includes sys/param.h and should use that definition.
    I found this while testing D28332.
    
    Reviewed By:    bapt
    Differential Revision: https://reviews.freebsd.org/D28331
---
 usr.sbin/pkg/config.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 69bdece6c1a9..68c3e7d63d1a 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -46,8 +46,6 @@ __FBSDID("$FreeBSD$");
 
 #include "config.h"
 
-#define roundup2(x, y)	(((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
-
 struct config_value {
        char *value;
        STAILQ_ENTRY(config_value) next;

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:31 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3D558634C56;
 Wed,  5 May 2021 08:25: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXW0M6fz3K4k;
 Wed,  5 May 2021 08:25:31 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E850721A20;
 Wed,  5 May 2021 08:25:30 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PUiW028834;
 Wed, 5 May 2021 08:25:30 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PU8Y028833;
 Wed, 5 May 2021 08:25:30 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:30 GMT
Message-Id: <202105050825.1458PU8Y028833@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 15ed3e7d70fc - stable/12 - pkg(7): add an -r reponame option for
 bootstrap and add
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 15ed3e7d70fc13273271f0fe454dc6d43bc6de6a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:31 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=15ed3e7d70fc13273271f0fe454dc6d43bc6de6a

commit 15ed3e7d70fc13273271f0fe454dc6d43bc6de6a
Author:     Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2021-02-12 00:58:26 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:17:31 +0000

    pkg(7): add an -r reponame option for bootstrap and add
    
    This is limited to bootstrap/add because some real pkg(8) commands
    have -r flags with an incompatible meaning/usage, e.g., pkg-audit.
    pkg(7) will still commence the search as it has, but it will ignore any
    repo objects without the given name so that overrides and whatnot still
    work as expected.
    
    The use of it for add is noted in the manpage; notably, that the
    signature config for that repository will be used over global config if
    it's specified. i.e., pkg(7) should assume that the given pkg did come
    from that repository and treat it appropriately.
    
    Reviewed by:    bapt, manu
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D28524
---
 usr.sbin/pkg/config.c | 24 +++++++++++++++---------
 usr.sbin/pkg/config.h |  2 +-
 usr.sbin/pkg/pkg.7    | 37 +++++++++++++++++++++++++++++++------
 usr.sbin/pkg/pkg.c    | 47 ++++++++++++++++++++++++++++++++++++++++++++---
 4 files changed, 91 insertions(+), 19 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 68c3e7d63d1a..cba8ff49e774 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -341,7 +341,7 @@ cleanup:
  * etc...
  */
 static void
-parse_repo_file(ucl_object_t *obj)
+parse_repo_file(ucl_object_t *obj, const char *requested_repo)
 {
 	ucl_object_iter_t it = NULL;
 	const ucl_object_t *cur;
@@ -356,13 +356,17 @@ parse_repo_file(ucl_object_t *obj)
 		if (cur->type != UCL_OBJECT)
 			continue;
 
+		if (requested_repo != NULL && strcmp(requested_repo, key) != 0)
+			continue;
+
 		config_parse(cur, CONFFILE_REPO);
 	}
 }
 
 
 static int
-read_conf_file(const char *confpath, pkg_conf_file_t conftype)
+read_conf_file(const char *confpath, const char *requested_repo,
+    pkg_conf_file_t conftype)
 {
 	struct ucl_parser *p;
 	ucl_object_t *obj = NULL;
@@ -386,7 +390,7 @@ read_conf_file(const char *confpath, pkg_conf_file_t conftype)
 		if (conftype == CONFFILE_PKG)
 			config_parse(obj, conftype);
 		else if (conftype == CONFFILE_REPO)
-			parse_repo_file(obj);
+			parse_repo_file(obj, requested_repo);
 	}
 
 	ucl_object_unref(obj);
@@ -396,7 +400,7 @@ read_conf_file(const char *confpath, pkg_conf_file_t conftype)
 }
 
 static int
-load_repositories(const char *repodir)
+load_repositories(const char *repodir, const char *requested_repo)
 {
 	struct dirent *ent;
 	DIR *d;
@@ -420,8 +424,10 @@ load_repositories(const char *repodir)
 			    repodir,
 			    repodir[strlen(repodir) - 1] == '/' ? "" : "/",
 			    ent->d_name);
-			if (access(path, F_OK) == 0 &&
-			    read_conf_file(path, CONFFILE_REPO)) {
+			if (access(path, F_OK) != 0)
+				continue;
+			if (read_conf_file(path, requested_repo,
+			    CONFFILE_REPO)) {
 				ret = 1;
 				goto cleanup;
 			}
@@ -435,7 +441,7 @@ cleanup:
 }
 
 int
-config_init(void)
+config_init(const char *requested_repo)
 {
 	char *val;
 	int i;
@@ -477,7 +483,7 @@ config_init(void)
 	snprintf(confpath, sizeof(confpath), "%s/etc/pkg.conf",
 	    localbase);
 
-	if (access(confpath, F_OK) == 0 && read_conf_file(confpath,
+	if (access(confpath, F_OK) == 0 && read_conf_file(confpath, NULL,
 	    CONFFILE_PKG))
 		goto finalize;
 
@@ -495,7 +501,7 @@ config_init(void)
 	}
 
 	STAILQ_FOREACH(cv, c[REPOS_DIR].list, next)
-		if (load_repositories(cv->value))
+		if (load_repositories(cv->value, requested_repo))
 			goto finalize;
 
 finalize:
diff --git a/usr.sbin/pkg/config.h b/usr.sbin/pkg/config.h
index b5553111c610..a813ceebc26b 100644
--- a/usr.sbin/pkg/config.h
+++ b/usr.sbin/pkg/config.h
@@ -59,7 +59,7 @@ typedef enum {
 	CONFFILE_REPO,
 } pkg_conf_file_t;
 
-int config_init(void);
+int config_init(const char *);
 void config_finish(void);
 int config_string(pkg_config_key, const char **);
 int config_bool(pkg_config_key, bool *);
diff --git a/usr.sbin/pkg/pkg.7 b/usr.sbin/pkg/pkg.7
index c672306ac08d..b92f5c9820cd 100644
--- a/usr.sbin/pkg/pkg.7
+++ b/usr.sbin/pkg/pkg.7
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 31, 2020
+.Dd February 7, 2021
 .Dt PKG 7
 .Os
 .Sh NAME
@@ -36,6 +36,7 @@
 .Nm
 add
 .Op Fl f
+.Op Fl r Ar reponame
 .Op Fl y
 .Ao Pa pkg.txz Ac
 .Nm
@@ -44,6 +45,7 @@ add
 .Op Fl 4 | Fl 6
 bootstrap
 .Op Fl f
+.Op Fl r Ar reponame
 .Op Fl y
 .Sh DESCRIPTION
 .Nm
@@ -68,7 +70,7 @@ is not installed yet, it will be fetched, have its signature verified,
 installed, and then have the original command forwarded to it.
 If already installed, the command requested will be forwarded to the real
 .Xr pkg 8 .
-.It Nm Li add Oo Fl f Oc Oo Fl y Oc Ao Pa pkg.txz Ac
+.It Nm Li add Oo Fl f Oc Oo Fl r Ar reponame Oc Oo Fl y Oc Ao Pa pkg.txz Ac
 Install
 .Xr pkg 8
 from a local package instead of fetching from remote.
@@ -83,13 +85,19 @@ If the
 .Fl y
 flag is specified, no confirmation will be asked when bootstrapping
 .Xr pkg 8 .
+.Pp
+If a
+.Ar reponame
+has been specified, then the signature configuration for that repository will be
+used.
 .It Nm Fl N
 Do not bootstrap, just determine if
 .Xr pkg 8
 is actually installed or not.
 Returns 0 and the number of packages installed
 if it is, otherwise 1.
-.It Nm Oo Fl 4 | Fl 6 Oc Li bootstrap Oo Fl f Oc Oo Fl y Oc
+.It Nm Oo Fl 4 | Fl 6 Oc Li bootstrap Oo Fl f Oc \
+Oo Fl r Ar reponame Oc Oo Fl y Oc
 Attempt to bootstrap and do not forward anything to
 .Xr pkg 8
 after it is installed.
@@ -110,14 +118,30 @@ If the
 .Fl y
 flag is specified, no confirmation will be asked when bootstrapping
 .Xr pkg 8 .
+.Pp
+If a
+.Ar reponame
+has been specified, then the configuration for that repository will be used.
 .El
 .Sh CONFIGURATION
 Configuration varies in whether it is in a repository configuration file
 or the global configuration file.
+The default repository configuration for
+.Fx
+is stored in
+.Pa /etc/pkg/FreeBSD.conf ,
+and additional repository configuration files will be searched for in
+.Ev REPOS_DIR ,
+or
+.Pa /usr/local/etc/pkg/repos
+if it is unset.
 .Pp
-Repository configuration can be stored in
-.Pa /etc/pkg/FreeBSD.conf
-in the following format:
+For bootstrapping,
+.Nm
+will process all repositories that it finds and use the last enabled repository
+by default.
+.Pp
+Repository configuration is stored in the following format:
 .Bd -literal -offset indent
 FreeBSD: {
   url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
@@ -127,6 +151,7 @@ FreeBSD: {
   enabled: yes
 }
 .Ed
+.Pp
 .Bl -tag -width signature_type -compact
 .It url
 Refer to
diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index aa45a96683ec..59348f7fc478 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -1042,7 +1042,7 @@ int
 main(int argc, char *argv[])
 {
 	char pkgpath[MAXPATHLEN];
-	const char *pkgarg;
+	const char *pkgarg, *repo_name;
 	bool activation_test, add_pkg, bootstrap_only, force, yes;
 	signed char ch;
 	const char *fetchOpts;
@@ -1055,6 +1055,7 @@ main(int argc, char *argv[])
 	fetchOpts = "";
 	force = false;
 	pkgarg = NULL;
+	repo_name = NULL;
 	yes = false;
 
 	struct option longopts[] = {
@@ -1068,7 +1069,7 @@ main(int argc, char *argv[])
 	snprintf(pkgpath, MAXPATHLEN, "%s/sbin/pkg",
 	    getenv("LOCALBASE") ? getenv("LOCALBASE") : _LOCALBASE);
 
-	while ((ch = getopt_long(argc, argv, "-:fyN46", longopts, NULL)) != -1) {
+	while ((ch = getopt_long(argc, argv, "-:fr::yN46", longopts, NULL)) != -1) {
 		switch (ch) {
 		case 'f':
 			force = true;
@@ -1085,6 +1086,46 @@ main(int argc, char *argv[])
 		case '6':
 			fetchOpts = "6";
 			break;
+		case 'r':
+			/*
+			 * The repository can only be specified for an explicit
+			 * bootstrap request at this time, so that we don't
+			 * confuse the user if they're trying to use a verb that
+			 * has some other conflicting meaning but we need to
+			 * bootstrap.
+			 *
+			 * For that reason, we specify that -r has an optional
+			 * argument above and process the next index ourselves.
+			 * This is mostly significant because getopt(3) will
+			 * otherwise eat the next argument, which could be
+			 * something we need to try and make sense of.
+			 *
+			 * At worst this gets us false positives that we ignore
+			 * in other contexts, and we have to do a little fudging
+			 * in order to support separating -r from the reponame
+			 * with a space since it's not actually optional in
+			 * the bootstrap/add sense.
+			 */
+			if (add_pkg || bootstrap_only) {
+				if (optarg != NULL) {
+					repo_name = optarg;
+				} else if (optind < argc) {
+					repo_name = argv[optind];
+				}
+
+				if (repo_name == NULL || *repo_name == '\0') {
+					fprintf(stderr,
+					    "Must specify a repository with -r!\n");
+					exit(EXIT_FAILURE);
+				}
+
+				if (optarg == NULL) {
+					/* Advance past repo name. */
+					optreset = 1;
+					optind++;
+				}
+			}
+			break;
 		case 1:
 			// Non-option arguments, first one is the command
 			if (command == NULL) {
@@ -1124,7 +1165,7 @@ main(int argc, char *argv[])
 		if (activation_test)
 			errx(EXIT_FAILURE, "pkg is not installed");
 
-		config_init();
+		config_init(repo_name);
 
 		if (add_pkg) {
 			if (pkgarg == NULL) {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:32 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id DCD72635028;
 Wed,  5 May 2021 08:25:32 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXX1pZgz3Jyq;
 Wed,  5 May 2021 08:25:32 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1AA332175E;
 Wed,  5 May 2021 08:25:32 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PVvZ028855;
 Wed, 5 May 2021 08:25:31 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PVML028854;
 Wed, 5 May 2021 08:25:31 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:31 GMT
Message-Id: <202105050825.1458PVML028854@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: eabdd103a155 - stable/12 - pkg(7): when bootstrapping first
 search for pkg.pkg file then pkg.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: eabdd103a155f8c643ab7504cd509fc607b9fd64
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:33 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=eabdd103a155f8c643ab7504cd509fc607b9fd64

commit eabdd103a155f8c643ab7504cd509fc607b9fd64
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-03-12 17:36:30 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:19:58 +0000

    pkg(7): when bootstrapping first search for pkg.pkg file then pkg.
    
    The package extension is going to be changed to .pkg to be among other
    things resilient to the change of compression format used and reduce
    the impact of all third party tool of that change.
    
    Ensure the bootstrap knows about it
    
    Reviewed by:    manu
    Differential revision:  https://reviews.freebsd.org/D29232
    
    (cherry picked from commit a2aac2f5e5642740507a3cadb98046f3dd434ce4)
    (cherry picked from commit c244b1d8a38731041d0f3ff4191192a85dd8608b)
---
 usr.sbin/pkg/pkg.c | 43 +++++++++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index 59348f7fc478..c499fb28c42d 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -84,6 +84,12 @@ struct fingerprint {
 	STAILQ_ENTRY(fingerprint) next;
 };
 
+static const char *bootstrap_names []  = {
+	"pkg.pkg",
+	"pkg.txz",
+	NULL
+};
+
 STAILQ_HEAD(fingerprint_list, fingerprint);
 
 static int
@@ -836,6 +842,7 @@ bootstrap_pkg(bool force, const char *fetchOpts)
 	const char *packagesite;
 	const char *signature_type;
 	char pkgstatic[MAXPATHLEN];
+	const char *bootstrap_name;
 
 	fd_sig = -1;
 	ret = -1;
@@ -858,22 +865,29 @@ bootstrap_pkg(bool force, const char *fetchOpts)
 	if (strncmp(URL_SCHEME_PREFIX, packagesite,
 	    strlen(URL_SCHEME_PREFIX)) == 0)
 		packagesite += strlen(URL_SCHEME_PREFIX);
-	snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz", packagesite);
-
-	snprintf(tmppkg, MAXPATHLEN, "%s/pkg.txz.XXXXXX",
-	    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
-
-	if ((fd_pkg = fetch_to_fd(url, tmppkg, fetchOpts)) == -1)
+	for (int j = 0; bootstrap_names[j] != NULL; j++) {
+		bootstrap_name = bootstrap_names[j];
+
+		snprintf(url, MAXPATHLEN, "%s/Latest/%s", packagesite, bootstrap_name);
+		snprintf(tmppkg, MAXPATHLEN, "%s/%s.XXXXXX",
+		    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP,
+		    bootstrap_name);
+		if ((fd_pkg = fetch_to_fd(url, tmppkg, fetchOpts)) != -1)
+			break;
+		bootstrap_name = NULL;
+	}
+	if (bootstrap_name == NULL)
 		goto fetchfail;
 
 	if (signature_type != NULL &&
 	    strcasecmp(signature_type, "NONE") != 0) {
 		if (strcasecmp(signature_type, "FINGERPRINTS") == 0) {
 
-			snprintf(tmpsig, MAXPATHLEN, "%s/pkg.txz.sig.XXXXXX",
-			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
-			snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz.sig",
-			    packagesite);
+			snprintf(tmpsig, MAXPATHLEN, "%s/%s.sig.XXXXXX",
+			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP,
+			    bootstrap_name);
+			snprintf(url, MAXPATHLEN, "%s/Latest/%s.sig",
+			    packagesite, bootstrap_name);
 
 			if ((fd_sig = fetch_to_fd(url, tmpsig, fetchOpts)) == -1) {
 				fprintf(stderr, "Signature for pkg not "
@@ -886,10 +900,11 @@ bootstrap_pkg(bool force, const char *fetchOpts)
 		} else if (strcasecmp(signature_type, "PUBKEY") == 0) {
 
 			snprintf(tmpsig, MAXPATHLEN,
-			    "%s/pkg.txz.pubkeysig.XXXXXX",
-			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP);
-			snprintf(url, MAXPATHLEN, "%s/Latest/pkg.txz.pubkeysig",
-			    packagesite);
+			    "%s/%s.pubkeysig.XXXXXX",
+			    getenv("TMPDIR") ? getenv("TMPDIR") : _PATH_TMP,
+			    bootstrap_name);
+			snprintf(url, MAXPATHLEN, "%s/Latest/%s.pubkeysig",
+			    packagesite, bootstrap_name);
 
 			if ((fd_sig = fetch_to_fd(url, tmpsig, fetchOpts)) == -1) {
 				fprintf(stderr, "Signature for pkg not "

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:33 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8568D63502B;
 Wed,  5 May 2021 08:25:33 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXY2M6Yz3K9G;
 Wed,  5 May 2021 08:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 367D621B9A;
 Wed,  5 May 2021 08:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PXbt028876;
 Wed, 5 May 2021 08:25:33 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PXS1028875;
 Wed, 5 May 2021 08:25:33 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:33 GMT
Message-Id: <202105050825.1458PXS1028875@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 1c6e6d014ae4 - stable/12 - pkg(7): indentation fixes
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 1c6e6d014ae45650cfbc961198423e8dd172cc39
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:33 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=1c6e6d014ae45650cfbc961198423e8dd172cc39

commit 1c6e6d014ae45650cfbc961198423e8dd172cc39
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-27 02:07:05 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:20:29 +0000

    pkg(7): indentation fixes
    
    Non functional changes
    
    (cherry picked from commit f648d757b76d70d58bbda7c3ed3ff79261d24d0f)
---
 usr.sbin/pkg/config.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index cba8ff49e774..3b411859e9c4 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -47,8 +47,8 @@ __FBSDID("$FreeBSD$");
 #include "config.h"
 
 struct config_value {
-       char *value;
-       STAILQ_ENTRY(config_value) next;
+	char *value;
+	STAILQ_ENTRY(config_value) next;
 };
 
 struct config_entry {

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:25:35 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 14E8F634CBA;
 Wed,  5 May 2021 08:25:35 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqXZ3BV0z3Jyx;
 Wed,  5 May 2021 08:25:34 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 48BD521B9B;
 Wed,  5 May 2021 08:25:34 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458PY95028897;
 Wed, 5 May 2021 08:25:34 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458PY7J028896;
 Wed, 5 May 2021 08:25:34 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:25:34 GMT
Message-Id: <202105050825.1458PY7J028896@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 527a1eda9db8 - stable/12 - pkg(7): replace usage of sbuf(9) with
 open_memstream(3)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 527a1eda9db8fada53b1434f71f12546fbaf16a4
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:25:35 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=527a1eda9db8fada53b1434f71f12546fbaf16a4

commit 527a1eda9db8fada53b1434f71f12546fbaf16a4
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-27 02:38:55 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:20:29 +0000

    pkg(7): replace usage of sbuf(9) with open_memstream(3)
    
    open_memstream(3) is a standard way to obtain the same feature we do get
    by using sbuf(9) (aka dynamic size buffer), switching to using it makes
    pkg(7) more portable, and reduces its number of dependencies.
    
    Reviewed by:    manu
    Differential Revision:  https://reviews.freebsd.org/D30005
    
    (cherry picked from commit cc9a8a116d19daf224222506441e91a3d329160e)
---
 usr.sbin/pkg/Makefile |  1 +
 usr.sbin/pkg/config.c | 33 +++++++++++++++----------
 usr.sbin/pkg/pkg.c    | 67 +++++++++++++++++++++++++++------------------------
 3 files changed, 56 insertions(+), 45 deletions(-)

diff --git a/usr.sbin/pkg/Makefile b/usr.sbin/pkg/Makefile
index ebfb71c1699b..725367ad4485 100644
--- a/usr.sbin/pkg/Makefile
+++ b/usr.sbin/pkg/Makefile
@@ -26,5 +26,6 @@ MAN=	pkg.7
 CFLAGS+=-I${SRCTOP}/contrib/libucl/include
 .PATH:	${SRCTOP}/contrib/libucl/include
 LIBADD=	archive fetch ucl sbuf crypto ssl
+LIBADD=	archive fetch ucl crypto ssl
 
 .include <bsd.prog.mk>
diff --git a/usr.sbin/pkg/config.c b/usr.sbin/pkg/config.c
index 3b411859e9c4..f29bd586f338 100644
--- a/usr.sbin/pkg/config.c
+++ b/usr.sbin/pkg/config.c
@@ -33,7 +33,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/queue.h>
 #include <sys/utsname.h>
-#include <sys/sbuf.h>
 #include <sys/sysctl.h>
 
 #include <dirent.h>
@@ -212,7 +211,9 @@ boolstr_to_bool(const char *str)
 static void
 config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 {
-	struct sbuf *buf = sbuf_new_auto();
+	FILE *buffp;
+	char *buf = NULL;
+	size_t bufsz = 0;
 	const ucl_object_t *cur, *seq, *tmp;
 	ucl_object_iter_t it = NULL, itseq = NULL, it_obj = NULL;
 	struct config_entry *temp_config;
@@ -223,39 +224,44 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 
 	/* Temporary config for configs that may be disabled. */
 	temp_config = calloc(CONFIG_SIZE, sizeof(struct config_entry));
+	buffp = open_memstream(&buf, &bufsz);
+	if (buffp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
 
 	while ((cur = ucl_iterate_object(obj, &it, true))) {
 		key = ucl_object_key(cur);
 		if (key == NULL)
 			continue;
-		sbuf_clear(buf);
+		if (buf != NULL)
+			memset(buf, 0, bufsz);
+		rewind(buffp);
 
 		if (conftype == CONFFILE_PKG) {
 			for (j = 0; j < strlen(key); ++j)
-				sbuf_putc(buf, toupper(key[j]));
-			sbuf_finish(buf);
+				fputc(toupper(key[j]), buffp);
+			fflush(buffp);
 		} else if (conftype == CONFFILE_REPO) {
 			if (strcasecmp(key, "url") == 0)
-				sbuf_cpy(buf, "PACKAGESITE");
+				fputs("PACKAGESITE", buffp);
 			else if (strcasecmp(key, "mirror_type") == 0)
-				sbuf_cpy(buf, "MIRROR_TYPE");
+				fputs("MIRROR_TYPE", buffp);
 			else if (strcasecmp(key, "signature_type") == 0)
-				sbuf_cpy(buf, "SIGNATURE_TYPE");
+				fputs("SIGNATURE_TYPE", buffp);
 			else if (strcasecmp(key, "fingerprints") == 0)
-				sbuf_cpy(buf, "FINGERPRINTS");
+				fputs("FINGERPRINTS", buffp);
 			else if (strcasecmp(key, "pubkey") == 0)
-				sbuf_cpy(buf, "PUBKEY");
+				fputs("PUBKEY", buffp);
 			else if (strcasecmp(key, "enabled") == 0) {
 				if ((cur->type != UCL_BOOLEAN) ||
 				    !ucl_object_toboolean(cur))
 					goto cleanup;
 			} else
 				continue;
-			sbuf_finish(buf);
+			fflush(buffp);
 		}
 
 		for (i = 0; i < CONFIG_SIZE; i++) {
-			if (strcmp(sbuf_data(buf), c[i].key) == 0)
+			if (strcmp(buf, c[i].key) == 0)
 				break;
 		}
 
@@ -330,7 +336,8 @@ config_parse(const ucl_object_t *obj, pkg_conf_file_t conftype)
 
 cleanup:
 	free(temp_config);
-	sbuf_delete(buf);
+	fclose(buffp);
+	free(buf);
 }
 
 /*-
diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index c499fb28c42d..da3498438fa1 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -33,7 +33,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/queue.h>
 #include <sys/types.h>
-#include <sys/sbuf.h>
 #include <sys/wait.h>
 
 #include <archive.h>
@@ -595,7 +594,9 @@ static struct pubkey *
 read_pubkey(int fd)
 {
 	struct pubkey *pk;
-	struct sbuf *sig;
+	char *sigb;
+	size_t sigsz;
+	FILE *sig;
 	char buf[4096];
 	int r;
 
@@ -604,18 +605,22 @@ read_pubkey(int fd)
 		return (NULL);
 	}
 
-	sig = sbuf_new_auto();
+	sigsz = 0;
+	sigb = NULL;
+	sig = open_memstream(&sigb, &sigsz);
+	if (sig == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
 
 	while ((r = read(fd, buf, sizeof(buf))) >0) {
-		sbuf_bcat(sig, buf, r);
+		fwrite(buf, 1, r, sig);
 	}
 
-	sbuf_finish(sig);
+	fclose(sig);
 	pk = calloc(1, sizeof(struct pubkey));
-	pk->siglen = sbuf_len(sig);
+	pk->siglen = sigsz;
 	pk->sig = calloc(1, pk->siglen);
-	memcpy(pk->sig, sbuf_data(sig), pk->siglen);
-	sbuf_delete(sig);
+	memcpy(pk->sig, sigb, pk->siglen);
+	free(sigb);
 
 	return (pk);
 }
@@ -624,16 +629,17 @@ static struct sig_cert *
 parse_cert(int fd) {
 	int my_fd;
 	struct sig_cert *sc;
-	FILE *fp;
-	struct sbuf *buf, *sig, *cert;
+	FILE *fp, *sigfp, *certfp, *tmpfp;
 	char *line;
-	size_t linecap;
+	char *sig, *cert;
+	size_t linecap, sigsz, certsz;
 	ssize_t linelen;
 
-	buf = NULL;
 	sc = NULL;
 	line = NULL;
 	linecap = 0;
+	sig = cert = NULL;
+	sigfp = certfp = tmpfp = NULL;
 
 	if (lseek(fd, 0, 0) == -1) {
 		warn("lseek");
@@ -652,41 +658,38 @@ parse_cert(int fd) {
 		return (NULL);
 	}
 
-	sig = sbuf_new_auto();
-	cert = sbuf_new_auto();
+	sigsz = certsz = 0;
+	sigfp = open_memstream(&sig, &sigsz);
+	if (sigfp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
+	certfp = open_memstream(&cert, &certsz);
+	if (certfp == NULL)
+		err(EXIT_FAILURE, "open_memstream()");
 
 	while ((linelen = getline(&line, &linecap, fp)) > 0) {
 		if (strcmp(line, "SIGNATURE\n") == 0) {
-			buf = sig;
+			tmpfp = sigfp;
 			continue;
 		} else if (strcmp(line, "CERT\n") == 0) {
-			buf = cert;
+			tmpfp = certfp;
 			continue;
 		} else if (strcmp(line, "END\n") == 0) {
 			break;
 		}
-		if (buf != NULL)
-			sbuf_bcat(buf, line, linelen);
+		if (tmpfp != NULL)
+			fwrite(line, 1, linelen, tmpfp);
 	}
 
 	fclose(fp);
-
-	/* Trim out unrelated trailing newline */
-	sbuf_setpos(sig, sbuf_len(sig) - 1);
-
-	sbuf_finish(sig);
-	sbuf_finish(cert);
+	fclose(sigfp);
+	fclose(certfp);
 
 	sc = calloc(1, sizeof(struct sig_cert));
-	sc->siglen = sbuf_len(sig);
-	sc->sig = calloc(1, sc->siglen);
-	memcpy(sc->sig, sbuf_data(sig), sc->siglen);
-
-	sc->certlen = sbuf_len(cert);
-	sc->cert = strdup(sbuf_data(cert));
+	sc->siglen = sigsz -1; /* Trim out unrelated trailing newline */
+	sc->sig = sig;
 
-	sbuf_delete(sig);
-	sbuf_delete(cert);
+	sc->certlen = certsz;
+	sc->cert = cert;
 
 	return (sc);
 }

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:32:31 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id EAF5C6353BF;
 Wed,  5 May 2021 08:32: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqhb6Mwxz3KrS;
 Wed,  5 May 2021 08:32:31 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CD7C121C30;
 Wed,  5 May 2021 08:32:31 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458WVk8042534;
 Wed, 5 May 2021 08:32:31 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458WVFc042533;
 Wed, 5 May 2021 08:32:31 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:32:31 GMT
Message-Id: <202105050832.1458WVFc042533@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 1481f6337235 - stable/13 - pci_vendors: update to 2021.01.11
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 1481f63372358dfc7d8d84f9d41df8ac7dcfbc26
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:32:32 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=1481f63372358dfc7d8d84f9d41df8ac7dcfbc26

commit 1481f63372358dfc7d8d84f9d41df8ac7dcfbc26
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-28 08:19:50 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:30:27 +0000

    pci_vendors: update to 2021.01.11
    
    (cherry picked from commit f59810e34bae867059163cb9f651e074043fcec8)
---
 share/misc/pci_vendors | 104 +++++++++++++++++++++++++++++++++++++------------
 1 file changed, 79 insertions(+), 25 deletions(-)

diff --git a/share/misc/pci_vendors b/share/misc/pci_vendors
index 61b9069d9ca7..c5b923d463af 100644
--- a/share/misc/pci_vendors
+++ b/share/misc/pci_vendors
@@ -1,8 +1,8 @@
 #
 #	List of PCI ID's
 #
-#	Version: 2020.12.26
-#	Date:    2020-12-26 03:15:02
+#	Version: 2021.01.11
+#	Date:    2021-01-11 03:15:01
 #
 #	Maintained by Albert Pool, Martin Mares, and other volunteers from
 #	the PCI ID Project at https://pci-ids.ucw.cz/.
@@ -953,6 +953,7 @@
 	1478  Navi 10 XL Upstream Port of PCI Express Switch
 	1479  Navi 10 XL Downstream Port of PCI Express Switch
 	154c  Kryptos [Radeon RX 350]
+		1462 7c28  MS-7C28 Motherboard
 	154e  Garfield
 	1551  Arlene
 	1552  Pooky
@@ -963,7 +964,7 @@
 		ea50 cc10  RXi2-BP
 	15dd  Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
 		103c 83c6  Radeon Vega 8 Mobile
-		1043 876b  PRIME B450M-A Motherboard
+		1043 876b  PRIME Motherboard
 		1458 d000  Radeon RX Vega 11
 		ea50 cc10  RXi2-BP
 	15de  Raven/Raven2/Fenghuang HDMI/DP Audio Controller
@@ -977,6 +978,9 @@
 	15ff  Fenghuang [Zhongshan Subor Z+]
 	1607  Arden
 	1636  Renoir
+	1638  Cezanne
+	163f  VanGogh
+	164c  Lucienne
 	1714  BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
 		103c 168b  ProBook 4535s
 	3150  RV380/M24 [Mobility Radeon X600]
@@ -1766,7 +1770,7 @@
 	5964  RV280 [Radeon 9200 SE]
 		1002 5964  Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz
 		1043 c006  Radeon 9200 SE / TD / 128M
-		1458 4018  Radeon 9200 SE
+		1458 4018  R92S128T (Radeon 9200 SE 128MB)
 		1458 4032  Radeon 9200 SE 128MB
 		147b 6191  R9200SE-DT
 		148c 2073  CN-AG92E
@@ -1855,7 +1859,7 @@
 		1002 5c63  Apple iBook G4 2004
 		144d c00c  P30 notebook
 	5d44  RV280 [Radeon 9200 SE] (Secondary)
-		1458 4019  Radeon 9200 SE (Secondary)
+		1458 4019  R92S128T (Radeon 9200 SE 128MB Secondary)
 		1458 4032  Radeon 9200 SE 128MB
 		147b 6190  R9200SE-DT (Secondary)
 		174b 7c12  Radeon 9200 SE (Secondary)
@@ -1994,9 +1998,9 @@
 	6667  Jet ULT [Radeon R5 M230]
 	666f  Sun LE [Radeon HD 8550M / R5 M230]
 	66a0  Vega 20 [Radeon Instinct]
-	66a1  Vega 20
+	66a1  Vega 20 WKS GL-XE [Radeon Pro VII]
 	66a2  Vega 20
-	66a3  Vega 20
+	66a3  Vega 20 [Radeon Pro Vega II/Radeon Pro Vega II Duo]
 	66a7  Vega 20 [Radeon Pro Vega 20]
 	66af  Vega 20 [Radeon VII]
 	6704  Cayman PRO GL [FirePro V7900]
@@ -2623,6 +2627,7 @@
 		1462 3418  Radeon RX 580 Armor 4G OC
 		1462 341b  Radeon RX 570 Armor 8G OC
 		1462 341e  Radeon RX 570 Armor 4G OC
+		1462 809e  Radeon RX 480 4GB
 		1462 8a92  Radeon RX 580
 		148c 2372  Radeon RX 480 [Red Dragon]
 		148c 2373  Radeon RX 470
@@ -2904,7 +2909,12 @@
 	6864  Vega 10 [Radeon Pro V340]
 	6867  Vega 10 XL [Radeon Pro Vega 56]
 	6868  Vega 10 [Radeon PRO WX 8100/8200]
+	6869  Vega 10 XGA [Radeon Pro Vega 48]
+	686a  Vega 10 LEA
+	686b  Vega 10 XTXA [Radeon Pro Vega 64X]
 	686c  Vega 10 [Radeon Instinct MI25 MxGPU]
+	686d  Vega 10 GLXTA
+	686e  Vega 10 GLXLA
 	687f  Vega 10 XL/XT [Radeon RX Vega 56/64]
 		1002 0b36  RX Vega64
 		1002 6b76  RX Vega64
@@ -3155,6 +3165,7 @@
 		17af 3000  Radeon HD 6510
 		17af 3010  Radeon HD 5630
 	68da  Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570]
+		1462 8071  VR5550-MD1G (Radeon HD 5550)
 		148c 3000  Radeon HD 6390
 		148c 3001  Radeon HD 6490
 		1545 7570  Radeon HD 7570
@@ -3602,6 +3613,9 @@
 	7347  Navi 14 [Radeon Pro W5500M]
 	734f  Navi 14 [Radeon Pro W5300M]
 	7360  Navi 12 [Radeon Pro 5600M]
+	7388  Arcturus GL-XL
+	738c  Arcturus GL-XL [AMD Instinct MI100]
+	738e  Arcturus GL-XL
 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
 	73c3  Navi 22
 	73df  Navi 22
@@ -4677,6 +4691,7 @@
 	149b  Starship Reserved SSP
 	149c  Matisse USB 3.0 Host Controller
 		1462 7c37  X570-A PRO motherboard
+	149d  Vangogh CVIP
 	1510  Family 14h Processor Root Complex
 		174b 1001  PURE Fusion Mini
 	1512  Family 14h Processor Root Port
@@ -4776,17 +4791,17 @@
 	15dc  Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
 	15de  Raven/Raven2/FireFlight HD Audio Controller
 	15df  Family 17h (Models 10h-1fh) Platform Security Processor
-		1043 876b  PRIME B450M-A Motherboard
+		1043 876b  PRIME Motherboard
 		17aa 5124  ThinkPad E595
 		ea50 ce19  mCOM10-L1900
 	15e0  Raven USB 3.1
 		103c 8615  Pavilion Laptop 15-cw1xxx
-		1043 876b  PRIME B450M-A Motherboard
+		1043 876b  PRIME Motherboard
 		17aa 5124  ThinkPad E595
 		ea50 ce19  mCOM10-L1900
 	15e1  Raven USB 3.1
 		103c 8615  Pavilion Laptop 15-cw1xxx
-		1043 876b  PRIME B450M-A Motherboard
+		1043 876b  PRIME Motherboard
 		17aa 5124  ThinkPad E595
 		ea50 ce19  mCOM10-L1900
 	15e2  Raven/Raven2/FireFlight/Renoir Audio Processor
@@ -4862,6 +4877,8 @@
 	1642  Renoir WLAN
 	1643  Renoir BT
 	1644  Renoir I2S
+	1648  VanGogh Root Complex
+	1649  VanGogh PSP/CCP
 	1700  Family 12h/14h Processor Function 0
 	1701  Family 12h/14h Processor Function 1
 	1702  Family 12h/14h Processor Function 2
@@ -5060,7 +5077,7 @@
 	7900  FCH SATA Controller [IDE mode]
 	7901  FCH SATA Controller [AHCI mode]
 		103c 8615  Pavilion Laptop 15-cw1xxx
-		1043 876b  PRIME B450M-A Motherboard
+		1043 876b  PRIME Motherboard
 		1462 7c37  X570-A PRO motherboard
 		ea50 ce19  mCOM10-L1900
 	7902  FCH SATA Controller [RAID mode]
@@ -5070,7 +5087,7 @@
 	7908  FCH USB EHCI Controller
 	790b  FCH SMBus Controller
 		103c 8615  Pavilion Laptop 15-cw1xxx
-		1043 876b  PRIME B450M-A Motherboard
+		1043 876b  PRIME Motherboard
 		1462 7c37  X570-A PRO motherboard
 		17aa 5124  ThinkPad E595
 		ea50 ce19  mCOM10-L1900
@@ -5664,6 +5681,7 @@
 		1931 000a  GlobeTrotter Fusion Quad Lite (PPP data)
 		1931 000b  GlobeTrotter Fusion Quad Lite (GSM data)
 		807d 0035  PCI-USB2 (OHCI subsystem)
+		8086 4d44  D850EMV2 motherboard
 	003b  PCI to C-bus Bridge
 	003e  NAPCCARD Cardbus Controller
 	0046  PowerVR PCX2 [midas]
@@ -5694,6 +5712,7 @@
 		14c2 0205  PTI-205N USB 2.0 Host Controller
 		1799 0002  Root Hub
 		807d 1043  PCI-USB2 (EHCI subsystem)
+		8086 4d44  D850EMV2 motherboard
 	00e7  uPD72873 [Firewarden] IEEE1394a OHCI 1.1 Link/2-port PHY Controller
 	00f2  uPD72874 [Firewarden] IEEE1394a OHCI 1.1 Link/3-port PHY Controller
 	00f3  uPD6113x Multimedia Decoder/Processor [EMMA2]
@@ -11911,6 +11930,7 @@
 	1aeb  TU116 High Definition Audio Controller
 	1aec  TU116 USB 3.1 Host Controller
 	1aed  TU116 USB Type-C UCSI Controller
+	1aef  GA102 High Definition Audio Controller
 	1b00  GP102 [TITAN X]
 	1b01  GP102 [GeForce GTX 1080 Ti 10GB]
 	1b02  GP102 [TITAN Xp]
@@ -12142,6 +12162,7 @@
 	2192  TU116M [GeForce GTX 1650 Ti Mobile]
 	21ae  TU116GL
 	21bf  TU116GL
+	21c2  TU116
 	21c4  TU116 [GeForce GTX 1660 SUPER]
 	21d1  TU116BM [GeForce GTX 1660 Ti Mobile]
 	2204  GA102 [GeForce RTX 3090]
@@ -12164,9 +12185,11 @@
 	2486  GA104 [GeForce RTX 3060 Ti]
 	249c  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 	249d  GA104M [GeForce RTX 3070 Mobile / Max-Q]
+	249f  GA104M
 	24ac  GA104 [GeForce RTX 30x0 Engineering Sample]
 	24ad  GA104 [GeForce RTX 3060 Engineering Sample]
 	24af  GA104 [GeForce RTX 3070 Engineering Sample]
+	24b6  GA104
 	24bf  GA104 [GeForce RTX 3070 Engineering Sample]
 	24dc  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 	24dd  GA104M [GeForce RTX 3070 Mobile / Max-Q]
@@ -12558,7 +12581,7 @@
 		ea50 ce19  mCOM10-L1900
 	816c  RTL8111xP IPMI interface
 		ea50 ce19  mCOM10-L1900
-	816d  RTL8111xP EHCI host controller
+	816d  RTL811x EHCI host controller
 		ea50 ce19  mCOM10-L1900
 	8171  RTL8191SEvA Wireless LAN Controller
 	8172  RTL8191SEvB Wireless LAN Controller
@@ -12622,6 +12645,7 @@
 	5005  Alveo U250
 	7038  FPGA Card XC7VX690T
 		17aa 402f  FPGA XC7VX690T-3FFG1157E
+	8019  Memory controller
 	8380  Ellips ProfiXpress Profibus Master
 	8381  Ellips Santos Frame Grabber
 	d154  Copley Controls CAN card (PCI-CAN-02)
@@ -16254,6 +16278,7 @@
 	8888  IT8888F/G PCI to ISA Bridge with SMB [Golden Gate]
 	8889  IT8889F PCI to ISA Bridge
 	8892  IT8892E PCIe to PCI Bridge
+		8086 200d  DH61CR motherboard
 	8893  IT8893E PCIe to PCI Bridge
 	e886  IT8330G
 1284  Sahara Networks, Inc.
@@ -19167,6 +19192,7 @@
 	1805  BCM57508 NetXtreme-E RDMA Partition
 	1806  BCM5750X NetXtreme-E Ethernet Virtual Function
 	1807  BCM5750X NetXtreme-E RDMA Virtual Function
+	2711  BCM2711 PCIe Bridge
 	3352  BCM3352
 	3360  BCM3360
 	4210  BCM4210 iLine10 HomePNA 2.0
@@ -21361,6 +21387,7 @@
 	0400  Datacenter Technologies QDF2432 PCI Express Root Port
 	0401  Datacenter Technologies QDF2400 PCI Express Root Port
 	1000  QCS405 PCIe Root Complex
+	1101  QCA6390 Wireless Network Adapter [AX500-DBS (2x2)]
 17cc  NetChip Technology, Inc
 	2280  USB 2.0
 17cd  Cadence Design Systems, Inc.
@@ -22816,8 +22843,9 @@
 	9192  88SE9172 SATA III 6Gb/s RAID Controller
 	91a0  88SE912x SATA 6Gb/s Controller [IDE mode]
 	91a4  88SE912x IDE Controller
+	9215  88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
 	9220  88SE9220 PCIe 2.0 x2 2-port SATA 6 Gb/s RAID Controller
-	9230  88SE9230 PCIe SATA 6Gb/s Controller
+	9230  88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller
 		1028 1fd6  BOSS-S1 Adapter
 		1028 1fdf  BOSS-S1 Modular
 		1028 1fe2  BOSS-S1 Adapter
@@ -23060,10 +23088,9 @@
 	2839  PE8000 Series NVMe Solid State Drive
 		1c5c 0100  PE8000 Series NVMe Solid State Drive
 1c5f  Beijing Memblaze Technology Co. Ltd.
-	000d  PBlaze5 520/526 AIC
-	003d  PBlaze5 920/926 AIC
-	010d  PBlaze5 520/526 U.2
-	013d  PBlaze5 920/926 U.2
+	000d  PBlaze5 520/526
+	003d  PBlaze5 920/926
+	003e  PBlaze6 6920
 	0540  PBlaze4 NVMe SSD
 	0550  PBlaze5 700/900
 	0555  PBlaze5 510/516
@@ -23509,6 +23536,7 @@
 	0002  T11 [CloudBlazer]
 	0003  T10s [CloudBlazer]
 	8011  I10 [CloudBlazer]
+	8012  I10L [CloudBlazer]
 # nee Thinci, Inc
 1e38  Blaize, Inc
 	0102  Xplorer X1600
@@ -23549,7 +23577,7 @@
 	1601  NVMe SSD Controller MAP1601
 1e4c  GSI Technology
 # Associative Processing Unit (APU)
-	0010  APU [Leda-G]
+	0010  APU [Leda]
 		1e4c 0120  SE120
 1e57  Beijing Panyi Technology Co., Ltd
 	0100  The device has already been deleted.
@@ -24408,6 +24436,7 @@
 	0100  2nd Generation Core Processor Family DRAM Controller
 		1028 04aa  XPS 8300
 		1043 844d  P8P67/P8H67 Series Motherboard
+		8086 200d  DH61CR motherboard
 	0101  Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port
 		1028 04b2  Vostro 3350
 		106b 00dc  MacBookPro8,2 [Core i7, 15", 2011]
@@ -24487,6 +24516,7 @@
 		1043 844d  P8B WS Motherboard
 	0172  Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
 	0176  3rd Gen Core processor Graphics Controller
+	0201  Arctic Sound
 	0284  Comet Lake PCH-LP LPC Premium Controller/eSPI Controller
 	02a3  Comet Lake PCH-LP SMBus Host Controller
 	02a4  Comet Lake SPI (flash) Controller
@@ -26147,6 +26177,7 @@
 	1503  82579V Gigabit Network Connection
 		1043 849c  P8P67 Deluxe Motherboard
 		10cf 161c  LIFEBOOK E752
+		8086 200d  DH61CR motherboard
 	1507  Ethernet Express Module X520-P2
 	1508  82598EB Gigabit BX Network Connection
 	1509  82580 Gigabit Network Connection
@@ -26704,7 +26735,7 @@
 	18a0  C4xxx Series QAT
 	18a1  C4XXX Series QAT Virtual Function
 	1900  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
-	1901  6th-9th Gen Core Processor PCIe Controller (x16)
+	1901  6th-10th Gen Core Processor PCIe Controller (x16)
 	1902  HD Graphics 510
 	1903  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem
 		1028 06d6  Latitude 7275 tablet
@@ -26717,6 +26748,7 @@
 		1028 06dc  Latitude E7470
 		1028 06f3  Latitude 3570
 		103c 8079  EliteBook 840 G3
+		17aa 2247  ThinkPad T570
 		17aa 382a  B51-80 Laptop
 	1905  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8)
 	1906  HD Graphics 510
@@ -26862,6 +26894,7 @@
 	1c02  6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller
 		1028 04aa  XPS 8300
 		1043 844d  P8 series motherboard
+		8086 200d  DH61CR motherboard
 		8086 7270  Server Board S1200BT Family
 	1c03  6 Series/C200 Series Chipset Family 6 port Mobile SATA AHCI Controller
 		1028 04a3  Precision M4600
@@ -26912,6 +26945,7 @@
 		17aa 21cf  ThinkPad T520
 # Realtek ALC888 audio codec
 		8086 2008  DQ67SW board
+		8086 200d  DH61CR motherboard
 		8086 7270  Apple MacBookPro8,2 [Core i7, 15", 2011]
 	1c22  6 Series/C200 Series Chipset Family SMBus Controller
 		1028 04a3  Precision M4600
@@ -26920,6 +26954,7 @@
 		1028 04da  Vostro 3750
 		1043 844d  P8 series motherboard
 		17aa 21cf  ThinkPad T520
+		8086 200d  DH61CR motherboard
 		8086 7270  Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2
 	1c24  6 Series/C200 Series Chipset Family Thermal Management Controller
 	1c25  6 Series/C200 Series Chipset Family DMI to PCI Bridge
@@ -26930,6 +26965,7 @@
 		1028 04da  Vostro 3750
 		1043 844d  P8 series motherboard
 		17aa 21cf  ThinkPad T520
+		8086 200d  DH61CR motherboard
 		8086 7270  Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2
 	1c27  6 Series/C200 Series Chipset Family USB Universal Host Controller #1
 		8086 7270  Apple MacBookPro8,2 [Core i7, 15", 2011]
@@ -26942,6 +26978,7 @@
 		1028 04da  Vostro 3750
 		1043 844d  P8 series motherboard
 		17aa 21cf  ThinkPad T520
+		8086 200d  DH61CR motherboard
 		8086 7270  Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2
 	1c33  6 Series/C200 Series Chipset Family LAN Controller
 	1c35  6 Series/C200 Series Chipset Family VECI Controller
@@ -26952,6 +26989,7 @@
 		1028 04da  Vostro 3750
 		1043 844d  P8 series motherboard
 		17aa 21cf  ThinkPad T520
+		8086 200d  DH61CR motherboard
 		8086 7270  Apple MacBookPro8,2 [Core i7, 15", 2011]
 	1c3b  6 Series/C200 Series Chipset Family MEI Controller #2
 	1c3c  6 Series/C200 Series Chipset Family IDE-r Controller
@@ -26995,6 +27033,7 @@
 	1c5a  Upgraded Q67 Express Chipset LPC Controller
 	1c5b  6 Series/C200 Series Chipset Family LPC Controller
 	1c5c  H61 Express Chipset LPC Controller
+		8086 200d  DH61CR motherboard
 	1c5d  6 Series/C200 Series Chipset Family LPC Controller
 	1c5e  6 Series/C200 Series Chipset Family LPC Controller
 	1c5f  6 Series/C200 Series Chipset Family LPC Controller
@@ -27458,6 +27497,7 @@
 		147b 0507  TH7II-RAID
 		8086 4532  Desktop Board D815EEA2/D815EFV
 		8086 4557  D815EGEW Mainboard
+		8086 4d44  D850EMV2 motherboard
 		8086 5744  S845WD1-E mainboard
 	2443  82801BA/BAM SMBus Controller
 		1014 01c6  Netvista A40/A40p
@@ -27499,6 +27539,7 @@
 		147b 0507  TH7II-RAID
 		8086 4557  D815EGEW Mainboard
 		8086 4656  Desktop Board D815EFV
+		8086 4d44  D850EMV2 motherboard
 	2446  82801BA/BAM AC'97 Modem Controller
 		1025 1016  Travelmate 612 TX
 		104d 80df  Vaio PCG-FX403
@@ -27573,6 +27614,7 @@
 		15d9 3280  Supermicro P4SBE Mainboard
 		8086 4532  Desktop Board D815EEA2/D815EFV
 		8086 4557  D815EGEW Mainboard
+		8086 4d44  D850EMV2 motherboard
 		8086 5744  S845WD1-E mainboard
 	244c  82801BAM ISA Bridge (LPC)
 	244e  82801 PCI Bridge
@@ -30817,7 +30859,8 @@
 	3e81  8th Gen Core Processor PCIe Controller (x16)
 	3e85  8th Gen Core Processor PCIe Controller (x8)
 	3e89  8th Gen Core Processor PCIe Controller (x4)
-	3e91  8th Gen Core Processor Gaussian Mixture Model
+	3e90  UHD Graphics 610
+	3e91  UHD Graphics 630
 	3e92  UHD Graphics 630 (Desktop)
 		1028 0869  Vostro 3470
 	3e93  UHD Graphics 610
@@ -30966,7 +31009,16 @@
 		8086 1316  WiMAX/WiFi Link 5150 ABG
 	444e  Turbo Memory Controller
 	467f  Volume Management Device NVMe RAID Controller
+	4680  AlderLake-S GT1
+	46a0  AlderLake-P GT2
+	4905  DG1 [Iris Xe MAX Graphics]
+	4906  DG1 [Iris Xe Pod]
+	4907  SG1 [Server GPU SG-18M]
+	4908  DG1 [Iris Xe Graphics]
 	4c3d  Volume Management Device NVMe RAID Controller
+	4f80  DG2
+	4f81  DG2
+	4f82  DG2
 	5001  LE80578
 	5002  LE80578 Graphics Processor Unit
 	5009  LE80578 Video Display Controller
@@ -31714,15 +31766,17 @@
 	9a2f  Tiger Lake-H Thunderbolt 4 PCI Express Root Port #2
 	9a31  Tiger Lake-H Thunderbolt 4 PCI Express Root Port #3
 	9a33  Tiger Lake Trace Hub
-	9a49  Iris Xe Graphics
-	9b41  UHD Graphics
+	9a49  TigerLake GT2 [Iris Xe Graphics]
+	9b41  CometLake-U GT2 [UHD Graphics]
 	9b44  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b53  Comet Lake-S 6c Host Bridge/DRAM Controller
 	9b54  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b61  Comet Lake-U v1 4c Host Bridge/DRAM Controller
+	9b63  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b64  10th Gen Core Processor Host Bridge/DRAM Registers
-	9bc4  UHD Graphics
-	9bc8  UHD Graphics 630
+	9bc4  CometLake-H GT2 [UHD Graphics]
+	9bc5  CometLake-S GT2 [UHD Graphics 630]
+	9bc8  CometLake-S GT2 [UHD Graphics 630]
 	9c00  8 Series SATA Controller 1 [IDE mode]
 	9c01  8 Series SATA Controller 1 [IDE mode]
 	9c02  8 Series SATA Controller 1 [AHCI mode]

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:32:33 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2B09C6351EA;
 Wed,  5 May 2021 08:32:33 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqhd0GM9z3KZX;
 Wed,  5 May 2021 08:32:33 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EE7EB21A51;
 Wed,  5 May 2021 08:32:32 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458WWk8042555;
 Wed, 5 May 2021 08:32:32 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458WWEx042554;
 Wed, 5 May 2021 08:32:32 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:32:32 GMT
Message-Id: <202105050832.1458WWEx042554@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: ad616f3e385f - stable/13 - pci_vendors: update to 2021.02.20
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: ad616f3e385fe00bee1ddc7e3f2482a64ba917e7
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:32:33 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=ad616f3e385fe00bee1ddc7e3f2482a64ba917e7

commit ad616f3e385fe00bee1ddc7e3f2482a64ba917e7
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-02-21 05:09:03 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:30:36 +0000

    pci_vendors: update to 2021.02.20
    
    (cherry picked from commit e6bb49f12ca7a2dc103d69d4c70e1504195f70a6)
---
 share/misc/pci_vendors | 349 ++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 275 insertions(+), 74 deletions(-)

diff --git a/share/misc/pci_vendors b/share/misc/pci_vendors
index c5b923d463af..35692066d391 100644
--- a/share/misc/pci_vendors
+++ b/share/misc/pci_vendors
@@ -1,8 +1,8 @@
 #
 #	List of PCI ID's
 #
-#	Version: 2021.01.11
-#	Date:    2021-01-11 03:15:01
+#	Version: 2021.02.20
+#	Date:    2021-02-20 03:15:02
 #
 #	Maintained by Albert Pool, Martin Mares, and other volunteers from
 #	the PCI ID Project at https://pci-ids.ucw.cz/.
@@ -705,8 +705,7 @@
 		1d49 0200  ThinkSystem 430-8i SAS/SATA 12Gb HBA
 		1d49 0202  ThinkSystem 430-8e SAS/SATA 12Gb HBA
 		1d49 0204  ThinkSystem 430-8i SAS/SATA 12Gb Dense HBA
-# PCIe switch SES management endpoint
-	00b2  PEX880xx PCIe Gen 4 Switch SES management endpoint
+	00b2  PCIe Switch management endpoint
 		1d49 0003  ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter
 	00be  SAS3504 Fusion-MPT Tri-Mode RAID On Chip (ROC)
 	00bf  SAS3404 Fusion-MPT Tri-Mode I/O Controller Chip (IOC)
@@ -1163,6 +1162,7 @@
 		1179 ff50  Satellite P305D-S8995E
 		1458 a022  GA-MA770-DS3rev2.0 Motherboard
 		1458 a102  GA-880GMA-USB3
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		17f2 5000  KI690-AM2 Motherboard
 	4384  SBx00 PCI to PCI Bridge
 	4385  SBx00 SMBus Controller
@@ -1175,6 +1175,7 @@
 		1179 ff50  Satellite P305D-S8995E
 		1458 4385  GA-MA770-DS3rev2.0 Motherboard
 		1462 7368  K9AG Neo2
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		15d9 a811  H8DGU
 		174b 1001  PURE Fusion Mini
 		17f2 5000  KI690-AM2 Motherboard
@@ -1225,6 +1226,7 @@
 		1043 8389  M4A785TD Motherboard
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
 		1458 b002  GA-MA770-DS3rev2.0 Motherboard
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		1849 4390  Motherboard (one of many)
 	4391  SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
 		103c 1609  ProLiant MicroServer N36L
@@ -1248,6 +1250,7 @@
 		1043 8443  M5A88-V EVO
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
 		1458 5004  GA-880GMA-USB3
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		15d9 a811  H8DGU
 		174b 1001  PURE Fusion Mini
 	4397  SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
@@ -1258,12 +1261,14 @@
 		1043 8443  M5A88-V EVO
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
 		1458 5004  GA-880GMA-USB3
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		15d9 a811  H8DGU
 		174b 1001  PURE Fusion Mini
 	4398  SB7x0 USB OHCI1 Controller
 		1019 2120  A785GM-M
 		1043 82ef  M3A78-EH Motherboard
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		15d9 a811  H8DGU
 	4399  SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
 		1019 2120  A785GM-M
@@ -1271,6 +1276,7 @@
 		1043 8443  M5A88-V EVO
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
 		1458 5004  GA-880GMA-USB3
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		174b 1001  PURE Fusion Mini
 	439c  SB7x0/SB8x0/SB9x0 IDE Controller
 		1002 4392  MSI MS-7713 motherboard
@@ -1278,6 +1284,7 @@
 		103c 1609  ProLiant MicroServer N36L
 		1043 82ef  M3A78-EH Motherboard
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
+		1462 7596  760GM-E51(MS-7596) Motherboard
 	439d  SB7x0/SB8x0/SB9x0 LPC host controller
 		1019 2120  A785GM-M
 		103c 1609  ProLiant MicroServer N36L
@@ -1285,6 +1292,7 @@
 		1043 82ef  M3A78-EH Motherboard
 		1043 8443  M5A88-V EVO
 		105b 0e13  N15235/A74MX mainboard / AMD SB700
+		1462 7596  760GM-E51(MS-7596) Motherboard
 		174b 1001  PURE Fusion Mini
 	43a0  SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0)
 	43a1  SB700/SB800/SB900 PCI to PCI bridge (PCIE port 1)
@@ -1913,6 +1921,7 @@
 	6607  Mars LE [Radeon HD 8530M / R5 M240]
 	6608  Oland GL [FirePro W2100]
 		13cc 3d28  MXRT-2600
+	6609  Oland GL [FirePro W2100 / Barco MXRT 2600]
 	6610  Oland XT [Radeon HD 8670 / R7 250/350]
 		1019 0030  Radeon HD 8670
 		1028 2120  Radeon R7 250
@@ -2592,6 +2601,7 @@
 		1043 04dd  STRIX R9 390
 		148c 2358  Radeon R9 390
 		174b e324  Sapphire Nitro R9 390
+	67b8  Hawaii XT [Radeon R9 290X Engineering Sample]
 	67b9  Vesuvius [Radeon R9 295X2]
 	67be  Hawaii LE
 	67c0  Ellesmere [Radeon Pro WX 7100 Mobile]
@@ -3617,8 +3627,10 @@
 	738c  Arcturus GL-XL [AMD Instinct MI100]
 	738e  Arcturus GL-XL
 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
+		1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
 	73c3  Navi 22
 	73df  Navi 22
+	73e0  Navi 23
 	73ff  Navi 23
 	7833  RS350 Host Bridge
 	7834  RS350 [Radeon 9100 PRO/XT IGP]
@@ -3827,6 +3839,7 @@
 	95cd  RV620 GL [FirePro 2450]
 	95cf  RV620 GL [FirePro 2260]
 	960f  RS780 HDMI Audio [Radeon 3000/3100 / HD 3200/3300]
+		1462 7596  760GM-E51(MS-7596) Motherboard
 	9610  RS780 [Radeon HD 3200]
 		1458 d000  GA-MA78GM-S2H Motherboard
 	9611  RS780C [Radeon 3100]
@@ -3835,6 +3848,8 @@
 	9614  RS780D [Radeon HD 3300]
 	9615  RS780E [Radeon HD 3200]
 	9616  RS780L [Radeon 3000]
+# ID is probably a copy-paste error by a MSI developer from another mainboard, since all other ID numbers on this mainboard including the sub-device of this device has used subsystem ID 1462:7596
+		1462 7501  760GM-E51(MS-7596) Motherboard
 	9640  Sumo [Radeon HD 6550D]
 	9641  Sumo [Radeon HD 6620G]
 	9642  SuperSumo [Radeon HD 6370D]
@@ -4169,12 +4184,12 @@
 		2646 0001  KNE100TX Fast Ethernet
 	000a  21230 Video Codec
 	000d  PBXGB [TGA2]
-	000f  DEFPA FDDI PCI-to-PDQ Interface Chip [PFI]
-		1011 def1  FDDI controller (DEFPA)
-		103c def1  FDDI controller (3X-DEFPA)
+	000f  PCI-to-PDQ Interface Chip [PFI] FDDI (DEFPA)
+		1011 def1  FDDIcontroller/PCI (DEFPA)
+		103c def1  FDDIcontroller/PCI (3X-DEFPA)
 	0014  DECchip 21041 [Tulip Pass 3]
 		1186 0100  DE-530+
-	0016  DGLPB [OPPO]
+	0016  ATMworks 350 Adapter [OPPO] (DGLPB)
 	0017  PV-PCI Graphics Controller (ZLXp-L)
 	0018  Memory Channel interface
 	0019  DECchip 21142/43
@@ -4637,6 +4652,7 @@
 	1450  Family 17h (Models 00h-0fh) Root Complex
 	1451  Family 17h (Models 00h-0fh) I/O Memory Management Unit
 	1452  Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
+		ea50 ce19  mCOM10-L1900
 	1453  Family 17h (Models 00h-0fh) PCIe GPP Bridge
 	1454  Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
 	1455  Zeppelin/Renoir PCIe Dummy Function
@@ -4788,7 +4804,9 @@
 	15d5  FireFlight USB 3.1
 	15da  Raven/Raven2 PCIe Dummy Host Bridge
 	15db  Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
+		ea50 ce19  mCOM10-L1900
 	15dc  Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
+		ea50 ce19  mCOM10-L1900
 	15de  Raven/Raven2/FireFlight HD Audio Controller
 	15df  Family 17h (Models 10h-1fh) Platform Security Processor
 		1043 876b  PRIME Motherboard
@@ -4938,6 +4956,7 @@
 	2096  CS5536 [Geode companion] UDC
 	2097  CS5536 [Geode companion] UOC
 	209a  CS5536 [Geode companion] IDE
+	2625  AMD Lance/PCI PCNet/32
 	3000  ELanSC520 Microcontroller
 	43a0  Hudson PCI to PCI bridge (PCIE port 0)
 	43a1  Hudson PCI to PCI bridge (PCIE port 1)
@@ -7057,6 +7076,7 @@
 		103c 17e8  SN1000Q 16Gb Dual Port Fibre Channel Adapter
 		103c 1939  QMH2672 16Gb Dual Port Fibre Channel Adapter
 		103c 8002  3830C 16G Fibre Channel Host Bus Adapter
+		1077 0241  QLE2670 16Gb Single Port Fibre Channel Adapter
 	2071  ISP2714-based 16/32Gb Fibre Channel to PCIe Adapter
 		1077 0283  QLE2764 Quad Port 32Gb Fibre Channel to PCIe Adapter
 		1077 029e  QLE2694 Quad Port 16Gb Fibre Channel to PCIe Adapter
@@ -7065,6 +7085,9 @@
 	2081  ISP2814-based 64/32G Fibre Channel to PCIe Controller
 		1077 02e1  QLE2874 Quad Port 64GFC PCIe Gen4 x16 Adapter
 		1077 02e3  QLE2774 Quad Port 32GFC PCIe Gen4 x16 Adapter
+	2089  ISP2854-based 64/32G Fibre Channel to PCIe Controller with StorCryption
+		1077 02e8  QLE2884 Quad Port 64GFC PCIe Gen4 x16 Adapter with StorCryption
+		1077 02ea  QLE2784 Quad Port 32GFC PCIe Gen4 x16 Adapter with StorCryption
 	2100  QLA2100 64-bit Fibre Channel Adapter
 		1077 0001  QLA2100 64-bit Fibre Channel Adapter
 	2200  QLA2200 64-bit Fibre Channel Adapter
@@ -7085,6 +7108,7 @@
 		1590 0203  StoreFabric SN1600Q 32Gb Single Port Fibre Channel Host Bus Adapter
 		1590 0204  StoreFabric SN1600Q 32Gb Dual Port Fibre Channel Host Bus Adapter
 		1590 022d  5830C 32Gb Dual Port Fibre Channel Adapter
+		193d 100d  NIC-FC680i-Mb-2x16G
 	2281  ISP2812-based 64/32G Fibre Channel to PCIe Controller
 		1077 02e2  QLE2872 Dual Port 64GFC PCIe Gen4 x8 Adapter
 		1077 02e4  QLE2772 Dual Port 32GFC PCIe Gen4 x8 Adapter
@@ -7094,6 +7118,11 @@
 		1077 02f3  QLogic 2x32Gb QLE2772 FC HBA
 		1590 02d3  SN1610Q - 1P Enhanced 32GFC Single Port Fibre Channel Host Bus Adapter
 		1590 02d4  SN1610Q – 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter
+	2289  ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption
+		1077 02e9  QLE2882 Dual Port 64GFC PCIe Gen4 x8 Adapter with StorCryption
+		1077 02eb  QLE2782 Dual Port 32GFC PCIe Gen4 x8 Adapter with StorCryption
+		1077 02ef  QLE2880 Single Port 64GFC PCIe Gen4 x8 Adapter with StorCryption
+		1077 02f1  QLE2780 Single Port 32GFC PCIe Gen4 x8 Adapter with StorCryption
 	2300  QLA2300 64-bit Fibre Channel Adapter
 	2312  ISP2312-based 2Gb Fibre Channel to PCI-X HBA
 		103c 0131  2Gb Fibre Channel - Single port [A7538A]
@@ -7186,6 +7215,8 @@
 		1590 021f  10/25GbE 2P QL41262HMCU-HP Adapter
 		1590 0220  10/25GbE 2P QL41122HLRJ-HP Adapter
 		1590 02bd  10Gb 2P 524SFP+ NIC
+		193d 1030  NIC-ETH681i-Mb-2x25G
+		193d 1032  NIC-ETH682i-Mb-2x25G
 	8080  FastLinQ QL41000 Series 10/25/40/50GbE Controller (FCoE)
 		1077 0001  10GE 2P QL41162HxRJ-DE Adapter
 		1077 0002  10GE 2P QL41112HxCU-DE Adapter
@@ -11994,8 +12025,8 @@
 	1c2d  GP106M
 	1c30  GP106GL [Quadro P2000]
 	1c31  GP106GL [Quadro P2200]
-	1c35  GP106
-	1c36  GP106
+	1c35  GP106M [Quadro P2000 Mobile]
+	1c36  GP106 [P106M]
 	1c60  GP106BM [GeForce GTX 1060 Mobile 6GB]
 		103c 8390  GeForce GTX 1060 Max-Q 6GB
 	1c61  GP106BM [GeForce GTX 1050 Ti Mobile]
@@ -12141,6 +12172,7 @@
 	1f98  TU117M [GeForce MX450]
 	1f99  TU117M
 	1f9c  TU117M [GeForce MX450]
+	1f9d  TU117M [GeForce GTX 1650 Mobile / Max-Q]
 	1fae  TU117GL
 	1fb8  TU117GLM [Quadro T2000 Mobile / Max-Q]
 	1fb9  TU117GLM [Quadro T1000 Mobile]
@@ -12150,6 +12182,7 @@
 	1ff9  TU117GLM [Quadro T1000 Mobile]
 	20b0  GA100 [A100 SXM4 40GB]
 	20b1  GA100 [A100 PCIe 40GB]
+	20b2  GA100 [A100 SXM4 80GB]
 	20be  GA100 [GRID A100A]
 	20bf  GA100 [GRID A100B]
 	20f1  GA100 [A100 PCIe 40GB]
@@ -12175,6 +12208,7 @@
 	222f  GA102 [GeForce RTX 3080 11GB / 12GB Engineering Sample]
 	2230  GA102GL [RTX A6000]
 	2235  GA102GL [RTX A40]
+	2236  GA102GL
 	223f  GA102GL
 	228b  GA104 High Definition Audio Controller
 	2321  GA103
@@ -12190,16 +12224,20 @@
 	24ad  GA104 [GeForce RTX 3060 Engineering Sample]
 	24af  GA104 [GeForce RTX 3070 Engineering Sample]
 	24b6  GA104
+	24b8  GA104
 	24bf  GA104 [GeForce RTX 3070 Engineering Sample]
 	24dc  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 	24dd  GA104M [GeForce RTX 3070 Mobile / Max-Q]
-	2501  GA106 [GeForce RTX 3060 12GB]
-	2503  GA106 [GeForce RTX 3060 6GB]
+	2501  GA106 [GeForce RTX 3060]
+	2503  GA106 [GeForce RTX 3060]
 	2505  GA106
 	2520  GA106M [GeForce RTX 3060 Mobile / Max-Q]
 	252f  GA106 [GeForce RTX 3060 Engineering Sample]
 	2560  GA106M [GeForce RTX 3060 Mobile / Max-Q]
 	2583  GA107 [GeForce RTX 3050]
+	25a0  GA107M [GeForce RTX 3050 Ti Mobile]
+	25a2  GA107M [GeForce RTX 3050 Mobile]
+	25a4  GA107
 	25af  GA107 [GeForce RTX 3050 Engineering Sample]
 10df  Emulex Corporation
 	0720  OneConnect NIC (Skyhawk)
@@ -12261,6 +12299,7 @@
 		1590 0213  StoreFabric SN1200E 1-Port 16Gb Fibre Channel Adapter
 		1590 0214  StoreFabric SN1200E 2-Port 16Gb Fibre Channel Adapter
 		1590 022e  Synergy 5330C 2-Port 32Gb Fibre Channel Mezz Card
+		193d 1060  NIC-FC730i-Mb-2P
 	f011  Saturn: LightPulse Fibre Channel Host Adapter
 	f015  Saturn: LightPulse Fibre Channel Host Adapter
 	f085  LP850 Fibre Channel Host Adapter
@@ -12521,6 +12560,7 @@
 		1028 0283  Vostro 220
 		1028 04b2  Vostro 3350
 		1028 04da  Vostro 3750
+		1028 05d7  Alienware X51 R2
 		1028 06f2  Latitude 3470
 		1028 06f3  Latitude 3570
 		1028 0869  Vostro 3470
@@ -12930,12 +12970,12 @@
 	0336  K8M890CE Host Bridge
 	0340  PT900 Host Bridge
 	0351  K8T890CF Host Bridge
-	0353  VX800 Host Bridge
+	0353  VX800/820-Series Chipset Host-Bridge Controller
 	0364  CN896/VN896/P4M900 Host Bridge
 		1043 81ce  P5VD2-VM mothervoard
 	0391  VT8371 [KX133]
 	0409  VX855/VX875 Host Bridge: Host Control
-	0410  VX900 Host Bridge: Host Control
+	0410  VX900 Series Host Bridge: Host Control
 	0415  VT6415 PATA IDE Host Controller
 		1043 838f  Motherboard
 	0501  VT8501 [Apollo MVP4]
@@ -12962,7 +13002,7 @@
 # probably all K7VT2/4*/6
 		1849 0571  K7VT series Motherboards
 	0576  VT82C576 3V [Apollo Master]
-	0581  CX700/VX700 RAID Controller
+	0581  CX700/VX700/VX800/820-Series Serial ATA RAID-Controller
 # Upgrade bios to get correct ID: 5324 instead of 0581
 		1106 0581  Wrong IDE ID
 	0585  VT82C585VP [Apollo VP1/VPX]
@@ -13028,7 +13068,7 @@
 	1353  VX800/VX820 Error Reporting
 	1364  CN896/VN896/P4M900 Host Bridge
 	1409  VX855/VX875 Error Reporting
-	1410  VX900 Error Reporting
+	1410  VX900 Series Error Reporting
 	1571  VT82C576M/VT82C586
 	1595  VT82C595/97 [Apollo VP2/97]
 	1732  VT1732 [Envy24 II] PCI Multi-Channel Audio Controller
@@ -13053,7 +13093,7 @@
 	2353  VX800/VX820 Host Bus Control
 	2364  CN896/VN896/P4M900 Host Bridge
 	2409  VX855/VX875 Host Bus Control
-	2410  VX900 CPU Bus Controller
+	2410  VX900 Series CPU Bus Controller
 	287a  VT8251 PCI to PCI Bridge
 	287b  VT8251 Host Bridge
 	287c  VT8251 PCIE Root Port
@@ -13186,7 +13226,7 @@
 	3101  VT8653 Host Bridge
 	3102  VT8662 Host Bridge
 	3103  VT8615 Host Bridge
-	3104  USB 2.0
+	3104  USB 2.0 EHCI-Compliant Host-Controller
 		0925 1234  onboard EHCI USB 2.0 Controller
 		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
 		1043 808c  A7V8X motherboard
@@ -13299,7 +13339,7 @@
 	3269  KT880 Host Bridge
 	3282  K8T800Pro Host Bridge
 	3287  VT8251 PCI to ISA Bridge
-	3288  VT8237A/VT8251 HDA Controller
+	3288  VX900/VT8xxx High Definition Audio Controller
 		19da a179  ZBOX VD01
 	3290  K8M890 Host Bridge
 	3296  P4M800 Host Bridge
@@ -13312,7 +13352,7 @@
 	3344  CN700/P4M800 Pro/P4M800 CE/VN800 Graphics [S3 UniChrome Pro]
 	3349  VT8251 AHCI/SATA 4-Port Controller
 	3351  VT3351 Host Bridge
-	3353  VX800 PCI to PCI Bridge
+	3353  VX800/820 PCI to PCI Bridge
 	3364  CN896/VN896/P4M900 Host Bridge
 	3371  CN896/VN896/P4M900 [Chrome 9 HC]
 	3372  VT8237S PCI to ISA Bridge
@@ -13322,12 +13362,12 @@
 		1043 8374  M5A88-V EVO
 		1043 8384  P8P67 Deluxe Motherboard
 	3409  VX855/VX875 DRAM Bus Control
-	3410  VX900 DRAM Bus Control
+	3410  VX900 Series DRAM Bus Control
 		19da a179  ZBOX nano VD01
-	3432  VL80x xHCI USB 3.0 Controller
+	3432  VL800/801 xHCI USB 3.0 Controller
 	3456  VX11 Standard Host Bridge
 	345b  VX11 Miscellaneous Bus
-	3483  VL805 USB 3.0 Host Controller
+	3483  VL805/806 xHCI USB 3.0 Controller
 	3a01  VX11 Graphics [Chrome 645/640]
 	4149  VIA VT6420 (ATA133) Controller
 	4204  K8M800 Host Bridge
@@ -13350,7 +13390,7 @@
 	4353  VX800/VX820 Power Management Control
 	4364  CN896/VN896/P4M900 Host Bridge
 	4409  VX855/VX875 Power Management Control
-	4410  VX900 Power Management and Chip Testing Control
+	4410  VX900 Series Power Management and Chip Testing Control
 		19da a179  ZBOX nano VD01
 	5030  VT82C596 ACPI [Apollo PRO]
 	5122  VX855/VX875 Chrome 9 HCM Integrated Graphics
@@ -13359,7 +13399,7 @@
 	5287  VT8251 Serial ATA Controller
 	5290  K8M890 I/O APIC Interrupt Controller
 	5308  PT894 I/O APIC Interrupt Controller
-	5324  VX800 Serial ATA and EIDE Controller
+	5324  CX700M2/VX700/VX800/820-Series Serial ATA & EIDE-Controller
 	5327  P4M890 I/O APIC Interrupt Controller
 	5336  K8M890CE I/O APIC Interrupt Controller
 	5340  PT900 I/O APIC Interrupt Controller
@@ -13368,7 +13408,7 @@
 	5364  CN896/VN896/P4M900 I/O APIC Interrupt Controller
 	5372  VT8237/8251 Serial ATA Controller
 	5409  VX855/VX875 APIC and Central Traffic Control
-	5410  VX900 APIC and Central Traffic Control
+	5410  VX900 Series APIC and Central Traffic Control
 	6100  VT85C100A [Rhine II]
 	6287  SATA RAID Controller
 	6290  K8M890CE Host Bridge
@@ -13376,7 +13416,7 @@
 	6353  VX800/VX820 Scratch Registers
 	6364  CN896/VN896/P4M900 Security Device
 	6409  VX855/VX875 Scratch Registers
-	6410  VX900 Scratch Registers
+	6410  VX900 Series Scratch Registers
 		19da a179  ZBOX nano VD01
 	7122  VX900 Graphics [Chrome9 HD]
 	7204  K8M800 Host Bridge
@@ -13402,7 +13442,7 @@
 	7353  VX800/VX820 North-South Module Interface Control
 	7364  CN896/VN896/P4M900 Host Bridge
 	7409  VX855/VX875 North-South Module Interface Control
-	7410  VX900 North-South Module Interface Control
+	7410  VX900 Series North-South Module Interface Control
 		19da a179  ZBOX nano VD01
 	8231  VT8231 [PCI-to-ISA Bridge]
 	8235  VT8235 ACPI
@@ -13412,7 +13452,7 @@
 	8391  VT8371 [KX133 AGP]
 	8400  MVP4
 	8409  VX855/VX875 Bus Control and Power Management
-	8410  VX900 Bus Control and Power Management
+	8410  VX900 Series Bus Control and Power Management
 		19da a179  ZBOX VD01
 	8500  KLE133/PLE133/PLE133T
 	8501  VT8501 [Apollo MVP4 AGP]
@@ -13428,19 +13468,19 @@
 	8a26  KL133/KL133A/KM133/KM133A [S3 ProSavage]
 	8d01  PN133/PN133T [S3 Twister]
 	8d04  KM266/P4M266/P4M266A/P4N266 [S3 ProSavageDDR]
-	9001  VX900 Serial ATA Controller
+	9001  VX900 Series Serial-ATA Controller
 	9082  Standard AHCI 1.0 SATA Controller
 	9140  HDMI Audio Device
 	9201  USB3.0 Controller
-	9530  Secure Digital Memory Card Controller
-	95d0  SDIO Host Controller
+	9530  VX800/820/900 Series Secure Digital Memory Card Controller
+	95d0  VX800/820/900 Series SDIO Host Controller
 	a208  PT890 PCI to PCI Bridge Controller
 	a238  K8T890 PCI to PCI Bridge Controller
 	a327  P4M890 PCI to PCI Bridge Controller
-	a353  VX8xx South-North Module Interface Control
+	a353  VX8xx/900 Series South-North Module Interface Control
 	a364  CN896/VN896/P4M900 PCI to PCI Bridge Controller
-	a409  VX855/VX875 USB Device Controller
-	a410  VX900 PCI Express Root Port 0
+	a409  VX855/VX875/VX900 Series USB Device Controller
+	a410  VX900 Series PCI Express Root Port 0
 	b091  VT8633 [Apollo Pro266 AGP]
 	b099  VT8366/A/7 [Apollo KT266/A/333 AGP]
 	b101  VT8653 AGP Bridge
@@ -13455,31 +13495,32 @@
 	b198  VT8237/VX700 PCI Bridge
 	b213  VPX/VPX2 I/O APIC Interrupt Controller
 	b353  VX855/VX875/VX900 PCI to PCI Bridge
-	b410  VX900 PCI Express Root Port 1
+	b410  VX900 Series PCI Express Root Port 1
 	b999  [K8T890 North / VT8237 South] PCI Bridge
 	c208  PT890 PCI to PCI Bridge Controller
 	c238  K8T890 PCI to PCI Bridge Controller
 	c327  P4M890 PCI to PCI Bridge Controller
 	c340  PT900 PCI to PCI Bridge Controller
-	c353  VX800/VX820 PCI Express Root Port
+	c353  VX800/820-Series PCI-Express Root (PCI-to-PCI Virtual Bridge)
 	c364  CN896/VN896/P4M900 PCI to PCI Bridge Controller
 	c409  VX855/VX875 EIDE Controller
-	c410  VX900 PCI Express Root Port 2
+	c410  VX900 Series PCI Express Root Port 2
 	d104  VT8237R USB UDCI Controller
 	d208  PT890 PCI to PCI Bridge Controller
 	d213  VPX/VPX2 PCI to PCI Bridge Controller
 	d238  K8T890 PCI to PCI Bridge Controller
 	d340  PT900 PCI to PCI Bridge Controller
-	d410  VX900 PCI Express Root Port 3
+	d410  VX900 Series PCI Express Root Port 3
 	e208  PT890 PCI to PCI Bridge Controller
 	e238  K8T890 PCI to PCI Bridge Controller
 	e340  PT900 PCI to PCI Bridge Controller
-	e353  VX800/VX820 PCI Express Root Port
-	e410  VX900 PCI Express Physical Layer Electrical Sub-block
+	e353  VX800/820-Series PCI-Express Root Port 0
+	e410  VX900 Series PCI Express Physical Layer Electrical Sub-block
 	f208  PT890 PCI to PCI Bridge Controller
 	f238  K8T890 PCI to PCI Bridge Controller
 	f340  PT900 PCI to PCI Bridge Controller
-	f353  VX800/VX820 PCI Express Root Port
+	f353  VX800/820-Series PCI-Express Root Port 1
+	f410  VX900 Series PCI UART Port 0-3
 1107  Stratus Computers
 	0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)
 1108  Proteon, Inc.
@@ -15520,6 +15561,7 @@
 	8073  PM8073 Tachyon SPCve 12G 16-port SAS/SATA controller
 	8531  PM8531 PFX 24xG3 Fanout PCIe Switches
 	8546  PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch
+	8562  PM8562 Switchtec PFX-L 32xG3 Fanout-Lite PCIe Gen3 Switch
 11f9  I-Cube Inc
 11fa  Kasan Electronics Company, Ltd.
 11fb  Datel Inc
@@ -18369,6 +18411,7 @@
 		144d a801  SM963 2.5" NVMe PCIe SSD
 	a808  NVMe SSD Controller SM981/PM981/PM983
 		1d49 403b  Thinksystem U.2 PM983 NVMe SSD
+	a80a  NVMe SSD Controller PM9A1/980PRO
 	a820  NVMe SSD Controller 171X
 		1028 1f95  Express Flash NVMe XS1715 SSD 400GB
 		1028 1f96  Express Flash NVMe XS1715 SSD 800GB
@@ -18970,6 +19013,7 @@
 		103c 339d  Ethernet 10Gb 2-port 530SFP+ Adapter
 		193d 1003  530F-B
 		193d 1006  530F-L
+		193d 100f  NIC-ETH522i-Mb-2x10G
 	1690  NetXtreme BCM57760 Gigabit Ethernet PCIe
 	1691  NetLink BCM57788 Gigabit Ethernet PCIe
 		1028 04aa  XPS 8300
@@ -18996,6 +19040,7 @@
 	16a0  NetLink BCM5785 Fast Ethernet
 	16a1  BCM57840 NetXtreme II 10 Gigabit Ethernet
 		1043 866e  PEB-10G/57840-2T 10GBase-T Network Adapter
+		193d 100b  NIC-ETH521i-Mb-4x10G
 	16a2  BCM57840 NetXtreme II 10/20-Gigabit Ethernet
 		103c 1916  FlexFabric 20Gb 2-port 630FLB Adapter
 		103c 1917  FlexFabric 20Gb 2-port 630M Adapter
@@ -20246,12 +20291,14 @@
 		15b3 0021  MCX4421A-ACQN ConnectX-4 Lx EN OCP,2x25G
 		15b3 0025  ConnectX-4 Lx 25 GbE Dual Port SFP28 rNDC
 		193d 100a  620F-B
+		193d 1031  NIC-ETH640i-Mb-2x25G
 	1016  MT27710 Family [ConnectX-4 Lx Virtual Function]
 	1017  MT27800 Family [ConnectX-5]
 		15b3 0006  ConnectX®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT
 		15b3 0007  Mellanox ConnectX®-5 MCX516A-CCAT
 		15b3 0020  ConnectX®-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT
 		15b3 0068  ConnectX®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN
+		193d 1051  NIC-IB1040i-Mb-2P
 	1018  MT27800 Family [ConnectX-5 Virtual Function]
 	1019  MT28800 Family [ConnectX-5 Ex]
 		15b3 0008  ConnectX-5 Ex EN network interface card, 100GbE dual-port QSFP28, PCIe4.0 x16, tall bracket; MCX516A-CDAT
@@ -20372,7 +20419,7 @@
 15b7  Sandisk Corp
 	2001  Skyhawk Series NVME SSD
 	5001  WD Black NVMe SSD
-	5002  WD Black 2018 / PC SN720 NVMe SSD
+	5002  WD Black 2018/SN750 / PC SN720 NVMe SSD
 	5003  WD Blue SN500 / PC SN520 NVMe SSD
 	5004  PC SN520 NVMe SSD
 	5005  PC SN520 NVMe SSD
@@ -20382,6 +20429,7 @@
 	500b  PC SN530 NVMe SSD
 		1414 500b  Xbox Series X
 	500d  WD Ultrastar DC SN340 NVMe SSD
+	5011  WD Black SN850
 15b8  ADDI-DATA GmbH
 	1001  APCI1516 SP controller (16 digi outputs)
 	1003  APCI1032 SP controller (32 digi inputs w/ opto coupler)
@@ -21132,6 +21180,7 @@
 	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet
 	ab09  21x4x DEC-Tulip compatible 10/100 Ethernet
 173b  Altima (nee Broadcom)
+	0001  AC1002 PCI Gigabit Ethernet controller
 	03e8  AC1000 Gigabit Ethernet
 	03e9  AC1001 Gigabit Ethernet
 	03ea  AC9100 Gigabit Ethernet
@@ -21179,6 +21228,10 @@
 	0245  PCA7428CE_F1 - Analog Inputs isolated
 	0303  PCD-7006C Digital Input & Output PCI Card
 	0800  PCD8006 - PCIe digital Inputs/Outputs
+	0840  PCA-8428 General-purpose multifunctional PCIe card with 8 analog inputs and 2 analog outputs
+	0841  PCA-8429 General-purpose multifunctional PCIe card with 8 analog inputs
+	0842  PCA-8438 General-purpose multifunctional PCIe card with 16 analog inputs and 2 analog outputs
+	0843  PCA-8439 General-purpose multifunctional PCIe card with 16 analog inputs
 	ff00  CTU CAN FD PCIe Card
 1761  Pickering Interfaces Ltd
 1771  InnoVISION Multimedia Ltd.
@@ -22757,6 +22810,7 @@
 	1242  ASM1142 USB 3.1 Host Controller
 	1343  ASM1143 USB 3.1 Host Controller
 	2142  ASM2142 USB 3.1 Host Controller
+		1462 7a72  H270 PC MATE
 	3242  ASM3242 USB 3.2 Host Controller
 1b26  Netcope Technologies, a.s.
 	c132  COMBO-LXT155
@@ -22839,6 +22893,7 @@
 	9172  88SE9172 SATA 6Gb/s Controller
 	9178  88SE9170 PCIe SATA 6Gb/s Controller
 	917a  88SE9172 SATA III 6Gb/s RAID Controller
+	9182  88SE9182 PCIe 2.0 x2 2-port SATA 6 Gb/s Controller
 	9183  88SS9183 PCIe SSD Controller
 	9192  88SE9172 SATA III 6Gb/s RAID Controller
 	91a0  88SE912x SATA 6Gb/s Controller [IDE mode]
@@ -23081,6 +23136,7 @@
 	1284  PC300 NVMe Solid State Drive 512GB
 	1285  PC300 NVMe Solid State Drive 1TB
 	1327  BC501 NVMe Solid State Drive 512GB
+	1339  BC511
 	1504  SC300 512GB M.2 2280 SATA Solid State Drive
 	1527  PC401 NVMe Solid State Drive 256GB
 	243b  PE6110 NVMe Solid State Drive
@@ -23091,6 +23147,10 @@
 	000d  PBlaze5 520/526
 	003d  PBlaze5 920/926
 	003e  PBlaze6 6920
+		1c5f 0a31  NVMe SSD PBlaze6 6920 3840GB 2.5" U.2
+		1c5f 0a41  NVMe SSD PBlaze6 6920 7680GB 2.5" U.2
+		1c5f 4a31  NVMe SSD PBlaze6 6920 3200GB 2.5" U.2
+		1c5f 4a41  NVMe SSD PBlaze6 6920 6400GB 2.5" U.2
 	0540  PBlaze4 NVMe SSD
 	0550  PBlaze5 700/900
 	0555  PBlaze5 510/516
@@ -23174,6 +23234,7 @@
 1d00  Pure Storage
 1d05  Tongfang Hongkong Limited
 1d0f  Amazon.com, Inc.
+	8061  NVMe EBS Controller
 	cd01  NVMe SSD Controller
 	ec20  Elastic Network Adapter (ENA)
 	efa0  Elastic Fabric Adapter (EFA)
@@ -23304,6 +23365,9 @@
 	1014  AR-MAN-U280 [Manitou Class Accelerator for U280]
 	1015  AR-ARK-BBDEV-FX0 [Arkville 32B DPDK Baseband Device]
 	1016  AR-ARK-BBDEV-FX1 [Arkville 64B DPDK Baseband Device]
+	1017  AR-ARK-FX1 [Arkville 64B Multi-Homed Primary Endpoint]
+	1018  AR-ARK-FX1 [Arkville 64B Multi-Homed Secondary Endpoint]
+	1019  AR-ARK-FX1 [Arkville 64B Multi-Homed Tertiary Endpoint]
 	4200  A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
 1d72  Xiaomi
 1d78  DERA Storage
@@ -23331,7 +23395,7 @@
 	0100  RK3399 PCI Express Root Port
 	1808  RK1808 Neural Network Processor Card
 1d8f  Enyx
-1d93  YADRO (KNS Group)
+1d93  YADRO
 1d94  Chengdu Haiguang IC Design Co., Ltd.
 	1450  Root Complex
 	1451  I/O Memory Management Unit
@@ -23387,61 +23451,61 @@
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
 		1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-		1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-		1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+		1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+		1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
 		1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-		1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+		1dd8 400d  DSP DSC-100 Ent 100Gb Card
 		1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 	1001  DSC Virtual Downstream Port
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
 		1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-		1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-		1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+		1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+		1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
 		1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-		1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+		1dd8 400d  DSP DSC-100 Ent 100Gb Card
 		1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 	1002  DSC Ethernet Controller
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
 		1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-		1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-		1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+		1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+		1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
 		1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-		1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+		1dd8 400d  DSP DSC-100 Ent 100Gb Card
 		1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 	1003  DSC Ethernet Controller VF
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
 		1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-		1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-		1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+		1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+		1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
 		1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-		1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+		1dd8 400d  DSP DSC-100 Ent 100Gb Card
 		1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 	1004  DSC Management Controller
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
 		1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-		1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-		1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+		1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+		1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
 		1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-		1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+		1dd8 400d  DSP DSC-100 Ent 100Gb Card
 		1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 	1007  DSC Storage Accelerator
 		1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
 		1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
 		1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-		1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-		1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+		1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+		1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
 		1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
 		1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-		1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+		1dd8 400d  DSP DSC-100 Ent 100Gb Card
 		1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 1de0  Groq
 # rename due to conflict with a term in use by another company for an entirely different product.
@@ -23465,6 +23529,42 @@
 	e00a  eMAG PCI Express Root Port 5
 	e00b  eMAG PCI Express Root Port 6
 	e00c  eMAG PCI Express Root Port 7
+# Root Complex A (RCA)
+	e100  Altra PCI Express Root Complex A
+# RCA port 0
+	e101  Altra PCI Express Root Port a0
+# RCA port 1
+	e102  Altra PCI Express Root Port a1
+# RCA port 2
+	e103  Altra PCI Express Root Port a2
+# RAC port 3
+	e104  Altra PCI Express Root Port a3
+# RCA port 4
+	e105  Altra PCI Express Root Port a4
+# RCA port 5
+	e106  Altra PCI Express Root Port a5
+# RCA port 6
+	e107  Altra PCI Express Root Port a6
+# RCA port 7
+	e108  Altra PCI Express Root Port a7
+# Root Complex B (RCB)
+	e110  Altra PCI Express Root Complex B
+# RCB port 0
+	e111  Altra PCI Express Root Port b0
+# RCB port 1
+	e112  Altra PCI Express Root Port b1
+# RCB port 2
+	e113  Altra PCI Express Root Port b2
+# RCB port 3
+	e114  Altra PCI Express Root Port b3
+# RCB port 4
+	e115  Altra PCI Express Root Port b4
+# RCB port 5
+	e116  Altra PCI Express Root Port b5
+# RCB port 6
+	e117  Altra PCI Express Root Port b6
+# RCB port 7
+	e118  Altra PCI Express Root Port b7
 1df3  Ethernity Networks
 	0201  ACE-NIC40 Programmable Network Accelerator
 		1df3 0001  ENA1040
@@ -23595,12 +23695,18 @@
 # aka SED Systems
 1e94  Calian SED
 1e95  Solid State Storage Technology Corporation
+1ea0  Tencent Technology (Shenzhen) Company Limited
+	2a16  Cloud Intelligent Inference Controller
 1eab  Hefei DATANG Storage Technology Co.,LTD.
 	300a  NVMe SSD Controller 300A
 	300b  NVMe SSD Controller 300B
 1eae  XFX Limited
 1eb1  VeriSilicon Inc
 	1001  Video Accelerator
+1ed8  Digiteq Automotive
+	0101  FG4 PCIe Frame Grabber
+1ed9  Myrtle.ai
+1ee9  SUSE LLC
 # nee Tumsan Oy
 1fc0  Ascom (Finland) Oy
 	0300  E2200 Dual E1/Rawpipe Card
@@ -23851,6 +23957,8 @@
 	7073  CH356 PCI Quad Serial and Parallel Ports Controller
 	7173  CH355 PCI Quad Serial Port Controller
 434e  CAST Navigation LLC
+43b0  Tiger Lake-H PCIe Root Port #9
+43bc  Tiger Lake-H PCIe Root Port #5
 4444  Internext Compression Inc
 	0016  iTVC16 (CX23416) Video Decoder
 		0070 0003  WinTV PVR 250
@@ -24521,11 +24629,19 @@
 	02a3  Comet Lake PCH-LP SMBus Host Controller
 	02a4  Comet Lake SPI (flash) Controller
 	02a6  Comet Lake North Peak
+	02b0  Comet Lake PCI Express Root Port #9
+	02b1  Comet Lake PCI Express Root Port #10
+	02b3  Comet Lake PCI Express Root Port #12
+	02b4  Comet Lake PCI Express Root Port #13
+	02b8  Comet Lake PCI Express Root Port #1
+	02bc  Comet Lake PCI Express Root Port #5
+	02c5  Comet Lake Serial IO I2C Host Controller
 	02c8  Comet Lake PCH-LP cAVS
 	02d3  Comet Lake SATA AHCI Controller
 	02e0  Comet Lake Management Engine Interface
 	02e8  Serial IO I2C Host Controller
 	02e9  Comet Lake Serial IO I2C Host Controller
+	02ea  Comet Lake PCH-LP LPSS: I2C Controller #2
 	02ed  Comet Lake PCH-LP USB 3.1 xHCI Host Controller
 	02ef  Comet Lake PCH-LP Shared SRAM
 	02f0  Comet Lake PCH-LP CNVi WiFi
@@ -24564,6 +24680,7 @@
 	0406  Haswell Integrated Graphics Controller
 	040a  Xeon E3-1200 v3 Processor Integrated Graphics Controller
 	0412  Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
+		1028 05d7  Alienware X51 R2
 		103c 1998  EliteDesk 800 G1
 		17aa 3098  ThinkCentre E73
 		17aa 309f  ThinkCentre M83
@@ -25112,7 +25229,7 @@
 		1028 1fe9  Express Flash NVMe 4.0TB HHHL AIC (P4600)
 	0b26  Thunderbolt 4 Bridge [Goshen Ridge 2020]
 	0b27  Thunderbolt 4 USB Controller [Goshen Ridge 2020]
-	0b60  NVMe DC SSD [3DNAND, Beta Rock Controller]
+	0b60  NVMe DC SSD [3DNAND, Sentinel Rock Controller]
 		1028 2060  NVMe SED MU U.2 1.6TB (P5600)
 		1028 2061  NVMe SED MU U.2 3.2TB (P5600)
 		1028 2062  NVMe SED MU U.2 6.4TB (P5600)
@@ -25125,6 +25242,7 @@
 		1028 2102  NVMe RI U.2 1.92TB (P5500)
 		1028 2103  NVMe RI U.2 3.84TB (P5500)
 		1028 2104  NVMe RI U.2 7.68TB (P5500)
+		8086 8008  NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510)
 	0be0  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
 	0be1  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
 		105b 0d7c  D270S/D250S Motherboard
@@ -25152,6 +25270,7 @@
 	0bf6  Atom Processor D2xxx/N2xxx DRAM Controller
 	0bf7  Atom Processor D2xxx/N2xxx DRAM Controller
 	0c00  4th Gen Core Processor DRAM Controller
+		1028 05d7  Alienware X51 R2
 		103c 1998  EliteDesk 800 G1
 		17aa 3098  ThinkCentre E73
 		17aa 309f  ThinkCentre M83
@@ -26397,6 +26516,7 @@
 	156f  Ethernet Connection I219-LM
 		1028 06dc  Latitude E7470
 		103c 8079  EliteBook 840 G3
+		17aa 2247  ThinkPad T570
 	1570  Ethernet Connection I219-V
 	1571  Ethernet Virtual Function 700 Series
 	1572  Ethernet Controller X710 for 10GbE SFP+
@@ -26415,7 +26535,10 @@
 		17aa 0000  ThinkServer X710 AnyFabric for 10GbE SFP+
 		17aa 4001  ThinkServer X710-4 AnyFabric for 10GbE SFP+
 		17aa 4002  ThinkServer X710-2 AnyFabric for 10GbE SFP+
+		193d 1020  NIC-ETH561F-sL-4x10G
+		193d 1021  NIC-ETH561F-sL-2x10G
 		19e5 d11c  Ethernet 2-port X710 10Gb SFP+ Adapter SP330
+		1bd4 0042  10G SFP+ DP EP102Fi4 Adapter
 		1bd4 0056  Ethernet Network Adapter X710-BM2 for OCP NIC 3.0
 		8086 0000  Ethernet Converged Network Adapter X710
 		8086 0001  Ethernet Converged Network Adapter X710-4
@@ -26461,6 +26584,7 @@
 		1059 0170  RD-01213 10GbE interface
 		1590 0000  Ethernet 2-port 563i Adapter
 		1590 00f8  Ethernet 2-port 563i Adapter
+		193d 100e  NIC-ETH561i-Mb-4x10G
 		8086 0000  Ethernet Converged Network Adapter XL710-Q2
 	1583  Ethernet Controller XL710 for 40GbE QSFP+
 		1028 0000  Ethernet 40G 2P XL710 QSFP+ rNDC
@@ -26599,6 +26723,7 @@
 	15b6  DSL6540 USB 3.1 Controller [Alpine Ridge]
 	15b7  Ethernet Connection (2) I219-LM
 	15b8  Ethernet Connection (2) I219-V
+		1462 7a72  H270 PC MATE
 	15b9  Ethernet Connection (3) I219-LM
 	15bb  Ethernet Connection (7) I219-LM
 	15bc  Ethernet Connection (7) I219-V
@@ -26764,6 +26889,7 @@
 		103c 825b  OMEN-17-w001nv
 	1911  Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
 		1028 0869  Vostro 3470
+		1462 7a72  H270 PC MATE
 		17aa 2247  ThinkPad T570
 		17aa 224f  ThinkPad X1 Carbon 5th Gen
 		17aa 225d  ThinkPad T480
@@ -26772,6 +26898,7 @@
 		1028 06dc  Latitude E7470
 		1028 06f3  Latitude 3570
 		103c 8079  EliteBook 840 G3
+		17aa 2247  ThinkPad T570
 	1918  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 	1919  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit
 		1028 06d6  Latitude 7275 tablet
@@ -28681,6 +28808,7 @@
 	277c  82975X Memory Controller Hub
 		1043 8178  P5WDG2 WS Professional motherboard
 	277d  82975X PCI Express Root Port
+	2780  82915G/GV/GL/910GL [Grantsdale] Graphics Device
 	2782  82915G Integrated Graphics Controller
 		1043 2582  P5GD1-VW Mainboard
 		1734 105b  Scenic W620
@@ -29698,6 +29826,7 @@
 	2a41  Mobile 4 Series Chipset PCI Express Graphics Port
 		e4bf cc4d  CCM-BOOGIE
 	2a42  Mobile 4 Series Chipset Integrated Graphics Controller
+		1028 02aa  Dell Inspiron 1545
 		17aa 2112  ThinkPad T400
 		e4bf cc4d  CCM-BOOGIE
 	2a43  Mobile 4 Series Chipset Integrated Graphics Controller
@@ -30113,8 +30242,8 @@
 		8086 4210  Dual Band Wireless AC 3165
 	3166  Dual Band Wireless-AC 3165 Plus Bluetooth
 		8086 4210  Dual Band Wireless-AC 3165
-	3184  UHD Graphics 605
-	3185  UHD Graphics 605
+	3184  GeminiLake [UHD Graphics 605]
+	3185  GeminiLake [UHD Graphics 600]
 	318c  Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
 	318e  Celeron/Pentium Silver Processor NorthPeak
 	3190  Celeron/Pentium Silver Processor Gaussian Mixture Model
@@ -30859,17 +30988,17 @@
 	3e81  8th Gen Core Processor PCIe Controller (x16)
 	3e85  8th Gen Core Processor PCIe Controller (x8)
 	3e89  8th Gen Core Processor PCIe Controller (x4)
-	3e90  UHD Graphics 610
-	3e91  UHD Graphics 630
-	3e92  UHD Graphics 630 (Desktop)
+	3e90  CoffeeLake-S GT1 [UHD Graphics 610]
+	3e91  CoffeeLake-S GT2 [UHD Graphics 630]
+	3e92  CometLake-S GT2 [UHD Graphics 630]
 		1028 0869  Vostro 3470
-	3e93  UHD Graphics 610
-	3e96  HD Graphics P630
-	3e98  UHD Graphics 630 (Desktop 9 Series)
-	3e9b  UHD Graphics 630 (Mobile)
-	3ea0  UHD Graphics 620 (Whiskey Lake)
+	3e93  CoffeeLake-S GT1 [UHD Graphics 610]
+	3e96  CoffeeLake-S GT2 [UHD Graphics P630]
+	3e98  CoffeeLake-S GT2 [UHD Graphics 630]
+	3e9b  CoffeeLake-H GT2 [UHD Graphics 630]
+	3ea0  WhiskeyLake-U GT2 [UHD Graphics 620]
 		1028 089e  Inspiron 5482
-	3ea5  Iris Plus Graphics 655
+	3ea5  CoffeeLake-U GT3e [Iris Plus Graphics 655]
 	3ec2  8th Gen Core Processor Host Bridge/DRAM Registers
 		1028 0869  Vostro 3470
 		1043 8694  PRIME H310M-D
@@ -31007,6 +31136,14 @@
 		8086 1216  WiMAX/WiFi Link 5150 ABG
 		8086 1311  WiMAX/WiFi Link 5150 AGN
 		8086 1316  WiMAX/WiFi Link 5150 ABG
+	438b  Tiger Lake-H LPC/eSPI Controller
+	43a3  Tiger Lake-H SMBus Controller
+	43a4  Tiger Lake-H SPI Controller
*** 284 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:32:34 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7E9B36355B2;
 Wed,  5 May 2021 08:32:34 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqhf13XWz3KpZ;
 Wed,  5 May 2021 08:32:34 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1332C21BD4;
 Wed,  5 May 2021 08:32:34 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458WY9o042580;
 Wed, 5 May 2021 08:32:34 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458WXOt042579;
 Wed, 5 May 2021 08:32:33 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:32:33 GMT
Message-Id: <202105050832.1458WXOt042579@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 9c2ee10d85e5 - stable/13 - pci_vendors: update to 2021.04.26
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 9c2ee10d85e575627f77f5d646fe9d1da5a8b9a8
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:32:34 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=9c2ee10d85e575627f77f5d646fe9d1da5a8b9a8

commit 9c2ee10d85e575627f77f5d646fe9d1da5a8b9a8
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-04-29 04:46:26 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:30:44 +0000

    pci_vendors: update to 2021.04.26
    
    (cherry picked from commit a4b5f7ba3e9bf8385b6e113c284d1559333048a0)
---
 share/misc/pci_vendors | 319 ++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 274 insertions(+), 45 deletions(-)

diff --git a/share/misc/pci_vendors b/share/misc/pci_vendors
index 35692066d391..1a00db8f19dc 100644
--- a/share/misc/pci_vendors
+++ b/share/misc/pci_vendors
@@ -1,8 +1,8 @@
 #
 #	List of PCI ID's
 #
-#	Version: 2021.02.20
-#	Date:    2021-02-20 03:15:02
+#	Version: 2021.04.26
+#	Date:    2021-04-26 03:15:02
 #
 #	Maintained by Albert Pool, Martin Mares, and other volunteers from
 #	the PCI ID Project at https://pci-ids.ucw.cz/.
@@ -522,6 +522,7 @@
 		1000 3040  9210-8i
 		1000 3080  9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
 		1000 30b0  9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
+		1014 03ca  IBM 6Gb SAS HBA [9212-4i4e]
 		1028 1f1c  6Gbps SAS HBA Adapter
 		1028 1f1d  PERC H200 Adapter
 		1028 1f1e  PERC H200 Integrated
@@ -873,6 +874,14 @@
 		1d49 060e  ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter
 		1d49 060f  ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter
 	10e2  MegaRAID 12GSAS/PCIe Secure SAS39xx
+# 9560 16 internal port RAID controller
+		1000 4000  MegaRAID 9560-16i
+# 9560 8 internal port RAID controller
+		1000 4010  MegaRAID 9560-8i
+# 9580 8 internal & 8 external port RAID controller
+		1000 4020  MegaRAID 9580-8i8e
+# MegaRAID 9562-16i 9562 16 internal port RAID controller
+		1000 40b0  MegaRAID 9562-16i
 		1028 1ae0  PERC H755 Adapter
 		1028 1ae1  PERC H755 Front
 		1028 1ae2  PERC H755N Front
@@ -907,6 +916,7 @@
 		8086 0523  MegaRAID RAID Controller SRCS16
 	3050  SAS2008 PCI-Express Fusion-MPT SAS-2
 	6001  DX1 Multiformat Broadcast HD/SD Encoder/Decoder
+	c010  PEX88048 50 lane, 50 port, PCI Express Gen 4.0 ExpressFabric Platform
 	c012  PEX880xx PCIe Gen 4 Switch
 		1d49 0003  ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter
 1001  Kolter Electronic
@@ -959,6 +969,7 @@
 	1561  Anubis
 	15d8  Picasso
 		103c 8615  Pavilion Laptop 15-cw1xxx
+		17aa 3181  ThinkCentre M75n IoT
 		17aa 5124  ThinkPad E595
 		ea50 cc10  RXi2-BP
 	15dd  Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
@@ -980,6 +991,7 @@
 	1638  Cezanne
 	163f  VanGogh
 	164c  Lucienne
+	164d  Rembrandt
 	1714  BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
 		103c 168b  ProBook 4535s
 	3150  RV380/M24 [Mobility Radeon X600]
@@ -1904,7 +1916,7 @@
 	5e6d  RV410 [Radeon X700] (Secondary)
 		148c 2117  Bravo X700 (Secondary)
 	5f57  R423 [Radeon X800 XT]
-	6600  Mars [Radeon HD 8670A/8670M/8750M]
+	6600  Mars [Radeon HD 8670A/8670M/8750M / R7 M370]
 		103c 1952  ProBook 455 G1
 	6601  Mars [Radeon HD 8730M]
 		103c 2100  FirePro M4100
@@ -1922,8 +1934,10 @@
 	6608  Oland GL [FirePro W2100]
 		13cc 3d28  MXRT-2600
 	6609  Oland GL [FirePro W2100 / Barco MXRT 2600]
-	6610  Oland XT [Radeon HD 8670 / R7 250/350]
+	6610  Oland XT [Radeon HD 8670 / R5 340X OEM / R7 250/350/350X OEM]
 		1019 0030  Radeon HD 8670
+		1028 0081  Radeon R7 350X OEM
+		1028 0083  Radeon R5 340X OEM
 		1028 2120  Radeon R7 250
 		1028 2322  Radeon R7 250
 		1462 2910  Radeon HD 8670
@@ -1933,7 +1947,15 @@
 		1642 3c91  Radeon HD 8670
 		1642 3f09  Radeon R7 350
 	6611  Oland [Radeon HD 8570 / R5 430 OEM / R7 240/340 / Radeon 520 OEM]
+		1028 1001  Radeon R5 430 OEM (1024 MByte)
+		1028 1002  Radeon R5 430 OEM (2048 MByte)
+# The 'AMD Radeon R5 430' instead of 240/340 is NOT a typo! It's actually correct.
+		1028 1711  R5 430 OEM (2048 MByte)
 		1028 210b  Radeon R5 240 OEM
+# OEM-card for Dell; verified through AMD's own drivers (*.inf) and a TPU BIOS in database
+		1028 2121  Radeon HD 8570 OEM
+# OEM-card from Fujitsu; verified through AMD's own drivers (*.inf)
+		10cf 1889  Radeon HD 8570 OEM
 		1642 1869  Radeon 520 OEM
 		174b 4248  Radeon R7 240 OEM
 		174b a240  Radeon R7 240 OEM
@@ -2203,7 +2225,7 @@
 		8086 2111  Radeon HD 6625M
 	6743  Whistler [Radeon E6760]
 	6749  Turks GL [FirePro V4900]
-		15c3 2b06  MED-X4900
+		15c3 2b06  MED-X4900 (EIZO)
 	674a  Turks GL [FirePro V3900]
 		13cc 3d22  MXRT-2500
 		15c3 0106  MED-X3900
@@ -2232,7 +2254,7 @@
 		174b 7670  Radeon HD 7670
 		174b e181  Radeon HD 6670
 		1787 2309  Radeon HD 6670
-	6759  Turks PRO [Radeon HD 6570/7570/8550]
+	6759  Turks PRO [Radeon HD 6570/7570/8550 / R5 230]
 		103c 3130  Radeon HD 6570
 		1043 0403  Radeon HD 6570
 		1462 2500  Radeon HD 6570
@@ -2241,9 +2263,15 @@
 		1642 3a67  Radeon HD 6570
 		1682 3280  Radeon HD 7570
 		1682 3530  Radeon HD 8550
+		1682 5230  Radeon R5 230 series
+		1682 6450  Radeon HD 6450 series
 		174b 7570  Radeon HD 7570
+		174b 8550  Radeon HD8550 OEM
+		174b 8570  Radeon HD8550 OEM
 		174b e142  Radeon HD 6570
 		174b e181  Radeon HD 6570
+		1787 a230  Radeon R5 230 series
+		1787 a450  Radeon HD 6450 series
 		1b0a 908f  Radeon HD 6570
 		1b0a 9090  Radeon HD 6570
 		1b0a 9091  Radeon HD 6570
@@ -2645,6 +2673,7 @@
 # https://www.techpowerup.com/vgabios/?manufacturer=Powercolor&model=RX+580
 		148c 2378  Radeon RX 580
 		148c 2379  Radeon RX 570 4G [Red Dragon]
+		148c 2391  Radeon RX 590 [Red Devil]
 		1682 9470  Radeon RX 470
 		1682 9480  Radeon RX 480
 		1682 9587  Radeon RX 590 FATBOY 8GB
@@ -3614,24 +3643,32 @@
 		174b e329  Radeon R9 FURY
 	7310  Navi 10 [Radeon Pro W5700X]
 	7312  Navi 10 [Radeon Pro W5700]
+	7314  Navi 10 USB
 	731f  Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
 		1458 2313  Radeon RX 5700 XT Gaming OC
 		1682 5701  RX 5700 XT RAW II
+		1849 5120  Radeon RX 5600 XT
 		1da2 e411  Radeon RX 5600 XT
 	7340  Navi 14 [Radeon RX 5500/5500M / Pro 5500M]
 	7341  Navi 14 [Radeon Pro W5500]
 	7347  Navi 14 [Radeon Pro W5500M]
 	734f  Navi 14 [Radeon Pro W5300M]
-	7360  Navi 12 [Radeon Pro 5600M]
+	7360  Navi 12 [Radeon Pro 5600M / V520]
+	7362  Navi 12 [Radeon Pro V520]
 	7388  Arcturus GL-XL
 	738c  Arcturus GL-XL [AMD Instinct MI100]
 	738e  Arcturus GL-XL
+	73a4  Navi 21 USB
+	73af  Navi 21 [Radeon RX 6900 XT]
 	73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
 		1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
 	73c3  Navi 22
-	73df  Navi 22
+	73c4  Navi 22 USB
+	73df  Navi 22 [Radeon RX 6700/6700 XT / 6800M]
 	73e0  Navi 23
-	73ff  Navi 23
+	73e1  Navi 23
+	73e4  Navi 23 USB
+	73ff  Navi 23 [Radeon RX 6600/6600 XT/6600M]
 	7833  RS350 Host Bridge
 	7834  RS350 [Radeon 9100 PRO/XT IGP]
 	7835  RS350M [Mobility Radeon 9000 IGP]
@@ -4034,6 +4071,7 @@
 	ab10  Lexa HDMI Audio
 	ab18  Vega 12 HDMI Audio
 	ab20  Vega 20 HDMI Audio [Radeon VII]
+	ab28  Navi 21 HDMI Audio [Radeon RX 6800/6800 XT / 6900 XT]
 	ab38  Navi 10 HDMI Audio
 	ac00  Theater 506 World-Wide Analog Decoder
 	ac01  Theater 506 World-Wide Analog Decoder
@@ -4937,7 +4975,8 @@
 		4c53 1030  PC5 mainboard
 		4c53 1040  CL7 mainboard
 		4c53 1060  PC7 mainboard
-	2001  79c978 [HomePNA]
+# Via AMD's own technical reference on their Am79C978 NICs; https://www.amd.com/system/files/TechDocs/22206.pdf
+	2001  Am79C978 PCnet Home (HomePNA) 1/10 PCI Ethernet Adapter [Am79C971 PHY]
 		1092 0a78  Multimedia Home Network Adapter
 		1668 0299  ActionLink Home Network Adapter
 	2003  Am 1771 MBW [Alchemy]
@@ -4956,7 +4995,8 @@
 	2096  CS5536 [Geode companion] UDC
 	2097  CS5536 [Geode companion] UOC
 	209a  CS5536 [Geode companion] IDE
-	2625  AMD Lance/PCI PCNet/32
+	2625  Am79C973 [Lance/PCI PCNet/32]
+	2627  Am79C975 [Lance/PCI PCNet/32]
 	3000  ELanSC520 Microcontroller
 	43a0  Hudson PCI to PCI bridge (PCIE port 0)
 	43a1  Hudson PCI to PCI bridge (PCIE port 1)
@@ -6906,6 +6946,7 @@
 	0003  Control Video
 	0004  PlanB Video-In
 	0007  O'Hare I/O
+	000b  Apple Camera
 	000c  DOS on Mac
 	000e  Hydra Mac I/O
 	0010  Heathrow Mac I/O
@@ -7133,7 +7174,8 @@
 		103c 12dd  4Gb Fibre Channel [AB429A]
 	2432  ISP2432-based 4Gb Fibre Channel to PCI Express HBA
 		103c 7040  FC1142SR 4Gb 1-port PCIe Fibre Channel Host Bus Adapter [HPAE311A]
-		1077 0137  QLE2460 4 GB PCI-X Host-Bus-Adapter
+		1077 0137  QLE2460 Single-Port 4Gbps FC-to-PCI-X/PCIe Host Bus Adapter
+		1077 0138  QLE2462 Dual-Port 4Gbps FC-to-PCI-X/PCIe Host Bus Adapter
 	2532  ISP2532-based 8Gb Fibre Channel to PCI Express HBA
 		1014 041e  FC EN0Y/EN12 PCIe2 LP 8 Gb 4-port Fibre Channel Adapter for POWER
 		103c 3262  StorageWorks 81Q
@@ -10064,7 +10106,7 @@
 	0331  NV35 [GeForce FX 5900]
 		1043 8145  V9950GE
 	0332  NV35 [GeForce FX 5900XT]
-	0333  NV38 [GeForce FX 5950 Ultra]
+	0333  NV38 [GeForce FX 5950 Ultra / PCX 5950]
 	0334  NV35 [GeForce FX 5900ZT]
 		1462 9373  FX5900ZT-VTD128 (MS-8937)
 	0338  NV35GL [Quadro FX 3000]
@@ -11676,6 +11718,7 @@
 	1184  GK104 [GeForce GTX 770]
 	1185  GK104 [GeForce GTX 660 OEM]
 		10de 106f  GK104 [GeForce GTX 760 OEM]
+	1186  GK104 [GeForce GTX 660 Ti]
 	1187  GK104 [GeForce GTX 760]
 	1188  GK104 [GeForce GTX 690]
 	1189  GK104 [GeForce GTX 670]
@@ -12147,6 +12190,7 @@
 	1f08  TU106 [GeForce RTX 2060 Rev. A]
 	1f09  TU106 [GeForce GTX 1660 SUPER]
 	1f0a  TU106 [GeForce GTX 1650]
+	1f0b  TU106 [CMP 40HX]
 	1f10  TU106M [GeForce RTX 2070 Mobile]
 	1f11  TU106M [GeForce RTX 2060 Mobile]
 	1f12  TU106M [GeForce RTX 2060 Max-Q]
@@ -12174,15 +12218,21 @@
 	1f9c  TU117M [GeForce MX450]
 	1f9d  TU117M [GeForce GTX 1650 Mobile / Max-Q]
 	1fae  TU117GL
+	1fb0  TU117GLM [Quadro T1000 Mobile]
+	1fb1  TU117GLM [Quadro T600 Mobile]
+	1fb2  TU117GLM [Quadro T400 Mobile]
 	1fb8  TU117GLM [Quadro T2000 Mobile / Max-Q]
 	1fb9  TU117GLM [Quadro T1000 Mobile]
 	1fbb  TU117GLM [Quadro T500 Mobile]
 	1fbf  TU117GL
 	1fd9  TU117BM [GeForce GTX 1650 Mobile Refresh]
+	1fdd  TU117BM [GeForce GTX 1650 Mobile Refresh]
 	1ff9  TU117GLM [Quadro T1000 Mobile]
 	20b0  GA100 [A100 SXM4 40GB]
 	20b1  GA100 [A100 PCIe 40GB]
 	20b2  GA100 [A100 SXM4 80GB]
+	20b6  GA100GL [PG506-232]
+	20b7  GA100GL [A30 PCIe]
 	20be  GA100 [GRID A100A]
 	20bf  GA100 [GRID A100B]
 	20f1  GA100 [A100 PCIe 40GB]
@@ -12191,6 +12241,7 @@
 	2184  TU116 [GeForce GTX 1660]
 	2187  TU116 [GeForce GTX 1650 SUPER]
 	2188  TU116 [GeForce GTX 1650]
+	2189  TU116 [CMP 30HX]
 	2191  TU116M [GeForce GTX 1660 Ti Mobile]
 	2192  TU116M [GeForce GTX 1650 Ti Mobile]
 	21ae  TU116GL
@@ -12198,21 +12249,27 @@
 	21c2  TU116
 	21c4  TU116 [GeForce GTX 1660 SUPER]
 	21d1  TU116BM [GeForce GTX 1660 Ti Mobile]
+	2200  GA102
 	2204  GA102 [GeForce RTX 3090]
-	2205  GA102 [GeForce RTX 3080 Ti]
+	2205  GA102 [GeForce RTX 3080 20GB]
 	2206  GA102 [GeForce RTX 3080]
 		10de 1467  GA102 [GeForce RTX 3080]
 		10de 146d  GA102 [GeForce RTX 3080 20GB]
 		1462 3892  RTX 3080 10GB GAMING X TRIO
+	2208  GA102 [GeForce RTX 3080 Ti]
 	222b  GA102 [GeForce RTX 3090 Engineering Sample]
 	222f  GA102 [GeForce RTX 3080 11GB / 12GB Engineering Sample]
 	2230  GA102GL [RTX A6000]
-	2235  GA102GL [RTX A40]
-	2236  GA102GL
+	2231  GA102GL [RTX A5000]
+	2235  GA102GL [A40]
+	2236  GA102GL [A10]
+	2237  GA102GL [A10G]
 	223f  GA102GL
 	228b  GA104 High Definition Audio Controller
+	2302  GA103
 	2321  GA103
 	2482  GA104 [GeForce RTX 3070 Ti]
+	2483  GA104
 	2484  GA104 [GeForce RTX 3070]
 		10de 146b  GA104 [GeForce RTX 3070]
 		10de 14ae  GA104 [GeForce RTX 3070 16GB]
@@ -12223,6 +12280,7 @@
 	24ac  GA104 [GeForce RTX 30x0 Engineering Sample]
 	24ad  GA104 [GeForce RTX 3060 Engineering Sample]
 	24af  GA104 [GeForce RTX 3070 Engineering Sample]
+	24b0  GA104GL [RTX A4000]
 	24b6  GA104
 	24b8  GA104
 	24bf  GA104 [GeForce RTX 3070 Engineering Sample]
@@ -12238,7 +12296,12 @@
 	25a0  GA107M [GeForce RTX 3050 Ti Mobile]
 	25a2  GA107M [GeForce RTX 3050 Mobile]
 	25a4  GA107
+	25a5  GA107M
 	25af  GA107 [GeForce RTX 3050 Engineering Sample]
+	25b5  GA107GLM [RTX A4 Mobile]
+	25b8  GA107GLM
+	25e0  GA107BM
+	25e2  GA107BM
 10df  Emulex Corporation
 	0720  OneConnect NIC (Skyhawk)
 		103c 1934  FlexFabric 20Gb 2-port 650M Adapter
@@ -12923,6 +12986,7 @@
 	3220  RocketRAID 3220
 	3320  RocketRAID 3320
 	4310  RocketRaid 4310
+	7505  SSD7505 PCIe Gen4 x16 4-Port M.2 NVMe RAID Controller
 1104  RasterOps Corp.
 1105  Sigma Designs, Inc.
 	1105  REALmagic Xcard MPEG 1/2/3/4 DVD Decoder
@@ -13060,7 +13124,7 @@
 	1296  P4M800 Host Bridge
 	1308  PT894 Host Bridge
 	1314  CN700/VN800/P4M800CE/Pro Host Bridge
-	1324  CX700/VX700 Host Bridge
+	1324  CX700/VX700-Series Error Reporting
 	1327  P4M890 Host Bridge
 	1336  K8M890CE Host Bridge
 	1340  PT900 Host Bridge
@@ -13085,7 +13149,7 @@
 	2296  P4M800 Host Bridge
 	2308  PT894 Host Bridge
 	2314  CN700/VN800/P4M800CE/Pro Host Bridge
-	2324  CX700/VX700 Host Bridge
+	2324  CX700/VX700-Series Host Interface Control
 	2327  P4M890 Host Bridge
 	2336  K8M890CE Host Bridge
 	2340  PT900 Host Bridge
@@ -13100,15 +13164,16 @@
 	287d  VT8251 PCIE Root Port
 	287e  VT8237/8251 Ultra VLINK Controller
 	3022  CLE266
-	3038  VT82xx/62xx UHCI USB 1.1 Controller
+	3038  VT82xx/62xx/VX700/8x0/900 UHCI USB 1.1 Controller
 		0925 1234  onboard UHCI USB 1.1 Controller
 		1019 0985  P6VXA Motherboard
 		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
 		1043 8080  A7V333 motherboard
-		1043 808c  VT6202 USB2.0 4 port controller
+		1043 808c  VT62xx USB1.1 4 port controller
 		1043 80a1  A7V8X-X motherboard
 		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard
 		1179 0001  Magnia Z310
+		1234 0925  MVP3 USB Controller
 		1458 5004  GA-7VAX Mainboard
 		1462 5901  KT6 Delta-FIS2R (MS-6590)
 		1462 7020  K8T NEO 2 motherboard
@@ -13343,7 +13408,7 @@
 		19da a179  ZBOX VD01
 	3290  K8M890 Host Bridge
 	3296  P4M800 Host Bridge
-	3324  CX700/VX700 Host Bridge
+	3324  CX700/VX700-Series DRAM Bus Control
 	3327  P4M890 Host Bridge
 	3336  K8M890CE Host Bridge
 	3337  VT8237A PCI to ISA Bridge
@@ -13354,6 +13419,7 @@
 	3351  VT3351 Host Bridge
 	3353  VX800/820 PCI to PCI Bridge
 	3364  CN896/VN896/P4M900 Host Bridge
+	3365  VT630x IEEE 1394 Host Controller [Fire II/M]
 	3371  CN896/VN896/P4M900 [Chrome 9 HC]
 	3372  VT8237S PCI to ISA Bridge
 	337a  VT8237A PCI to PCI Bridge
@@ -13382,7 +13448,7 @@
 	4296  P4M800 Host Bridge
 	4308  PT894 Host Bridge
 	4314  CN700/VN800/P4M800CE/Pro Host Bridge
-	4324  CX700/VX700 Host Bridge
+	4324  CX700/VX700-Series Power Management and Testing Control
 	4327  P4M890 Host Bridge
 	4336  K8M890CE Host Bridge
 	4340  PT900 Host Bridge
@@ -13434,7 +13500,7 @@
 	7296  P4M800 Host Bridge
 	7308  PT894 Host Bridge
 	7314  CN700/VN800/P4M800CE/Pro Host Bridge
-	7324  CX700/VX700 Host Bridge
+	7324  CX700/VX700-Series North-South Module Interface Control
 	7327  P4M890 Host Bridge
 	7336  K8M890CE Host Bridge
 	7340  PT900 Host Bridge
@@ -13447,7 +13513,7 @@
 	8231  VT8231 [PCI-to-ISA Bridge]
 	8235  VT8235 ACPI
 	8305  VT8363/8365 [KT133/KM133 AGP]
-	8324  CX700/VX700 PCI to ISA Bridge
+	8324  CX700/VX700-Series Bus Control and Power Management
 	8353  VX800/VX820 Bus Control and Power Management
 	8391  VT8371 [KX133 AGP]
 	8400  MVP4
@@ -13492,7 +13558,7 @@
 	b168  VT8235 PCI Bridge
 	b188  VT8237/8251 PCI bridge [K8M890/K8T800/K8T890 South]
 		147b 1407  KV8-MAX3 motherboard
-	b198  VT8237/VX700 PCI Bridge
+	b198  VT8237/CX700/VX700-Series PCI to PCI Bridge
 	b213  VPX/VPX2 I/O APIC Interrupt Controller
 	b353  VX855/VX875/VX900 PCI to PCI Bridge
 	b410  VX900 Series PCI Express Root Port 1
@@ -14155,7 +14221,7 @@
 	0002  Dual PCI to RapidIO Bridge
 	000b  POET Serial RapidIO Bridge
 	000d  POET PSDMS Device
-1135  Fuji Xerox Co Ltd
+1135  FUJIFILM Business Innovation Corp.
 	0001  Printer controller
 1136  Momentum Data Systems
 	0002  PCI-JTAG
@@ -15013,6 +15079,7 @@
 11aa  Actel
 # Nee Galileo Technology, Inc.
 11ab  Marvell Technology Group Ltd.
+	0100  88F3700 [Armada 3700 Family] ARM SoC
 	0146  GT-64010/64010A System Controller
 	0f53  88E6318 Link Street network controller
 	11ab  MV88SE614x SATA II PCI-E controller
@@ -15229,6 +15296,8 @@
 	6480  MV64460/64461/64462 System Controller
 		1775 c200  C2K CompactPCI single board computer
 	6485  MV64460/64461/64462 System Controller, Revision B
+	6820  88F6820 [Armada 385] ARM SoC
+	6828  88F6828 [Armada 388] ARM SoC
 	7042  88SX7042 PCI-e 4-port SATA-II
 		16b8 434b  Tempo SATA E4P
 	7810  MV78100 [Discovery Innovation] ARM SoC
@@ -15244,7 +15313,7 @@
 		11ad 0003  LNE100TX
 		11ad f003  LNE100TX
 		11ad ffff  LNE100TX
-		1385 f004  FA310TX
+		1385 f004  FA310/TX LAN 10/100 PCI Ethernet Adapter
 		2646 f002  KNE110TX EtheRx Fast Ethernet
 	c115  LNE100TX [Linksys EtherFast 10/100]
 		11ad c001  LNE100TX [ver 2.0]
@@ -16061,6 +16130,8 @@
 	5a4b  Telsat Turbo
 1268  Tektronix
 1269  Thomson-CSF/TTM
+# MBIM on top of MHI
+	00b4  5G Data Card [Cinterion MV31-W]
 126a  Lexmark International, Inc.
 126b  Adax, Inc.
 126c  Northern Telecom
@@ -17607,6 +17678,8 @@
 1414  Microsoft Corporation
 	0001  MN-120 (ADMtek Centaur-C based)
 	0002  MN-130 (ADMtek Centaur-P based)
+# Virtual Video Card Device for Windows Remote Desktop (RDP)
+	008c  Basic Render Driver
 	5353  Hyper-V virtual VGA
 	5801  XMA Decoder (Xenon)
 	5802  SATA Controller - CdRom (Xenon)
@@ -18475,6 +18548,22 @@
 		1028 2097  EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 1.92TB
 		1028 2098  EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 3.84TB
 		1028 2099  EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 7.68TB
+		1028 2118  Ent NVMe v2 AGN FIPS MU U.2 1.6TB
+		1028 2119  Ent NVMe v2 AGN MU U.2 1.6TB
+		1028 2120  Ent NVMe v2 AGN FIPS MU U.2 3.2T
+		1028 2121  Ent NVMe v2 AGN MU U.2 3.2TB
+		1028 2122  Ent NVMe v2 AGN FIPS MU U.2 6.4TB
+		1028 2123  Ent NVMe v2 AGN MU U.2 6.4TB
+		1028 2124  Ent NVMe v2 AGN FIPS MU U.2 6.4TB
+		1028 2125  Ent NVMe v2 AGN MU U.2 12.8TB
+		1028 2126  Ent NVMe v2 AGN FIPS RI U.2 1.92TB
+		1028 2127  Ent NVMe v2 AGN RI U.2 1.92TB
+		1028 2128  Ent NVMe v2 AGN FIPS RI U.2 3.84TB
+		1028 2129  Ent NVMe v2 AGN RI U.2 3.84TB
+		1028 2130  Ent NVMe v2 AGN FIPS RI U.2 7.68TB
+		1028 2131  Ent NVMe v2 AGN RI U.2 7.68TB
+		1028 2132  Ent NVMe v2 AGN FIPS RI U.2 15.36TB
+		1028 2133  Ent NVMe v2 AGN RI U.2 15.36TB
 	ecec  Exynos 8895 PCIe Root Complex
 144e  OLITEC
 144f  Askey Computer Corp.
@@ -18486,6 +18575,7 @@
 1456  Advanced Hardware Architectures
 1457  Nuera Communications Inc
 1458  Gigabyte Technology Co., Ltd
+	3483  USB 3.0 Controller (VIA VL80x-based xHCI Controller)
 1459  DOOIN Electronics
 145a  Escalate Networks Inc
 145b  PRAIM SRL
@@ -18502,6 +18592,8 @@
 	e836  M115S Hybrid Analog/DVB PAL/SECAM/NTSC Tuner
 	f436  AVerTV Hybrid+FM
 1462  Micro-Star International Co., Ltd. [MSI]
+# VIA Driver-inf
+	3483  MSI USB 3.0 (VIA VL80x-based xHCI USB Controller)
 	aaf0  Radeon RX 580 Gaming X 8G
 1463  Fast Corporation
 1464  Interactive Circuits & Systems Ltd
@@ -18551,6 +18643,7 @@
 148a  OPTO
 148b  INNOMEDIALOGIC Inc.
 148c  Tul Corporation / PowerColor
+	2391  Radeon RX 590 [Red Devil]
 148d  DIGICOM Systems, Inc.
 	1003  HCF 56k Data/Fax Modem
 148e  OSI Plus Corporation
@@ -18652,9 +18745,11 @@
 		103c 1240  Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM)
 14c2  DTK Computer
 14c3  MEDIATEK Corp.
+	7612  MT7612E 802.11acbgn PCI Express Wireless Network Adapter
 	7630  MT7630e 802.11bgn Wireless Network Adapter
 # MT7612E too?
 	7662  MT7662E 802.11ac PCI Express Wireless Network Adapter
+	7915  MT7915E 802.11ax PCI Express Wireless Network Adapter
 14c4  IWASAKI Information Systems Co Ltd
 14c5  Automation Products AB
 14c6  Data Race Inc
@@ -18923,11 +19018,13 @@
 		103c 0890  NC6000 laptop
 		103c 099c  NX6110/NC6120
 		10cf 1279  LifeBook E8010D
-	165f  NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
+	165f  NetXtreme BCM5720 Gigabit Ethernet PCIe
 		1028 04f7  PowerEdge R320 server
 		1028 08fd  PowerEdge R6515/R7515 LOM
 		1028 08ff  PowerEdge Rx5xx LOM Board
 		1028 0900  PowerEdge C6525 LOM
+# Dell 5720 LOM
+		1028 0917  PowerEdge C6520 LOM
 		103c 1786  NC332T Adapter
 		103c 193d  NC332i Adapter
 		103c 2133  NC332i Adapter
@@ -19160,12 +19257,12 @@
 	16d4  BCM57402 NetXtreme-E Ethernet Partition
 	16d5  BCM57407 NetXtreme-E 10GBase-T Ethernet Controller
 	16d6  BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller
+		14e4 1202  BCM957412M4122C OCP 1x25G Type1 wRoCE
 		14e4 4120  NetXtreme E-Series Advanced Dual-port 10Gb SFP+ Ethernet Network Daughter Card
 		14e4 4126  NetXtreme-E Dual-port 10G SFP+ Ethernet OCP 3.0 Adapter (BCM957412N4120C)
 		152d 8b20  BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller
 		152d 8b22  BCM57412 NetXtreme-E 25Gb RDMA Ethernet Controller
 	16d7  BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller
-		14e4 1202  BCM957412M4122C OCP 1x25G Type1 wRoCE
 		14e4 1402  BCM957414A4142CC 10Gb/25Gb Ethernet PCIe
 		14e4 1404  BCM957414M4142C OCP 2x25G Type1 wRoCE
 		14e4 4140  NetXtreme E-Series Advanced Dual-port 25Gb SFP28 Network Daughter Card
@@ -19227,16 +19324,25 @@
 	1750  BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
 		14e4 2100  NetXtreme-E Dual-port 100G QSFP56 Ethernet PCIe4.0 x16 Adapter (BCM957508-P2100G)
 		14e4 5208  NetXtreme-E Dual-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957508-N2100G)
+		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet
 	1751  BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
 	1752  BCM57502 NetXtreme-E 10Gb/25Gb/40Gb/50Gb Ethernet
 	1800  BCM57502 NetXtreme-E Ethernet Partition
 	1801  BCM57504 NetXtreme-E Ethernet Partition
 	1802  BCM57508 NetXtreme-E Ethernet Partition
+		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Partition
 	1803  BCM57502 NetXtreme-E RDMA Partition
 	1804  BCM57504 NetXtreme-E RDMA Partition
-	1805  BCM57508 NetXtreme-E RDMA Partition
+	1805  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Partition
+		14e4 df24  NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz RDMA Partition
 	1806  BCM5750X NetXtreme-E Ethernet Virtual Function
+		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Virtual Function
 	1807  BCM5750X NetXtreme-E RDMA Virtual Function
+		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Virtual Function
+	1808  BCM5750X NetXtreme-E Ethernet Virtual Function
+		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Virtual Function
+	1809  BCM5750X NetXtreme-E RDMA Virtual Function
+		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Virtual Function
 	2711  BCM2711 PCIe Bridge
 	3352  BCM3352
 	3360  BCM3360
@@ -19439,6 +19545,7 @@
 	4410  BCM4413 iLine32 HomePNA 2.0
 	4411  BCM4413 V.90 56k modem
 	4412  BCM4412 10/100BaseT
+	4415  BCM4359 802.11ac Dual-Band Wireless Network Controller
 	441f  BCM4361 802.11ac Dual-Band Wireless Network Controller
 	4420  BCM4361 802.11ac 2.4 GHz Wireless Network Controller
 	4421  BCM4361 802.11ac 5 GHz Wireless Network Controller
@@ -20000,6 +20107,7 @@
 	9260  RCIM-II Real-Time Clock & Interrupt Module
 	9271  RCIM-III Real-Time Clock & Interrupt Module (PCIe)
 	9272  Pulse Width Modulator Card
+	9273  RCIM-IV Real-Time Clock & Interrupt Module (PCIe)
 	9277  5 Volt Delta Sigma Converter Card
 	9278  10 Volt Delta Sigma Converter Card
 	9287  Analog Output Card
@@ -20291,7 +20399,13 @@
 		15b3 0021  MCX4421A-ACQN ConnectX-4 Lx EN OCP,2x25G
 		15b3 0025  ConnectX-4 Lx 25 GbE Dual Port SFP28 rNDC
 		193d 100a  620F-B
+# NIC-ETH540F-LP-2P SFP+ Ethernet Card
+		193d 1023  NIC-ETH540F-LP-2P
 		193d 1031  NIC-ETH640i-Mb-2x25G
+# NIC-ETH640F-3S-2P OCP3.0 Card
+		193d 1083  NIC-ETH640F-3S-2P
+# NIC-ETH540F-3S-2P OCP3.0 2x10G Card
+		193d 1084  NIC-ETH540F-3S-2P
 	1016  MT27710 Family [ConnectX-4 Lx Virtual Function]
 	1017  MT27800 Family [ConnectX-5]
 		15b3 0006  ConnectX®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT
@@ -20319,6 +20433,10 @@
 	1979  MT2910 Family [ConnectX-7 PCIe Bridge]
 	197a  MT43162 Family [BlueField-3 Lx SoC PCIe Bridge]
 	197b  MT43244 Family [BlueField-3 SoC PCIe Bridge]
+	2020  MT2892 Family [ConnectX-6 Dx Emulated PCIe Bridge]
+	2021  MT42822 Family [BlueField-2 SoC Emulated PCIe Bridge]
+	2023  MT2910 Family [ConnectX-7 Emulated PCIe Bridge]
+	2024  MT43244 Family [BlueField-3 SoC Emulated PCIe Bridge]
 	4117  MT27712A0-FDCF-AE
 		1bd4 0039  SN10XMP2P25
 		1bd4 003a  25G SFP28 SP EO251FM9 Adapter
@@ -20735,6 +20853,9 @@
 	2086  CryptoServer Se-Series Hardware Security Module
 	c040  CryptoServer CSe-Series Hardware Security Module
 	c051  CryptoServer Se-Series Gen2 Hardware Security Module
+	c070  u.trust Anchor Hardware Security Module cs7.2 Series
+	c071  u.trust Anchor Hardware Security Module cs7.3 Series
+	c072  u.trust Anchor Hardware Security Module cs7.3 Series Virtual Function
 # nee Atheros Communications, Inc.
 168c  Qualcomm Atheros
 	0007  AR5210 Wireless Network Adapter [AR5000 802.11a]
@@ -21409,8 +21530,10 @@
 	8083  GL880 USB 1.1 UHCI controller
 	8084  GL880 USB 2.0 EHCI controller
 	9750  GL9750 SD Host Controller
+	9755  GL9755 SD Host Controller
 	e763  GL9763E eMMC Controller
 17aa  Lenovo
+	3181  ThinkCentre M75n IoT
 	402b  Intel 82599ES 10Gb 2-port Server Adapter X520-2
 17ab  Phillips Components
 17af  Hightech Information System Ltd.
@@ -21433,10 +21556,11 @@
 		1385 6d00  WPNT511 RangeMax 240 Mbps Wireless CardBus Adapter
 		1737 0054  WPC54GX4 v1 802.11g Wireless-G Notebook Adapter with SRX400
 	0105  MSM8998 PCIe Root Complex
-	0108  SM8150/SA8195P PCIe Root Complex
-	0300  MDM9x35 LTE Modem
-	0301  MDM9640 PCIe Root Complex
-	0302  MDM9x55 LTE Modem [Snapdragon X12]
+	0108  SM8150 PCIe Root Complex
+	0109  SA8195P PCIe Root Complex
+	0300  MDM9x35 LTE Modem [Snapdragon X7]
+	0301  MDM9x45 LTE Modem [Snapdragon X12]
+	0302  MDM9x55 LTE Modem [Snapdragon X16]
 	0400  Datacenter Technologies QDF2432 PCI Express Root Port
 	0401  Datacenter Technologies QDF2400 PCI Express Root Port
 	1000  QCS405 PCIe Root Complex
@@ -22780,6 +22904,7 @@
 	1052  Virtio input
 # virtio 1.0
 	1053  Virtio socket
+	105a  Virtio file system
 	1110  Inter-VM shared memory
 		1af4 1100  QEMU Virtual Machine
 1af5  Netezza Corp.
@@ -22805,8 +22930,10 @@
 	1080  ASM1083/1085 PCIe to PCI Bridge
 		1849 1080  Motherboard
 	1142  ASM1042A USB 3.0 Host Controller
-	1184  ASM1184e PCIe Switch Port
-		1849 1184  ASM1184e PCIe Switch
+	1182  ASM1182e 2-Port PCIe x1 Gen2 Packet Switch
+		1b21 118f  ASM1182e 2-Port PCIe x1 Gen2 Packet Switch
+	1184  ASM1184e 4-Port PCIe x1 Gen2 Packet Switch
+		1849 1184  ASM1184e 4-Port PCIe x1 Gen2 Packet Switch
 	1242  ASM1142 USB 3.1 Host Controller
 	1343  ASM1143 USB 3.1 Host Controller
 	2142  ASM2142 USB 3.1 Host Controller
@@ -22877,6 +23004,8 @@
 	0601  NumaChip N601
 	0602  NumaChip N602
 1b4b  Marvell Technology Group Ltd.
+# device 1b4b:0100 reports incorrect vendor id due to hw erratum (correct is 11ab)
+	0100  88F3700 [Armada 3700 Family] ARM SoC
 	0640  88SE9128 SATA III 6Gb/s RAID Controller
 	2241  88NR2241 Non-Volatile memory controller
 		1028 2112  BOSS-N1 Monolithic
@@ -23020,6 +23149,8 @@
 # Kersey 2.5" TCG
 		1bb1 0152  Nytro 5520 TCG
 		1bb1 01a1  Nytro XP7102
+	5012  FireCuda 510 SSD
+	5016  FireCuda 520 SSD
 1bb3  Bluecherry
 	4304  BC-04120A MPEG4 4 port video encoder / decoder
 	4309  BC-08240A MPEG4 4 port video encoder / decoder
@@ -23034,6 +23165,16 @@
 1bbf  Maxeler Technologies Ltd.
 	0003  MAX3
 	0004  MAX4
+1bc0  Innodisk Corporation
+	1001  PCIe 3TG6-P Controller
+	1002  PCIe 3TE6 Controller
+	1160  PCIe 3TE2 Controller
+	1321  PCIe 4TG-P Controller
+	1322  PCIe 4TE Controller
+	2262  PCIe 3TG3-P Controller
+	5208  PCIe 3TE7 Controller
+	5216  PCIe 3TE8 Controller
+	5236  PCIe 4TG2-P Controller
 1bcf  NEC Corporation
 	001c  Vector Engine 1.0
 1bd0  Astronics Corporation
@@ -23041,9 +23182,17 @@
 	1002  PM1553-5 (PC/104+ MIL-STD-1553 Interface Card)
 	1004  AB3000 Series Rugged Computer
 	1005  PE1000 (Multi-Protocol PCIe/104 Interface Card)
+	1006  webCS Wireless Aircraft Communications Server
+	1007  AB3000 Series Rugged Computer (Series N)
+	1008  ME1000 mPCIe Avionics Interface Card
+	100a  NG1 Series Avionics Converter
 	1101  OmniBus II PCIe Multi-Protocol Interface Card
 	1102  OmniBusBox II Multi-Protocol Interface Core
 	1103  OmniBus II cPCIe/PXIe Multi-Protocol Interface Card
+	1200  NG3 Series Mil-Std-1553 Interface
+	1201  NG3 Series ARINC 429 Interface
+	1202  NG3 Series Avionics Discrete & Serial Interface
+	1203  NG3 Series Avionics Discrete Interface
 1bd4  Inspur Electronic Information Industry Co., Ltd.
 	0911  Arria10_PCIe_F10A1150
 1bee  IXXAT Automation GmbH
@@ -23076,6 +23225,7 @@
 	001b  FD720
 	001c  FD922
 	001d  Vega
+	001f  FD940
 1c28  Lite-On IT Corp. / Plextor
 	0122  M6e PCI Express SSD [Marvell 88SS9183]
 # previously Fiberblaze
@@ -23096,6 +23246,8 @@
 	00e1  PacketMover 2x100Gb [Tivoli]
 	00e3  PacketMover 2x10Gb [Tivoli]
 	00e5  PacketMover 2x10Gb [Corfu]
+	1000  SmartNIC N5010 4x100Gb
+	1001  SmartNIC N5011 w/2xE810 4x100Gb
 	a000  FBC2CGG3 Capture 2x40Gb [Mango_02]
 	a001  FBC2CGG3 Capture 2x100Gb [Mango_02]
 	a003  FBC2CGG3 Capture 16x10Gb [Mango]
@@ -23167,6 +23319,10 @@
 	0001  Hunter PCI Express
 1c8c  Mobiveil, Inc.
 1cb0  Shannon Systems
+	8266  Andalusia Series SSD
+		1cb0 2021  Andalusia Series OCS U.2 SSD
+		1cb0 2121  Andalusia Series ZNS U.2 SSD
+		1cb0 2f21  Andalusia Series NVMe U.2 SSD
 	d000  Venice NVMe SSD
 		1cb0 2010  Venice-E Series OCS U.2
 		1cb0 2011  Venice Series OCS U.2
@@ -23228,6 +23384,7 @@
 	0009  ExaNIC X25
 	000a  ExaNIC X100
 	000b  ExaNIC V9P
+	000c  ExaNIC V9P-3
 	0100  ExaDISK FX1
 1cf0  Akitio
 1cf7  Subspace Dynamics
@@ -23391,9 +23548,11 @@
 	0101  Codensity D400 SSD
 	0102  Codensity D408 PCIe Gen4 NVMe SSD
 	0202  Codensity T408 Video Encoding-Decoding Accelerator
-1d87  Fuzhou Rockchip Electronics Co., Ltd
+# nee Fuzhou Rockchip Electronics Co., Ltd
+1d87  Rockchip Electronics Co., Ltd
 	0100  RK3399 PCI Express Root Port
 	1808  RK1808 Neural Network Processor Card
+	3566  RK3568 Remote Signal Processor
 1d8f  Enyx
 1d93  YADRO
 1d94  Chengdu Haiguang IC Design Co., Ltd.
@@ -23512,7 +23671,7 @@
 	0000  TSP100 Tensor Streaming Processor
 1de1  Tekram Technology Co.,Ltd.
 	0391  TRM-S1040 [DC-315 / DC-395 series]
-	2020  DC-390
+	2020  DC-390 Series SCSI Adapter [AMD Am53C974]
 	690c  690c
 	dc29  DC290
 1de5  Eideticom, Inc
@@ -23588,6 +23747,12 @@
 	0206  ACE-NIC200 Programmable Network Accelerator
 		1df3 0000  Maintenance Mode
 		1df3 0001  ENA2200F
+	0207  ACE-NIC50RN Programmable Network Accelerator
+		1df3 0000  Maintenance Mode
+		1df3 0001  ENA2050RN
+	0208  ACE-NIC100RN Programmable Network Accelerator
+		1df3 0000  Maintenance Mode
+		1df3 0001  ENA2100RN
 1df7  opencpi.org
 	0001  ml605
 	0002  alst4
@@ -23703,6 +23868,9 @@
 1eae  XFX Limited
 1eb1  VeriSilicon Inc
 	1001  Video Accelerator
+1ebd  Emerge Technologies Company Ltd.
+	0101  Seirios 2063 Video Codec
+1ed3  Yeston
 1ed8  Digiteq Automotive
 	0101  FG4 PCIe Frame Grabber
 1ed9  Myrtle.ai
@@ -23789,6 +23957,7 @@
 	2010  8142 100VG/AnyLAN
 2646  Kingston Technology Company, Inc.
 	0010  HyperX Predator PCIe AHCI SSD
+	2262  KC2000 NVMe SSD
 	2263  A2000 NVMe SSD
 	5008  U-SNS8154P3 NVMe SSD
 	500d  OM3PDP3 NVMe SSD
@@ -23956,8 +24125,7 @@
 	7053  CH353 PCI Dual Serial and Parallel Ports Controller
 	7073  CH356 PCI Quad Serial and Parallel Ports Controller
 	7173  CH355 PCI Quad Serial Port Controller
-434e  CAST Navigation LLC
-43b0  Tiger Lake-H PCIe Root Port #9
+434e  Cornelis Networks
 43bc  Tiger Lake-H PCIe Root Port #5
 4444  Internext Compression Inc
 	0016  iTVC16 (CX23416) Video Decoder
@@ -24648,6 +24816,7 @@
 		8086 0034  Wireless-AC 9560 160MHz
 		8086 0070  Wi-Fi 6 AX201 160MHz
 		8086 0074  Wi-Fi 6 AX201 160MHz
+		8086 4070  Wireless-AC 9462 80MHz
 	02f5  Comet Lake PCH-LP SCS3
 	02f9  Comet Lake Thermal Subsytem
 	02fc  Comet Lake Integrated Sensor Solution
@@ -24742,9 +24911,12 @@
 	06ab  Comet Lake PCH Serial IO SPI Controller #1
 	06ac  Comet Lake PCI Express Root Port #21
 	06b0  Comet Lake PCI Express Root Port #9
+	06bd  Comet Lake PCIe Port #6
 	06c0  Comet Lake PCI Express Root Port #17
 	06c8  Comet Lake PCH cAVS
+	06d2  Comet Lake SATA AHCI Controller
 	06e0  Comet Lake HECI Controller
+	06e3  Comet Lake Keyboard and Text (KT) Redirection
 	06e8  Comet Lake PCH Serial IO I2C Controller #0
 	06e9  Comet Lake PCH Serial IO I2C Controller #1
 	06ea  Comet Lake PCH Serial IO I2C Controller #2
@@ -25243,6 +25415,9 @@
 		1028 2103  NVMe RI U.2 3.84TB (P5500)
 		1028 2104  NVMe RI U.2 7.68TB (P5500)
 		8086 8008  NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510)
+		8086 8d08  NVMe Datacenter SSD [3DNAND] VE 2.5" U.2 (P5316)
+		8086 8d1d  NVMe Datacenter SSD [3DNAND] VE E1.L 9.5/18mm (P5316)
+	0bd0  Ponte Vecchio 2T
 	0be0  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
 	0be1  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
 		105b 0d7c  D270S/D250S Motherboard
@@ -26364,6 +26539,8 @@
 		18d4 0c07  I350 1Gb 2-port RJ45 OCP Mezz Card MOP41-I-1GT2
 		193d 1005  360T-B
 		193d 1007  360T-L
+# NIC-ETH360T-3S-4P OCP3.0 4x1G Base-T Card
+		193d 1080  NIC-ETH360T-3S-4P
 		1bd4 001d  1G base-T QP EP014Ti1 Adapter
 		1bd4 0035  1G base-T QP EP014Ti1 Adapter
 		8086 0001  Ethernet Server Adapter I350-T4
@@ -26537,6 +26714,8 @@
 		17aa 4002  ThinkServer X710-2 AnyFabric for 10GbE SFP+
 		193d 1020  NIC-ETH561F-sL-4x10G
 		193d 1021  NIC-ETH561F-sL-2x10G
+# NIC-ETH561F-3S-2P OCP3.0 2x10G SFP+ Card
+		193d 1081  NIC-ETH561F-3S-2P
 		19e5 d11c  Ethernet 2-port X710 10Gb SFP+ Adapter SP330
 		1bd4 0042  10G SFP+ DP EP102Fi4 Adapter
 		1bd4 0056  Ethernet Network Adapter X710-BM2 for OCP NIC 3.0
@@ -26669,6 +26848,7 @@
 	1591  Ethernet Controller E810-C for backplane
 	1592  Ethernet Controller E810-C for QSFP
 		1137 02bf  E810CQDA2 2x100 GbE QSFP28 PCIe NIC
+		193d 1050  NIC-ETH1060F-LP-2P 2x100GbE Ethernet PCIe Card
 		8086 0001  Ethernet Network Adapter E810-C-Q1
 		8086 0002  Ethernet Network Adapter E810-C-Q2
 		8086 0004  Ethernet Network Adapter E810-C-Q2
@@ -26679,6 +26859,7 @@
 		8086 000b  Ethernet 100G 2P E810-C Adapter
 		8086 000c  Ethernet 100G 2P E810-C OCP
 		8086 000d  Ethernet Network Adapter E810-L-Q2 for OCP 3.0
+		8086 000e  Ethernet Network Adapter E810-2C-Q2
 	1593  Ethernet Controller E810-C for SFP
 		1137 02c3  E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
 		8086 0002  Ethernet Network Adapter E810-L-2
@@ -26795,6 +26976,8 @@
 		1137 02c2  X710T4LG 4x10 GbE RJ45 PCIe NIC
 		1137 02d9  Ethernet Network Adapter X710-T2L OCP 3.0
 		1137 02da  Ethernet Network Adapter X710-T4L OCP 3.0
+# NIC-ETH565T-3S-2P OCP3.0 2x10G Base-T Card
+		193d 1082  NIC-ETH565T-3S-2P
 		8086 0000  Ethernet Network Adapter X710-TL
 		8086 0001  Ethernet Network Adapter X710-T4L
 		8086 0002  Ethernet Network Adapter X710-T4L
@@ -28244,6 +28427,7 @@
 		1cb8 0002  Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC6600 Fixed Port
 		1cb8 0003  Omni-Path HFI Adapter 100 Series, 2 Port, 2 PCIe x16, Earth Simulation QSFP28
 		1cb8 0004  Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC4600E QSFP28
+		434e 0001  Omni-Path HFI 100 Series, 1 Port, OCP 3.0 Adapter
 		8086 2628  Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16
 		8086 2629  Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x8
 		8086 262a  Omni-Path HFI Adapter 100 Series, 2 Ports, Split PCIe x16
@@ -28782,6 +28966,20 @@
 		8086 3905  NVMe Datacenter SSD [Optane] 15mm 2.5" U.2 (P4800X)
 	2723  Wi-Fi 6 AX200
 		8086 2723  Wireless AX200
+	2725  Wi-Fi 6 AX210/AX211/AX411 160MHz
+		8086 0020  Wi-Fi 6 AX210 160MHz
+		8086 0024  Wi-Fi 6 AX210 160MHz
+		8086 0090  Wi-Fi 6 AX211 160MHz
+		8086 00b0  Wi-Fi 6 AX411 160MHz
+		8086 0310  Wi-Fi 6 AX210 160MHz
+		8086 0510  Wi-Fi 6 AX210 160MHz
+		8086 0a10  Wi-Fi 6 AX210 160MHz
+		8086 2020  Wi-Fi 6 AX210 160MHz
+		8086 4020  Wi-Fi 6 AX210 160MHz
+		8086 6020  Wi-Fi 6 AX210 160MHz
+		8086 6024  Wi-Fi 6 AX210 160MHz
+		8086 e020  Wi-Fi 6 AX210 160MHz
+		8086 e024  Wi-Fi 6 AX210 160MHz
 	2770  82945G/GZ/P/PL Memory Controller Hub
 		1028 01ad  OptiPlex GX620
 		103c 2a3b  Pavilion A1512X
@@ -31043,7 +31241,7 @@
 	4140  NVMe Datacenter SSD [Optane]
 		1028 2134  NVMe Datacenter SSD [Optane] SED 400GB 2.5" U.2 (P5800X)
 		1028 2135  NVMe Datacenter SSD [Optane] SED 800GB 2.5" U.2 (P5800X)
-		1028 2136  NVMe Datacenter SSD [Optane] SED 1.6GB 2.5" U.2 (P5800X)
+		1028 2136  NVMe Datacenter SSD [Optane] SED 1.6TB 2.5" U.2 (P5800X)
 		1028 2137  NVMe Datacenter SSD [Optane] 400GB 2.5" U.2 (P5800X)
 		1028 2138  NVMe Datacenter SSD [Optane] 800GB 2.5" U.2 (P5800X)
 		1028 2139  NVMe Datacenter SSD [Optane] 1.6TB 2.5" U.2 (P5800X)
@@ -31139,20 +31337,42 @@
 	438b  Tiger Lake-H LPC/eSPI Controller
 	43a3  Tiger Lake-H SMBus Controller
 	43a4  Tiger Lake-H SPI Controller
+	43b0  Tiger Lake-H PCI Express Root Port #9
+	43bc  Tiger Lake-H PCI Express Root Port #5
 	43c8  Tiger Lake-H HD Audio Controller
 	43e0  Tiger Lake-H Management Engine Interface
 	43e8  Tiger Lake-H Serial IO I2C Controller #0
 	43ed  Tiger Lake-H USB 3.2 Gen 2x1 xHCI Host Controller
*** 102 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:32:35 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8A5A4635353;
 Wed,  5 May 2021 08:32:35 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqhg27Jsz3Krg;
 Wed,  5 May 2021 08:32:35 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3A8FB21CA2;
 Wed,  5 May 2021 08:32:35 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458WZob042604;
 Wed, 5 May 2021 08:32:35 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458WZdt042603;
 Wed, 5 May 2021 08:32:35 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:32:35 GMT
Message-Id: <202105050832.1458WZdt042603@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 320e553b49c7 - stable/13 - pci_vendors: update to 2021-05-04
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 320e553b49c73853820b36a53126b973d14aff78
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:32:35 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=320e553b49c73853820b36a53126b973d14aff78

commit 320e553b49c73853820b36a53126b973d14aff78
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-05-04 12:02:41 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:30:54 +0000

    pci_vendors: update to 2021-05-04
    
    (cherry picked from commit 3657010266b235f6394aefbe755dc316bb2535b4)
---
 share/misc/pci_vendors | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/share/misc/pci_vendors b/share/misc/pci_vendors
index 1a00db8f19dc..9deb7293e596 100644
--- a/share/misc/pci_vendors
+++ b/share/misc/pci_vendors
@@ -1,8 +1,8 @@
 #
 #	List of PCI ID's
 #
-#	Version: 2021.04.26
-#	Date:    2021-04-26 03:15:02
+#	Version: 2021.05.04
+#	Date:    2021-05-04 03:15:01
 #
 #	Maintained by Albert Pool, Martin Mares, and other volunteers from
 #	the PCI ID Project at https://pci-ids.ucw.cz/.
@@ -12142,6 +12142,7 @@
 	1e04  TU102 [GeForce RTX 2080 Ti]
 	1e07  TU102 [GeForce RTX 2080 Ti Rev. A]
 		1462 3715  RTX 2080 Ti GAMING X TRIO
+	1e09  CMP 50HX
 	1e2d  TU102 [GeForce RTX 2080 Ti Engineering Sample]
 	1e2e  TU102 [GeForce RTX 2080 Ti 12GB Engineering Sample]
 	1e30  TU102GL [Quadro RTX 6000/8000]
@@ -12257,6 +12258,7 @@
 		10de 146d  GA102 [GeForce RTX 3080 20GB]
 		1462 3892  RTX 3080 10GB GAMING X TRIO
 	2208  GA102 [GeForce RTX 3080 Ti]
+	220d  GA102
 	222b  GA102 [GeForce RTX 3090 Engineering Sample]
 	222f  GA102 [GeForce RTX 3080 11GB / 12GB Engineering Sample]
 	2230  GA102GL [RTX A6000]
@@ -12281,13 +12283,15 @@
 	24ad  GA104 [GeForce RTX 3060 Engineering Sample]
 	24af  GA104 [GeForce RTX 3070 Engineering Sample]
 	24b0  GA104GL [RTX A4000]
-	24b6  GA104
-	24b8  GA104
+	24b6  GA104GLM [RTX A5000 Mobile]
+	24b7  GA104GLM [RTX A4000 Mobile]
+	24b8  GA104GLM [RTX A3000 Mobile]
 	24bf  GA104 [GeForce RTX 3070 Engineering Sample]
 	24dc  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 	24dd  GA104M [GeForce RTX 3070 Mobile / Max-Q]
 	2501  GA106 [GeForce RTX 3060]
 	2503  GA106 [GeForce RTX 3060]
+	2504  GA106 [GeForce RTX 3060 Lite Hash Rate]
 	2505  GA106
 	2520  GA106M [GeForce RTX 3060 Mobile / Max-Q]
 	252f  GA106 [GeForce RTX 3060 Engineering Sample]
@@ -12299,7 +12303,7 @@
 	25a5  GA107M
 	25af  GA107 [GeForce RTX 3050 Engineering Sample]
 	25b5  GA107GLM [RTX A4 Mobile]
-	25b8  GA107GLM
+	25b8  GA107GLM [RTX A2000 Mobile]
 	25e0  GA107BM
 	25e2  GA107BM
 10df  Emulex Corporation
@@ -19324,8 +19328,12 @@
 	1750  BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
 		14e4 2100  NetXtreme-E Dual-port 100G QSFP56 Ethernet PCIe4.0 x16 Adapter (BCM957508-P2100G)
 		14e4 5208  NetXtreme-E Dual-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957508-N2100G)
+		14e4 d124  NetXtreme-E P2100D BCM57508 2x100G QSFP PCIE
 		14e4 df24  BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet
 	1751  BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
+		14e4 5045  NetXtreme-E BCM57504 4x25G OCP3.0
+		14e4 5250  NetXtreme-E BCM57504 4x25G KR Mezz
+		14e4 d142  NetXtreme-E P425D BCM57504 4x25G SFP28 PCIE
 	1752  BCM57502 NetXtreme-E 10Gb/25Gb/40Gb/50Gb Ethernet
 	1800  BCM57502 NetXtreme-E Ethernet Partition
 	1801  BCM57504 NetXtreme-E Ethernet Partition
@@ -23868,7 +23876,7 @@
 1eae  XFX Limited
 1eb1  VeriSilicon Inc
 	1001  Video Accelerator
-1ebd  Emerge Technologies Company Ltd.
+1ebd  EMERGETECH Company Ltd.
 	0101  Seirios 2063 Video Codec
 1ed3  Yeston
 1ed8  Digiteq Automotive
@@ -26198,7 +26206,7 @@
 		103c 2159  Ethernet 10Gb 2-port 562i Adapter
 		108e 7b11  Ethernet Server Adapter X520-2
 		1170 004c  82599 DP 10G Mezzanine Adapter
-		15d9 0611  AOC-STGN-I2S [REV 1.01]
+		15d9 0611  AOC-STGN-i2S
 		1734 11a9  10 Gigabit Dual Port Network Connection
 		17aa 1071  ThinkServer X520-2 AnyFabric
 		17aa 4007  82599ES 10-Gigabit SFI/SFP+ Network Connection
@@ -26533,6 +26541,7 @@
 		1093 775b  PCIe-8237 Ethernet Adapter
 		10a9 802a  UV2-BaseIO dual-port GbE
 		1137 023e  1GigE I350 LOM
+		15d9 0000  AOC-SGP-i4
 		15d9 0652  Dual Port i350 GbE MicroLP [AOC-CGP-i2]
 		17aa 1074  ThinkServer I350-T4 AnyFabric
 		17aa 4005  I350 Gigabit Network Connection
@@ -27383,6 +27392,7 @@
 		15d9 066b  X9SRL-F
 	1d2d  C600/X79 series chipset USB2 Enhanced Host Controller #2
 		1028 04f7  C602J on PowerEdge R320 server
+		103c 18a9  HP DL360e G8
 		15d9 066b  X9SRL-F
 	1d33  C600/X79 series chipset LAN Controller
 	1d35  C600/X79 series chipset VECI Controller
@@ -30469,7 +30479,7 @@
 	31d9  Gemini Lake PCI Express Root Port
 	31da  Gemini Lake PCI Express Root Port
 	31db  Gemini Lake PCI Express Root Port
-	31dc  AC 1550i Wireless
+	31dc  Gemini Lake PCH CNVi WiFi
 	31e3  Celeron/Pentium Silver Processor SATA Controller
 	31e8  Celeron/Pentium Silver Processor LPC Controller
 	31ee  Celeron/Pentium Silver Processor Serial IO UART Host Controller
@@ -30570,7 +30580,7 @@
 	34eb  Ice Lake-LP Serial IO I2C Controller #3
 	34ed  Ice Lake-LP USB 3.1 xHCI Host Controller
 	34ef  Ice Lake-LP DRAM Controller
-	34f0  Killer Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)
+	34f0  Ice Lake-LP PCH CNVi WiFi
 	34f8  Ice Lake-LP SD Controller
 	34fc  Ice Lake-LP Integrated Sensor Solution
 	3500  6311ESB/6321ESB PCI Express Upstream Port
@@ -32145,6 +32155,7 @@
 	9a60  TigerLake-H GT1 [UHD Graphics]
 	9a68  TigerLake-H GT1 [UHD Graphics]
 	9b41  CometLake-U GT2 [UHD Graphics]
+		1028 09bd  Latitude 7310
 	9b44  10th Gen Core Processor Host Bridge/DRAM Registers
 	9b53  Comet Lake-S 6c Host Bridge/DRAM Controller
 	9b54  10th Gen Core Processor Host Bridge/DRAM Registers
@@ -32766,7 +32777,7 @@
 	a36d  Cannon Lake PCH USB 3.1 xHCI Host Controller
 		1028 0869  Vostro 3470
 	a36f  Cannon Lake PCH Shared SRAM
-	a370  Wireless-AC 9560 [Jefferson Peak]
+	a370  Cannon Lake PCH CNVi WiFi
 		1a56 1552  Killer(R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)
 	a379  Cannon Lake PCH Thermal Controller
 		1028 0869  Vostro 3470

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:16 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id DE79263567C;
 Wed,  5 May 2021 08:38:16 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqD60VVz3L2C;
 Wed,  5 May 2021 08:38:16 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C0FDB21CA5;
 Wed,  5 May 2021 08:38:16 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cGYR043596;
 Wed, 5 May 2021 08:38:16 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cGZG043595;
 Wed, 5 May 2021 08:38:16 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:16 GMT
Message-Id: <202105050838.1458cGZG043595@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: a3b7f912600b - stable/13 - cp: fix indentation
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: a3b7f912600b62ebd1740b44c96a9d8fa35b8ca6
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:16 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=a3b7f912600b62ebd1740b44c96a9d8fa35b8ca6

commit a3b7f912600b62ebd1740b44c96a9d8fa35b8ca6
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-26 09:52:22 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:35:02 +0000

    cp: fix indentation
    
    No functional changes
    
    (cherry picked from commit 45b252fc9182b96342b8a598f271e49c20cbfe40)
---
 bin/cp/utils.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bin/cp/utils.c b/bin/cp/utils.c
index 7742b0d0a516..e7ae0c9dd733 100644
--- a/bin/cp/utils.c
+++ b/bin/cp/utils.c
@@ -235,7 +235,7 @@ copy_file(const FTSENT *entp, int dne)
 			do {
 				if (use_copy_file_range) {
 					rcount = copy_file_range(from_fd, NULL,
-			    		    to_fd, NULL, SSIZE_MAX, 0);
+					    to_fd, NULL, SSIZE_MAX, 0);
 					if (rcount < 0 && errno == EINVAL) {
 						/* Prob a non-seekable FD */
 						use_copy_file_range = 0;

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:18 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1B36363599F;
 Wed,  5 May 2021 08:38:18 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqG00mgz3LBt;
 Wed,  5 May 2021 08:38:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E52C821BD8;
 Wed,  5 May 2021 08:38:17 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cHxE043618;
 Wed, 5 May 2021 08:38:17 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cHha043617;
 Wed, 5 May 2021 08:38:17 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:17 GMT
Message-Id: <202105050838.1458cHha043617@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 07d72ca90585 - stable/13 - diff: add a test case about the non
 regular file support
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 07d72ca90585ee98dbdd8f4fd2bb01bc2329d99c
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:18 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=07d72ca90585ee98dbdd8f4fd2bb01bc2329d99c

commit 07d72ca90585ee98dbdd8f4fd2bb01bc2329d99c
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-26 10:38:36 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:37:07 +0000

    diff: add a test case about the non regular file support
    
    (cherry picked from commit c440e7870a020546ad241848e2ff8e9cb27a3073)
---
 usr.bin/diff/tests/diff_test.sh | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/usr.bin/diff/tests/diff_test.sh b/usr.bin/diff/tests/diff_test.sh
index 6da2bbaea34d..60b56f0d9067 100755
--- a/usr.bin/diff/tests/diff_test.sh
+++ b/usr.bin/diff/tests/diff_test.sh
@@ -16,6 +16,7 @@ atf_test_case tabsize
 atf_test_case conflicting_format
 atf_test_case label
 atf_test_case report_identical
+atf_test_case non_regular_file
 
 simple_body()
 {
@@ -236,6 +237,19 @@ report_identical_body()
 		-o empty diff -s A B
 }
 
+non_regular_file_body()
+{
+	printf "\tA\n" > A
+	mkfifo B
+	printf "\tA\n" > B &
+
+	atf_check diff A B
+	printf "\tB\n" > B &
+	atf_check -s exit:1 \
+		-o inline:"--- A\n+++ B\n@@ -1 +1 @@\n-\tA\n+\tB\n" \
+		diff --label A --label B -u A B
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case simple
@@ -254,4 +268,5 @@ atf_init_test_cases()
 	atf_add_test_case conflicting_format
 	atf_add_test_case label
 	atf_add_test_case report_identical
+	atf_add_test_case non_regular_file
 }

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:19 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 51BF86357F6;
 Wed,  5 May 2021 08:38:19 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqH11PKz3L6Y;
 Wed,  5 May 2021 08:38:19 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0D132219BD;
 Wed,  5 May 2021 08:38:19 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cI7n043639;
 Wed, 5 May 2021 08:38:18 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cIC0043638;
 Wed, 5 May 2021 08:38:18 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:18 GMT
Message-Id: <202105050838.1458cIC0043638@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 0ce985a23b50 - stable/13 - diff: eliminate space at end of line
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 0ce985a23b505750faa446ebf7dae177bf3f88c4
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:19 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=0ce985a23b505750faa446ebf7dae177bf3f88c4

commit 0ce985a23b505750faa446ebf7dae177bf3f88c4
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-27 10:46:15 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:37:08 +0000

    diff: eliminate space at end of line
    
    No functionnal changes
    
    (cherry picked from commit 15abb23286541c17ff95bac056cd4979822c4288)
---
 usr.bin/diff/diffreg.c | 66 +++++++++++++++++++++++++-------------------------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index 4e887ab27c7b..e6b36697fb28 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -268,17 +268,17 @@ diffreg(char *file1, char *file2, int flags, int capsicum)
 	lastmatchline = 0;
 	context_vec_ptr = context_vec_start - 1;
 
-	 /* 
-	  * hw excludes padding and make sure when -t is not used, 
+	 /*
+	  * hw excludes padding and make sure when -t is not used,
 	  * the second column always starts from the closest tab stop
 	  */
-	if (diff_format == D_SIDEBYSIDE) { 
+	if (diff_format == D_SIDEBYSIDE) {
 		hw = width >> 1;
 		padding = tabsize - (hw % tabsize);
 		if ((flags & D_EXPANDTABS) != 0 || (padding % tabsize == 0))
 			padding = MIN_PAD;
 	
-		hw = (width >> 1) - 
+		hw = (width >> 1) -
 		    ((padding == MIN_PAD) ? (padding << 1) : padding) - 1;
 	}
 	
@@ -902,14 +902,14 @@ output(char *file1, FILE *f1, char *file2, FILE *f2, int flags)
 	if (diff_format != D_EDIT) {
 		for (i0 = 1; i0 <= m; i0 = i1 + 1) {
 			while (i0 <= m && J[i0] == J[i0 - 1] + 1){
-				if (diff_format == D_SIDEBYSIDE && 
+				if (diff_format == D_SIDEBYSIDE &&
 				    suppress_common != 1) {
-					nc = fetch(ixold, i0, i0, f1, '\0', 
+					nc = fetch(ixold, i0, i0, f1, '\0',
 					    1, flags);
-					print_space(nc, 
-					    (hw - nc) + (padding << 1) + 1, 
+					print_space(nc,
+					    (hw - nc) + (padding << 1) + 1,
 					    flags);
-					fetch(ixnew, J[i0], J[i0], f2, '\0', 
+					fetch(ixnew, J[i0], J[i0], f2, '\0',
 					    0, flags);
 					diff_output("\n");
 				}
@@ -923,32 +923,32 @@ output(char *file1, FILE *f1, char *file2, FILE *f2, int flags)
 			J[i1] = j1;
 
 			/*
-			 * When using side-by-side, lines from both of the 
-			 * files are printed. The algorithm used by diff(1) 
-			 * identifies the ranges in which two files differ. 
-			 * See the change() function below. 
-			 * The for loop below consumes the shorter range, 
-			 * whereas one of the while loops deals with the 
+			 * When using side-by-side, lines from both of the
+			 * files are printed. The algorithm used by diff(1)
+			 * identifies the ranges in which two files differ.
+			 * See the change() function below.
+			 * The for loop below consumes the shorter range,
+			 * whereas one of the while loops deals with the
 			 * longer one.
 			 */
 			if (diff_format == D_SIDEBYSIDE) {
-				for (i=i0, j=j0; i<=i1 && j<=j1; i++, j++) 
-					change(file1, f1, file2, f2, i, i, 
+				for (i=i0, j=j0; i<=i1 && j<=j1; i++, j++)
+					change(file1, f1, file2, f2, i, i,
 					    j, j, &flags);
 
 				while (i <= i1) {
-					change(file1, f1, file2, f2, 
+					change(file1, f1, file2, f2,
 					    i, i, j+1, j, &flags);
 					i++;
 				}
 
 				while (j <= j1) {
-					change(file1, f1, file2, f2, 
+					change(file1, f1, file2, f2,
 					    i+1, i, j, j, &flags);
 					j++;
 				}
 			} else
-				change(file1, f1, file2, f2, i0, i1, j0, 
+				change(file1, f1, file2, f2, i0, i1, j0,
 				    j1, &flags);
 		}
 	} else {
@@ -1188,10 +1188,10 @@ proceed:
 			print_space(0, hw + padding , *pflags);
 		} else {
 			nc = fetch(ixold, a, b, f1, '\0', 1, *pflags);
-			print_space(nc, hw - nc + padding, *pflags); 
+			print_space(nc, hw - nc + padding, *pflags);
 		}
 		diff_output("%c", (a>b)? '>' : ((c>d)? '<' : '|'));
-		print_space(hw + padding + 1 , padding, *pflags); 
+		print_space(hw + padding + 1 , padding, *pflags);
 		fetch(ixnew, c, d, f2, '\0', 0, *pflags);
 		diff_output("\n");
 	}
@@ -1260,13 +1260,13 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 	for (i = a; i <= b; i++) {
 		fseek(lb, f[i - 1], SEEK_SET);
 		nc = (f[i] - f[i - 1]);
-		if (diff_format == D_SIDEBYSIDE && hw < nc) 
+		if (diff_format == D_SIDEBYSIDE && hw < nc)
 			nc = hw;
-		if ((diff_format != D_IFDEF && diff_format != D_GFORMAT) && 
+		if ((diff_format != D_IFDEF && diff_format != D_GFORMAT) &&
 		    ch != '\0') {
 			diff_output("%c", ch);
-			if (Tflag && (diff_format == D_NORMAL || 
-			    diff_format == D_CONTEXT || 
+			if (Tflag && (diff_format == D_NORMAL ||
+			    diff_format == D_CONTEXT ||
 			    diff_format == D_UNIFIED))
 				diff_output("\t");
 			else if (diff_format != D_UNIFIED)
@@ -1275,7 +1275,7 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 		col = 0;
 		for (j = 0, lastc = '\0'; j < nc; j++, lastc = c) {
 			if ((c = getc(lb)) == EOF) {
-				if (diff_format == D_EDIT || 
+				if (diff_format == D_EDIT ||
 				    diff_format == D_REVERSE ||
 				    diff_format == D_NREVERSE)
 					warnx("No newline at end of file");
@@ -1284,8 +1284,8 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 					    "file\n");
 				return col;
 			}
-			/* 
-			 * when using --side-by-side, col needs to be increased 
+			/*
+			 * when using --side-by-side, col needs to be increased
 			 * in any case to keep the columns aligned
 			 */
 			if (c == '\t') {
@@ -1297,9 +1297,9 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 						diff_output(" ");
 					} while (++col < newcol && j < nc);
 				} else {
-					if (diff_format == D_SIDEBYSIDE) { 
+					if (diff_format == D_SIDEBYSIDE) {
 						if ((j + tabsize) > nc) {
-							diff_output("%*s", 
+							diff_output("%*s",
 							nc - j,"");
 							j = col = nc;
 						} else {
@@ -1691,9 +1691,9 @@ print_header(const char *file1, const char *file2)
 		    file2, buf2);
 }
 
-/* 
+/*
  * Prints n number of space characters either by using tab
- * or single space characters. 
+ * or single space characters.
  * nc is the preceding number of characters
  */
 static void

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:20 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8A96B63591C;
 Wed,  5 May 2021 08:38:20 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqJ2kYfz3L2K;
 Wed,  5 May 2021 08:38:20 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 39C7D21C33;
 Wed,  5 May 2021 08:38:20 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cK3X043660;
 Wed, 5 May 2021 08:38:20 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cKQG043659;
 Wed, 5 May 2021 08:38:20 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:20 GMT
Message-Id: <202105050838.1458cKQG043659@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: c5820184feb6 - stable/13 - diff: remove stalled entries in
 headers
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: c5820184feb6c76516da025233b6ac9be8eaf14d
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:20 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=c5820184feb6c76516da025233b6ac9be8eaf14d

commit c5820184feb6c76516da025233b6ac9be8eaf14d
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-27 11:13:47 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:37:08 +0000

    diff: remove stalled entries in headers
    
    (cherry picked from commit 931ad51808a650fd28be27210f25ba05d8e71199)
---
 usr.bin/diff/diff.h | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/usr.bin/diff/diff.h b/usr.bin/diff/diff.h
index 1974b5cc08d6..b5536bd7bf77 100644
--- a/usr.bin/diff/diff.h
+++ b/usr.bin/diff/diff.h
@@ -102,9 +102,6 @@ extern regex_t	ignore_re;
 
 char	*splice(char *, char *);
 int	diffreg(char *, char *, int, int);
-int	easprintf(char **, const char *, ...);
-void	*emalloc(size_t);
-void	*erealloc(void *, size_t);
 void	diffdir(char *, char *, int);
 void	print_only(const char *, size_t, const char *);
 void	print_status(int, char *, char *, const char *);

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:21 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9FC68635773;
 Wed,  5 May 2021 08:38:21 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqK3C96z3L08;
 Wed,  5 May 2021 08:38:21 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5E12421A56;
 Wed,  5 May 2021 08:38:21 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cLw9043681;
 Wed, 5 May 2021 08:38:21 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cL8h043680;
 Wed, 5 May 2021 08:38:21 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:21 GMT
Message-Id: <202105050838.1458cL8h043680@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: ffbf0225b7d2 - stable/13 - diff: fix typo in a comment
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: ffbf0225b7d2fbee1acd430eaf714b29f378bebf
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:21 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=ffbf0225b7d2fbee1acd430eaf714b29f378bebf

commit ffbf0225b7d2fbee1acd430eaf714b29f378bebf
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-26 14:20:44 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:37:09 +0000

    diff: fix typo in a comment
    
    (cherry picked from commit e52546a3a75f6e4b327178f4d50a98dd99101c64)
---
 usr.bin/diff/diffreg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index e6b36697fb28..9839171c5639 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -348,7 +348,7 @@ diffreg(char *file1, char *file2, int flags, int capsicum)
 		if (caph_rights_limit(fileno(f2), &rights_ro) < 0)
 			err(2, "unable to limit rights on: %s", file2);
 		if (fileno(f1) == STDIN_FILENO || fileno(f2) == STDIN_FILENO) {
-			/* stding has already been limited */
+			/* stdin has already been limited */
 			if (caph_limit_stderr() == -1)
 				err(2, "unable to limit stderr");
 			if (caph_limit_stdout() == -1)

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:24 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 23B52635A28;
 Wed,  5 May 2021 08:38:24 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqM5yX3z3L70;
 Wed,  5 May 2021 08:38:23 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A268821C34;
 Wed,  5 May 2021 08:38:23 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cN88043733;
 Wed, 5 May 2021 08:38:23 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cNJL043732;
 Wed, 5 May 2021 08:38:23 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:23 GMT
Message-Id: <202105050838.1458cNJL043732@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 7904a2e5a8c5 - stable/13 - diff: eleminitate useless macros
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 7904a2e5a8c56853bd39f5fe22a14cf8b526cd3c
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:24 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=7904a2e5a8c56853bd39f5fe22a14cf8b526cd3c

commit 7904a2e5a8c56853bd39f5fe22a14cf8b526cd3c
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-27 10:47:17 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:37:09 +0000

    diff: eleminitate useless macros
    
    The diff_output was not bringing any values but was obfuscating
    the code.
    
    (cherry picked from commit 7a57c9cb5a4dffb0483beeae6da7cf266ea634be)
---
 usr.bin/diff/diffreg.c | 113 ++++++++++++++++++++++++-------------------------
 1 file changed, 56 insertions(+), 57 deletions(-)

diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index 35d41b28fb7c..1b28281024c6 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -180,7 +180,6 @@ struct context_vec {
 	int	d;		/* end line in new file */
 };
 
-#define	diff_output	printf
 #define MIN_PAD		1
 static FILE	*opentemp(const char *);
 static void	 output(char *, FILE *, char *, FILE *, int);
@@ -911,7 +910,7 @@ output(char *file1, FILE *f1, char *file2, FILE *f2, int flags)
 					    flags);
 					fetch(ixnew, J[i0], J[i0], f2, '\0',
 					    0, flags);
-					diff_output("\n");
+					printf("\n");
 				}
 				i0++;
 			}
@@ -971,7 +970,7 @@ output(char *file1, FILE *f1, char *file2, FILE *f2, int flags)
 #define	c i0
 			if ((c = getc(f1)) == EOF)
 				return;
-			diff_output("%c", c);
+			printf("%c", c);
 		}
 #undef c
 	}
@@ -986,20 +985,20 @@ output(char *file1, FILE *f1, char *file2, FILE *f2, int flags)
 static void
 range(int a, int b, const char *separator)
 {
-	diff_output("%d", a > b ? b : a);
+	printf("%d", a > b ? b : a);
 	if (a < b)
-		diff_output("%s%d", separator, b);
+		printf("%s%d", separator, b);
 }
 
 static void
 uni_range(int a, int b)
 {
 	if (a < b)
-		diff_output("%d,%d", a, b - a + 1);
+		printf("%d,%d", a, b - a + 1);
 	else if (a == b)
-		diff_output("%d", b);
+		printf("%d", b);
 	else
-		diff_output("%d,0", b);
+		printf("%d,0", b);
 }
 
 static char *
@@ -1090,7 +1089,7 @@ restart:
 	}
 proceed:
 	if (*pflags & D_HEADER && diff_format != D_BRIEF) {
-		diff_output("%s %s %s\n", diffargs, file1, file2);
+		printf("%s %s %s\n", diffargs, file1, file2);
 		*pflags &= ~D_HEADER;
 	}
 	if (diff_format == D_CONTEXT || diff_format == D_UNIFIED) {
@@ -1137,24 +1136,24 @@ proceed:
 	case D_NORMAL:
 	case D_EDIT:
 		range(a, b, ",");
-		diff_output("%c", a > b ? 'a' : c > d ? 'd' : 'c');
+		printf("%c", a > b ? 'a' : c > d ? 'd' : 'c');
 		if (diff_format == D_NORMAL)
 			range(c, d, ",");
-		diff_output("\n");
+		printf("\n");
 		break;
 	case D_REVERSE:
-		diff_output("%c", a > b ? 'a' : c > d ? 'd' : 'c');
+		printf("%c", a > b ? 'a' : c > d ? 'd' : 'c');
 		range(a, b, " ");
-		diff_output("\n");
+		printf("\n");
 		break;
 	case D_NREVERSE:
 		if (a > b)
-			diff_output("a%d %d\n", b, d - c + 1);
+			printf("a%d %d\n", b, d - c + 1);
 		else {
-			diff_output("d%d %d\n", a, b - a + 1);
+			printf("d%d %d\n", a, b - a + 1);
 			if (!(c > d))
 				/* add changed lines */
-				diff_output("a%d %d\n", b, d - c + 1);
+				printf("a%d %d\n", b, d - c + 1);
 		}
 		break;
 	}
@@ -1163,7 +1162,7 @@ proceed:
 		/* print through if append (a>b), else to (nb: 0 vs 1 orig) */
 		nc = ixold[a > b ? b : a - 1] - curpos;
 		for (i = 0; i < nc; i++)
-			diff_output("%c", getc(f1));
+			printf("%c", getc(f1));
 		for (walk = group_format; *walk != '\0'; walk++) {
 			if (*walk == '%') {
 				walk++;
@@ -1175,12 +1174,12 @@ proceed:
 					fetch(ixnew, c, d, f2, '>', 0, *pflags);
 					break;
 				default:
-					diff_output("%%%c", *walk);
+					printf("%%%c", *walk);
 					break;
 				}
 				continue;
 			}
-			diff_output("%c", *walk);
+			printf("%c", *walk);
 		}
 	}
 	if (diff_format == D_SIDEBYSIDE) {
@@ -1190,15 +1189,15 @@ proceed:
 			nc = fetch(ixold, a, b, f1, '\0', 1, *pflags);
 			print_space(nc, hw - nc + padding, *pflags);
 		}
-		diff_output("%c", (a>b)? '>' : ((c>d)? '<' : '|'));
+		printf("%c", (a>b)? '>' : ((c>d)? '<' : '|'));
 		print_space(hw + padding + 1 , padding, *pflags);
 		fetch(ixnew, c, d, f2, '\0', 0, *pflags);
-		diff_output("\n");
+		printf("\n");
 	}
 	if (diff_format == D_NORMAL || diff_format == D_IFDEF) {
 		fetch(ixold, a, b, f1, '<', 1, *pflags);
 		if (a <= b && c <= d && diff_format == D_NORMAL)
-			diff_output("---\n");
+			printf("---\n");
 	}
 	if (diff_format != D_GFORMAT && diff_format != D_SIDEBYSIDE)
 		fetch(ixnew, c, d, f2, diff_format == D_NORMAL ? '>' : '\0', 0, *pflags);
@@ -1210,17 +1209,17 @@ proceed:
 		 * it.  We have to add a substitute command to change this
 		 * back and restart where we left off.
 		 */
-		diff_output(".\n");
-		diff_output("%ds/.//\n", a + edoffset - 1);
+		printf(".\n");
+		printf("%ds/.//\n", a + edoffset - 1);
 		b = a + edoffset - 1;
 		a = b + 1;
 		c += edoffset;
 		goto restart;
 	}
 	if ((diff_format == D_EDIT || diff_format == D_REVERSE) && c <= d)
-		diff_output(".\n");
+		printf(".\n");
 	if (inifdef) {
-		diff_output("#endif /* %s */\n", ifdefname);
+		printf("#endif /* %s */\n", ifdefname);
 		inifdef = 0;
 	}
 }
@@ -1241,19 +1240,19 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 		/* print through if append (a>b), else to (nb: 0 vs 1 orig) */
 		nc = f[a > b ? b : a - 1] - curpos;
 		for (i = 0; i < nc; i++)
-			diff_output("%c", getc(lb));
+			printf("%c", getc(lb));
 	}
 	if (a > b)
 		return (0);
 	if (diff_format == D_IFDEF) {
 		if (inifdef) {
-			diff_output("#else /* %s%s */\n",
+			printf("#else /* %s%s */\n",
 			    oldfile == 1 ? "!" : "", ifdefname);
 		} else {
 			if (oldfile)
-				diff_output("#ifndef %s\n", ifdefname);
+				printf("#ifndef %s\n", ifdefname);
 			else
-				diff_output("#ifdef %s\n", ifdefname);
+				printf("#ifdef %s\n", ifdefname);
 		}
 		inifdef = 1 + oldfile;
 	}
@@ -1264,13 +1263,13 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 			nc = hw;
 		if ((diff_format != D_IFDEF && diff_format != D_GFORMAT) &&
 		    ch != '\0') {
-			diff_output("%c", ch);
+			printf("%c", ch);
 			if (Tflag && (diff_format == D_NORMAL ||
 			    diff_format == D_CONTEXT ||
 			    diff_format == D_UNIFIED))
-				diff_output("\t");
+				printf("\t");
 			else if (diff_format != D_UNIFIED)
-				diff_output(" ");
+				printf(" ");
 		}
 		col = 0;
 		for (j = 0, lastc = '\0'; j < nc; j++, lastc = c) {
@@ -1280,7 +1279,7 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 				    diff_format == D_NREVERSE)
 					warnx("No newline at end of file");
 				else
-					diff_output("\n\\ No newline at end of "
+					printf("\n\\ No newline at end of "
 					    "file\n");
 				return col;
 			}
@@ -1294,21 +1293,21 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 					do {	
 						if (diff_format == D_SIDEBYSIDE)
 							j++;
-						diff_output(" ");
+						printf(" ");
 					} while (++col < newcol && j < nc);
 				} else {
 					if (diff_format == D_SIDEBYSIDE) {
 						if ((j + tabsize) > nc) {
-							diff_output("%*s",
+							printf("%*s",
 							nc - j,"");
 							j = col = nc;
 						} else {
-							diff_output("\t");
+							printf("\t");
 							col += tabsize - 1;
 							j += tabsize - 1;
 						}
 					} else {
-						diff_output("\t");
+						printf("\t");
 						col++;
 					}
 				}
@@ -1324,13 +1323,13 @@ fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile, int flags)
 					 * The caller must check the value
 					 * of edoffset
 					 */
-					diff_output(".\n");
+					printf(".\n");
 					edoffset = i - a + 1;
 					return edoffset;
 				}
 				/* when side-by-side, do not print a newline */
 				if (diff_format != D_SIDEBYSIDE || c != '\n') {
-					diff_output("%c", c);
+					printf("%c", c);
 					col++;
 				}
 			}
@@ -1470,15 +1469,15 @@ dump_context_vec(FILE *f1, FILE *f2, int flags)
 	lowc = MAX(1, cvp->c - diff_context);
 	upd = MIN(len[1], context_vec_ptr->d + diff_context);
 
-	diff_output("***************");
+	printf("***************");
 	if ((flags & D_PROTOTYPE)) {
 		f = match_function(ixold, lowa-1, f1);
 		if (f != NULL)
-			diff_output(" %s", f);
+			printf(" %s", f);
 	}
-	diff_output("\n*** ");
+	printf("\n*** ");
 	range(lowa, upb, ",");
-	diff_output(" ****\n");
+	printf(" ****\n");
 
 	/*
 	 * Output changes to the "old" file.  The first loop suppresses
@@ -1517,9 +1516,9 @@ dump_context_vec(FILE *f1, FILE *f2, int flags)
 		fetch(ixold, b + 1, upb, f1, ' ', 0, flags);
 	}
 	/* output changes to the "new" file */
-	diff_output("--- ");
+	printf("--- ");
 	range(lowc, upd, ",");
-	diff_output(" ----\n");
+	printf(" ----\n");
 
 	do_output = 0;
 	for (cvp = context_vec_start; cvp <= context_vec_ptr; cvp++)
@@ -1573,17 +1572,17 @@ dump_unified_vec(FILE *f1, FILE *f2, int flags)
 	lowc = MAX(1, cvp->c - diff_context);
 	upd = MIN(len[1], context_vec_ptr->d + diff_context);
 
-	diff_output("@@ -");
+	printf("@@ -");
 	uni_range(lowa, upb);
-	diff_output(" +");
+	printf(" +");
 	uni_range(lowc, upd);
-	diff_output(" @@");
+	printf(" @@");
 	if ((flags & D_PROTOTYPE)) {
 		f = match_function(ixold, lowa-1, f1);
 		if (f != NULL)
-			diff_output(" %s", f);
+			printf(" %s", f);
 	}
-	diff_output("\n");
+	printf("\n");
 
 	/*
 	 * Output changes in "unified" diff format--the old and new lines
@@ -1655,16 +1654,16 @@ print_header(const char *file1, const char *file2)
 		sprintf(buf2, "%s.%.9d %s", buf2, nsec2, end2);
 	}
 	if (label[0] != NULL)
-		diff_output("%s %s\n", diff_format == D_CONTEXT ? "***" : "---",
+		printf("%s %s\n", diff_format == D_CONTEXT ? "***" : "---",
 		    label[0]);
 	else
-		diff_output("%s %s\t%s\n", diff_format == D_CONTEXT ? "***" : "---",
+		printf("%s %s\t%s\n", diff_format == D_CONTEXT ? "***" : "---",
 		    file1, buf1);
 	if (label[1] != NULL)
-		diff_output("%s %s\n", diff_format == D_CONTEXT ? "---" : "+++",
+		printf("%s %s\n", diff_format == D_CONTEXT ? "---" : "+++",
 		    label[1]);
 	else
-		diff_output("%s %s\t%s\n", diff_format == D_CONTEXT ? "---" : "+++",
+		printf("%s %s\t%s\n", diff_format == D_CONTEXT ? "---" : "+++",
 		    file2, buf2);
 }
 
@@ -1682,10 +1681,10 @@ print_space(int nc, int n, int flags) {
 		/* first tabstop may be closer than tabsize */
 		i = tabsize - (nc % tabsize);
 		while (col >= tabsize) {
-			diff_output("\t");
+			printf("\t");
 			col -= i;
 			i = tabsize;
 		}
 	}
-	diff_output("%*s", col, "");
+	printf("%*s", col, "");
 }

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:38:23 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3515B635A26;
 Wed,  5 May 2021 08:38:23 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqqL42XVz3L55;
 Wed,  5 May 2021 08:38:22 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7B3D921943;
 Wed,  5 May 2021 08:38:22 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458cMUT043708;
 Wed, 5 May 2021 08:38:22 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458cMgs043707;
 Wed, 5 May 2021 08:38:22 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:38:22 GMT
Message-Id: <202105050838.1458cMgs043707@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: b6b26cecc0ba - stable/13 - diff: simplify the hash functions
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: b6b26cecc0babc7834c026b43bb761cbd5147ed9
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:38:23 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=b6b26cecc0babc7834c026b43bb761cbd5147ed9

commit b6b26cecc0babc7834c026b43bb761cbd5147ed9
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2021-01-26 15:25:00 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:37:09 +0000

    diff: simplify the hash functions
    
    Instead of 3 different complex case they have all been folded into a
    simple on based on switch
    
    (cherry picked from commit e43239f5140e1b80de122458a2ac037172866058)
---
 usr.bin/diff/diffreg.c | 77 ++++++++++++++++++--------------------------------
 1 file changed, 27 insertions(+), 50 deletions(-)

diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index 9839171c5639..35d41b28fb7c 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -1350,64 +1350,41 @@ readhash(FILE *f, int flags)
 
 	sum = 1;
 	space = 0;
-	if ((flags & (D_FOLDBLANKS|D_IGNOREBLANKS)) == 0) {
-		if (flags & D_IGNORECASE)
-			for (i = 0; (t = getc(f)) != '\n'; i++) {
-				if (flags & D_STRIPCR && t == '\r') {
-					t = getc(f);
-					if (t == '\n')
-						break;
-					ungetc(t, f);
-				}
-				if (t == EOF) {
-					if (i == 0)
-						return (0);
+	for (i = 0;;) {
+		switch (t = getc(f)) {
+		case '\r':
+			if (flags & D_STRIPCR) {
+				t = getc(f);
+				if (t == '\n')
 					break;
-				}
-				sum = sum * 127 + chrtran(t);
-			}
-		else
-			for (i = 0; (t = getc(f)) != '\n'; i++) {
-				if (flags & D_STRIPCR && t == '\r') {
-					t = getc(f);
-					if (t == '\n')
-						break;
-					ungetc(t, f);
-				}
-				if (t == EOF) {
-					if (i == 0)
-						return (0);
-					break;
-				}
-				sum = sum * 127 + t;
+				ungetc(t, f);
 			}
-	} else {
-		for (i = 0;;) {
-			switch (t = getc(f)) {
-			case '\r':
-			case '\t':
-			case '\v':
-			case '\f':
-			case ' ':
+			/* FALLTHROUGH */
+		case '\t':
+		case '\v':
+		case '\f':
+		case ' ':
+			if ((flags & (D_FOLDBLANKS|D_IGNOREBLANKS)) != 0) {
 				space++;
 				continue;
-			default:
-				if (space && (flags & D_IGNOREBLANKS) == 0) {
-					i++;
-					space = 0;
-				}
-				sum = sum * 127 + chrtran(t);
+			}
+			/* FALLTHROUGH */
+		default:
+			if (space && (flags & D_IGNOREBLANKS) == 0) {
 				i++;
-				continue;
-			case EOF:
-				if (i == 0)
-					return (0);
-				/* FALLTHROUGH */
-			case '\n':
-				break;
+				space = 0;
 			}
+			sum = sum * 127 + chrtran(t);
+			i++;
+			continue;
+		case EOF:
+			if (i == 0)
+				return (0);
+			/* FALLTHROUGH */
+		case '\n':
 			break;
 		}
+		break;
 	}
 	/*
 	 * There is a remote possibility that we end up with a zero sum.

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:43:18 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D6E93635CA3;
 Wed,  5 May 2021 08:43:18 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqx25mGyz3Ldj;
 Wed,  5 May 2021 08:43:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B88EA219DB;
 Wed,  5 May 2021 08:43:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458hIJw056688;
 Wed, 5 May 2021 08:43:18 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458hIF8056687;
 Wed, 5 May 2021 08:43:18 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:43:18 GMT
Message-Id: <202105050843.1458hIF8056687@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: df53974dbc62 - stable/12 - Fix build post
 a0409676120c1e558d0ade943019934e0f15118d.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: df53974dbc62a50753a39ee34348304696242861
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:43:18 -0000

The branch stable/12 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=df53974dbc62a50753a39ee34348304696242861

commit df53974dbc62a50753a39ee34348304696242861
Author:     Cy Schubert <cy@FreeBSD.org>
AuthorDate: 2021-03-22 15:42:18 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:43:03 +0000

    Fix build post a0409676120c1e558d0ade943019934e0f15118d.
    
    (cherry picked from commit 048488c0c4e47aa2aac9709b18d7da14b06f78cd)
---
 contrib/libucl/src/ucl_msgpack.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/libucl/src/ucl_msgpack.c b/contrib/libucl/src/ucl_msgpack.c
index 3335e39cd9e7..08e690a4728a 100644
--- a/contrib/libucl/src/ucl_msgpack.c
+++ b/contrib/libucl/src/ucl_msgpack.c
@@ -1247,7 +1247,7 @@ ucl_msgpack_consume (struct ucl_parser *parser)
 		if (len != 0) {
 			ucl_create_err (&parser->err,
 					"invalid non-empty container at the end; len=%zu",
-					(uintmax_t)len);
+					(size_t)len);
 
 			return false;
 		}

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 08:43:30 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7420A635E52;
 Wed,  5 May 2021 08:43:30 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZqxG2c13z3Lbv;
 Wed,  5 May 2021 08:43:30 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4C67421F0B;
 Wed,  5 May 2021 08:43:30 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1458hUfP056819;
 Wed, 5 May 2021 08:43:30 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1458hUcZ056818;
 Wed, 5 May 2021 08:43:30 GMT (envelope-from git)
Date: Wed, 5 May 2021 08:43:30 GMT
Message-Id: <202105050843.1458hUcZ056818@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Baptiste Daroussin <bapt@FreeBSD.org>
Subject: git: 80b7a3d4af7a - stable/13 - Fix build post
 a0409676120c1e558d0ade943019934e0f15118d.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: bapt
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 80b7a3d4af7ade0d25457b7fdbd68f44d993b54a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 08:43:30 -0000

The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=80b7a3d4af7ade0d25457b7fdbd68f44d993b54a

commit 80b7a3d4af7ade0d25457b7fdbd68f44d993b54a
Author:     Cy Schubert <cy@FreeBSD.org>
AuthorDate: 2021-03-22 15:42:18 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2021-05-05 08:42:57 +0000

    Fix build post a0409676120c1e558d0ade943019934e0f15118d.
    
    (cherry picked from commit 048488c0c4e47aa2aac9709b18d7da14b06f78cd)
---
 contrib/libucl/src/ucl_msgpack.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/libucl/src/ucl_msgpack.c b/contrib/libucl/src/ucl_msgpack.c
index 3335e39cd9e7..08e690a4728a 100644
--- a/contrib/libucl/src/ucl_msgpack.c
+++ b/contrib/libucl/src/ucl_msgpack.c
@@ -1247,7 +1247,7 @@ ucl_msgpack_consume (struct ucl_parser *parser)
 		if (len != 0) {
 			ucl_create_err (&parser->err,
 					"invalid non-empty container at the end; len=%zu",
-					(uintmax_t)len);
+					(size_t)len);
 
 			return false;
 		}

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 10:08:22 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 62D29638E97;
 Wed,  5 May 2021 10:08:22 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZsqB2NtTz3R0X;
 Wed,  5 May 2021 10:08:22 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 44F8922F7A;
 Wed,  5 May 2021 10:08:22 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145A8MGd063862;
 Wed, 5 May 2021 10:08:22 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145A8MVn063861;
 Wed, 5 May 2021 10:08:22 GMT (envelope-from git)
Date: Wed, 5 May 2021 10:08:22 GMT
Message-Id: <202105051008.145A8MVn063861@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Li-Wen Hsu <lwhsu@FreeBSD.org>
Subject: git: 5e09282e5e17 - stable/13 - Correct the link of external mirrors
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: lwhsu
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 5e09282e5e1778d206ffbb4cfbd5912425dda256
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 10:08:22 -0000

The branch stable/13 has been updated by lwhsu:

URL: https://cgit.FreeBSD.org/src/commit/?id=5e09282e5e1778d206ffbb4cfbd5912425dda256

commit 5e09282e5e1778d206ffbb4cfbd5912425dda256
Author:     Li-Wen Hsu <lwhsu@FreeBSD.org>
AuthorDate: 2021-04-28 19:39:18 +0000
Commit:     Li-Wen Hsu <lwhsu@FreeBSD.org>
CommitDate: 2021-05-05 10:06:51 +0000

    Correct the link of external mirrors
    
    Reported by:    0mp
    Fixes:          8ef03ce6db33
    MFC after:      1 day
    
    (cherry picked from commit 164d49a5842dcd07823570eaa775e82ed10022d3)
---
 share/man/man7/development.7 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/share/man/man7/development.7 b/share/man/man7/development.7
index 032161030f1f..f64f01f24d17 100644
--- a/share/man/man7/development.7
+++ b/share/man/man7/development.7
@@ -69,7 +69,7 @@ The push URL is:
 .Pp
 There is also a list of public, read-only Git mirrors at:
 .Pp
-.Lk https://docs.FreeBSD.org/en/books/handbook/mirrors/#_external_mirrors
+.Lk https://docs.freebsd.org/en/books/handbook/mirrors/#external-mirrors
 .Pp
 The
 .Ql main

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 11:05:56 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 82E7F639BFB;
 Wed,  5 May 2021 11:05:56 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZv5c3Gf7z3jdr;
 Wed,  5 May 2021 11:05:56 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 63A4623B1E;
 Wed,  5 May 2021 11:05:56 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145B5ujS043342;
 Wed, 5 May 2021 11:05:56 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145B5uTb043341;
 Wed, 5 May 2021 11:05:56 GMT (envelope-from git)
Date: Wed, 5 May 2021 11:05:56 GMT
Message-Id: <202105051105.145B5uTb043341@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
Subject: git: 21b292072409 - stable/13 - sh(1): autocomplete commands
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: pstef
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 21b292072409f47f7413bc151bd4eb2b71d2c506
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 11:05:56 -0000

The branch stable/13 has been updated by pstef:

URL: https://cgit.FreeBSD.org/src/commit/?id=21b292072409f47f7413bc151bd4eb2b71d2c506

commit 21b292072409f47f7413bc151bd4eb2b71d2c506
Author:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2021-03-28 09:58:20 +0000
Commit:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2021-05-05 11:04:57 +0000

    sh(1): autocomplete commands
    
    (cherry picked from commit b315a7296d2a69883c483d79dfcb3860a0428f21)
---
 bin/sh/histedit.c    | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 bin/sh/myhistedit.h  |   2 +
 lib/libedit/Makefile |   2 +-
 3 files changed, 130 insertions(+), 2 deletions(-)

diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c
index e59967b255b1..ba2bec357181 100644
--- a/bin/sh/histedit.c
+++ b/bin/sh/histedit.c
@@ -39,6 +39,8 @@ static char sccsid[] = "@(#)histedit.c	8.2 (Berkeley) 5/4/95";
 __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
+#include <sys/stat.h>
+#include <dirent.h>
 #include <limits.h>
 #include <paths.h>
 #include <stdio.h>
@@ -72,6 +74,9 @@ static FILE *el_in, *el_out;
 static char *fc_replace(const char *, char *, char *);
 static int not_fcnumber(const char *);
 static int str_to_event(const char *, int);
+static int comparator(const void *, const void *, void *);
+static char **sh_matches(const char *, int, int);
+static unsigned char sh_complete(EditLine *, int);
 
 /*
  * Set history and editing status.  Called whenever the status may
@@ -122,7 +127,7 @@ histedit(void)
 				el_set(el, EL_PROMPT, getprompt);
 				el_set(el, EL_ADDFN, "sh-complete",
 				    "Filename completion",
-				    _el_fn_complete);
+				    sh_complete);
 			} else {
 bad:
 				out2fmt_flush("sh: can't initialize editing\n");
@@ -521,3 +526,124 @@ bindcmd(int argc __unused, char **argv __unused)
 	return (0);
 }
 #endif
+
+/*
+ * Comparator function for qsort(). The use of curpos here is to skip
+ * characters that we already know to compare equal (common prefix).
+ */
+static int
+comparator(const void *a, const void *b, void *thunk)
+{
+	size_t curpos = (intptr_t)thunk;
+	return (strcmp(*(char *const *)a + curpos,
+		*(char *const *)b + curpos));
+}
+
+/*
+ * This function is passed to libedit's fn_complete2(). The library will
+ * use it instead of its standard function that finds matching files in
+ * current directory. If we're at the start of the line, we want to look
+ * for available commands from all paths in $PATH.
+ */
+static char
+**sh_matches(const char *text, int start, int end)
+{
+	char *free_path = NULL, *path;
+	const char *dirname;
+	char **matches = NULL;
+	size_t i = 0, size = 16, j, k;
+	size_t curpos = end - start;
+
+	if (start > 0 || memchr("/.~", text[0], 3) != NULL)
+		return (NULL);
+	if ((free_path = path = strdup(pathval())) == NULL)
+		goto out;
+	if ((matches = malloc(size * sizeof(matches[0]))) == NULL)
+		goto out;
+	while ((dirname = strsep(&path, ":")) != NULL) {
+		struct dirent *entry;
+		DIR *dir;
+		int dfd;
+
+		dir = opendir(dirname[0] == '\0' ? "." : dirname);
+		if (dir == NULL)
+			continue;
+		if ((dfd = dirfd(dir)) == -1) {
+			closedir(dir);
+			continue;
+		}
+		while ((entry = readdir(dir)) != NULL) {
+			struct stat statb;
+			char **rmatches;
+
+			if (strncmp(entry->d_name, text, curpos) != 0)
+				continue;
+			if (entry->d_type == DT_UNKNOWN || entry->d_type == DT_LNK) {
+				if (fstatat(dfd, entry->d_name, &statb, 0) == -1)
+					continue;
+				if (!S_ISREG(statb.st_mode))
+					continue;
+			} else if (entry->d_type != DT_REG)
+				continue;
+			matches[++i] = strdup(entry->d_name);
+			if (i < size - 1)
+				continue;
+			size *= 2;
+			rmatches = reallocarray(matches, size, sizeof(matches[0]));
+			if (rmatches == NULL) {
+				closedir(dir);
+				goto out;
+			}
+			matches = rmatches;
+		}
+		closedir(dir);
+	}
+out:
+	free(free_path);
+	/*
+	 * matches[0] is special: it's not a real matching file name but a common
+	 * prefix for all matching names. It can't be null, unlike any other
+	 * element of the array. When strings matches[0] and matches[1] compare
+	 * equal and matches[2] is null that means to libedit that there is only
+	 * a single match. It will then replace user input with possibly escaped
+	 * string in matches[0] which is the reason to copy the full name of the
+	 * only match.
+	 */
+	if (i == 0) {
+		free(matches);
+		return (NULL);
+	} else if (i == 1) {
+		matches[0] = strdup(matches[1]);
+		matches[2] = NULL;
+		if (matches[0] != NULL)
+			return (matches);
+	} else
+		matches[0] = strdup(text);
+	if (matches[0] == NULL) {
+		for (j = 1; j <= i; j++)
+			free(matches[j]);
+		free(matches);
+		return (NULL);
+	}
+	qsort_s(matches + 1, i, sizeof(matches[0]), comparator,
+		(void *)(intptr_t)curpos);
+	for (j = 1, k = 2; k <= i; k++)
+		if (strcmp(matches[j] + curpos, matches[k] + curpos) == 0)
+			free(matches[k]);
+		else
+			matches[++j] = matches[k];
+	matches[j + 1] = NULL;
+	return (matches);
+}
+
+/*
+ * This is passed to el_set(el, EL_ADDFN, ...) so that it's possible to
+ * bind a key (tab by default) to execute the function.
+ */
+unsigned char
+sh_complete(EditLine *sel, int ch __unused)
+{
+	return (unsigned char)fn_complete2(sel, NULL, sh_matches,
+		L" \t\n\"\\'`@$><=;|&{(", NULL, NULL, (size_t)100,
+		NULL, &((int) {0}), NULL, NULL, FN_QUOTE_MATCH);
+}
diff --git a/bin/sh/myhistedit.h b/bin/sh/myhistedit.h
index a4c0b56fafd7..968d23c9c1f8 100644
--- a/bin/sh/myhistedit.h
+++ b/bin/sh/myhistedit.h
@@ -38,6 +38,8 @@ extern History *hist;
 extern EditLine *el;
 extern int displayhist;
 
+#include <filecomplete.h>
+
 void histedit(void);
 void sethistsize(const char *);
 void setterm(const char *);
diff --git a/lib/libedit/Makefile b/lib/libedit/Makefile
index 963063ef90fa..e549ac15c000 100644
--- a/lib/libedit/Makefile
+++ b/lib/libedit/Makefile
@@ -65,7 +65,7 @@ MLINKS=	\
 	editline.3 tok_wreset.3 \
 	editline.3 tok_wstr.3
 
-INCS=	histedit.h
+INCS=	histedit.h filecomplete.h
 
 SRCS+=	common.h emacs.h fcns.h func.h help.h vi.h
 CLEANFILES+= common.h emacs.h fcns.h func.h help.h vi.h

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 11:05:57 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id BFDE563A280;
 Wed,  5 May 2021 11:05:57 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZv5d4lcdz3jdt;
 Wed,  5 May 2021 11:05:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8358923E01;
 Wed,  5 May 2021 11:05:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145B5v1b043364;
 Wed, 5 May 2021 11:05:57 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145B5vs4043363;
 Wed, 5 May 2021 11:05:57 GMT (envelope-from git)
Date: Wed, 5 May 2021 11:05:57 GMT
Message-Id: <202105051105.145B5vs4043363@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
Subject: git: bee62aa5a69f - stable/13 - sh: silence sanitizer
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: pstef
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: bee62aa5a69f808bf7503e6d5d9ff375240511a2
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 11:05:57 -0000

The branch stable/13 has been updated by pstef:

URL: https://cgit.FreeBSD.org/src/commit/?id=bee62aa5a69f808bf7503e6d5d9ff375240511a2

commit bee62aa5a69f808bf7503e6d5d9ff375240511a2
Author:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2021-04-01 05:31:03 +0000
Commit:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2021-05-05 11:04:58 +0000

    sh: silence sanitizer
    
    (cherry picked from commit 5a18515b3143792135881ce64e2380115c4744c1)
---
 bin/sh/memalloc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/bin/sh/memalloc.c b/bin/sh/memalloc.c
index a2191771386d..7ea31af050e5 100644
--- a/bin/sh/memalloc.c
+++ b/bin/sh/memalloc.c
@@ -227,7 +227,10 @@ popstackmark(struct stackmark *mark)
 	}
 	stacknxt = mark->stacknxt;
 	stacknleft = mark->stacknleft;
-	sstrend = stacknxt + stacknleft;
+	if (stacknleft != 0)
+		sstrend = stacknxt + stacknleft;
+	else
+		sstrend = stacknxt;
 	INTON;
 }
 

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 11:05:59 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3BAE663A252;
 Wed,  5 May 2021 11:05:59 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZv5f6FmVz3jwf;
 Wed,  5 May 2021 11:05:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A8D7823BAE;
 Wed,  5 May 2021 11:05:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145B5wf9043393;
 Wed, 5 May 2021 11:05:58 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145B5wMQ043392;
 Wed, 5 May 2021 11:05:58 GMT (envelope-from git)
Date: Wed, 5 May 2021 11:05:58 GMT
Message-Id: <202105051105.145B5wMQ043392@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
Subject: git: 2556ee3a27af - stable/13 - sh: fix debug build
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: pstef
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 2556ee3a27afa3a8688ed0ef5daaaa9360738f54
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 11:05:59 -0000

The branch stable/13 has been updated by pstef:

URL: https://cgit.FreeBSD.org/src/commit/?id=2556ee3a27afa3a8688ed0ef5daaaa9360738f54

commit 2556ee3a27afa3a8688ed0ef5daaaa9360738f54
Author:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2021-04-11 07:09:28 +0000
Commit:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2021-05-05 11:04:58 +0000

    sh: fix debug build
    
    (cherry picked from commit 1a4e959eb34ae03a96f6d0dea68b6a6a88ac4462)
---
 bin/sh/show.c | 7 +++----
 bin/sh/show.h | 2 ++
 bin/sh/trap.c | 4 ----
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/bin/sh/show.c b/bin/sh/show.c
index 04dc123381af..01035d76093d 100644
--- a/bin/sh/show.c
+++ b/bin/sh/show.c
@@ -73,7 +73,7 @@ static void
 shtree(union node *n, int ind, char *pfx, FILE *fp)
 {
 	struct nodelist *lp;
-	char *s;
+	const char *s;
 
 	if (n == NULL)
 		return;
@@ -125,7 +125,7 @@ shcmd(union node *cmd, FILE *fp)
 {
 	union node *np;
 	int first;
-	char *s;
+	const char *s;
 	int dftfd;
 
 	first = 1;
@@ -274,8 +274,7 @@ indent(int amount, char *pfx, FILE *fp)
  */
 
 
-FILE *tracefile;
-
+static FILE *tracefile;
 #if DEBUG >= 2
 int debug = 1;
 #else
diff --git a/bin/sh/show.h b/bin/sh/show.h
index 1dbdaa152b33..790a62e2942c 100644
--- a/bin/sh/show.h
+++ b/bin/sh/show.h
@@ -39,4 +39,6 @@ void trargs(char **);
 void trputc(int);
 void trputs(const char *);
 void opentrace(void);
+
+extern int debug;
 #endif
diff --git a/bin/sh/trap.c b/bin/sh/trap.c
index d7a98604c22c..d7ef40274270 100644
--- a/bin/sh/trap.c
+++ b/bin/sh/trap.c
@@ -274,12 +274,8 @@ setsignal(int signo)
 			break;
 		case SIGQUIT:
 #ifdef DEBUG
-			{
-			extern int debug;
-
 			if (debug)
 				break;
-			}
 #endif
 			action = S_CATCH;
 			break;

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 11:06:00 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 088DA639DB7;
 Wed,  5 May 2021 11:06:00 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZv5g6KXFz3jcS;
 Wed,  5 May 2021 11:05:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C966123968;
 Wed,  5 May 2021 11:05:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145B5xaO043416;
 Wed, 5 May 2021 11:05:59 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145B5xOa043415;
 Wed, 5 May 2021 11:05:59 GMT (envelope-from git)
Date: Wed, 5 May 2021 11:05:59 GMT
Message-Id: <202105051105.145B5xOa043415@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
Subject: git: 6ac7b0221f45 - stable/13 - Balance parentheses in sysctl
 descriptions
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: pstef
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 6ac7b0221f458286add911e49c8bbb63946693c2
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 11:06:00 -0000

The branch stable/13 has been updated by pstef:

URL: https://cgit.FreeBSD.org/src/commit/?id=6ac7b0221f458286add911e49c8bbb63946693c2

commit 6ac7b0221f458286add911e49c8bbb63946693c2
Author:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2021-04-11 08:29:34 +0000
Commit:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2021-05-05 11:04:58 +0000

    Balance parentheses in sysctl descriptions
    
    (cherry picked from commit a212f56d10d04508849cd817d2c595dd61107890)
---
 sys/amd64/amd64/trap.c    |  2 +-
 sys/kern/kern_timeout.c   |  2 +-
 sys/x86/x86/cpu_machdep.c | 12 ++++++------
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 01519d9a7c16..4ce31ce47a45 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -1135,7 +1135,7 @@ SYSCTL_PROC(_machdep, OID_AUTO, syscall_ret_flush_l1d, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     machdep_syscall_ret_flush_l1d, "I",
     "Flush L1D on syscall return with error (0 - off, 1 - on, "
-    "2 - use hw only, 3 - use sw only");
+    "2 - use hw only, 3 - use sw only)");
 
 /*
  * System call handler for native binaries.  The trap frame is already
diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c
index 5bb948610da1..cc1521adf151 100644
--- a/sys/kern/kern_timeout.c
+++ b/sys/kern/kern_timeout.c
@@ -119,7 +119,7 @@ static int pin_pcpu_swi = 0;
 SYSCTL_INT(_kern, OID_AUTO, pin_default_swi, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &pin_default_swi,
     0, "Pin the default (non-per-cpu) swi (shared with PCPU 0 swi)");
 SYSCTL_INT(_kern, OID_AUTO, pin_pcpu_swi, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &pin_pcpu_swi,
-    0, "Pin the per-CPU swis (except PCPU 0, which is also default");
+    0, "Pin the per-CPU swis (except PCPU 0, which is also default)");
 
 /*
  * TODO:
diff --git a/sys/x86/x86/cpu_machdep.c b/sys/x86/x86/cpu_machdep.c
index 4798f913d5b2..77ae7b360a25 100644
--- a/sys/x86/x86/cpu_machdep.c
+++ b/sys/x86/x86/cpu_machdep.c
@@ -966,12 +966,12 @@ hw_ssb_disable_handler(SYSCTL_HANDLER_ARGS)
 SYSCTL_PROC(_hw, OID_AUTO, spec_store_bypass_disable, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     hw_ssb_disable_handler, "I",
-    "Speculative Store Bypass Disable (0 - off, 1 - on, 2 - auto");
+    "Speculative Store Bypass Disable (0 - off, 1 - on, 2 - auto)");
 
 SYSCTL_PROC(_machdep_mitigations_ssb, OID_AUTO, disable, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     hw_ssb_disable_handler, "I",
-    "Speculative Store Bypass Disable (0 - off, 1 - on, 2 - auto");
+    "Speculative Store Bypass Disable (0 - off, 1 - on, 2 - auto)");
 
 int hw_mds_disable;
 
@@ -1185,13 +1185,13 @@ SYSCTL_PROC(_hw, OID_AUTO, mds_disable, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     sysctl_mds_disable_handler, "I",
     "Microarchitectural Data Sampling Mitigation "
-    "(0 - off, 1 - on VERW, 2 - on SW, 3 - on AUTO");
+    "(0 - off, 1 - on VERW, 2 - on SW, 3 - on AUTO)");
 
 SYSCTL_PROC(_machdep_mitigations_mds, OID_AUTO, disable, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     sysctl_mds_disable_handler, "I",
     "Microarchitectural Data Sampling Mitigation "
-    "(0 - off, 1 - on VERW, 2 - on SW, 3 - on AUTO");
+    "(0 - off, 1 - on VERW, 2 - on SW, 3 - on AUTO)");
 
 /*
  * Intel Transactional Memory Asynchronous Abort Mitigation
@@ -1330,7 +1330,7 @@ SYSCTL_PROC(_machdep_mitigations_taa, OID_AUTO, enable, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     sysctl_taa_handler, "I",
     "TAA Mitigation enablement control "
-    "(0 - off, 1 - disable TSX, 2 - VERW, 3 - on AUTO");
+    "(0 - off, 1 - disable TSX, 2 - VERW, 3 - on AUTO)");
 
 static int
 sysctl_taa_state_handler(SYSCTL_HANDLER_ARGS)
@@ -1403,7 +1403,7 @@ SYSCTL_PROC(_machdep_mitigations_rngds, OID_AUTO, enable, CTLTYPE_INT |
     CTLFLAG_RWTUN | CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0,
     sysctl_rngds_mitg_enable_handler, "I",
     "MCU Optimization, disabling RDSEED mitigation control "
-    "(0 - mitigation disabled (RDSEED optimized), 1 - mitigation enabled");
+    "(0 - mitigation disabled (RDSEED optimized), 1 - mitigation enabled)");
 
 static int
 sysctl_rngds_state_handler(SYSCTL_HANDLER_ARGS)

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 11:06:01 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 943B063A260;
 Wed,  5 May 2021 11:06:01 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FZv5j16MCz3k2P;
 Wed,  5 May 2021 11:06:01 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EB28223D8D;
 Wed,  5 May 2021 11:06:00 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145B60La043437;
 Wed, 5 May 2021 11:06:00 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145B60Bc043436;
 Wed, 5 May 2021 11:06:00 GMT (envelope-from git)
Date: Wed, 5 May 2021 11:06:00 GMT
Message-Id: <202105051106.145B60Bc043436@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
Subject: git: c69775749f2b - stable/13 - getdirentries.2: remove unnecessary
 space
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: pstef
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: c69775749f2b1f59c56224eee074c9da84778e6c
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 11:06:01 -0000

The branch stable/13 has been updated by pstef:

URL: https://cgit.FreeBSD.org/src/commit/?id=c69775749f2b1f59c56224eee074c9da84778e6c

commit c69775749f2b1f59c56224eee074c9da84778e6c
Author:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2021-04-11 09:17:01 +0000
Commit:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2021-05-05 11:04:58 +0000

    getdirentries.2: remove unnecessary space
    
    (cherry picked from commit 1fdd6934d596b0259096d0c310e97a9c4ebf6b6b)
---
 lib/libc/sys/getdirentries.2 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/libc/sys/getdirentries.2 b/lib/libc/sys/getdirentries.2
index 658be9459af5..4185fb84f0f9 100644
--- a/lib/libc/sys/getdirentries.2
+++ b/lib/libc/sys/getdirentries.2
@@ -132,7 +132,7 @@ the end of the directory has been reached.
 .Pp
 If the
 .Fa basep
-pointer value is non-NULL ,
+pointer value is non-NULL,
 the
 .Fn getdirentries
 system call writes the position of the block read into the location pointed to by

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 15:02:01 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 969415F9A49;
 Wed,  5 May 2021 15:02:01 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fb0L13xb9z4RYM;
 Wed,  5 May 2021 15:02:01 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7A46426FB0;
 Wed,  5 May 2021 15:02:01 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145F2147061734;
 Wed, 5 May 2021 15:02:01 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145F21h7061733;
 Wed, 5 May 2021 15:02:01 GMT (envelope-from git)
Date: Wed, 5 May 2021 15:02:01 GMT
Message-Id: <202105051502.145F21h7061733@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Mark Johnston <markj@FreeBSD.org>
Subject: git: 9d45365e3321 - stable/13 - pipe: Avoid calling selrecord() on a
 closing pipe
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: markj
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 9d45365e332114459e46509e4d9aa31c81ce32a7
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 15:02:01 -0000

The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=9d45365e332114459e46509e4d9aa31c81ce32a7

commit 9d45365e332114459e46509e4d9aa31c81ce32a7
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-04-28 14:42:59 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-05-05 15:01:43 +0000

    pipe: Avoid calling selrecord() on a closing pipe
    
    pipe_poll() may add the calling thread to the selinfo lists of both ends
    of a pipe.  It is ok to do this for the local end, since we know we hold
    a reference on the file and so the local end is not closed.  It is not
    ok to do this for the remote end, which may already be closed and have
    called seldrain().  In this scenario, when the polling thread wakes up,
    it may end up referencing a freed selinfo.
    
    Guard the selrecord() call appropriately.
    
    Reviewed by:    kib
    Reported by:    syzkaller+KASAN
    Differential Revision:  https://reviews.freebsd.org/D30016
    
    (cherry picked from commit d1e9441583fd85c7de5f48197d80c287f1a9494b)
---
 sys/kern/sys_pipe.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index 558337794950..ec0fb3860eda 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -1470,7 +1470,8 @@ pipe_poll(struct file *fp, int events, struct ucred *active_cred,
 				rpipe->pipe_state |= PIPE_SEL;
 		}
 
-		if ((fp->f_flag & FWRITE) != 0) {
+		if ((fp->f_flag & FWRITE) != 0 &&
+		    wpipe->pipe_present == PIPE_ACTIVE) {
 			selrecord(td, &wpipe->pipe_sel);
 			if (SEL_WAITING(&wpipe->pipe_sel))
 				wpipe->pipe_state |= PIPE_SEL;

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 15:02:02 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id C9BA25F9974;
 Wed,  5 May 2021 15:02: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fb0L258D1z4Rfr;
 Wed,  5 May 2021 15:02:02 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A0AFD26CDC;
 Wed,  5 May 2021 15:02:02 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145F22Bd061755;
 Wed, 5 May 2021 15:02:02 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145F22FG061754;
 Wed, 5 May 2021 15:02:02 GMT (envelope-from git)
Date: Wed, 5 May 2021 15:02:02 GMT
Message-Id: <202105051502.145F22FG061754@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Mark Johnston <markj@FreeBSD.org>
Subject: git: 11af9a9cf930 - stable/13 - cap_sysctl.3: Fix bugs in the example
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: markj
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 11af9a9cf930123ba164ffc63976fe1d67ce614e
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 15:02:02 -0000

The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=11af9a9cf930123ba164ffc63976fe1d67ce614e

commit 11af9a9cf930123ba164ffc63976fe1d67ce614e
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-04-28 14:38:52 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-05-05 15:01:56 +0000

    cap_sysctl.3: Fix bugs in the example
    
    - Correct the type of the sysctl value.
    - Initialize the oldsize parameter to cap_sysctlbyname()
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 44bbda649dc6c1cdc5a99641e14c77157967e140)
---
 lib/libcasper/services/cap_sysctl/cap_sysctl.3 | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/libcasper/services/cap_sysctl/cap_sysctl.3 b/lib/libcasper/services/cap_sysctl/cap_sysctl.3
index 5d840796515e..0a7d009e1c3c 100644
--- a/lib/libcasper/services/cap_sysctl/cap_sysctl.3
+++ b/lib/libcasper/services/cap_sysctl/cap_sysctl.3
@@ -131,8 +131,8 @@ capability to get the value of
 cap_channel_t *capcas, *capsysctl;
 const char *name = "kern.trap_enotcap";
 void *limit;
-int value;
 size_t size;
+bool value;
 
 /* Open capability to Casper. */
 capcas = cap_init();
@@ -160,6 +160,7 @@ if (cap_sysctl_limit(limit) < 0)
 	err(1, "Unable to set limits");
 
 /* Fetch value. */
+size = sizeof(value);
 if (cap_sysctlbyname(capsysctl, name, &value, &size, NULL, 0) < 0)
 	err(1, "Unable to get value of sysctl");
 

From owner-dev-commits-src-branches@freebsd.org  Wed May  5 15:03:05 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5CAEA5F9B77;
 Wed,  5 May 2021 15:03:05 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fb0MF23lxz4RZK;
 Wed,  5 May 2021 15:03:05 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 39F4B26A7C;
 Wed,  5 May 2021 15:03:05 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 145F35VL064293;
 Wed, 5 May 2021 15:03:05 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 145F35km064292;
 Wed, 5 May 2021 15:03:05 GMT (envelope-from git)
Date: Wed, 5 May 2021 15:03:05 GMT
Message-Id: <202105051503.145F35km064292@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Mark Johnston <markj@FreeBSD.org>
Subject: git: 53a9046635f1 - stable/12 - pipe: Avoid calling selrecord() on a
 closing pipe
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: markj
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 53a9046635f1856e549f28fba20d9ffc068fa81e
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 05 May 2021 15:03:05 -0000

The branch stable/12 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=53a9046635f1856e549f28fba20d9ffc068fa81e

commit 53a9046635f1856e549f28fba20d9ffc068fa81e
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-04-28 14:42:59 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-05-05 15:02:59 +0000

    pipe: Avoid calling selrecord() on a closing pipe
    
    pipe_poll() may add the calling thread to the selinfo lists of both ends
    of a pipe.  It is ok to do this for the local end, since we know we hold
    a reference on the file and so the local end is not closed.  It is not
    ok to do this for the remote end, which may already be closed and have
    called seldrain().  In this scenario, when the polling thread wakes up,
    it may end up referencing a freed selinfo.
    
    Guard the selrecord() call appropriately.
    
    Reviewed by:    kib
    Reported by:    syzkaller+KASAN
    Differential Revision:  https://reviews.freebsd.org/D30016
    
    (cherry picked from commit d1e9441583fd85c7de5f48197d80c287f1a9494b)
---
 sys/kern/sys_pipe.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index cb6c283d0e91..fefc16a9eb06 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -1456,7 +1456,8 @@ pipe_poll(struct file *fp, int events, struct ucred *active_cred,
 				rpipe->pipe_state |= PIPE_SEL;
 		}
 
-		if ((fp->f_flag & FWRITE) != 0) {
+		if ((fp->f_flag & FWRITE) != 0 &&
+		    wpipe->pipe_present == PIPE_ACTIVE) {
 			selrecord(td, &wpipe->pipe_sel);
 			if (SEL_WAITING(&wpipe->pipe_sel))
 				wpipe->pipe_state |= PIPE_SEL;

From owner-dev-commits-src-branches@freebsd.org  Thu May  6 03:18:42 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 83051630BB1;
 Thu,  6 May 2021 03:18:42 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbJh23Jc7z3MLS;
 Thu,  6 May 2021 03:18:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6477E10CE4;
 Thu,  6 May 2021 03:18:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1463IgqU033937;
 Thu, 6 May 2021 03:18:42 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1463IgMF033936;
 Thu, 6 May 2021 03:18:42 GMT (envelope-from git)
Date: Thu, 6 May 2021 03:18:42 GMT
Message-Id: <202105060318.1463IgMF033936@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Alexander Motin <mav@FreeBSD.org>
Subject: git: 22efcea413cf - stable/13 - Introduce "soft" serseq variant.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mav
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 22efcea413cf9880975e2ba06b5f3c5df4678055
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 06 May 2021 03:18:42 -0000

The branch stable/13 has been updated by mav:

URL: https://cgit.FreeBSD.org/src/commit/?id=22efcea413cf9880975e2ba06b5f3c5df4678055

commit 22efcea413cf9880975e2ba06b5f3c5df4678055
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-04-06 21:27:16 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-05-06 03:18:38 +0000

    Introduce "soft" serseq variant.
    
    With new ZFS prefetcher improvements it is no longer needed to fully
    serialize reads to reach decent prediction hit rate.  Softer variant
    only creates small time window to reduce races instead of completely
    blocking following reads while previous is running.  It much less
    hurts the performance in case of prediction miss.
    
    MFC after:      1 month
    
    (cherry picked from commit ac503c194cd8e9dbef5c120e87f9521e1a89003a)
---
 sys/cam/ctl/ctl.c                 |  3 ---
 sys/cam/ctl/ctl_backend.h         |  1 +
 sys/cam/ctl/ctl_backend_block.c   | 32 ++++++++++++++++++++++----------
 sys/cam/ctl/ctl_backend_ramdisk.c |  5 ++++-
 usr.sbin/ctladm/ctladm.8          |  9 +++++----
 5 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index cae6dd4aa101..575c8eea5198 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -13272,9 +13272,6 @@ ctl_serseq_done(union ctl_io *io)
 {
 	struct ctl_lun *lun = CTL_LUN(io);
 
-	if (lun->be_lun->serseq == CTL_LUN_SERSEQ_OFF)
-		return;
-
 	/* This is racy, but should not be a problem. */
 	if (!TAILQ_EMPTY(&io->io_hdr.blocked_queue)) {
 		mtx_lock(&lun->lun_lock);
diff --git a/sys/cam/ctl/ctl_backend.h b/sys/cam/ctl/ctl_backend.h
index 05e65abe41f8..fe4e7f5df1d0 100644
--- a/sys/cam/ctl/ctl_backend.h
+++ b/sys/cam/ctl/ctl_backend.h
@@ -47,6 +47,7 @@
 
 typedef enum {
 	CTL_LUN_SERSEQ_OFF,
+	CTL_LUN_SERSEQ_SOFT,
 	CTL_LUN_SERSEQ_READ,
 	CTL_LUN_SERSEQ_ON
 } ctl_lun_serseq;
diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c
index 9f96c157d5ae..4ffaf0912915 100644
--- a/sys/cam/ctl/ctl_backend_block.c
+++ b/sys/cam/ctl/ctl_backend_block.c
@@ -490,13 +490,12 @@ ctl_be_block_move_done(union ctl_io *io, bool samethr)
 static void
 ctl_be_block_biodone(struct bio *bio)
 {
-	struct ctl_be_block_io *beio;
-	struct ctl_be_block_lun *be_lun;
+	struct ctl_be_block_io *beio = bio->bio_caller1;
+	struct ctl_be_block_lun *be_lun = beio->lun;
+	struct ctl_be_lun *cbe_lun = &be_lun->cbe_lun;
 	union ctl_io *io;
 	int error;
 
-	beio = bio->bio_caller1;
-	be_lun = beio->lun;
 	io = beio->io;
 
 	DPRINTF("entered\n");
@@ -576,7 +575,8 @@ ctl_be_block_biodone(struct bio *bio)
 		if ((ARGS(io)->flags & CTL_LLF_READ) &&
 		    beio->beio_cont == NULL) {
 			ctl_set_success(&io->scsiio);
-			ctl_serseq_done(io);
+			if (cbe_lun->serseq >= CTL_LUN_SERSEQ_SOFT)
+				ctl_serseq_done(io);
 		}
 		ctl_datamove(io);
 	}
@@ -636,6 +636,7 @@ static void
 ctl_be_block_dispatch_file(struct ctl_be_block_lun *be_lun,
 			   struct ctl_be_block_io *beio)
 {
+	struct ctl_be_lun *cbe_lun = &be_lun->cbe_lun;
 	struct ctl_be_block_filedata *file_data;
 	union ctl_io *io;
 	struct uio xuio;
@@ -679,6 +680,9 @@ ctl_be_block_dispatch_file(struct ctl_be_block_lun *be_lun,
 	if (beio->bio_cmd == BIO_READ) {
 		vn_lock(be_lun->vn, LK_SHARED | LK_RETRY);
 
+		if (beio->beio_cont == NULL &&
+		    cbe_lun->serseq == CTL_LUN_SERSEQ_SOFT)
+			ctl_serseq_done(io);
 		/*
 		 * UFS pays attention to IO_DIRECT for reads.  If the
 		 * DIRECTIO option is configured into the kernel, it calls
@@ -786,7 +790,8 @@ ctl_be_block_dispatch_file(struct ctl_be_block_lun *be_lun,
 		if ((ARGS(io)->flags & CTL_LLF_READ) &&
 		    beio->beio_cont == NULL) {
 			ctl_set_success(&io->scsiio);
-			ctl_serseq_done(io);
+			if (cbe_lun->serseq > CTL_LUN_SERSEQ_SOFT)
+				ctl_serseq_done(io);
 		}
 		ctl_datamove(io);
 	}
@@ -863,6 +868,7 @@ static void
 ctl_be_block_dispatch_zvol(struct ctl_be_block_lun *be_lun,
 			   struct ctl_be_block_io *beio)
 {
+	struct ctl_be_lun *cbe_lun = &be_lun->cbe_lun;
 	union ctl_io *io;
 	struct cdevsw *csw;
 	struct cdev *dev;
@@ -904,9 +910,12 @@ ctl_be_block_dispatch_zvol(struct ctl_be_block_lun *be_lun,
 
 	csw = devvn_refthread(be_lun->vn, &dev, &ref);
 	if (csw) {
-		if (beio->bio_cmd == BIO_READ)
+		if (beio->bio_cmd == BIO_READ) {
+			if (beio->beio_cont == NULL &&
+			    cbe_lun->serseq == CTL_LUN_SERSEQ_SOFT)
+				ctl_serseq_done(io);
 			error = csw->d_read(dev, &xuio, flags);
-		else
+		} else
 			error = csw->d_write(dev, &xuio, flags);
 		dev_relthread(dev, ref);
 	} else
@@ -952,7 +961,8 @@ ctl_be_block_dispatch_zvol(struct ctl_be_block_lun *be_lun,
 		if ((ARGS(io)->flags & CTL_LLF_READ) &&
 		    beio->beio_cont == NULL) {
 			ctl_set_success(&io->scsiio);
-			ctl_serseq_done(io);
+			if (cbe_lun->serseq > CTL_LUN_SERSEQ_SOFT)
+				ctl_serseq_done(io);
 		}
 		ctl_datamove(io);
 	}
@@ -2187,12 +2197,14 @@ again:
 		ctl_be_block_close(be_lun);
 	cbe_lun->serseq = CTL_LUN_SERSEQ_OFF;
 	if (be_lun->dispatch != ctl_be_block_dispatch_dev)
-		cbe_lun->serseq = CTL_LUN_SERSEQ_READ;
+		cbe_lun->serseq = CTL_LUN_SERSEQ_SOFT;
 	value = dnvlist_get_string(cbe_lun->options, "serseq", NULL);
 	if (value != NULL && strcmp(value, "on") == 0)
 		cbe_lun->serseq = CTL_LUN_SERSEQ_ON;
 	else if (value != NULL && strcmp(value, "read") == 0)
 		cbe_lun->serseq = CTL_LUN_SERSEQ_READ;
+	else if (value != NULL && strcmp(value, "soft") == 0)
+		cbe_lun->serseq = CTL_LUN_SERSEQ_SOFT;
 	else if (value != NULL && strcmp(value, "off") == 0)
 		cbe_lun->serseq = CTL_LUN_SERSEQ_OFF;
 	return (0);
diff --git a/sys/cam/ctl/ctl_backend_ramdisk.c b/sys/cam/ctl/ctl_backend_ramdisk.c
index e67d699bda70..6febdd469bdd 100644
--- a/sys/cam/ctl/ctl_backend_ramdisk.c
+++ b/sys/cam/ctl/ctl_backend_ramdisk.c
@@ -507,7 +507,8 @@ nospc:
 	if ((ARGS(io)->flags & CTL_LLF_READ) &&
 	    ARGS(io)->len <= PRIV(io)->len) {
 		ctl_set_success(&io->scsiio);
-		ctl_serseq_done(io);
+		if (cbe_lun->serseq >= CTL_LUN_SERSEQ_SOFT)
+			ctl_serseq_done(io);
 	}
 	ctl_datamove(io);
 }
@@ -1036,6 +1037,8 @@ ctl_backend_ramdisk_create(struct ctl_be_ramdisk_softc *softc,
 		cbe_lun->serseq = CTL_LUN_SERSEQ_ON;
 	else if (value != NULL && strcmp(value, "read") == 0)
 		cbe_lun->serseq = CTL_LUN_SERSEQ_READ;
+	else if (value != NULL && strcmp(value, "soft") == 0)
+		cbe_lun->serseq = CTL_LUN_SERSEQ_SOFT;
 	else if (value != NULL && strcmp(value, "off") == 0)
 		cbe_lun->serseq = CTL_LUN_SERSEQ_OFF;
 
diff --git a/usr.sbin/ctladm/ctladm.8 b/usr.sbin/ctladm/ctladm.8
index 25380c86441a..b8b90ad200fe 100644
--- a/usr.sbin/ctladm/ctladm.8
+++ b/usr.sbin/ctladm/ctladm.8
@@ -1,6 +1,6 @@
 .\"
 .\" Copyright (c) 2003 Silicon Graphics International Corp.
-.\" Copyright (c) 2015-2020 Alexander Motin <mav@FreeBSD.org>
+.\" Copyright (c) 2015-2021 Alexander Motin <mav@FreeBSD.org>
 .\" Copyright (c) 2018 Marcelo Araujo <araujo@FreeBSD.org>
 .\" All rights reserved.
 .\"
@@ -36,7 +36,7 @@
 .\" $Id: //depot/users/kenm/FreeBSD-test2/usr.sbin/ctladm/ctladm.8#3 $
 .\" $FreeBSD$
 .\"
-.Dd November 23, 2020
+.Dd March 9, 2021
 .Dt CTLADM 8
 .Os
 .Sh NAME
@@ -919,8 +919,9 @@ appropriate commands and task attributes.
 The default value is "restricted".
 It improves data integrity, but may introduce some additional delays.
 .It Va serseq
-Set to "on" to serialize consecutive reads/writes.
-Set to "read" to serialize consecutive reads.
+Set to "on" to fully serialize consecutive reads/writes.
+Set to "read" to fully serialize consecutive reads.
+Set to "soft" to slightly serialize consecutive reads.
 Set to "off" to allow them be issued in parallel.
 Parallel issue of consecutive operations may confuse logic of the
 backing file system, hurting performance; but it may improve performance

From owner-dev-commits-src-branches@freebsd.org  Thu May  6 12:59:54 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E9814621057;
 Thu,  6 May 2021 12:59:54 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbYZf6JB2z4fY4;
 Thu,  6 May 2021 12:59:54 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CB1D018466;
 Thu,  6 May 2021 12:59:54 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 146CxsP0007089;
 Thu, 6 May 2021 12:59:54 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 146CxsIN007088;
 Thu, 6 May 2021 12:59:54 GMT (envelope-from git)
Date: Thu, 6 May 2021 12:59:54 GMT
Message-Id: <202105061259.146CxsIN007088@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Mark Johnston <markj@FreeBSD.org>
Subject: git: e183dd501caf - stable/13 - traceroute6: Properly calculate UDP
 checksum
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: markj
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: e183dd501caf03751c96c7c0683ccc3a6c0cd27d
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 06 May 2021 12:59:55 -0000

The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=e183dd501caf03751c96c7c0683ccc3a6c0cd27d

commit e183dd501caf03751c96c7c0683ccc3a6c0cd27d
Author:     Zhenlei Huang <zlei.huang@gmail.com>
AuthorDate: 2021-05-03 16:46:19 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-05-06 12:59:19 +0000

    traceroute6: Properly calculate UDP checksum
    
    The revision D25604 capsicumize traceroute6. For UDP the send socket was
    changed from SOCK_DGRAM to SOCK_RAW and thus the UDP checksum need be
    calculated by application itself other than the kernel.
    
    outpacket is filled with zeros by line 707, thus the first round the UDP
    checksum is correct. But subsequent rounds outudp->uh_sum will be left
    with garbage.
    
    PR:             255507
    Reviewed by:    ae, markj, tuexen
    Differential Revision:  https://reviews.freebsd.org/D30042
    
    (cherry picked from commit 1d712c05370dca8cbf81d1ecd9acd606fdcacaf4)
---
 usr.sbin/traceroute6/traceroute6.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/usr.sbin/traceroute6/traceroute6.c b/usr.sbin/traceroute6/traceroute6.c
index 8449a9861302..a071c084ad07 100644
--- a/usr.sbin/traceroute6/traceroute6.c
+++ b/usr.sbin/traceroute6/traceroute6.c
@@ -1118,6 +1118,7 @@ send_probe(int seq, u_long hops)
 		outudp->uh_sport = htons(ident);
 		outudp->uh_dport = htons(port+seq);
 		outudp->uh_ulen = htons(datalen);
+		outudp->uh_sum = 0;
 		outudp->uh_sum = udp_cksum(&Src, &Dst, outpacket, datalen);
 		break;
 	case IPPROTO_NONE:

From owner-dev-commits-src-branches@freebsd.org  Thu May  6 13:21:59 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1E12F621893;
 Thu,  6 May 2021 13:21:59 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbZ470GF5z4gBP;
 Thu,  6 May 2021 13:21:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F006F18FE3;
 Thu,  6 May 2021 13:21:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 146DLwVY044509;
 Thu, 6 May 2021 13:21:58 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 146DLwkq044508;
 Thu, 6 May 2021 13:21:58 GMT (envelope-from git)
Date: Thu, 6 May 2021 13:21:58 GMT
Message-Id: <202105061321.146DLwkq044508@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Tai-hwa Liang <avatar@FreeBSD.org>
Subject: git: 26993638c024 - stable/12 - if_firewire: fixing panic upon packet
 reception for VNET build
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avatar
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 26993638c02456cc0752722c348a98c6b960602a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 06 May 2021 13:21:59 -0000

The branch stable/12 has been updated by avatar:

URL: https://cgit.FreeBSD.org/src/commit/?id=26993638c02456cc0752722c348a98c6b960602a

commit 26993638c02456cc0752722c348a98c6b960602a
Author:     Tai-hwa Liang <avatar@FreeBSD.org>
AuthorDate: 2021-04-10 15:32:27 +0000
Commit:     Tai-hwa Liang <avatar@FreeBSD.org>
CommitDate: 2021-05-06 13:18:45 +0000

    if_firewire: fixing panic upon packet reception for VNET build
    
    netisr_dispatch_src() needs a valid VNET pointer or firewire_input() will panic
    when receiving a packet.
    
    Reviewed by:    glebius
    MFC after:      2 weeks
    
    (cherry picked from commit d9b61e7153c64b141436b4d9619b166c6d35a0a6)
---
 sys/net/if_fwsubr.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sys/net/if_fwsubr.c b/sys/net/if_fwsubr.c
index d6296bf33b65..29ca2f713e8e 100644
--- a/sys/net/if_fwsubr.c
+++ b/sys/net/if_fwsubr.c
@@ -634,7 +634,9 @@ firewire_input(struct ifnet *ifp, struct mbuf *m, uint16_t src)
 	}
 
 	M_SETFIB(m, ifp->if_fib);
+	CURVNET_SET_QUIET(ifp->if_vnet);
 	netisr_dispatch(isr, m);
+	CURVNET_RESTORE();
 }
 
 int

From owner-dev-commits-src-branches@freebsd.org  Thu May  6 13:22:00 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 68A2B621757;
 Thu,  6 May 2021 13:22:00 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbZ482HLNz4g7y;
 Thu,  6 May 2021 13:22:00 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1374418FE4;
 Thu,  6 May 2021 13:22:00 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 146DM0gA044537;
 Thu, 6 May 2021 13:22:00 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 146DM0Ga044531;
 Thu, 6 May 2021 13:22:00 GMT (envelope-from git)
Date: Thu, 6 May 2021 13:22:00 GMT
Message-Id: <202105061322.146DM0Ga044531@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Tai-hwa Liang <avatar@FreeBSD.org>
Subject: git: 85983c6d646b - stable/12 - arp(8): fixing the deletion failure
 of IEEE1394 associated addresses
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avatar
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 85983c6d646bc000e9746708d350459da8c7a958
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 06 May 2021 13:22:00 -0000

The branch stable/12 has been updated by avatar:

URL: https://cgit.FreeBSD.org/src/commit/?id=85983c6d646bc000e9746708d350459da8c7a958

commit 85983c6d646bc000e9746708d350459da8c7a958
Author:     Tai-hwa Liang <avatar@FreeBSD.org>
AuthorDate: 2021-04-12 06:27:03 +0000
Commit:     Tai-hwa Liang <avatar@FreeBSD.org>
CommitDate: 2021-05-06 13:18:45 +0000

    arp(8): fixing the deletion failure of IEEE1394 associated addresses
    
    Without this, 'arp -d ${IEEE1394_ADDRESS}' gives the following error:
    
            arp: delete: cannot locate 10.0.0.71
    
    Reviewed by:    glebius
    MFC after:      2 weeks
    
    (cherry picked from commit a0d6d0d0b9aba6d4c025b2f2807e7c4b4c4b2415)
---
 usr.sbin/arp/arp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index 07e07f1f2da9..01eb9a3260b5 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -299,6 +299,7 @@ valid_type(int type)
 	switch (type) {
 	case IFT_ETHER:
 	case IFT_FDDI:
+	case IFT_IEEE1394:
 	case IFT_INFINIBAND:
 	case IFT_ISO88023:
 	case IFT_ISO88024:

From owner-dev-commits-src-branches@freebsd.org  Thu May  6 13:23:23 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E1B85621BC7;
 Thu,  6 May 2021 13:23:23 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbZ5l5cfJz4gcG;
 Thu,  6 May 2021 13:23:23 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B38EA19042;
 Thu,  6 May 2021 13:23:23 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 146DNNJj047462;
 Thu, 6 May 2021 13:23:23 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 146DNNja047461;
 Thu, 6 May 2021 13:23:23 GMT (envelope-from git)
Date: Thu, 6 May 2021 13:23:23 GMT
Message-Id: <202105061323.146DNNja047461@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Tai-hwa Liang <avatar@FreeBSD.org>
Subject: git: 5fcae416655b - stable/13 - fwip(4): fixing kernel panic when
 receiving unicast packet
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: avatar
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 5fcae416655bc66e0eefaa87f9797ff8791d8de1
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 06 May 2021 13:23:24 -0000

The branch stable/13 has been updated by avatar:

URL: https://cgit.FreeBSD.org/src/commit/?id=5fcae416655bc66e0eefaa87f9797ff8791d8de1

commit 5fcae416655bc66e0eefaa87f9797ff8791d8de1
Author:     Tai-hwa Liang <avatar@FreeBSD.org>
AuthorDate: 2021-04-15 14:24:14 +0000
Commit:     Tai-hwa Liang <avatar@FreeBSD.org>
CommitDate: 2021-05-06 13:23:00 +0000

    fwip(4): fixing kernel panic when receiving unicast packet
    
    Wrapping fwip_unicast_input() with NET_EPOCH_{ENTER,EXIT} to avoid a
    NET_EPOCH_ASSERT() in netisr_dispatch().
    
    Reviewed by:    hselasky
    MFC after:      2 weeks
    
    (cherry picked from commit bdf316e892e9a7afa70e094135b5d05fbc26e867)
---
 sys/dev/firewire/if_fwip.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/sys/dev/firewire/if_fwip.c b/sys/dev/firewire/if_fwip.c
index 46cd56e30748..e45fd67baea7 100644
--- a/sys/dev/firewire/if_fwip.c
+++ b/sys/dev/firewire/if_fwip.c
@@ -838,6 +838,7 @@ fwip_unicast_input(struct fw_xfer *xfer)
 	uint64_t address;
 	struct mbuf *m;
 	struct m_tag *mtag;
+	struct epoch_tracker et;
 	struct ifnet *ifp;
 	struct fwip_softc *fwip;
 	struct fw_pkt *fp;
@@ -863,6 +864,7 @@ fwip_unicast_input(struct fw_xfer *xfer)
 	} else {
 		rtcode = FWRCODE_COMPLETE;
 	}
+	NET_EPOCH_ENTER(et);
 
 	/*
 	 * Pick up a new mbuf and stick it on the back of the receive
@@ -876,7 +878,7 @@ fwip_unicast_input(struct fw_xfer *xfer)
 	if (rtcode != FWRCODE_COMPLETE) {
 		m_freem(m);
 		if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
-		return;
+		goto done;
 	}
 
 	if (bpf_peers_present(ifp->if_bpf)) {
@@ -911,6 +913,8 @@ fwip_unicast_input(struct fw_xfer *xfer)
 	m->m_pkthdr.rcvif = ifp;
 	firewire_input(ifp, m, fp->mode.wreqb.src);
 	if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
+done:
+	NET_EPOCH_EXIT(et);
 }
 
 static devclass_t fwip_devclass;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 00:43:39 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 38FF5632E72;
 Fri,  7 May 2021 00:43:39 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbsBg17qPz3FxN;
 Fri,  7 May 2021 00:43:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 19C7022020;
 Fri,  7 May 2021 00:43:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1470hdYo052672;
 Fri, 7 May 2021 00:43:39 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1470hdsK052671;
 Fri, 7 May 2021 00:43:39 GMT (envelope-from git)
Date: Fri, 7 May 2021 00:43:39 GMT
Message-Id: <202105070043.1470hdsK052671@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: af861a369e4e - stable/13 - amd64: invalidate TLB between page
 table update and access
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: af861a369e4ec7ea02d0f6611efd84d10b4b103e
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 00:43:39 -0000

The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=af861a369e4ec7ea02d0f6611efd84d10b4b103e

commit af861a369e4ec7ea02d0f6611efd84d10b4b103e
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-16 18:28:08 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-07 00:35:54 +0000

    amd64: invalidate TLB between page table update and access
    
    (cherry picked from commit 21fc6a2a10cf6fbd294decbb0001473693ec1618)
---
 sys/amd64/amd64/pmap.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 1fb81384f11e..01644b9661af 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -2102,6 +2102,7 @@ pmap_bootstrap_la57(void *arg __unused)
 	*(u_long *)(v_code + 2 + (la57_trampoline_gdt_desc - la57_trampoline)) =
 	    la57_trampoline_gdt - la57_trampoline + VM_PAGE_TO_PHYS(m_code);
 	la57_tramp = (void (*)(uint64_t))VM_PAGE_TO_PHYS(m_code);
+	invlpg((vm_offset_t)la57_tramp);
 	la57_tramp(KPML5phys);
 
 	/*

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 00:43:40 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id A60C4633139;
 Fri,  7 May 2021 00:43:40 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbsBh2TV9z3G7R;
 Fri,  7 May 2021 00:43:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4668521F75;
 Fri,  7 May 2021 00:43:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1470heTv052693;
 Fri, 7 May 2021 00:43:40 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1470heTw052692;
 Fri, 7 May 2021 00:43:40 GMT (envelope-from git)
Date: Fri, 7 May 2021 00:43:40 GMT
Message-Id: <202105070043.1470heTw052692@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: aa21554a8b03 - stable/13 - ioccom: define ioctl cmd value that
 can never be valid
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: aa21554a8b03196c4208a2a33527020f29073a00
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 00:43:40 -0000

The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=aa21554a8b03196c4208a2a33527020f29073a00

commit aa21554a8b03196c4208a2a33527020f29073a00
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-22 19:40:08 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-07 00:36:00 +0000

    ioccom: define ioctl cmd value that can never be valid
    
    (cherry picked from commit 619fe095861274576a2cb45628076968051b1585)
---
 sys/sys/ioccom.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sys/sys/ioccom.h b/sys/sys/ioccom.h
index 0329ac358491..13faba046719 100644
--- a/sys/sys/ioccom.h
+++ b/sys/sys/ioccom.h
@@ -79,6 +79,9 @@
 #define	IOCPARM_IVAL(x)	((int)(intptr_t)(void *)*(caddr_t *)(void *)(x))
 #endif
 
+#define	_IOC_INVALID	(_IOC_VOID|_IOC_INOUT)	/* Never valid cmd value,
+						   use as filler */
+
 #else
 
 #include <sys/cdefs.h>

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 00:54:49 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7160A633447;
 Fri,  7 May 2021 00:54:49 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbsRY1sW0z3G4x;
 Fri,  7 May 2021 00:54:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 32BA722489;
 Fri,  7 May 2021 00:54:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1470snjx065815;
 Fri, 7 May 2021 00:54:49 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1470snf1065814;
 Fri, 7 May 2021 00:54:49 GMT (envelope-from git)
Date: Fri, 7 May 2021 00:54:49 GMT
Message-Id: <202105070054.1470snf1065814@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Konstantin Belousov <kib@FreeBSD.org>
Subject: git: 075f27cf4a8f - stable/12 - ioccom: define ioctl cmd value that
 can never be valid
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kib
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 075f27cf4a8ffd8d2189c40614edda074de5a6e8
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 00:54:49 -0000

The branch stable/12 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=075f27cf4a8ffd8d2189c40614edda074de5a6e8

commit 075f27cf4a8ffd8d2189c40614edda074de5a6e8
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-04-22 19:40:08 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-05-07 00:44:08 +0000

    ioccom: define ioctl cmd value that can never be valid
    
    (cherry picked from commit 619fe095861274576a2cb45628076968051b1585)
---
 sys/sys/ioccom.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sys/sys/ioccom.h b/sys/sys/ioccom.h
index 3e5f7200fb1a..f7e9fa12a960 100644
--- a/sys/sys/ioccom.h
+++ b/sys/sys/ioccom.h
@@ -73,6 +73,9 @@
 #define	IOCPARM_IVAL(x)	((int)(intptr_t)(void *)*(caddr_t *)(void *)(x))
 #endif
 
+#define	_IOC_INVALID	(_IOC_VOID|_IOC_INOUT)	/* Never valid cmd value,
+						   use as filler */
+
 #else
 
 #include <sys/cdefs.h>

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 02:38:28 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id B173A635301;
 Fri,  7 May 2021 02:38:28 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fbvl84CfRz3KwC;
 Fri,  7 May 2021 02:38:28 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 834502381C;
 Fri,  7 May 2021 02:38:28 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1472cSwB098541;
 Fri, 7 May 2021 02:38:28 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1472cSDT098540;
 Fri, 7 May 2021 02:38:28 GMT (envelope-from git)
Date: Fri, 7 May 2021 02:38:28 GMT
Message-Id: <202105070238.1472cSDT098540@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alfredo Dal'Ava Junior" <alfredo@FreeBSD.org>
Subject: git: 8d5898458818 - stable/13 - powerpc: implement bus_map_resource
 and bus_unmap_resource DEVMETHODs
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: alfredo
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 8d5898458818f9c0aaf203367c8ef1ac4d00fb71
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 02:38:28 -0000

The branch stable/13 has been updated by alfredo:

URL: https://cgit.FreeBSD.org/src/commit/?id=8d5898458818f9c0aaf203367c8ef1ac4d00fb71

commit 8d5898458818f9c0aaf203367c8ef1ac4d00fb71
Author:     Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
AuthorDate: 2021-03-29 23:28:32 +0000
Commit:     Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
CommitDate: 2021-05-07 05:32:50 +0000

    powerpc: implement bus_map_resource and bus_unmap_resource DEVMETHODs
    
    Implements bus_map_resource and bus_unmap_resource DEVMETHODs to be
    used by powerpc targets. This is identical to the amd64 code.
    
    Required by virtio-modern.
    
    Reviewed by:    bryanv
    Sponsored by:   Eldorado Research Institute (eldorado.org.br)
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D28012
    
    (cherry picked from commit befb0817bd5e47588eb0254744daec02488acd72)
---
 sys/powerpc/powerpc/nexus.c | 95 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)

diff --git a/sys/powerpc/powerpc/nexus.c b/sys/powerpc/powerpc/nexus.c
index 34ec3c0fe0ab..b3fe5a3e1527 100644
--- a/sys/powerpc/powerpc/nexus.c
+++ b/sys/powerpc/powerpc/nexus.c
@@ -69,6 +69,13 @@ static bus_setup_intr_t nexus_setup_intr;
 static bus_teardown_intr_t nexus_teardown_intr;
 static bus_activate_resource_t nexus_activate_resource;
 static bus_deactivate_resource_t nexus_deactivate_resource;
+static  int nexus_map_resource(device_t bus, device_t child, int type,
+			       struct resource *r,
+			       struct resource_map_request *argsp,
+			       struct resource_map *map);
+static  int nexus_unmap_resource(device_t bus, device_t child, int type,
+			       struct resource *r, struct resource_map *map);
+
 static bus_space_tag_t nexus_get_bus_tag(device_t, device_t);
 static int nexus_get_cpus(device_t, device_t, enum cpu_sets, size_t,
     cpuset_t *);
@@ -87,6 +94,8 @@ static device_method_t nexus_methods[] = {
 	DEVMETHOD(bus_add_child,	bus_generic_add_child),
 	DEVMETHOD(bus_activate_resource,	nexus_activate_resource),
 	DEVMETHOD(bus_deactivate_resource,	nexus_deactivate_resource),
+	DEVMETHOD(bus_map_resource,	nexus_map_resource),
+	DEVMETHOD(bus_unmap_resource,   nexus_unmap_resource),
 	DEVMETHOD(bus_setup_intr,	nexus_setup_intr),
 	DEVMETHOD(bus_teardown_intr,	nexus_teardown_intr),
 #ifdef SMP
@@ -268,3 +277,89 @@ nexus_deactivate_resource(device_t bus __unused, device_t child __unused,
 
 	return (rman_deactivate_resource(r));
 }
+
+
+static int
+nexus_map_resource(device_t bus, device_t child, int type, struct resource *r,
+    struct resource_map_request *argsp, struct resource_map *map)
+{
+
+	struct resource_map_request args;
+	rman_res_t end, length, start;
+
+	/* Resources must be active to be mapped. */
+	if (!(rman_get_flags(r) & RF_ACTIVE))
+		return (ENXIO);
+
+	/* Mappings are only supported on I/O and memory resources. */
+	switch (type) {
+	case SYS_RES_IOPORT:
+	case SYS_RES_MEMORY:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	resource_init_map_request(&args);
+	if (argsp != NULL)
+		bcopy(argsp, &args, imin(argsp->size, args.size));
+
+	start = rman_get_start(r) + args.offset;
+	if (args.length == 0)
+		length = rman_get_size(r);
+	else
+		length = args.length;
+
+	end = start + length - 1;
+	if (start > rman_get_end(r) || start < rman_get_start(r))
+		return (EINVAL);
+
+	if (end > rman_get_end(r) || end < start)
+		return (EINVAL);
+
+	/*
+	 * If this is a memory resource, map it into the kernel.
+	 */
+	switch (type) {
+	case SYS_RES_IOPORT:
+		panic("%s:%d SYS_RES_IOPORT handling not implemented", __func__, __LINE__);
+		/*   XXX: untested
+		map->r_bushandle = start;
+		map->r_bustag = nexus_get_bus_tag(NULL, NULL);
+		map->r_size = length;
+		map->r_vaddr = NULL;
+		*/
+		break;
+	case SYS_RES_MEMORY:
+		map->r_vaddr = pmap_mapdev_attr(start, length, args.memattr);
+		map->r_bustag = nexus_get_bus_tag(NULL, NULL);
+		map->r_size = length;
+		map->r_bushandle = (bus_space_handle_t)map->r_vaddr;
+		break;
+	}
+
+	return (0);
+
+}
+
+static int
+nexus_unmap_resource(device_t bus, device_t child, int type, struct resource *r,
+    struct resource_map *map)
+{
+
+	/*
+	 * If this is a memory resource, unmap it.
+	 */
+	switch (type) {
+	case SYS_RES_MEMORY:
+		pmap_unmapdev((vm_offset_t)map->r_vaddr, map->r_size);
+		/* FALLTHROUGH */
+	case SYS_RES_IOPORT:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	return (0);
+
+}

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 02:38:29 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D2AB56352A9;
 Fri,  7 May 2021 02:38:29 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fbvl9502nz3LFv;
 Fri,  7 May 2021 02:38:29 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9C854235D8;
 Fri,  7 May 2021 02:38:29 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1472cTwc098562;
 Fri, 7 May 2021 02:38:29 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1472cTEN098561;
 Fri, 7 May 2021 02:38:29 GMT (envelope-from git)
Date: Fri, 7 May 2021 02:38:29 GMT
Message-Id: <202105070238.1472cTEN098561@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alfredo Dal'Ava Junior" <alfredo@FreeBSD.org>
Subject: git: dca829138ca5 - stable/13 - opal_console: fix serial console
 output corruption on powerpc64
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: alfredo
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: dca829138ca576169cafd2a2bb9fc2c0de88d076
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 02:38:29 -0000

The branch stable/13 has been updated by alfredo:

URL: https://cgit.FreeBSD.org/src/commit/?id=dca829138ca576169cafd2a2bb9fc2c0de88d076

commit dca829138ca576169cafd2a2bb9fc2c0de88d076
Author:     Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
AuthorDate: 2021-04-16 22:51:15 +0000
Commit:     Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
CommitDate: 2021-05-07 05:33:39 +0000

    opal_console: fix serial console output corruption on powerpc64
    
    Adds OPAL_CONSOLE_WRITE error handling and implements a call to
    OPAL_CONSOLE_WRITE_BUFFER_SPACE to verify if there's enough space
    before writing to console.
    
    This fixes serial port output getting corrupted on fast writes, like
    on "dmesg" output.
    
    Tested on Raptor Blackbird running powerpc64 BE kernel
    
    Reviewed by:    luporl
    Sponsored by:   Eldorado Reserach Institute (eldorado.org.br)
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D29063
    
    (cherry picked from commit b8bc6b7954e27edb449503004ef52b8b97585545)
---
 sys/powerpc/powernv/opal.h         |  1 +
 sys/powerpc/powernv/opal_console.c | 49 ++++++++++++++++++++++++++++++++------
 2 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/sys/powerpc/powernv/opal.h b/sys/powerpc/powernv/opal.h
index d7a81e33f809..8e39a39b6c9a 100644
--- a/sys/powerpc/powernv/opal.h
+++ b/sys/powerpc/powernv/opal.h
@@ -56,6 +56,7 @@ int opal_call(uint64_t token, ...);
 #define	OPAL_PCI_CONFIG_WRITE_HALF_WORD	17
 #define	OPAL_PCI_CONFIG_WRITE_WORD	18
 #define	OPAL_PCI_EEH_FREEZE_STATUS	23
+#define OPAL_CONSOLE_WRITE_BUFFER_SPACE 25
 #define	OPAL_PCI_EEH_FREEZE_CLEAR	26
 #define	OPAL_PCI_PHB_MMIO_ENABLE	27
 #define	OPAL_PCI_SET_PHB_MEM_WINDOW	28
diff --git a/sys/powerpc/powernv/opal_console.c b/sys/powerpc/powernv/opal_console.c
index 7b953d2679fb..8f6c88f81f7c 100644
--- a/sys/powerpc/powernv/opal_console.c
+++ b/sys/powerpc/powernv/opal_console.c
@@ -171,6 +171,24 @@ uart_opal_real_unmap_outbuffer(uint64_t *len)
 	mtx_unlock_spin(&opalcons_buffer.mtx);
 }
 
+static int64_t
+uart_opal_console_write_buffer_space(int vtermid)
+{
+	int64_t buffer_space_val = 0;
+	vm_paddr_t buffer_space_ptr;
+
+	if (pmap_bootstrapped)
+		buffer_space_ptr = vtophys(&buffer_space_val);
+	else
+		buffer_space_ptr = (vm_paddr_t)&buffer_space_val;
+
+	if (opal_call(OPAL_CONSOLE_WRITE_BUFFER_SPACE, vtermid,
+	    buffer_space_ptr) != OPAL_SUCCESS)
+		return (-1);
+
+	return (be64toh(buffer_space_val));
+}
+
 static int
 uart_opal_probe_node(struct uart_opal_softc *sc)
 {
@@ -420,12 +438,12 @@ uart_opal_put(struct uart_opal_softc *sc, void *buffer, size_t bufsize)
 		len -= 4;
 	}
 
-#if 0
-	if (err != OPAL_SUCCESS)
-		len = 0;
-#endif
+	if (err == OPAL_SUCCESS)
+		return (len);
+	else if (err == OPAL_BUSY_EVENT)
+		return(0);
 
-	return (len);
+	return (-1);
 }
 
 static int
@@ -481,11 +499,28 @@ uart_opal_ttyoutwakeup(struct tty *tp)
 	struct uart_opal_softc *sc;
 	char buffer[8];
 	int len;
+	int64_t buffer_space;
 
 	sc = tty_softc(tp);
 
-	while ((len = ttydisc_getc(tp, buffer, sizeof(buffer))) != 0)
-		uart_opal_put(sc, buffer, len);
+	while ((len = ttydisc_getc(tp, buffer, sizeof(buffer))) != 0) {
+		int bytes_written = 0;
+		while (bytes_written == 0) {
+			buffer_space = uart_opal_console_write_buffer_space(sc->vtermid);
+			if (buffer_space == -1)
+				/* OPAL failure or invalid terminal */
+				break;
+			else if (buffer_space >= len)
+				bytes_written = uart_opal_put(sc, buffer, len);
+
+			if (bytes_written == 0)
+				/* OPAL must be busy, poll and retry */
+				opal_call(OPAL_POLL_EVENTS, NULL);
+			else if (bytes_written == -1)
+				/* OPAL failure or invalid terminal */
+				break;
+		}
+	}
 }
 
 static void

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 02:38:31 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 00DAA634E4E;
 Fri,  7 May 2021 02:38: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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FbvlB6LF2z3Kt1;
 Fri,  7 May 2021 02:38:30 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C59D5236BC;
 Fri,  7 May 2021 02:38:30 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1472cUCW098583;
 Fri, 7 May 2021 02:38:30 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1472cUQu098582;
 Fri, 7 May 2021 02:38:30 GMT (envelope-from git)
Date: Fri, 7 May 2021 02:38:30 GMT
Message-Id: <202105070238.1472cUQu098582@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: "Alfredo Dal'Ava Junior" <alfredo@FreeBSD.org>
Subject: git: 7d45bf699dc6 - stable/13 - mprutil: add big endian support
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: alfredo
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 7d45bf699dc6417bdf13e1bd80b8e87ea8beca98
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 02:38:31 -0000

The branch stable/13 has been updated by alfredo:

URL: https://cgit.FreeBSD.org/src/commit/?id=7d45bf699dc6417bdf13e1bd80b8e87ea8beca98

commit 7d45bf699dc6417bdf13e1bd80b8e87ea8beca98
Author:     Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
AuthorDate: 2021-04-17 01:01:38 +0000
Commit:     Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
CommitDate: 2021-05-07 05:34:19 +0000

    mprutil: add big endian support
    
    This fix mprutil on big endian platforms, as follow up of D25785.
    
    Flash operations are still not working, such as MPI2_FUNCTION_FW_UPLOAD
    failing due to timeout.
    
    Firmware version used during tests: 16.00.01.00
    
    Submitted by:   Andre Fernando da Silva <andre.silva@eldorado.org.br>
    Reviewed by:    luporl, Sreekanth Reddy <sreekanth.reddy@broadcom.com> (by e-mail)
    Sponsored by:   Eldorado Research Institute (eldorado.org.br)
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D26040
    
    (cherry picked from commit fc9780fd41e7b29db04e9cb843cb5034b88ae662)
---
 usr.sbin/mpsutil/mps_cmd.c   | 61 +++++++++++++++++++++++++++++++++++---------
 usr.sbin/mpsutil/mps_flash.c |  9 ++++---
 usr.sbin/mpsutil/mps_show.c  | 59 +++++++++++++++++++++---------------------
 usr.sbin/mpsutil/mps_slot.c  |  4 ++-
 usr.sbin/mpsutil/mpsutil.8   |  3 +++
 5 files changed, 90 insertions(+), 46 deletions(-)

diff --git a/usr.sbin/mpsutil/mps_cmd.c b/usr.sbin/mpsutil/mps_cmd.c
index f0ff98c2442b..a9cb269abc5f 100644
--- a/usr.sbin/mpsutil/mps_cmd.c
+++ b/usr.sbin/mpsutil/mps_cmd.c
@@ -41,6 +41,7 @@ __RCSID("$FreeBSD$");
 #include <sys/ioctl.h>
 #include <sys/sysctl.h>
 #include <sys/uio.h>
+#include <sys/endian.h>
 
 #include <err.h>
 #include <fcntl.h>
@@ -241,6 +242,8 @@ struct mprs_btdh_mapping {
         uint16_t        Reserved;
 };
 
+static void adjust_iocfacts_endianness(MPI2_IOC_FACTS_REPLY *facts);
+
 const char *
 mps_ioc_status(U16 IOCStatus)
 {
@@ -296,7 +299,7 @@ mps_set_slot_status(int fd, U16 handle, U16 slot, U32 status)
 	    NULL, 0, NULL, 0, 30) != 0)
 		return (errno);
 
-	if (!IOC_STATUS_SUCCESS(reply.IOCStatus))
+	if (!IOC_STATUS_SUCCESS(le16toh(reply.IOCStatus)))
 		return (EIO);
 	return (0);
 }
@@ -319,7 +322,7 @@ mps_read_config_page_header(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
 	    NULL, 0, NULL, 0, 30))
 		return (errno);
 
-	if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
+	if (!IOC_STATUS_SUCCESS(le16toh(reply.IOCStatus))) {
 		if (IOCStatus != NULL)
 			*IOCStatus = reply.IOCStatus;
 		return (EIO);
@@ -342,15 +345,15 @@ mps_read_ext_config_page_header(int fd, U8 ExtPageType, U8 PageNumber, U32 PageA
 	req.Header.PageType = MPI2_CONFIG_PAGETYPE_EXTENDED;
 	req.ExtPageType = ExtPageType;
 	req.Header.PageNumber = PageNumber;
-	req.PageAddress = PageAddress;
+	req.PageAddress = htole32(PageAddress);
 
 	if (mps_pass_command(fd, &req, sizeof(req), &reply, sizeof(reply),
 	    NULL, 0, NULL, 0, 30))
 		return (errno);
 
-	if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
+	if (!IOC_STATUS_SUCCESS(le16toh(reply.IOCStatus))) {
 		if (IOCStatus != NULL)
-			*IOCStatus = reply.IOCStatus;
+			*IOCStatus = le16toh(reply.IOCStatus);
 		return (EIO);
 	}
 	if ((header == NULL) || (ExtPageLength == NULL))
@@ -381,7 +384,7 @@ mps_read_config_page(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
 	bzero(&req, sizeof(req));
 	req.Function = MPI2_FUNCTION_CONFIG;
 	req.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
-	req.PageAddress = PageAddress;
+	req.PageAddress = htole32(PageAddress);
 	req.Header = header;
 	if (req.Header.PageLength == 0)
 		req.Header.PageLength = 4;
@@ -395,6 +398,7 @@ mps_read_config_page(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
 		errno = error;
 		return (NULL);
 	}
+	reply.IOCStatus = le16toh(reply.IOCStatus);
 	if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
 		if (IOCStatus != NULL)
 			*IOCStatus = reply.IOCStatus;
@@ -432,14 +436,14 @@ mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
 	bzero(&req, sizeof(req));
 	req.Function = MPI2_FUNCTION_CONFIG;
 	req.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
-	req.PageAddress = PageAddress;
+	req.PageAddress = htole32(PageAddress);
 	req.Header = header;
 	if (pagelen == 0)
-		pagelen = 4;
+		pagelen = htole16(4);
 	req.ExtPageLength = pagelen;
 	req.ExtPageType = ExtPageType;
 
-	len = pagelen * 4;
+	len = le16toh(pagelen) * 4;
 	buf = malloc(len);
 	if (mps_pass_command(fd, &req, sizeof(req), &reply, sizeof(reply),
 	    buf, len, NULL, 0, 30)) {
@@ -448,6 +452,7 @@ mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
 		errno = error;
 		return (NULL);
 	}
+	reply.IOCStatus = le16toh(reply.IOCStatus);
 	if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
 		if (IOCStatus != NULL)
 			*IOCStatus = reply.IOCStatus;
@@ -471,7 +476,7 @@ mps_firmware_send(int fd, unsigned char *fw, uint32_t len, bool bios)
 	bzero(&reply, sizeof(reply));
 	req.Function = MPI2_FUNCTION_FW_DOWNLOAD;
 	req.ImageType = bios ? MPI2_FW_DOWNLOAD_ITYPE_BIOS : MPI2_FW_DOWNLOAD_ITYPE_FW;
-	req.TotalImageSize = len;
+	req.TotalImageSize = htole32(len);
 	req.MsgFlags = MPI2_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT;
 
 	if (mps_user_command(fd, &req, sizeof(req), &reply, sizeof(reply),
@@ -502,7 +507,7 @@ mps_firmware_get(int fd, unsigned char **firmware, bool bios)
 		return (-1);
 	}
 
-	size = reply.ActualImageSize;
+	size = le32toh(reply.ActualImageSize);
 	*firmware = calloc(size, sizeof(unsigned char));
 	if (*firmware == NULL) {
 		warn("calloc");
@@ -571,6 +576,7 @@ mps_read_config_page(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
 		errno = error;
 		return (NULL);
 	}
+	req.ioc_status = le16toh(req.ioc_status);
 	if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
 		if (IOCStatus != NULL)
 			*IOCStatus = req.ioc_status;
@@ -598,9 +604,10 @@ mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
 	req.header.PageVersion = PageVersion;
 	req.header.PageNumber = PageNumber;
 	req.header.ExtPageType = ExtPageType;
-	req.page_address = PageAddress;
+	req.page_address = htole32(PageAddress);
 	if (ioctl(fd, MPSIO_READ_EXT_CFG_HEADER, &req) < 0)
 		return (NULL);
+	req.ioc_status = le16toh(req.ioc_status);
 	if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
 		if (IOCStatus != NULL)
 			*IOCStatus = req.ioc_status;
@@ -620,6 +627,7 @@ mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
 		errno = error;
 		return (NULL);
 	}
+	req.ioc_status = le16toh(req.ioc_status);
 	if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
 		if (IOCStatus != NULL)
 			*IOCStatus = req.ioc_status;
@@ -761,6 +769,35 @@ mps_get_iocfacts(int fd)
 		errno = EINVAL;
 		return (NULL);
 	}
+	adjust_iocfacts_endianness(facts);
 	return (facts);
 }
 
+static void
+adjust_iocfacts_endianness(MPI2_IOC_FACTS_REPLY *facts)
+{
+	facts->MsgVersion = le16toh(facts->MsgVersion);
+	facts->HeaderVersion = le16toh(facts->HeaderVersion);
+	facts->Reserved1 = le16toh(facts->Reserved1);
+	facts->IOCExceptions = le16toh(facts->IOCExceptions);
+	facts->IOCStatus = le16toh(facts->IOCStatus);
+	facts->IOCLogInfo = le32toh(facts->IOCLogInfo);
+	facts->RequestCredit = le16toh(facts->RequestCredit);
+	facts->ProductID = le16toh(facts->ProductID);
+	facts->IOCCapabilities = le32toh(facts->IOCCapabilities);
+	facts->IOCRequestFrameSize =
+	    le16toh(facts->IOCRequestFrameSize);
+	facts->FWVersion.Word = le32toh(facts->FWVersion.Word);
+	facts->MaxInitiators = le16toh(facts->MaxInitiators);
+	facts->MaxTargets = le16toh(facts->MaxTargets);
+	facts->MaxSasExpanders = le16toh(facts->MaxSasExpanders);
+	facts->MaxEnclosures = le16toh(facts->MaxEnclosures);
+	facts->ProtocolFlags = le16toh(facts->ProtocolFlags);
+	facts->HighPriorityCredit = le16toh(facts->HighPriorityCredit);
+	facts->MaxReplyDescriptorPostQueueDepth =
+	    le16toh(facts->MaxReplyDescriptorPostQueueDepth);
+	facts->MaxDevHandle = le16toh(facts->MaxDevHandle);
+	facts->MaxPersistentEntries =
+	    le16toh(facts->MaxPersistentEntries);
+	facts->MinDevHandle = le16toh(facts->MinDevHandle);
+}
diff --git a/usr.sbin/mpsutil/mps_flash.c b/usr.sbin/mpsutil/mps_flash.c
index 22beaae79bb0..a0cc4a877b7d 100644
--- a/usr.sbin/mpsutil/mps_flash.c
+++ b/usr.sbin/mpsutil/mps_flash.c
@@ -29,6 +29,7 @@ __RCSID("$FreeBSD$");
 #include <sys/stat.h>
 #include <sys/param.h>
 #include <sys/mman.h>
+#include <sys/endian.h>
 
 #include <errno.h>
 #include <err.h>
@@ -203,21 +204,21 @@ flash_update(int argc, char **argv)
 		}
 	} else {
 		fwheader = (MPI2_FW_IMAGE_HEADER *)mem;
-		if (fwheader->VendorID != MPI2_MFGPAGE_VENDORID_LSI) {
+		if (le16toh(fwheader->VendorID) != MPI2_MFGPAGE_VENDORID_LSI) {
 			warnx("Invalid firmware:");
 			warnx("  Expected Vendor ID: %04x",
 			    MPI2_MFGPAGE_VENDORID_LSI);
-			warnx("  Image Vendor ID: %04x", fwheader->VendorID);
+			warnx("  Image Vendor ID: %04x", le16toh(fwheader->VendorID));
 			munmap(mem, st.st_size);
 			close(fd);
 			free(facts);
 			return (1);
 		}
 
-		if (fwheader->ProductID != facts->ProductID) {
+		if (le16toh(fwheader->ProductID) != facts->ProductID) {
 			warnx("Invalid image:");
 			warnx("  Expected Product ID: %04x", facts->ProductID);
-			warnx("  Image Product ID: %04x", fwheader->ProductID);
+			warnx("  Image Product ID: %04x", le16toh(fwheader->ProductID));
 			munmap(mem, st.st_size);
 			close(fd);
 			free(facts);
diff --git a/usr.sbin/mpsutil/mps_show.c b/usr.sbin/mpsutil/mps_show.c
index bb790fe21229..620bb5e27f89 100644
--- a/usr.sbin/mpsutil/mps_show.c
+++ b/usr.sbin/mpsutil/mps_show.c
@@ -36,6 +36,7 @@ __RCSID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/errno.h>
+#include <sys/endian.h>
 #include <err.h>
 #include <libutil.h>
 #include <stdio.h>
@@ -105,7 +106,7 @@ show_adapter(int ac, char **av)
 		warn("Failed to get BIOS page 3 info");
 		return (error);
 	}
-	v = bios3->BiosVersion;
+	v = le32toh(bios3->BiosVersion);
 	printf("    BIOS Revision: %d.%02d.%02d.%02d\n",
 	    ((v & 0xff000000) >> 24), ((v &0xff0000) >> 16),
 	    ((v & 0xff00) >> 8), (v & 0xff));
@@ -172,12 +173,12 @@ show_adapter(int ac, char **av)
 
 		minspeed = get_device_speed(phy1->MaxMinLinkRate);
 		maxspeed = get_device_speed(phy1->MaxMinLinkRate >> 4);
-		type = get_device_type(phy0->ControllerPhyDeviceInfo);
+		type = get_device_type(le32toh(phy0->ControllerPhyDeviceInfo));
 
-		if (phy0->AttachedDevHandle != 0) {
-			snprintf(devhandle, 5, "%04x", phy0->AttachedDevHandle);
+		if (le16toh(phy0->AttachedDevHandle) != 0) {
+			snprintf(devhandle, 5, "%04x", le16toh(phy0->AttachedDevHandle));
 			snprintf(ctrlhandle, 5, "%04x",
-			    phy0->ControllerDevHandle);
+			    le16toh(phy0->ControllerDevHandle));
 			speed = get_device_speed(phy0->NegotiatedLinkRate);
 		} else {
 			snprintf(devhandle, 5, "    ");
@@ -520,7 +521,7 @@ show_devices(int ac, char **av)
 			close(fd);
 			return (error);
 		}
-		handle = device->DevHandle;
+		handle = le16toh(device->DevHandle);
 
 		if (device->ParentDevHandle == 0x0) {
 			free(device);
@@ -539,7 +540,7 @@ show_devices(int ac, char **av)
 		else
 			snprintf(bt, sizeof(bt), "%02d   %02d", bus, target);
 
-		type = get_device_type(device->DeviceInfo);
+		type = get_device_type(le32toh(device->DeviceInfo));
 
 		if (device->PhyNum < nphys) {
 			phydata = &sas0->PhyData[device->PhyNum];
@@ -551,7 +552,7 @@ show_devices(int ac, char **av)
 			    MPI2_SAS_EXPAND_PGAD_FORM_HNDL_PHY_NUM |
 			    (device->PhyNum <<
 			    MPI2_SAS_EXPAND_PGAD_PHYNUM_SHIFT) |
-			    device->ParentDevHandle, &IOCStatus);
+			    le16toh(device->ParentDevHandle), &IOCStatus);
 			if (exp1 == NULL) {
 				if (IOCStatus != MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) {
 					error = errno;
@@ -570,19 +571,19 @@ show_devices(int ac, char **av)
 			speed = " ";
 
 		if (device->EnclosureHandle != 0) {
-			snprintf(enchandle, 5, "%04x", device->EnclosureHandle);
-			snprintf(slot, 3, "%02d", device->Slot);
+			snprintf(enchandle, 5, "%04x", le16toh(device->EnclosureHandle));
+			snprintf(slot, 3, "%02d", le16toh(device->Slot));
 		} else {
 			snprintf(enchandle, 5, "    ");
 			snprintf(slot, 3, "  ");
 		}
 		printf("%-10s", bt);
-		snprintf(buf, sizeof(buf), "%08x%08x", device->SASAddress.High,
-		    device->SASAddress.Low);
+		snprintf(buf, sizeof(buf), "%08x%08x", le32toh(device->SASAddress.High),
+		    le32toh(device->SASAddress.Low));
 		printf("%-17s", buf);
-		snprintf(buf, sizeof(buf), "%04x", device->DevHandle);
+		snprintf(buf, sizeof(buf), "%04x", le16toh(device->DevHandle));
 		printf("%-8s", buf);
-		snprintf(buf, sizeof(buf), "%04x", device->ParentDevHandle);
+		snprintf(buf, sizeof(buf), "%04x", le16toh(device->ParentDevHandle));
 		printf("%-10s", buf);
 		printf("%-14s%-6s%-5s%-6s%d\n", type, speed,
 		    enchandle, slot, device->MaxPortConnections);
@@ -626,16 +627,16 @@ show_enclosures(int ac, char **av)
 			close(fd);
 			return (error);
 		}
-		type = get_enc_type(enc->Flags, &issep);
+		type = get_enc_type(le16toh(enc->Flags), &issep);
 		if (issep == 0)
 			snprintf(sepstr, 5, "    ");
 		else
-			snprintf(sepstr, 5, "%04x", enc->SEPDevHandle);
+			snprintf(sepstr, 5, "%04x", le16toh(enc->SEPDevHandle));
 		printf("  %.2d    %08x%08x    %s       %04x     %s\n",
-		    enc->NumSlots, enc->EnclosureLogicalID.High,
-		    enc->EnclosureLogicalID.Low, sepstr, enc->EnclosureHandle,
+		    le16toh(enc->NumSlots), le32toh(enc->EnclosureLogicalID.High),
+		    le32toh(enc->EnclosureLogicalID.Low), sepstr, le16toh(enc->EnclosureHandle),
 		    type);
-		handle = enc->EnclosureHandle;
+		handle = le16toh(enc->EnclosureHandle);
 		free(enc);
 	}
 	printf("\n");
@@ -679,19 +680,19 @@ show_expanders(int ac, char **av)
 		}
 
 		nphys = exp0->NumPhys;
-		handle = exp0->DevHandle;
+		handle = le16toh(exp0->DevHandle);
 
 		if (exp0->EnclosureHandle == 0x00)
 			snprintf(enchandle, 5, "    ");
 		else
-			snprintf(enchandle, 5, "%04d", exp0->EnclosureHandle);
+			snprintf(enchandle, 5, "%04d", le16toh(exp0->EnclosureHandle));
 		if (exp0->ParentDevHandle == 0x0)
 			snprintf(parent, 5, "    ");
 		else
-			snprintf(parent, 5, "%04x", exp0->ParentDevHandle);
+			snprintf(parent, 5, "%04x", le16toh(exp0->ParentDevHandle));
 		printf("  %02d    %08x%08x    %04x       %s     %s       %d\n",
-		    exp0->NumPhys, exp0->SASAddress.High, exp0->SASAddress.Low,
-		    exp0->DevHandle, parent, enchandle, exp0->SASLevel);
+		    exp0->NumPhys, le32toh(exp0->SASAddress.High), le32toh(exp0->SASAddress.Low),
+		    le16toh(exp0->DevHandle), parent, enchandle, exp0->SASLevel);
 
 		printf("\n");
 		printf("     Phy  RemotePhy  DevHandle  Speed   Min    Max    Device\n");
@@ -708,8 +709,8 @@ show_expanders(int ac, char **av)
 					warn("Error retrieving expander pg 1");
 				continue;
 			}
-			type = get_device_type(exp1->AttachedDeviceInfo);
-			if ((exp1->AttachedDeviceInfo &0x7) == 0) {
+			type = get_device_type(le32toh(exp1->AttachedDeviceInfo));
+			if ((le32toh(exp1->AttachedDeviceInfo) &0x7) == 0) {
 				speed = "     ";
 				snprintf(rphy, 3, "  ");
 				snprintf(rhandle, 5, "     ");
@@ -719,7 +720,7 @@ show_expanders(int ac, char **av)
 				snprintf(rphy, 3, "%02d",
 				    exp1->AttachedPhyIdentifier);
 				snprintf(rhandle, 5, "%04x",
-				    exp1->AttachedDevHandle);
+				    le16toh(exp1->AttachedDevHandle));
 			}
 			min = get_device_speed(exp1->HwLinkRate);
 			max = get_device_speed(exp1->HwLinkRate >> 4);
@@ -762,7 +763,7 @@ show_cfgpage(int ac, char **av)
 
 	switch (ac) {
 	case 4:
-		addr = (uint32_t)strtoul(av[3], NULL, 0);
+		addr = htole32((uint32_t)strtoul(av[3], NULL, 0));
 	case 3:
 		num = (uint8_t)strtoul(av[2], NULL, 0);
 	case 2:
@@ -789,7 +790,7 @@ show_cfgpage(int ac, char **av)
 
 	if (page >= 0x10) {
 		ehdr = data;
-		len = ehdr->ExtPageLength * 4;
+		len = le16toh(ehdr->ExtPageLength) * 4;
 		page = ehdr->ExtPageType;
 		attrs = ehdr->PageType >> 4;
 	} else {
diff --git a/usr.sbin/mpsutil/mps_slot.c b/usr.sbin/mpsutil/mps_slot.c
index 1879d699067a..bb4a7324c461 100644
--- a/usr.sbin/mpsutil/mps_slot.c
+++ b/usr.sbin/mpsutil/mps_slot.c
@@ -31,6 +31,7 @@ __RCSID("$FreeBSD$");
 #include <sys/stat.h>
 #include <sys/param.h>
 #include <sys/mman.h>
+#include <sys/endian.h>
 
 #include <errno.h>
 #include <err.h>
@@ -99,7 +100,8 @@ slot_set(int argc, char **argv)
 		return (error);
 	}
 
-	if (mps_set_slot_status(fd, handle, slot, status) != 0) {
+	if (mps_set_slot_status(fd, htole16(handle), htole16(slot),
+	    htole32(status)) != 0) {
 		warnx("Failed to set status");
 		close(fd);
 		return (1);
diff --git a/usr.sbin/mpsutil/mpsutil.8 b/usr.sbin/mpsutil/mpsutil.8
index 1dd4f0509174..1bb7c4d5eaec 100644
--- a/usr.sbin/mpsutil/mpsutil.8
+++ b/usr.sbin/mpsutil/mpsutil.8
@@ -163,3 +163,6 @@ The
 .Nm
 utility first appeared in
 .Fx 11.0 .
+.Sh TODO
+Flash operations (save/update) are not supported on big-endian architectures.
+.Pp

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:35 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7CB15630EEF;
 Fri,  7 May 2021 15:25:35 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmH35r6z4k1V;
 Fri,  7 May 2021 15:25:35 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5D3B8576F;
 Fri,  7 May 2021 15:25:35 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPZdw025798;
 Fri, 7 May 2021 15:25:35 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPZQm025797;
 Fri, 7 May 2021 15:25:35 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:35 GMT
Message-Id: <202105071525.147FPZQm025797@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 95a06e369e5d - stable/13 - pf: Remove unused variable rt_listid
 from struct pf_krule
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 95a06e369e5d995e235a4bf45f308770360df801
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:35 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=95a06e369e5d995e235a4bf45f308770360df801

commit 95a06e369e5d995e235a4bf45f308770360df801
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-08 09:08:33 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:40 +0000

    pf: Remove unused variable rt_listid from struct pf_krule
    
    Reviewed by:    donner
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29639
    
    (cherry picked from commit 4967f672ef3095300fe74a9d1ae873d0897cc0a5)
---
 sys/net/pfvar.h           | 1 -
 sys/netpfil/pf/pf_ioctl.c | 2 --
 2 files changed, 3 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 2039e3277321..17f6020513bd 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -356,7 +356,6 @@ struct pf_krule {
 	}			 max_src_conn_rate;
 	u_int32_t		 qid;
 	u_int32_t		 pqid;
-	u_int32_t		 rt_listid;
 	u_int32_t		 nr;
 	u_int32_t		 prob;
 	uid_t			 cuid;
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 3161c6b1f7c9..8ac534e0d58b 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -1546,7 +1546,6 @@ pf_krule_to_rule(const struct pf_krule *krule, struct pf_rule *rule)
 	rule->max_src_conn_rate.seconds = krule->max_src_conn_rate.seconds;
 	rule->qid = krule->qid;
 	rule->pqid = krule->pqid;
-	rule->rt_listid = krule->rt_listid;
 	rule->nr = krule->nr;
 	rule->prob = krule->prob;
 	rule->cuid = krule->cuid;
@@ -1680,7 +1679,6 @@ pf_rule_to_krule(const struct pf_rule *rule, struct pf_krule *krule)
 	krule->max_src_conn_rate.seconds = rule->max_src_conn_rate.seconds;
 	krule->qid = rule->qid;
 	krule->pqid = rule->pqid;
-	krule->rt_listid = rule->rt_listid;
 	krule->nr = rule->nr;
 	krule->prob = rule->prob;
 	krule->cuid = rule->cuid;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:36 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9C7F2630EF0;
 Fri,  7 May 2021 15:25:36 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmJ3vjFz4jbf;
 Fri,  7 May 2021 15:25:36 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 771B25C88;
 Fri,  7 May 2021 15:25:36 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPaME025844;
 Fri, 7 May 2021 15:25:36 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPatE025837;
 Fri, 7 May 2021 15:25:36 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:36 GMT
Message-Id: <202105071525.147FPatE025837@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: f9b057eaf625 - stable/13 - pf: Introduce nvlist variant of
 DIOCADDRULE
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: f9b057eaf625c401e05760ce954830b1f12089ba
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:36 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=f9b057eaf625c401e05760ce954830b1f12089ba

commit f9b057eaf625c401e05760ce954830b1f12089ba
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-11 15:21:23 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:41 +0000

    pf: Introduce nvlist variant of DIOCADDRULE
    
    This will make future extensions of the API much easier.
    The intent is to remove support for DIOCADDRULE in FreeBSD 14.
    
    Reviewed by:    markj (previous version), glebius (previous version)
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29557
    
    (cherry picked from commit 5c62eded5a11ebdb1d57134d923596e2b04e9466)
---
 sys/conf/files            |   1 +
 sys/modules/pf/Makefile   |   2 +-
 sys/net/pfvar.h           |   1 +
 sys/netpfil/pf/pf.h       |   6 +
 sys/netpfil/pf/pf_ioctl.c | 647 ++++++++++++++++++++++++++++++++++++----------
 sys/netpfil/pf/pf_nv.c    | 127 +++++++++
 sys/netpfil/pf/pf_nv.h    |  53 ++++
 7 files changed, 697 insertions(+), 140 deletions(-)

diff --git a/sys/conf/files b/sys/conf/files
index 9ec7292a741b..161b70880309 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -4523,6 +4523,7 @@ netpfil/pf/pf_if.c		optional pf inet
 netpfil/pf/pf_ioctl.c		optional pf inet
 netpfil/pf/pf_lb.c		optional pf inet
 netpfil/pf/pf_norm.c		optional pf inet
+netpfil/pf/pf_nv.c		optional pf inet
 netpfil/pf/pf_osfp.c		optional pf inet
 netpfil/pf/pf_ruleset.c		optional pf inet
 netpfil/pf/pf_table.c		optional pf inet
diff --git a/sys/modules/pf/Makefile b/sys/modules/pf/Makefile
index 148b64c02a9f..7293b30cda9d 100644
--- a/sys/modules/pf/Makefile
+++ b/sys/modules/pf/Makefile
@@ -4,7 +4,7 @@
 
 KMOD=	pf
 SRCS=	pf.c pf_if.c pf_lb.c pf_osfp.c pf_ioctl.c pf_norm.c pf_table.c \
-	pf_ruleset.c in4_cksum.c \
+	pf_ruleset.c pf_nv.c in4_cksum.c \
 	bus_if.h device_if.h \
 	opt_pf.h opt_inet.h opt_inet6.h opt_bpf.h opt_sctp.h opt_global.h
 
diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 17f6020513bd..584724b88b13 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -1228,6 +1228,7 @@ struct pfioc_iface {
 #define DIOCSTART	_IO  ('D',  1)
 #define DIOCSTOP	_IO  ('D',  2)
 #define DIOCADDRULE	_IOWR('D',  4, struct pfioc_rule)
+#define DIOCADDRULENV	_IOWR('D',  4, struct pfioc_nv)
 #define DIOCGETRULES	_IOWR('D',  6, struct pfioc_rule)
 #define DIOCGETRULE	_IOWR('D',  7, struct pfioc_rule)
 /* XXX cut 8 - 17 */
diff --git a/sys/netpfil/pf/pf.h b/sys/netpfil/pf/pf.h
index 511c60f5abd1..bc6cd92ae7b8 100644
--- a/sys/netpfil/pf/pf.h
+++ b/sys/netpfil/pf/pf.h
@@ -187,6 +187,12 @@ enum	{ PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL,
 #define	PF_TABLE_NAME_SIZE	32
 #define	PF_QNAME_SIZE		64
 
+struct pfioc_nv {
+	void            *data;
+	size_t           len;   /* The length of the nvlist data. */
+	size_t           size;  /* The total size of the data buffer. */
+};
+
 struct pf_rule;
 
 /* keep synced with pfi_kif, used in RB_FIND */
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 8ac534e0d58b..87a52dd41542 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/lock.h>
 #include <sys/mbuf.h>
 #include <sys/module.h>
+#include <sys/nv.h>
 #include <sys/proc.h>
 #include <sys/smp.h>
 #include <sys/socket.h>
@@ -82,6 +83,7 @@ __FBSDID("$FreeBSD$");
 #include <netinet/ip_var.h>
 #include <netinet6/ip6_var.h>
 #include <netinet/ip_icmp.h>
+#include <netpfil/pf/pf_nv.h>
 
 #ifdef INET6
 #include <netinet/ip6.h>
@@ -1622,6 +1624,294 @@ pf_check_rule_addr(const struct pf_rule_addr *addr)
 	return (0);
 }
 
+static int
+pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *paddr)
+{
+	return (pf_nvbinary(nvl, "addr", paddr, sizeof(*paddr)));
+}
+
+static int
+pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_kpool *kpool)
+{
+	int error = 0;
+
+	bzero(kpool, sizeof(*kpool));
+
+	PFNV_CHK(pf_nvbinary(nvl, "key", &kpool->key, sizeof(kpool->key)));
+
+	if (nvlist_exists_nvlist(nvl, "counter")) {
+		PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "counter"),
+		    &kpool->counter));
+	}
+
+	PFNV_CHK(pf_nvint(nvl, "tblidx", &kpool->tblidx));
+	PFNV_CHK(pf_nvuint16_array(nvl, "proxy_port", kpool->proxy_port, 2,
+	    NULL));
+	PFNV_CHK(pf_nvuint8(nvl, "opts", &kpool->opts));
+
+errout:
+	return (error);
+}
+
+static int
+pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
+{
+	int error = 0;
+
+	bzero(addr, sizeof(*addr));
+
+	PFNV_CHK(pf_nvuint8(nvl, "type", &addr->type));
+	PFNV_CHK(pf_nvuint8(nvl, "iflags", &addr->iflags));
+	PFNV_CHK(pf_nvstring(nvl, "ifname", addr->v.ifname,
+	    sizeof(addr->v.ifname)));
+	PFNV_CHK(pf_nvstring(nvl, "tblname", addr->v.tblname,
+	    sizeof(addr->v.tblname)));
+
+	if (! nvlist_exists_nvlist(nvl, "addr"))
+		return (EINVAL);
+	PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"),
+	    &addr->v.a.addr));
+
+	if (! nvlist_exists_nvlist(nvl, "mask"))
+		return (EINVAL);
+	PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "mask"),
+	    &addr->v.a.mask));
+
+	switch (addr->type) {
+	case PF_ADDR_DYNIFTL:
+	case PF_ADDR_TABLE:
+	case PF_ADDR_RANGE:
+	case PF_ADDR_ADDRMASK:
+	case PF_ADDR_NOROUTE:
+	case PF_ADDR_URPFFAILED:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+errout:
+	return (error);
+}
+
+static int
+pf_validate_op(uint8_t op)
+{
+	switch (op) {
+	case PF_OP_NONE:
+	case PF_OP_IRG:
+	case PF_OP_EQ:
+	case PF_OP_NE:
+	case PF_OP_LT:
+	case PF_OP_LE:
+	case PF_OP_GT:
+	case PF_OP_GE:
+	case PF_OP_XRG:
+	case PF_OP_RRG:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	return (0);
+}
+
+static int
+pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
+{
+	int error = 0;
+
+	if (! nvlist_exists_nvlist(nvl, "addr"))
+		return (EINVAL);
+
+	PFNV_CHK(pf_nvaddr_wrap_to_addr_wrap(nvlist_get_nvlist(nvl, "addr"),
+	    &addr->addr));
+	PFNV_CHK(pf_nvuint16_array(nvl, "port", addr->port, 2, NULL));
+	PFNV_CHK(pf_nvuint8(nvl, "neg", &addr->neg));
+	PFNV_CHK(pf_nvuint8(nvl, "port_op", &addr->port_op));
+
+	PFNV_CHK(pf_validate_op(addr->port_op));
+
+errout:
+	return (error);
+}
+
+static int
+pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
+{
+	int error = 0;
+
+	bzero(uid, sizeof(*uid));
+
+	PFNV_CHK(pf_nvuint32_array(nvl, "uid", uid->uid, 2, NULL));
+	PFNV_CHK(pf_nvuint8(nvl, "op", &uid->op));
+
+	PFNV_CHK(pf_validate_op(uid->op));
+
+errout:
+	return (error);
+}
+
+static int
+pf_nvrule_gid_to_rule_gid(const nvlist_t *nvl, struct pf_rule_gid *gid)
+{
+	/* Cheat a little. These stucts are the same, other than the name of
+	 * the first field. */
+	return (pf_nvrule_uid_to_rule_uid(nvl, (struct pf_rule_uid *)gid));
+}
+
+static int
+pf_nvrule_to_krule(const nvlist_t *nvl, struct pf_krule **prule)
+{
+	struct pf_krule *rule;
+	int error = 0;
+
+	rule = malloc(sizeof(*rule), M_PFRULE, M_WAITOK | M_ZERO);
+
+	PFNV_CHK(pf_nvuint32(nvl, "nr", &rule->nr));
+
+	if (! nvlist_exists_nvlist(nvl, "src")) {
+		error = EINVAL;
+		goto errout;
+	}
+	error = pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "src"),
+	    &rule->src);
+	if (error != 0)
+		goto errout;
+
+	if (! nvlist_exists_nvlist(nvl, "dst")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "dst"),
+	    &rule->dst));
+
+	PFNV_CHK(pf_nvstring(nvl, "label", rule->label, sizeof(rule->label)));
+	PFNV_CHK(pf_nvstring(nvl, "ifname", rule->ifname,
+	    sizeof(rule->ifname)));
+	PFNV_CHK(pf_nvstring(nvl, "qname", rule->qname, sizeof(rule->qname)));
+	PFNV_CHK(pf_nvstring(nvl, "pqname", rule->pqname,
+	    sizeof(rule->pqname)));
+	PFNV_CHK(pf_nvstring(nvl, "tagname", rule->tagname,
+	    sizeof(rule->tagname)));
+	PFNV_CHK(pf_nvstring(nvl, "match_tagname", rule->match_tagname,
+	    sizeof(rule->match_tagname)));
+	PFNV_CHK(pf_nvstring(nvl, "overload_tblname", rule->overload_tblname,
+	    sizeof(rule->overload_tblname)));
+
+	if (! nvlist_exists_nvlist(nvl, "rpool")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvpool_to_pool(nvlist_get_nvlist(nvl, "rpool"),
+	    &rule->rpool));
+
+	PFNV_CHK(pf_nvuint32(nvl, "os_fingerprint", &rule->os_fingerprint));
+
+	PFNV_CHK(pf_nvint(nvl, "rtableid", &rule->rtableid));
+	PFNV_CHK(pf_nvuint32_array(nvl, "timeout", rule->timeout, PFTM_MAX, NULL));
+	PFNV_CHK(pf_nvuint32(nvl, "max_states", &rule->max_states));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_nodes", &rule->max_src_nodes));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_states", &rule->max_src_states));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_conn", &rule->max_src_conn));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_conn_rate.limit",
+	    &rule->max_src_conn_rate.limit));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_conn_rate.seconds",
+	    &rule->max_src_conn_rate.seconds));
+	PFNV_CHK(pf_nvuint32(nvl, "prob", &rule->prob));
+	PFNV_CHK(pf_nvuint32(nvl, "cuid", &rule->cuid));
+	PFNV_CHK(pf_nvuint32(nvl, "cpid", &rule->cpid));
+
+	PFNV_CHK(pf_nvuint16(nvl, "return_icmp", &rule->return_icmp));
+	PFNV_CHK(pf_nvuint16(nvl, "return_icmp6", &rule->return_icmp6));
+
+	PFNV_CHK(pf_nvuint16(nvl, "max_mss", &rule->max_mss));
+	PFNV_CHK(pf_nvuint16(nvl, "scrub_flags", &rule->scrub_flags));
+
+	if (! nvlist_exists_nvlist(nvl, "uid")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvrule_uid_to_rule_uid(nvlist_get_nvlist(nvl, "uid"),
+	    &rule->uid));
+
+	if (! nvlist_exists_nvlist(nvl, "gid")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvrule_gid_to_rule_gid(nvlist_get_nvlist(nvl, "gid"),
+	    &rule->gid));
+
+	PFNV_CHK(pf_nvuint32(nvl, "rule_flag", &rule->rule_flag));
+	PFNV_CHK(pf_nvuint8(nvl, "action", &rule->action));
+	PFNV_CHK(pf_nvuint8(nvl, "direction", &rule->direction));
+	PFNV_CHK(pf_nvuint8(nvl, "log", &rule->log));
+	PFNV_CHK(pf_nvuint8(nvl, "logif", &rule->logif));
+	PFNV_CHK(pf_nvuint8(nvl, "quick", &rule->quick));
+	PFNV_CHK(pf_nvuint8(nvl, "ifnot", &rule->ifnot));
+	PFNV_CHK(pf_nvuint8(nvl, "match_tag_not", &rule->match_tag_not));
+	PFNV_CHK(pf_nvuint8(nvl, "natpass", &rule->natpass));
+
+	PFNV_CHK(pf_nvuint8(nvl, "keep_state", &rule->keep_state));
+	PFNV_CHK(pf_nvuint8(nvl, "af", &rule->af));
+	PFNV_CHK(pf_nvuint8(nvl, "proto", &rule->proto));
+	PFNV_CHK(pf_nvuint8(nvl, "type", &rule->type));
+	PFNV_CHK(pf_nvuint8(nvl, "code", &rule->code));
+	PFNV_CHK(pf_nvuint8(nvl, "flags", &rule->flags));
+	PFNV_CHK(pf_nvuint8(nvl, "flagset", &rule->flagset));
+	PFNV_CHK(pf_nvuint8(nvl, "min_ttl", &rule->min_ttl));
+	PFNV_CHK(pf_nvuint8(nvl, "allow_opts", &rule->allow_opts));
+	PFNV_CHK(pf_nvuint8(nvl, "rt", &rule->rt));
+	PFNV_CHK(pf_nvuint8(nvl, "return_ttl", &rule->return_ttl));
+	PFNV_CHK(pf_nvuint8(nvl, "tos", &rule->tos));
+	PFNV_CHK(pf_nvuint8(nvl, "set_tos", &rule->set_tos));
+	PFNV_CHK(pf_nvuint8(nvl, "anchor_relative", &rule->anchor_relative));
+	PFNV_CHK(pf_nvuint8(nvl, "anchor_wildcard", &rule->anchor_wildcard));
+
+	PFNV_CHK(pf_nvuint8(nvl, "flush", &rule->flush));
+	PFNV_CHK(pf_nvuint8(nvl, "prio", &rule->prio));
+
+	PFNV_CHK(pf_nvuint8_array(nvl, "set_prio", &rule->prio, 2, NULL));
+
+	if (nvlist_exists_nvlist(nvl, "divert")) {
+		const nvlist_t *nvldivert = nvlist_get_nvlist(nvl, "divert");
+
+		if (! nvlist_exists_nvlist(nvldivert, "addr")) {
+			error = EINVAL;
+			goto errout;
+		}
+		PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvldivert, "addr"),
+		    &rule->divert.addr));
+		PFNV_CHK(pf_nvuint16(nvldivert, "port", &rule->divert.port));
+	}
+
+	/* Validation */
+#ifndef INET
+	if (rule->af == AF_INET) {
+		error = EAFNOSUPPORT;
+		goto errout;
+	}
+#endif /* INET */
+#ifndef INET6
+	if (rule->af == AF_INET6) {
+		error = EAFNOSUPPORT;
+		goto errout;
+	}
+#endif /* INET6 */
+
+	PFNV_CHK(pf_check_rule_addr(&rule->src));
+	PFNV_CHK(pf_check_rule_addr(&rule->dst));
+
+	*prule = rule;
+
+	return (0);
+
+errout:
+	pf_krule_free(rule);
+	*prule = NULL;
+
+	return (error);
+}
+
 static int
 pf_rule_to_krule(const struct pf_rule *rule, struct pf_krule *krule)
 {
@@ -1796,6 +2086,163 @@ relock_DIOCKILLSTATES:
 	return (killed);
 }
 
+static int
+pf_ioctl_addrule(struct pf_krule *rule, uint32_t ticket,
+    uint32_t pool_ticket, const char *anchor, const char *anchor_call,
+    struct thread *td)
+{
+	struct pf_kruleset	*ruleset;
+	struct pf_krule		*tail;
+	struct pf_kpooladdr	*pa;
+	struct pfi_kkif		*kif = NULL;
+	int			 rs_num;
+	int			 error = 0;
+
+	if ((rule->return_icmp >> 8) > ICMP_MAXTYPE) {
+		error = EINVAL;
+		goto errout_unlocked;
+	}
+
+#define	ERROUT(x)	{ error = (x); goto errout; }
+
+	if (rule->ifname[0])
+		kif = pf_kkif_create(M_WAITOK);
+	rule->evaluations = counter_u64_alloc(M_WAITOK);
+	for (int i = 0; i < 2; i++) {
+		rule->packets[i] = counter_u64_alloc(M_WAITOK);
+		rule->bytes[i] = counter_u64_alloc(M_WAITOK);
+	}
+	rule->states_cur = counter_u64_alloc(M_WAITOK);
+	rule->states_tot = counter_u64_alloc(M_WAITOK);
+	rule->src_nodes = counter_u64_alloc(M_WAITOK);
+	rule->cuid = td->td_ucred->cr_ruid;
+	rule->cpid = td->td_proc ? td->td_proc->p_pid : 0;
+	TAILQ_INIT(&rule->rpool.list);
+
+	PF_RULES_WLOCK();
+	ruleset = pf_find_kruleset(anchor);
+	if (ruleset == NULL)
+		ERROUT(EINVAL);
+	rs_num = pf_get_ruleset_number(rule->action);
+	if (rs_num >= PF_RULESET_MAX)
+		ERROUT(EINVAL);
+	if (ticket != ruleset->rules[rs_num].inactive.ticket) {
+		DPFPRINTF(PF_DEBUG_MISC,
+		    ("ticket: %d != [%d]%d\n", ticket, rs_num,
+		    ruleset->rules[rs_num].inactive.ticket));
+		ERROUT(EBUSY);
+	}
+	if (pool_ticket != V_ticket_pabuf) {
+		DPFPRINTF(PF_DEBUG_MISC,
+		    ("pool_ticket: %d != %d\n", pool_ticket,
+		    V_ticket_pabuf));
+		ERROUT(EBUSY);
+	}
+
+	tail = TAILQ_LAST(ruleset->rules[rs_num].inactive.ptr,
+	    pf_krulequeue);
+	if (tail)
+		rule->nr = tail->nr + 1;
+	else
+		rule->nr = 0;
+	if (rule->ifname[0]) {
+		rule->kif = pfi_kkif_attach(kif, rule->ifname);
+		pfi_kkif_ref(rule->kif);
+	} else
+		rule->kif = NULL;
+
+	if (rule->rtableid > 0 && rule->rtableid >= rt_numfibs)
+		error = EBUSY;
+
+#ifdef ALTQ
+	/* set queue IDs */
+	if (rule->qname[0] != 0) {
+		if ((rule->qid = pf_qname2qid(rule->qname)) == 0)
+			error = EBUSY;
+		else if (rule->pqname[0] != 0) {
+			if ((rule->pqid =
+			    pf_qname2qid(rule->pqname)) == 0)
+				error = EBUSY;
+		} else
+			rule->pqid = rule->qid;
+	}
+#endif
+	if (rule->tagname[0])
+		if ((rule->tag = pf_tagname2tag(rule->tagname)) == 0)
+			error = EBUSY;
+	if (rule->match_tagname[0])
+		if ((rule->match_tag =
+		    pf_tagname2tag(rule->match_tagname)) == 0)
+			error = EBUSY;
+	if (rule->rt && !rule->direction)
+		error = EINVAL;
+	if (!rule->log)
+		rule->logif = 0;
+	if (rule->logif >= PFLOGIFS_MAX)
+		error = EINVAL;
+	if (pf_addr_setup(ruleset, &rule->src.addr, rule->af))
+		error = ENOMEM;
+	if (pf_addr_setup(ruleset, &rule->dst.addr, rule->af))
+		error = ENOMEM;
+	if (pf_kanchor_setup(rule, ruleset, anchor_call))
+		error = EINVAL;
+	if (rule->scrub_flags & PFSTATE_SETPRIO &&
+	    (rule->set_prio[0] > PF_PRIO_MAX ||
+	    rule->set_prio[1] > PF_PRIO_MAX))
+		error = EINVAL;
+	TAILQ_FOREACH(pa, &V_pf_pabuf, entries)
+		if (pa->addr.type == PF_ADDR_TABLE) {
+			pa->addr.p.tbl = pfr_attach_table(ruleset,
+			    pa->addr.v.tblname);
+			if (pa->addr.p.tbl == NULL)
+				error = ENOMEM;
+		}
+
+	rule->overload_tbl = NULL;
+	if (rule->overload_tblname[0]) {
+		if ((rule->overload_tbl = pfr_attach_table(ruleset,
+		    rule->overload_tblname)) == NULL)
+			error = EINVAL;
+		else
+			rule->overload_tbl->pfrkt_flags |=
+			    PFR_TFLAG_ACTIVE;
+	}
+
+	pf_mv_kpool(&V_pf_pabuf, &rule->rpool.list);
+	if (((((rule->action == PF_NAT) || (rule->action == PF_RDR) ||
+	    (rule->action == PF_BINAT)) && rule->anchor == NULL) ||
+	    (rule->rt > PF_NOPFROUTE)) &&
+	    (TAILQ_FIRST(&rule->rpool.list) == NULL))
+		error = EINVAL;
+
+	if (error) {
+		pf_free_rule(rule);
+		rule = NULL;
+		ERROUT(error);
+	}
+
+	rule->rpool.cur = TAILQ_FIRST(&rule->rpool.list);
+	counter_u64_zero(rule->evaluations);
+	for (int i = 0; i < 2; i++) {
+		counter_u64_zero(rule->packets[i]);
+		counter_u64_zero(rule->bytes[i]);
+	}
+	TAILQ_INSERT_TAIL(ruleset->rules[rs_num].inactive.ptr,
+	    rule, entries);
+	ruleset->rules[rs_num].inactive.rcount++;
+	PF_RULES_WUNLOCK();
+
+	return (0);
+
+#undef ERROUT
+errout:
+	PF_RULES_WUNLOCK();
+errout_unlocked:
+	pf_kkif_free(kif);
+	pf_krule_free(rule);
+	return (error);
+}
+
 static int
 pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 {
@@ -1946,161 +2393,83 @@ pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td
 		}
 		break;
 
-	case DIOCADDRULE: {
-		struct pfioc_rule	*pr = (struct pfioc_rule *)addr;
-		struct pf_kruleset	*ruleset;
-		struct pf_krule		*rule, *tail;
-		struct pf_kpooladdr	*pa;
-		struct pfi_kkif		*kif = NULL;
-		int			 rs_num;
+	case DIOCADDRULENV: {
+		struct pfioc_nv	*nv = (struct pfioc_nv *)addr;
+		nvlist_t	*nvl = NULL;
+		void		*nvlpacked = NULL;
+		struct pf_krule	*rule = NULL;
+		const char	*anchor = "", *anchor_call = "";
+		uint32_t	 ticket = 0, pool_ticket = 0;
 
-		if (pr->rule.return_icmp >> 8 > ICMP_MAXTYPE) {
-			error = EINVAL;
-			break;
-		}
+#define	ERROUT(x)	do { error = (x); goto DIOCADDRULENV_error; } while (0)
 
-		rule = malloc(sizeof(*rule), M_PFRULE, M_WAITOK);
-		error = pf_rule_to_krule(&pr->rule, rule);
-		if (error != 0) {
-			free(rule, M_PFRULE);
-			break;
-		}
+		if (nv->len > pf_ioctl_maxcount)
+			ERROUT(ENOMEM);
 
-		if (rule->ifname[0])
-			kif = pf_kkif_create(M_WAITOK);
-		rule->evaluations = counter_u64_alloc(M_WAITOK);
-		for (int i = 0; i < 2; i++) {
-			rule->packets[i] = counter_u64_alloc(M_WAITOK);
-			rule->bytes[i] = counter_u64_alloc(M_WAITOK);
-		}
-		rule->states_cur = counter_u64_alloc(M_WAITOK);
-		rule->states_tot = counter_u64_alloc(M_WAITOK);
-		rule->src_nodes = counter_u64_alloc(M_WAITOK);
-		rule->cuid = td->td_ucred->cr_ruid;
-		rule->cpid = td->td_proc ? td->td_proc->p_pid : 0;
-		TAILQ_INIT(&rule->rpool.list);
-#define	ERROUT(x)	{ error = (x); goto DIOCADDRULE_error; }
+		nvlpacked = malloc(nv->len, M_TEMP, M_WAITOK);
+		error = copyin(nv->data, nvlpacked, nv->len);
+		if (error)
+			ERROUT(error);
 
-		PF_RULES_WLOCK();
-		pr->anchor[sizeof(pr->anchor) - 1] = 0;
-		ruleset = pf_find_kruleset(pr->anchor);
-		if (ruleset == NULL)
+		nvl = nvlist_unpack(nvlpacked, nv->len, 0);
+		if (nvl == NULL)
+			ERROUT(EBADMSG);
+
+		if (! nvlist_exists_number(nvl, "ticket"))
 			ERROUT(EINVAL);
-		rs_num = pf_get_ruleset_number(pr->rule.action);
-		if (rs_num >= PF_RULESET_MAX)
+		ticket = nvlist_get_number(nvl, "ticket");
+
+		if (! nvlist_exists_number(nvl, "pool_ticket"))
 			ERROUT(EINVAL);
-		if (pr->ticket != ruleset->rules[rs_num].inactive.ticket) {
-			DPFPRINTF(PF_DEBUG_MISC,
-			    ("ticket: %d != [%d]%d\n", pr->ticket, rs_num,
-			    ruleset->rules[rs_num].inactive.ticket));
-			ERROUT(EBUSY);
-		}
-		if (pr->pool_ticket != V_ticket_pabuf) {
-			DPFPRINTF(PF_DEBUG_MISC,
-			    ("pool_ticket: %d != %d\n", pr->pool_ticket,
-			    V_ticket_pabuf));
-			ERROUT(EBUSY);
-		}
+		pool_ticket = nvlist_get_number(nvl, "pool_ticket");
 
-		tail = TAILQ_LAST(ruleset->rules[rs_num].inactive.ptr,
-		    pf_krulequeue);
-		if (tail)
-			rule->nr = tail->nr + 1;
-		else
-			rule->nr = 0;
-		if (rule->ifname[0]) {
-			rule->kif = pfi_kkif_attach(kif, rule->ifname);
-			pfi_kkif_ref(rule->kif);
-		} else
-			rule->kif = NULL;
+		if (! nvlist_exists_nvlist(nvl, "rule"))
+			ERROUT(EINVAL);
 
-		if (rule->rtableid > 0 && rule->rtableid >= rt_numfibs)
-			error = EBUSY;
+		error = pf_nvrule_to_krule(nvlist_get_nvlist(nvl, "rule"),
+		    &rule);
+		if (error)
+			ERROUT(error);
 
-#ifdef ALTQ
-		/* set queue IDs */
-		if (rule->qname[0] != 0) {
-			if ((rule->qid = pf_qname2qid(rule->qname)) == 0)
-				error = EBUSY;
-			else if (rule->pqname[0] != 0) {
-				if ((rule->pqid =
-				    pf_qname2qid(rule->pqname)) == 0)
-					error = EBUSY;
-			} else
-				rule->pqid = rule->qid;
-		}
-#endif
-		if (rule->tagname[0])
-			if ((rule->tag = pf_tagname2tag(rule->tagname)) == 0)
-				error = EBUSY;
-		if (rule->match_tagname[0])
-			if ((rule->match_tag =
-			    pf_tagname2tag(rule->match_tagname)) == 0)
-				error = EBUSY;
-		if (rule->rt && !rule->direction)
-			error = EINVAL;
-		if (!rule->log)
-			rule->logif = 0;
-		if (rule->logif >= PFLOGIFS_MAX)
-			error = EINVAL;
-		if (pf_addr_setup(ruleset, &rule->src.addr, rule->af))
-			error = ENOMEM;
-		if (pf_addr_setup(ruleset, &rule->dst.addr, rule->af))
-			error = ENOMEM;
-		if (pf_kanchor_setup(rule, ruleset, pr->anchor_call))
-			error = EINVAL;
-		if (rule->scrub_flags & PFSTATE_SETPRIO &&
-		    (rule->set_prio[0] > PF_PRIO_MAX ||
-		    rule->set_prio[1] > PF_PRIO_MAX))
-			error = EINVAL;
-		TAILQ_FOREACH(pa, &V_pf_pabuf, entries)
-			if (pa->addr.type == PF_ADDR_TABLE) {
-				pa->addr.p.tbl = pfr_attach_table(ruleset,
-				    pa->addr.v.tblname);
-				if (pa->addr.p.tbl == NULL)
-					error = ENOMEM;
-			}
+		if (nvlist_exists_string(nvl, "anchor"))
+			anchor = nvlist_get_string(nvl, "anchor");
+		if (nvlist_exists_string(nvl, "anchor_call"))
+			anchor_call = nvlist_get_string(nvl, "anchor_call");
 
-		rule->overload_tbl = NULL;
-		if (rule->overload_tblname[0]) {
-			if ((rule->overload_tbl = pfr_attach_table(ruleset,
-			    rule->overload_tblname)) == NULL)
-				error = EINVAL;
-			else
-				rule->overload_tbl->pfrkt_flags |=
-				    PFR_TFLAG_ACTIVE;
-		}
+		if ((error = nvlist_error(nvl)))
+			ERROUT(error);
 
-		pf_mv_kpool(&V_pf_pabuf, &rule->rpool.list);
-		if (((((rule->action == PF_NAT) || (rule->action == PF_RDR) ||
-		    (rule->action == PF_BINAT)) && rule->anchor == NULL) ||
-		    (rule->rt > PF_NOPFROUTE)) &&
-		    (TAILQ_FIRST(&rule->rpool.list) == NULL))
-			error = EINVAL;
+		/* Frees rule on error */
+		error = pf_ioctl_addrule(rule, ticket, pool_ticket, anchor,
+		    anchor_call, td);
 
-		if (error) {
-			pf_free_rule(rule);
-			PF_RULES_WUNLOCK();
+		nvlist_destroy(nvl);
+		free(nvlpacked, M_TEMP);
+		break;
+#undef ERROUT
+DIOCADDRULENV_error:
+		pf_krule_free(rule);
+		nvlist_destroy(nvl);
+		free(nvlpacked, M_TEMP);
+
+		break;
+	}
+	case DIOCADDRULE: {
+		struct pfioc_rule	*pr = (struct pfioc_rule *)addr;
+		struct pf_krule		*rule;
+
+		rule = malloc(sizeof(*rule), M_PFRULE, M_WAITOK);
+		error = pf_rule_to_krule(&pr->rule, rule);
+		if (error != 0) {
+			free(rule, M_PFRULE);
 			break;
 		}
 
-		rule->rpool.cur = TAILQ_FIRST(&rule->rpool.list);
-		counter_u64_zero(rule->evaluations);
-		for (int i = 0; i < 2; i++) {
-			counter_u64_zero(rule->packets[i]);
-			counter_u64_zero(rule->bytes[i]);
-		}
-		TAILQ_INSERT_TAIL(ruleset->rules[rs_num].inactive.ptr,
-		    rule, entries);
-		ruleset->rules[rs_num].inactive.rcount++;
-		PF_RULES_WUNLOCK();
-		break;
+		pr->anchor[sizeof(pr->anchor) - 1] = 0;
 
-#undef ERROUT
-DIOCADDRULE_error:
-		PF_RULES_WUNLOCK();
-		pf_krule_free(rule);
-		pf_kkif_free(kif);
+		/* Frees rule on error */
+		error = pf_ioctl_addrule(rule, pr->ticket, pr->pool_ticket,
+		    pr->anchor, pr->anchor_call, td);
 		break;
 	}
 
diff --git a/sys/netpfil/pf/pf_nv.c b/sys/netpfil/pf/pf_nv.c
new file mode 100644
index 000000000000..d583844c4086
--- /dev/null
+++ b/sys/netpfil/pf/pf_nv.c
@@ -0,0 +1,127 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/errno.h>
+#include <sys/limits.h>
+#include <sys/systm.h>
+
+#include <netpfil/pf/pf_nv.h>
+
+#define	PV_NV_IMPL_UINT(fnname, type, max)					\
+	int									\
+	fnname(const nvlist_t *nvl, const char *name, type *val)		\
+	{									\
+		uint64_t raw;							\
+		if (! nvlist_exists_number(nvl, name))				\
+			return (EINVAL);					\
+		raw = nvlist_get_number(nvl, name);				\
+		if (raw > max)							\
+			return (ERANGE);					\
+		*val = (type)raw;						\
+		return (0);							\
+	}									\
+	int									\
+	fnname ## _array(const nvlist_t *nvl, const char *name, type *array, 	\
+	    size_t maxelems, size_t *nelems)					\
+	{									\
+		const uint64_t *n;						\
+		size_t nitems;							\
+		bzero(array, sizeof(type) * maxelems);				\
+		if (! nvlist_exists_number_array(nvl, name))			\
+			return (EINVAL);					\
+		n = nvlist_get_number_array(nvl, name, &nitems);		\
+		if (nitems != maxelems)						\
+			return (E2BIG);						\
+		if (nelems != NULL)						\
+			*nelems = nitems;					\
+		for (size_t i = 0; i < nitems; i++) {				\
+			if (n[i] > max)						\
+				return (ERANGE);				\
+			array[i] = (type)n[i];					\
+		}								\
+		return (0);							\
+	}
+int
+pf_nvbinary(const nvlist_t *nvl, const char *name, void *data,
+    size_t expected_size)
+{
+	const uint8_t *nvdata;
+	size_t len;
+
+	bzero(data, expected_size);
+
+	if (! nvlist_exists_binary(nvl, name))
+		return (EINVAL);
+
+	nvdata = (const uint8_t *)nvlist_get_binary(nvl, name, &len);
+	if (len > expected_size)
+		return (EINVAL);
+
+	memcpy(data, nvdata, len);
+
+	return (0);
+}
+
+PV_NV_IMPL_UINT(pf_nvuint8, uint8_t, UINT8_MAX)
+PV_NV_IMPL_UINT(pf_nvuint16, uint16_t, UINT16_MAX);
+PV_NV_IMPL_UINT(pf_nvuint32, uint32_t, UINT32_MAX)
+
+int
+pf_nvint(const nvlist_t *nvl, const char *name, int *val)
+{
+	int64_t raw;
+
+	if (! nvlist_exists_number(nvl, name))
+		return (EINVAL);
+
+	raw = nvlist_get_number(nvl, name);
+	if (raw > INT_MAX || raw < INT_MIN)
+		return (ERANGE);
+
+	*val = (int)raw;
+
+	return (0);
+}
+
+int
+pf_nvstring(const nvlist_t *nvl, const char *name, char *str, size_t maxlen)
+{
+	int ret;
+
+	if (! nvlist_exists_string(nvl, name))
+		return (EINVAL);
+
+	ret = strlcpy(str, nvlist_get_string(nvl, name), maxlen);
+	if (ret >= maxlen)
+		return (EINVAL);
+
+	return (0);
+}
diff --git a/sys/netpfil/pf/pf_nv.h b/sys/netpfil/pf/pf_nv.h
new file mode 100644
index 000000000000..f0db1e880e9e
--- /dev/null
+++ b/sys/netpfil/pf/pf_nv.h
@@ -0,0 +1,53 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#ifndef _PF_NV_H_
+#define _PF_NV_H_
+
+#include <sys/types.h>
+#include <sys/nv.h>
+
+int	pf_nvbinary(const nvlist_t *, const char *, void *, size_t);
+int	pf_nvint(const nvlist_t *, const char *, int *);
+int	pf_nvuint8(const nvlist_t *, const char *, uint8_t *);
+int	pf_nvuint8_array(const nvlist_t *, const char *, uint8_t *,
+	    size_t, size_t *);
+int	pf_nvuint16(const nvlist_t *, const char *, uint16_t *);
+int	pf_nvuint16_array(const nvlist_t *, const char *, uint16_t *,
+	    size_t, size_t *);
+int	pf_nvuint32(const nvlist_t *, const char *, uint32_t *);
+int	pf_nvuint32_array(const nvlist_t *, const char *, uint32_t *,
+	    size_t, size_t *);
+int	pf_nvstring(const nvlist_t *, const char *, char *, size_t);
+
+#define	PFNV_CHK(x)	do {	\
+	error = (x);		\
+	if (error != 0)		\
+		goto errout;	\
+	} while (0)
+
+#endif

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:37 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 094AC630DD1;
 Fri,  7 May 2021 15:25:37 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmJ6d92z4jpl;
 Fri,  7 May 2021 15:25:36 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CCFE95DB9;
 Fri,  7 May 2021 15:25:36 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPadW025981;
 Fri, 7 May 2021 15:25:36 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPa5L025980;
 Fri, 7 May 2021 15:25:36 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:36 GMT
Message-Id: <202105071525.147FPa5L025980@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 3d82a24ba1bc - stable/12 - pf: Remove unused variable rt_listid
 from struct pf_krule
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 3d82a24ba1bc90d8ac1cf9df8b13ccde42d8eb0a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:37 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=3d82a24ba1bc90d8ac1cf9df8b13ccde42d8eb0a

commit 3d82a24ba1bc90d8ac1cf9df8b13ccde42d8eb0a
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-08 09:08:33 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:59 +0000

    pf: Remove unused variable rt_listid from struct pf_krule
    
    Reviewed by:    donner
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29639
    
    (cherry picked from commit 4967f672ef3095300fe74a9d1ae873d0897cc0a5)
---
 sys/net/pfvar.h           | 1 -
 sys/netpfil/pf/pf_ioctl.c | 2 --
 2 files changed, 3 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index a5ffba6c9d93..409e8fbefc5a 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -356,7 +356,6 @@ struct pf_krule {
 	}			 max_src_conn_rate;
 	u_int32_t		 qid;
 	u_int32_t		 pqid;
-	u_int32_t		 rt_listid;
 	u_int32_t		 nr;
 	u_int32_t		 prob;
 	uid_t			 cuid;
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 5663228ac5ac..342781fa6640 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -1547,7 +1547,6 @@ pf_krule_to_rule(const struct pf_krule *krule, struct pf_rule *rule)
 	rule->max_src_conn_rate.seconds = krule->max_src_conn_rate.seconds;
 	rule->qid = krule->qid;
 	rule->pqid = krule->pqid;
-	rule->rt_listid = krule->rt_listid;
 	rule->nr = krule->nr;
 	rule->prob = krule->prob;
 	rule->cuid = krule->cuid;
@@ -1681,7 +1680,6 @@ pf_rule_to_krule(const struct pf_rule *rule, struct pf_krule *krule)
 	krule->max_src_conn_rate.seconds = rule->max_src_conn_rate.seconds;
 	krule->qid = rule->qid;
 	krule->pqid = rule->pqid;
-	krule->rt_listid = rule->rt_listid;
 	krule->nr = rule->nr;
 	krule->prob = rule->prob;
 	krule->cuid = rule->cuid;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:37 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id EBD3563138B;
 Fri,  7 May 2021 15:25:37 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmK5K56z4k1Y;
 Fri,  7 May 2021 15:25:37 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9B2585B39;
 Fri,  7 May 2021 15:25:37 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPbVe026003;
 Fri, 7 May 2021 15:25:37 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPbru026002;
 Fri, 7 May 2021 15:25:37 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:37 GMT
Message-Id: <202105071525.147FPbru026002@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 9a8b57081246 - stable/13 - pfctl: Move to DIOCADDRULENV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 9a8b5708124660ae16a920f71117c85b34b455c1
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:38 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=9a8b5708124660ae16a920f71117c85b34b455c1

commit 9a8b5708124660ae16a920f71117c85b34b455c1
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-12 17:03:14 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:41 +0000

    pfctl: Move to DIOCADDRULENV
    
    Start using the new nvlist based ioctl to add rules.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29558
    
    (cherry picked from commit 5c11c5a3655842a176124ef2334fcdf830422c8a)
---
 sbin/pfctl/Makefile |   2 +-
 sbin/pfctl/pfctl.c  | 217 +++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 207 insertions(+), 12 deletions(-)

diff --git a/sbin/pfctl/Makefile b/sbin/pfctl/Makefile
index 14dc83eb97b0..74cefe6824a4 100644
--- a/sbin/pfctl/Makefile
+++ b/sbin/pfctl/Makefile
@@ -27,7 +27,7 @@ CFLAGS+= -DWITH_INET
 
 YFLAGS=
 
-LIBADD=	m md
+LIBADD=	m md nv
 
 HAS_TESTS=
 SUBDIR.${MK_TESTS}+= tests
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 4e00bf2462a6..58a87a2b8395 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#include <sys/nv.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/endian.h>
@@ -1422,19 +1423,217 @@ pfctl_load_ruleset(struct pfctl *pf, char *path, struct pf_ruleset *rs,
 
 }
 
+static void
+pfctl_nv_add_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_addr *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "addr", addr, sizeof(*addr));
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_addr_wrap(nvlist_t *nvparent, const char *name,
+    const struct pf_addr_wrap *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_number(nvl, "type", addr->type);
+	nvlist_add_number(nvl, "iflags", addr->iflags);
+	nvlist_add_string(nvl, "ifname", addr->v.ifname);
+	nvlist_add_string(nvl, "tblname", addr->v.tblname);
+	pfctl_nv_add_addr(nvl, "addr", &addr->v.a.addr);
+	pfctl_nv_add_addr(nvl, "mask", &addr->v.a.mask);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_rule_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_addr *addr)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr_wrap(nvl, "addr", &addr->addr);
+	ports[0] = addr->port[0];
+	ports[1] = addr->port[1];
+	nvlist_add_number_array(nvl, "port", ports, 2);
+	nvlist_add_number(nvl, "neg", addr->neg);
+	nvlist_add_number(nvl, "port_op", addr->port_op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
+    const struct pf_pool *pool)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
+	pfctl_nv_add_addr(nvl, "counter", &pool->counter);
+	nvlist_add_number(nvl, "tblidx", pool->tblidx);
+
+	ports[0] = pool->proxy_port[0];
+	ports[1] = pool->proxy_port[1];
+	nvlist_add_number_array(nvl, "proxy_port", ports, 2);
+	nvlist_add_number(nvl, "opts", pool->opts);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_uid(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_uid *uid)
+{
+	u_int64_t uids[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	uids[0] = uid->uid[0];
+	uids[1] = uid->uid[1];
+	nvlist_add_number_array(nvl, "uid", uids, 2);
+	nvlist_add_number(nvl, "op", uid->op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
+    const struct pf_rule *r)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr(nvl, "addr", &r->divert.addr);
+	nvlist_add_number(nvl, "port", r->divert.port);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static int
+pfctl_addrule(struct pfctl *pf, const struct pf_rule *r, const char *anchor,
+    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
+{
+	struct pfioc_nv nv;
+	u_int64_t timeouts[PFTM_MAX];
+	u_int64_t set_prio[2];
+	nvlist_t *nvl, *nvlr;
+	int ret;
+
+	nvl = nvlist_create(0);
+	nvlr = nvlist_create(0);
+
+	nvlist_add_number(nvl, "ticket", ticket);
+	nvlist_add_number(nvl, "pool_ticket", pool_ticket);
+	nvlist_add_string(nvl, "anchor", anchor);
+	nvlist_add_string(nvl, "anchor_call", anchor_call);
+
+	nvlist_add_number(nvlr, "nr", r->nr);
+	pfctl_nv_add_rule_addr(nvlr, "src", &r->src);
+	pfctl_nv_add_rule_addr(nvlr, "dst", &r->dst);
+
+	nvlist_add_string(nvlr, "label", r->label);
+	nvlist_add_string(nvlr, "ifname", r->ifname);
+	nvlist_add_string(nvlr, "qname", r->qname);
+	nvlist_add_string(nvlr, "pqname", r->pqname);
+	nvlist_add_string(nvlr, "tagname", r->tagname);
+	nvlist_add_string(nvlr, "match_tagname", r->match_tagname);
+	nvlist_add_string(nvlr, "overload_tblname", r->overload_tblname);
+
+	pfctl_nv_add_pool(nvlr, "rpool", &r->rpool);
+
+	nvlist_add_number(nvlr, "os_fingerprint", r->os_fingerprint);
+
+	nvlist_add_number(nvlr, "rtableid", r->rtableid);
+	for (int i = 0; i < PFTM_MAX; i++)
+		timeouts[i] = r->timeout[i];
+	nvlist_add_number_array(nvlr, "timeout", timeouts, PFTM_MAX);
+	nvlist_add_number(nvlr, "max_states", r->max_states);
+	nvlist_add_number(nvlr, "max_src_nodes", r->max_src_nodes);
+	nvlist_add_number(nvlr, "max_src_states", r->max_src_states);
+	nvlist_add_number(nvlr, "max_src_conn", r->max_src_conn);
+	nvlist_add_number(nvlr, "max_src_conn_rate.limit",
+	    r->max_src_conn_rate.limit);
+	nvlist_add_number(nvlr, "max_src_conn_rate.seconds",
+	    r->max_src_conn_rate.seconds);
+	nvlist_add_number(nvlr, "prob", r->prob);
+	nvlist_add_number(nvlr, "cuid", r->cuid);
+	nvlist_add_number(nvlr, "cpid", r->cpid);
+
+	nvlist_add_number(nvlr, "return_icmp", r->return_icmp);
+	nvlist_add_number(nvlr, "return_icmp6", r->return_icmp6);
+
+	nvlist_add_number(nvlr, "max_mss", r->max_mss);
+	nvlist_add_number(nvlr, "scrub_flags", r->scrub_flags);
+
+	pfctl_nv_add_uid(nvlr, "uid", &r->uid);
+	pfctl_nv_add_uid(nvlr, "gid", (struct pf_rule_uid *)&r->gid);
+
+	nvlist_add_number(nvlr, "rule_flag", r->rule_flag);
+	nvlist_add_number(nvlr, "action", r->action);
+	nvlist_add_number(nvlr, "direction", r->direction);
+	nvlist_add_number(nvlr, "log", r->log);
+	nvlist_add_number(nvlr, "logif", r->logif);
+	nvlist_add_number(nvlr, "quick", r->quick);
+	nvlist_add_number(nvlr, "ifnot", r->ifnot);
+	nvlist_add_number(nvlr, "match_tag_not", r->match_tag_not);
+	nvlist_add_number(nvlr, "natpass", r->natpass);
+
+	nvlist_add_number(nvlr, "keep_state", r->keep_state);
+	nvlist_add_number(nvlr, "af", r->af);
+	nvlist_add_number(nvlr, "proto", r->proto);
+	nvlist_add_number(nvlr, "type", r->type);
+	nvlist_add_number(nvlr, "code", r->code);
+	nvlist_add_number(nvlr, "flags", r->flags);
+	nvlist_add_number(nvlr, "flagset", r->flagset);
+	nvlist_add_number(nvlr, "min_ttl", r->min_ttl);
+	nvlist_add_number(nvlr, "allow_opts", r->allow_opts);
+	nvlist_add_number(nvlr, "rt", r->rt);
+	nvlist_add_number(nvlr, "return_ttl", r->return_ttl);
+	nvlist_add_number(nvlr, "tos", r->tos);
+	nvlist_add_number(nvlr, "set_tos", r->set_tos);
+	nvlist_add_number(nvlr, "anchor_relative", r->anchor_relative);
+	nvlist_add_number(nvlr, "anchor_wildcard", r->anchor_wildcard);
+
+	nvlist_add_number(nvlr, "flush", r->flush);
+
+	nvlist_add_number(nvlr, "prio", r->prio);
+	set_prio[0] = r->set_prio[0];
+	set_prio[1] = r->set_prio[1];
+	nvlist_add_number_array(nvlr, "set_prio", set_prio, 2);
+
+	pfctl_nv_add_divert(nvlr, "divert", r);
+
+	nvlist_add_nvlist(nvl, "rule", nvlr);
+
+	/* Now do the call. */
+	nv.data = nvlist_pack(nvl, &nv.len);
+	nv.size = nv.len;
+
+	ret = ioctl(pf->dev, DIOCADDRULENV, &nv);
+
+	free(nv.data);
+	nvlist_destroy(nvl);
+
+	return (ret);
+}
+
 int
 pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 {
 	u_int8_t		rs_num = pf_get_ruleset_number(r->action);
 	char			*name;
-	struct pfioc_rule	pr;
+	u_int32_t		ticket;
+	char			anchor[PF_ANCHOR_NAME_SIZE];
 	int			len = strlen(path);
 
-	bzero(&pr, sizeof(pr));
 	/* set up anchor before adding to path for anchor_call */
 	if ((pf->opts & PF_OPT_NOACTION) == 0)
-		pr.ticket = pfctl_get_ticket(pf->trans, rs_num, path);
-	if (strlcpy(pr.anchor, path, sizeof(pr.anchor)) >= sizeof(pr.anchor))
+		ticket = pfctl_get_ticket(pf->trans, rs_num, path);
+	if (strlcpy(anchor, path, sizeof(anchor)) >= sizeof(anchor))
 		errx(1, "pfctl_load_rule: strlcpy");
 
 	if (r->anchor) {
@@ -1454,13 +1653,9 @@ pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 	if ((pf->opts & PF_OPT_NOACTION) == 0) {
 		if (pfctl_add_pool(pf, &r->rpool, r->af))
 			return (1);
-		pr.pool_ticket = pf->paddr.ticket;
-		memcpy(&pr.rule, r, sizeof(pr.rule));
-		if (r->anchor && strlcpy(pr.anchor_call, name,
-		    sizeof(pr.anchor_call)) >= sizeof(pr.anchor_call))
-			errx(1, "pfctl_load_rule: strlcpy");
-		if (ioctl(pf->dev, DIOCADDRULE, &pr))
-			err(1, "DIOCADDRULE");
+		if (pfctl_addrule(pf, r, anchor, name, ticket,
+		    pf->paddr.ticket))
+			err(1, "DIOCADDRULENV");
 	}
 
 	if (pf->opts & PF_OPT_VERBOSE) {

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:39 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5A644630EF7;
 Fri,  7 May 2021 15:25:39 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmL5Wkjz4k1f;
 Fri,  7 May 2021 15:25:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9A0915B3A;
 Fri,  7 May 2021 15:25:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPcm4026045;
 Fri, 7 May 2021 15:25:38 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPckQ026044;
 Fri, 7 May 2021 15:25:38 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:38 GMT
Message-Id: <202105071525.147FPckQ026044@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: a3e4fd8b3393 - stable/13 - pf: Implement nvlist variant of
 DIOCGETRULE
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: a3e4fd8b33932a8168cf8a99381b4bd6c87aaad7
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:39 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=a3e4fd8b33932a8168cf8a99381b4bd6c87aaad7

commit a3e4fd8b33932a8168cf8a99381b4bd6c87aaad7
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-25 09:39:14 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:41 +0000

    pf: Implement nvlist variant of DIOCGETRULE
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29559
    
    (cherry picked from commit d710367d1159423ed4da6628b7ab042d3e44f900)
---
 sys/net/pfvar.h             |   4 +
 sys/netpfil/pf/pf_ioctl.c   | 398 ++++++++++++++++++++++++++++++++++++++++++++
 sys/netpfil/pf/pf_nv.c      |  23 ++-
 sys/netpfil/pf/pf_nv.h      |   7 +
 sys/netpfil/pf/pf_ruleset.c |  47 ++++++
 5 files changed, 473 insertions(+), 6 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 584724b88b13..0ca46bb8048a 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -40,6 +40,7 @@
 #include <sys/counter.h>
 #include <sys/cpuset.h>
 #include <sys/malloc.h>
+#include <sys/nv.h>
 #include <sys/refcount.h>
 #include <sys/sysctl.h>
 #include <sys/lock.h>
@@ -1231,6 +1232,7 @@ struct pfioc_iface {
 #define DIOCADDRULENV	_IOWR('D',  4, struct pfioc_nv)
 #define DIOCGETRULES	_IOWR('D',  6, struct pfioc_rule)
 #define DIOCGETRULE	_IOWR('D',  7, struct pfioc_rule)
+#define DIOCGETRULENV	_IOWR('D',  7, struct pfioc_nv)
 /* XXX cut 8 - 17 */
 #define DIOCCLRSTATES	_IOWR('D', 18, struct pfioc_state_kill)
 #define DIOCGETSTATE	_IOWR('D', 19, struct pfioc_state)
@@ -1634,6 +1636,8 @@ VNET_DECLARE(struct pf_kanchor,			 pf_main_anchor);
 void			 pf_init_kruleset(struct pf_kruleset *);
 int			 pf_kanchor_setup(struct pf_krule *,
 			    const struct pf_kruleset *, const char *);
+int			 pf_kanchor_nvcopyout(const struct pf_kruleset *,
+			    const struct pf_krule *, nvlist_t *);
 int			 pf_kanchor_copyout(const struct pf_kruleset *,
 			    const struct pf_krule *, struct pfioc_rule *);
 void			 pf_kanchor_remove(struct pf_krule *);
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 87a52dd41542..cdff32916953 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -1630,6 +1630,20 @@ pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *paddr)
 	return (pf_nvbinary(nvl, "addr", paddr, sizeof(*paddr)));
 }
 
+static nvlist_t *
+pf_addr_to_nvaddr(const struct pf_addr *paddr)
+{
+	nvlist_t *nvl;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	nvlist_add_binary(nvl, "addr", paddr, sizeof(*paddr));
+
+	return (nvl);
+}
+
 static int
 pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_kpool *kpool)
 {
@@ -1653,6 +1667,33 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_pool_to_nvpool(const struct pf_kpool *pool)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
+	tmp = pf_addr_to_nvaddr(&pool->counter);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "counter", tmp);
+
+	nvlist_add_number(nvl, "tblidx", pool->tblidx);
+	pf_uint16_array_nv(nvl, "proxy_port", pool->proxy_port, 2);
+	nvlist_add_number(nvl, "opts", pool->opts);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
 {
@@ -1693,6 +1734,37 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_addr_wrap_to_nvaddr_wrap(const struct pf_addr_wrap *addr)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	nvlist_add_number(nvl, "type", addr->type);
+	nvlist_add_number(nvl, "iflags", addr->iflags);
+	nvlist_add_string(nvl, "ifname", addr->v.ifname);
+	nvlist_add_string(nvl, "tblname", addr->v.tblname);
+
+	tmp = pf_addr_to_nvaddr(&addr->v.a.addr);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "addr", tmp);
+	tmp = pf_addr_to_nvaddr(&addr->v.a.mask);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "mask", tmp);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_validate_op(uint8_t op)
 {
@@ -1735,6 +1807,31 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_rule_addr_to_nvrule_addr(const struct pf_rule_addr *addr)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	tmp = pf_addr_wrap_to_nvaddr_wrap(&addr->addr);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "addr", tmp);
+	pf_uint16_array_nv(nvl, "port", addr->port, 2);
+	nvlist_add_number(nvl, "neg", addr->neg);
+	nvlist_add_number(nvl, "port_op", addr->port_op);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 {
@@ -1751,6 +1848,21 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_rule_uid_to_nvrule_uid(const struct pf_rule_uid *uid)
+{
+	nvlist_t *nvl;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	pf_uint32_array_nv(nvl, "uid", uid->uid, 2);
+	nvlist_add_number(nvl, "op", uid->op);
+
+	return (nvl);
+}
+
 static int
 pf_nvrule_gid_to_rule_gid(const nvlist_t *nvl, struct pf_rule_gid *gid)
 {
@@ -1912,6 +2024,158 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_divert_to_nvdivert(const struct pf_krule *rule)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	tmp = pf_addr_to_nvaddr(&rule->divert.addr);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "addr", tmp);
+	nvlist_add_number(nvl, "port", rule->divert.port);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
+static nvlist_t *
+pf_krule_to_nvrule(const struct pf_krule *rule)
+{
+	nvlist_t *nvl, *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (nvl);
+
+	nvlist_add_number(nvl, "nr", rule->nr);
+	tmp = pf_rule_addr_to_nvrule_addr(&rule->src);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "src", tmp);
+	tmp = pf_rule_addr_to_nvrule_addr(&rule->dst);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "dst", tmp);
+
+	for (int i = 0; i < PF_SKIP_COUNT; i++) {
+		nvlist_append_number_array(nvl, "skip",
+		    rule->skip[i].ptr ? rule->skip[i].ptr->nr : -1);
+	}
+
+	nvlist_add_string(nvl, "label", rule->label);
+	nvlist_add_string(nvl, "ifname", rule->ifname);
+	nvlist_add_string(nvl, "qname", rule->qname);
+	nvlist_add_string(nvl, "pqname", rule->pqname);
+	nvlist_add_string(nvl, "tagname", rule->tagname);
+	nvlist_add_string(nvl, "match_tagname", rule->match_tagname);
+	nvlist_add_string(nvl, "overload_tblname", rule->overload_tblname);
+
+	tmp = pf_pool_to_nvpool(&rule->rpool);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "rpool", tmp);
+
+	nvlist_add_number(nvl, "evaluations",
+	    counter_u64_fetch(rule->evaluations));
+	for (int i = 0; i < 2; i++) {
+		nvlist_append_number_array(nvl, "packets",
+		    counter_u64_fetch(rule->packets[i]));
+		nvlist_append_number_array(nvl, "bytes",
+		    counter_u64_fetch(rule->bytes[i]));
+	}
+
+	nvlist_add_number(nvl, "os_fingerprint", rule->os_fingerprint);
+
+	nvlist_add_number(nvl, "rtableid", rule->rtableid);
+	pf_uint32_array_nv(nvl, "timeout", rule->timeout, PFTM_MAX);
+	nvlist_add_number(nvl, "max_states", rule->max_states);
+	nvlist_add_number(nvl, "max_src_nodes", rule->max_src_nodes);
+	nvlist_add_number(nvl, "max_src_states", rule->max_src_states);
+	nvlist_add_number(nvl, "max_src_conn", rule->max_src_conn);
+	nvlist_add_number(nvl, "max_src_conn_rate.limit",
+	    rule->max_src_conn_rate.limit);
+	nvlist_add_number(nvl, "max_src_conn_rate.seconds",
+	    rule->max_src_conn_rate.seconds);
+	nvlist_add_number(nvl, "qid", rule->qid);
+	nvlist_add_number(nvl, "pqid", rule->pqid);
+	nvlist_add_number(nvl, "prob", rule->prob);
+	nvlist_add_number(nvl, "cuid", rule->cuid);
+	nvlist_add_number(nvl, "cpid", rule->cpid);
+
+	nvlist_add_number(nvl, "states_cur",
+	    counter_u64_fetch(rule->states_cur));
+	nvlist_add_number(nvl, "states_tot",
+	    counter_u64_fetch(rule->states_tot));
+	nvlist_add_number(nvl, "src_nodes",
+	    counter_u64_fetch(rule->src_nodes));
+
+	nvlist_add_number(nvl, "return_icmp", rule->return_icmp);
+	nvlist_add_number(nvl, "return_icmp6", rule->return_icmp6);
+
+	nvlist_add_number(nvl, "max_mss", rule->max_mss);
+	nvlist_add_number(nvl, "scrub_flags", rule->scrub_flags);
+
+	tmp = pf_rule_uid_to_nvrule_uid(&rule->uid);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "uid", tmp);
+	tmp = pf_rule_uid_to_nvrule_uid((const struct pf_rule_uid *)&rule->gid);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "gid", tmp);
+
+	nvlist_add_number(nvl, "rule_flag", rule->rule_flag);
+	nvlist_add_number(nvl, "action", rule->action);
+	nvlist_add_number(nvl, "direction", rule->direction);
+	nvlist_add_number(nvl, "log", rule->log);
+	nvlist_add_number(nvl, "logif", rule->logif);
+	nvlist_add_number(nvl, "quick", rule->quick);
+	nvlist_add_number(nvl, "ifnot", rule->ifnot);
+	nvlist_add_number(nvl, "match_tag_not", rule->match_tag_not);
+	nvlist_add_number(nvl, "natpass", rule->natpass);
+
+	nvlist_add_number(nvl, "keep_state", rule->keep_state);
+	nvlist_add_number(nvl, "af", rule->af);
+	nvlist_add_number(nvl, "proto", rule->proto);
+	nvlist_add_number(nvl, "type", rule->type);
+	nvlist_add_number(nvl, "code", rule->code);
+	nvlist_add_number(nvl, "flags", rule->flags);
+	nvlist_add_number(nvl, "flagset", rule->flagset);
+	nvlist_add_number(nvl, "min_ttl", rule->min_ttl);
+	nvlist_add_number(nvl, "allow_opts", rule->allow_opts);
+	nvlist_add_number(nvl, "rt", rule->rt);
+	nvlist_add_number(nvl, "return_ttl", rule->return_ttl);
+	nvlist_add_number(nvl, "tos", rule->tos);
+	nvlist_add_number(nvl, "set_tos", rule->set_tos);
+	nvlist_add_number(nvl, "anchor_relative", rule->anchor_relative);
+	nvlist_add_number(nvl, "anchor_wildcard", rule->anchor_wildcard);
+
+	nvlist_add_number(nvl, "flush", rule->flush);
+	nvlist_add_number(nvl, "prio", rule->prio);
+
+	pf_uint8_array_nv(nvl, "set_prio", &rule->prio, 2);
+
+	tmp = pf_divert_to_nvdivert(rule);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "divert", tmp);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_rule_to_krule(const struct pf_rule *rule, struct pf_krule *krule)
 {
@@ -2254,6 +2518,7 @@ pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td
 		switch (cmd) {
 		case DIOCGETRULES:
 		case DIOCGETRULE:
+		case DIOCGETRULENV:
 		case DIOCGETADDRS:
 		case DIOCGETADDR:
 		case DIOCGETSTATE:
@@ -2335,6 +2600,7 @@ pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td
 		case DIOCIGETIFACES:
 		case DIOCGIFSPEEDV1:
 		case DIOCGIFSPEEDV0:
+		case DIOCGETRULENV:
 			break;
 		case DIOCRCLRTABLES:
 		case DIOCRADDTABLES:
@@ -2560,6 +2826,138 @@ DIOCADDRULENV_error:
 		break;
 	}
 
+	case DIOCGETRULENV: {
+		struct pfioc_nv		*nv = (struct pfioc_nv *)addr;
+		nvlist_t		*nvrule = NULL;
+		nvlist_t		*nvl = NULL;
+		struct pf_kruleset	*ruleset;
+		struct pf_krule		*rule;
+		void			*nvlpacked = NULL;
+		int			 rs_num, nr;
+		bool			 clear_counter = false;
+
+#define	ERROUT(x)	do { error = (x); goto DIOCGETRULENV_error; } while (0)
+
+		if (nv->len > pf_ioctl_maxcount)
+			ERROUT(ENOMEM);
+
+		/* Copy the request in */
+		nvlpacked = malloc(nv->len, M_TEMP, M_WAITOK);
+		if (nvlpacked == NULL)
+			ERROUT(ENOMEM);
+
+		error = copyin(nv->data, nvlpacked, nv->len);
+		if (error)
+			ERROUT(error);
+
+		nvl = nvlist_unpack(nvlpacked, nv->len, 0);
+		if (nvl == NULL)
+			ERROUT(EBADMSG);
+
+		if (! nvlist_exists_string(nvl, "anchor"))
+			ERROUT(EBADMSG);
+		if (! nvlist_exists_number(nvl, "ruleset"))
+			ERROUT(EBADMSG);
+		if (! nvlist_exists_number(nvl, "ticket"))
+			ERROUT(EBADMSG);
+		if (! nvlist_exists_number(nvl, "nr"))
+			ERROUT(EBADMSG);
+
+		if (nvlist_exists_bool(nvl, "clear_counter"))
+			clear_counter = nvlist_get_bool(nvl, "clear_counter");
+
+		if (clear_counter && !(flags & FWRITE))
+			ERROUT(EACCES);
+
+		nr = nvlist_get_number(nvl, "nr");
+
+		PF_RULES_WLOCK();
+		ruleset = pf_find_kruleset(nvlist_get_string(nvl, "anchor"));
+		if (ruleset == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOENT);
+		}
+
+		rs_num = pf_get_ruleset_number(nvlist_get_number(nvl, "ruleset"));
+		if (rs_num >= PF_RULESET_MAX) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EINVAL);
+		}
+
+		if (nvlist_get_number(nvl, "ticket") !=
+		    ruleset->rules[rs_num].active.ticket) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EBUSY);
+			break;
+		}
+
+		if ((error = nvlist_error(nvl))) {
+			PF_RULES_WUNLOCK();
+			ERROUT(error);
+		}
+
+		rule = TAILQ_FIRST(ruleset->rules[rs_num].active.ptr);
+		while ((rule != NULL) && (rule->nr != nr))
+			rule = TAILQ_NEXT(rule, entries);
+		if (rule == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EBUSY);
+			break;
+		}
+
+		nvrule = pf_krule_to_nvrule(rule);
+
+		nvlist_destroy(nvl);
+		nvl = nvlist_create(0);
+		if (nvl == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOMEM);
+		}
+		nvlist_add_number(nvl, "nr", nr);
+		nvlist_add_nvlist(nvl, "rule", nvrule);
+		nvrule = NULL;
+		if (pf_kanchor_nvcopyout(ruleset, rule, nvl)) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EBUSY);
+		}
+
+		free(nvlpacked, M_TEMP);
+		nvlpacked = nvlist_pack(nvl, &nv->len);
+		if (nvlpacked == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOMEM);
+		}
+
+		if (nv->size == 0) {
+			PF_RULES_WUNLOCK();
+			ERROUT(0);
+		}
+		else if (nv->size < nv->len) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOSPC);
+		}
+
+		error = copyout(nvlpacked, nv->data, nv->len);
+
+		if (clear_counter) {
+			counter_u64_zero(rule->evaluations);
+			for (int i = 0; i < 2; i++) {
+				counter_u64_zero(rule->packets[i]);
+				counter_u64_zero(rule->bytes[i]);
+			}
+			counter_u64_zero(rule->states_tot);
+		}
+		PF_RULES_WUNLOCK();
+
+#undef ERROUT
+DIOCGETRULENV_error:
+		free(nvlpacked, M_TEMP);
+		nvlist_destroy(nvrule);
+		nvlist_destroy(nvl);
+
+		break;
+	}
+
 	case DIOCCHANGERULE: {
 		struct pfioc_rule	*pcr = (struct pfioc_rule *)addr;
 		struct pf_kruleset	*ruleset;
diff --git a/sys/netpfil/pf/pf_nv.c b/sys/netpfil/pf/pf_nv.c
index d583844c4086..d88c0b14e435 100644
--- a/sys/netpfil/pf/pf_nv.c
+++ b/sys/netpfil/pf/pf_nv.c
@@ -37,7 +37,7 @@ __FBSDID("$FreeBSD$");
 
 #define	PV_NV_IMPL_UINT(fnname, type, max)					\
 	int									\
-	fnname(const nvlist_t *nvl, const char *name, type *val)		\
+	pf_nv ## fnname(const nvlist_t *nvl, const char *name, type *val)	\
 	{									\
 		uint64_t raw;							\
 		if (! nvlist_exists_number(nvl, name))				\
@@ -49,8 +49,8 @@ __FBSDID("$FreeBSD$");
 		return (0);							\
 	}									\
 	int									\
-	fnname ## _array(const nvlist_t *nvl, const char *name, type *array, 	\
-	    size_t maxelems, size_t *nelems)					\
+	pf_nv ## fnname ## _array(const nvlist_t *nvl, const char *name,	\
+	    type *array, size_t maxelems, size_t *nelems)			\
 	{									\
 		const uint64_t *n;						\
 		size_t nitems;							\
@@ -68,7 +68,18 @@ __FBSDID("$FreeBSD$");
 			array[i] = (type)n[i];					\
 		}								\
 		return (0);							\
+	}									\
+	void									\
+	pf_ ## fnname ## _array_nv(nvlist_t *nvl, const char *name,		\
+	    const type *numbers, size_t count)					\
+	{									\
+		uint64_t tmp;							\
+		for (size_t i = 0; i < count; i++) {				\
+			tmp = numbers[i];					\
+			nvlist_append_number_array(nvl, name, tmp);		\
+		}								\
 	}
+
 int
 pf_nvbinary(const nvlist_t *nvl, const char *name, void *data,
     size_t expected_size)
@@ -90,9 +101,9 @@ pf_nvbinary(const nvlist_t *nvl, const char *name, void *data,
 	return (0);
 }
 
-PV_NV_IMPL_UINT(pf_nvuint8, uint8_t, UINT8_MAX)
-PV_NV_IMPL_UINT(pf_nvuint16, uint16_t, UINT16_MAX);
-PV_NV_IMPL_UINT(pf_nvuint32, uint32_t, UINT32_MAX)
+PV_NV_IMPL_UINT(uint8, uint8_t, UINT8_MAX)
+PV_NV_IMPL_UINT(uint16, uint16_t, UINT16_MAX);
+PV_NV_IMPL_UINT(uint32, uint32_t, UINT32_MAX)
 
 int
 pf_nvint(const nvlist_t *nvl, const char *name, int *val)
diff --git a/sys/netpfil/pf/pf_nv.h b/sys/netpfil/pf/pf_nv.h
index f0db1e880e9e..0a0f9beeef40 100644
--- a/sys/netpfil/pf/pf_nv.h
+++ b/sys/netpfil/pf/pf_nv.h
@@ -36,12 +36,19 @@ int	pf_nvint(const nvlist_t *, const char *, int *);
 int	pf_nvuint8(const nvlist_t *, const char *, uint8_t *);
 int	pf_nvuint8_array(const nvlist_t *, const char *, uint8_t *,
 	    size_t, size_t *);
+void	pf_uint8_array_nv(nvlist_t *, const char *, const uint8_t *,
+	    size_t);
 int	pf_nvuint16(const nvlist_t *, const char *, uint16_t *);
 int	pf_nvuint16_array(const nvlist_t *, const char *, uint16_t *,
 	    size_t, size_t *);
+void	pf_uint16_array_nv(nvlist_t *, const char *, const uint16_t *,
+	    size_t);
 int	pf_nvuint32(const nvlist_t *, const char *, uint32_t *);
 int	pf_nvuint32_array(const nvlist_t *, const char *, uint32_t *,
 	    size_t, size_t *);
+void	pf_uint32_array_nv(nvlist_t *, const char *, const uint32_t *,
+	    size_t);
+
 int	pf_nvstring(const nvlist_t *, const char *, char *, size_t);
 
 #define	PFNV_CHK(x)	do {	\
diff --git a/sys/netpfil/pf/pf_ruleset.c b/sys/netpfil/pf/pf_ruleset.c
index 0cc0c357d59d..ad1b07f69fe6 100644
--- a/sys/netpfil/pf/pf_ruleset.c
+++ b/sys/netpfil/pf/pf_ruleset.c
@@ -336,6 +336,53 @@ pf_kanchor_setup(struct pf_krule *r, const struct pf_kruleset *s,
 	return (0);
 }
 
+int
+pf_kanchor_nvcopyout(const struct pf_kruleset *rs, const struct pf_krule *r,
+    nvlist_t *nvl)
+{
+	char anchor_call[MAXPATHLEN] = { 0 };
+
+	if (r->anchor == NULL)
+		goto done;
+	if (!r->anchor_relative) {
+		strlcpy(anchor_call, "/", sizeof(anchor_call));
+		strlcat(anchor_call, r->anchor->path,
+		    sizeof(anchor_call));
+	} else {
+		char	 a[MAXPATHLEN];
+		char	*p;
+		int	 i;
+		if (rs->anchor == NULL)
+			a[0] = 0;
+		else
+			strlcpy(a, rs->anchor->path, MAXPATHLEN);
+		for (i = 1; i < r->anchor_relative; ++i) {
+			if ((p = strrchr(a, '/')) == NULL)
+				p = a;
+			*p = 0;
+			strlcat(anchor_call, "../",
+			    sizeof(anchor_call));
+		}
+		if (strncmp(a, r->anchor->path, strlen(a))) {
+			printf("pf_anchor_copyout: '%s' '%s'\n", a,
+			    r->anchor->path);
+			return (1);
+		}
+		if (strlen(r->anchor->path) > strlen(a))
+			strlcat(anchor_call, r->anchor->path + (a[0] ?
+			    strlen(a) + 1 : 0), sizeof(anchor_call));
+
+	}
+	if (r->anchor_wildcard)
+		strlcat(anchor_call, anchor_call[0] ? "/*" : "*",
+		    sizeof(anchor_call));
+
+done:
+	nvlist_add_string(nvl, "anchor_call", anchor_call);
+
+	return (0);
+}
+
 int
 pf_kanchor_copyout(const struct pf_kruleset *rs, const struct pf_krule *r,
     struct pfioc_rule *pr)

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:38 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id B38CB63141B;
 Fri,  7 May 2021 15:25:38 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmL0nmTz4jy8;
 Fri,  7 May 2021 15:25:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E9B595770;
 Fri,  7 May 2021 15:25:37 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPbXO026024;
 Fri, 7 May 2021 15:25:37 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPbFo026023;
 Fri, 7 May 2021 15:25:37 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:37 GMT
Message-Id: <202105071525.147FPbFo026023@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 8ffd90c5b5b5 - stable/12 - pf: Introduce nvlist variant of
 DIOCADDRULE
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 8ffd90c5b5b5e03ad8fe29aaa48c282dbea8e3b5
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:38 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=8ffd90c5b5b5e03ad8fe29aaa48c282dbea8e3b5

commit 8ffd90c5b5b5e03ad8fe29aaa48c282dbea8e3b5
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-11 15:21:23 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:00 +0000

    pf: Introduce nvlist variant of DIOCADDRULE
    
    This will make future extensions of the API much easier.
    The intent is to remove support for DIOCADDRULE in FreeBSD 14.
    
    Reviewed by:    markj (previous version), glebius (previous version)
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29557
    
    (cherry picked from commit 5c62eded5a11ebdb1d57134d923596e2b04e9466)
---
 sys/conf/files            |   1 +
 sys/modules/pf/Makefile   |   2 +-
 sys/net/pfvar.h           |   1 +
 sys/netpfil/pf/pf.h       |   6 +
 sys/netpfil/pf/pf_ioctl.c | 646 ++++++++++++++++++++++++++++++++++++----------
 sys/netpfil/pf/pf_nv.c    | 127 +++++++++
 sys/netpfil/pf/pf_nv.h    |  53 ++++
 7 files changed, 696 insertions(+), 140 deletions(-)

diff --git a/sys/conf/files b/sys/conf/files
index 6b24b413fe59..4195d5d21a53 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -4509,6 +4509,7 @@ netpfil/pf/pf_if.c		optional pf inet
 netpfil/pf/pf_ioctl.c		optional pf inet
 netpfil/pf/pf_lb.c		optional pf inet
 netpfil/pf/pf_norm.c		optional pf inet
+netpfil/pf/pf_nv.c		optional pf inet
 netpfil/pf/pf_osfp.c		optional pf inet
 netpfil/pf/pf_ruleset.c		optional pf inet
 netpfil/pf/pf_table.c		optional pf inet
diff --git a/sys/modules/pf/Makefile b/sys/modules/pf/Makefile
index 148b64c02a9f..7293b30cda9d 100644
--- a/sys/modules/pf/Makefile
+++ b/sys/modules/pf/Makefile
@@ -4,7 +4,7 @@
 
 KMOD=	pf
 SRCS=	pf.c pf_if.c pf_lb.c pf_osfp.c pf_ioctl.c pf_norm.c pf_table.c \
-	pf_ruleset.c in4_cksum.c \
+	pf_ruleset.c pf_nv.c in4_cksum.c \
 	bus_if.h device_if.h \
 	opt_pf.h opt_inet.h opt_inet6.h opt_bpf.h opt_sctp.h opt_global.h
 
diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 409e8fbefc5a..eb9f365f2ec9 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -1229,6 +1229,7 @@ struct pfioc_iface {
 #define DIOCSTART	_IO  ('D',  1)
 #define DIOCSTOP	_IO  ('D',  2)
 #define DIOCADDRULE	_IOWR('D',  4, struct pfioc_rule)
+#define DIOCADDRULENV	_IOWR('D',  4, struct pfioc_nv)
 #define DIOCGETRULES	_IOWR('D',  6, struct pfioc_rule)
 #define DIOCGETRULE	_IOWR('D',  7, struct pfioc_rule)
 /* XXX cut 8 - 17 */
diff --git a/sys/netpfil/pf/pf.h b/sys/netpfil/pf/pf.h
index 511c60f5abd1..bc6cd92ae7b8 100644
--- a/sys/netpfil/pf/pf.h
+++ b/sys/netpfil/pf/pf.h
@@ -187,6 +187,12 @@ enum	{ PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL,
 #define	PF_TABLE_NAME_SIZE	32
 #define	PF_QNAME_SIZE		64
 
+struct pfioc_nv {
+	void            *data;
+	size_t           len;   /* The length of the nvlist data. */
+	size_t           size;  /* The total size of the data buffer. */
+};
+
 struct pf_rule;
 
 /* keep synced with pfi_kif, used in RB_FIND */
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 342781fa6640..53c850a96538 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/lock.h>
 #include <sys/mbuf.h>
 #include <sys/module.h>
+#include <sys/nv.h>
 #include <sys/proc.h>
 #include <sys/smp.h>
 #include <sys/socket.h>
@@ -82,6 +83,7 @@ __FBSDID("$FreeBSD$");
 #include <netinet/ip_var.h>
 #include <netinet6/ip6_var.h>
 #include <netinet/ip_icmp.h>
+#include <netpfil/pf/pf_nv.h>
 
 #ifdef INET6
 #include <netinet/ip6.h>
@@ -1623,6 +1625,294 @@ pf_check_rule_addr(const struct pf_rule_addr *addr)
 	return (0);
 }
 
+static int
+pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *paddr)
+{
+	return (pf_nvbinary(nvl, "addr", paddr, sizeof(*paddr)));
+}
+
+static int
+pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_kpool *kpool)
+{
+	int error = 0;
+
+	bzero(kpool, sizeof(*kpool));
+
+	PFNV_CHK(pf_nvbinary(nvl, "key", &kpool->key, sizeof(kpool->key)));
+
+	if (nvlist_exists_nvlist(nvl, "counter")) {
+		PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "counter"),
+		    &kpool->counter));
+	}
+
+	PFNV_CHK(pf_nvint(nvl, "tblidx", &kpool->tblidx));
+	PFNV_CHK(pf_nvuint16_array(nvl, "proxy_port", kpool->proxy_port, 2,
+	    NULL));
+	PFNV_CHK(pf_nvuint8(nvl, "opts", &kpool->opts));
+
+errout:
+	return (error);
+}
+
+static int
+pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
+{
+	int error = 0;
+
+	bzero(addr, sizeof(*addr));
+
+	PFNV_CHK(pf_nvuint8(nvl, "type", &addr->type));
+	PFNV_CHK(pf_nvuint8(nvl, "iflags", &addr->iflags));
+	PFNV_CHK(pf_nvstring(nvl, "ifname", addr->v.ifname,
+	    sizeof(addr->v.ifname)));
+	PFNV_CHK(pf_nvstring(nvl, "tblname", addr->v.tblname,
+	    sizeof(addr->v.tblname)));
+
+	if (! nvlist_exists_nvlist(nvl, "addr"))
+		return (EINVAL);
+	PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"),
+	    &addr->v.a.addr));
+
+	if (! nvlist_exists_nvlist(nvl, "mask"))
+		return (EINVAL);
+	PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "mask"),
+	    &addr->v.a.mask));
+
+	switch (addr->type) {
+	case PF_ADDR_DYNIFTL:
+	case PF_ADDR_TABLE:
+	case PF_ADDR_RANGE:
+	case PF_ADDR_ADDRMASK:
+	case PF_ADDR_NOROUTE:
+	case PF_ADDR_URPFFAILED:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+errout:
+	return (error);
+}
+
+static int
+pf_validate_op(uint8_t op)
+{
+	switch (op) {
+	case PF_OP_NONE:
+	case PF_OP_IRG:
+	case PF_OP_EQ:
+	case PF_OP_NE:
+	case PF_OP_LT:
+	case PF_OP_LE:
+	case PF_OP_GT:
+	case PF_OP_GE:
+	case PF_OP_XRG:
+	case PF_OP_RRG:
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	return (0);
+}
+
+static int
+pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
+{
+	int error = 0;
+
+	if (! nvlist_exists_nvlist(nvl, "addr"))
+		return (EINVAL);
+
+	PFNV_CHK(pf_nvaddr_wrap_to_addr_wrap(nvlist_get_nvlist(nvl, "addr"),
+	    &addr->addr));
+	PFNV_CHK(pf_nvuint16_array(nvl, "port", addr->port, 2, NULL));
+	PFNV_CHK(pf_nvuint8(nvl, "neg", &addr->neg));
+	PFNV_CHK(pf_nvuint8(nvl, "port_op", &addr->port_op));
+
+	PFNV_CHK(pf_validate_op(addr->port_op));
+
+errout:
+	return (error);
+}
+
+static int
+pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
+{
+	int error = 0;
+
+	bzero(uid, sizeof(*uid));
+
+	PFNV_CHK(pf_nvuint32_array(nvl, "uid", uid->uid, 2, NULL));
+	PFNV_CHK(pf_nvuint8(nvl, "op", &uid->op));
+
+	PFNV_CHK(pf_validate_op(uid->op));
+
+errout:
+	return (error);
+}
+
+static int
+pf_nvrule_gid_to_rule_gid(const nvlist_t *nvl, struct pf_rule_gid *gid)
+{
+	/* Cheat a little. These stucts are the same, other than the name of
+	 * the first field. */
+	return (pf_nvrule_uid_to_rule_uid(nvl, (struct pf_rule_uid *)gid));
+}
+
+static int
+pf_nvrule_to_krule(const nvlist_t *nvl, struct pf_krule **prule)
+{
+	struct pf_krule *rule;
+	int error = 0;
+
+	rule = malloc(sizeof(*rule), M_PFRULE, M_WAITOK | M_ZERO);
+
+	PFNV_CHK(pf_nvuint32(nvl, "nr", &rule->nr));
+
+	if (! nvlist_exists_nvlist(nvl, "src")) {
+		error = EINVAL;
+		goto errout;
+	}
+	error = pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "src"),
+	    &rule->src);
+	if (error != 0)
+		goto errout;
+
+	if (! nvlist_exists_nvlist(nvl, "dst")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "dst"),
+	    &rule->dst));
+
+	PFNV_CHK(pf_nvstring(nvl, "label", rule->label, sizeof(rule->label)));
+	PFNV_CHK(pf_nvstring(nvl, "ifname", rule->ifname,
+	    sizeof(rule->ifname)));
+	PFNV_CHK(pf_nvstring(nvl, "qname", rule->qname, sizeof(rule->qname)));
+	PFNV_CHK(pf_nvstring(nvl, "pqname", rule->pqname,
+	    sizeof(rule->pqname)));
+	PFNV_CHK(pf_nvstring(nvl, "tagname", rule->tagname,
+	    sizeof(rule->tagname)));
+	PFNV_CHK(pf_nvstring(nvl, "match_tagname", rule->match_tagname,
+	    sizeof(rule->match_tagname)));
+	PFNV_CHK(pf_nvstring(nvl, "overload_tblname", rule->overload_tblname,
+	    sizeof(rule->overload_tblname)));
+
+	if (! nvlist_exists_nvlist(nvl, "rpool")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvpool_to_pool(nvlist_get_nvlist(nvl, "rpool"),
+	    &rule->rpool));
+
+	PFNV_CHK(pf_nvuint32(nvl, "os_fingerprint", &rule->os_fingerprint));
+
+	PFNV_CHK(pf_nvint(nvl, "rtableid", &rule->rtableid));
+	PFNV_CHK(pf_nvuint32_array(nvl, "timeout", rule->timeout, PFTM_MAX, NULL));
+	PFNV_CHK(pf_nvuint32(nvl, "max_states", &rule->max_states));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_nodes", &rule->max_src_nodes));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_states", &rule->max_src_states));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_conn", &rule->max_src_conn));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_conn_rate.limit",
+	    &rule->max_src_conn_rate.limit));
+	PFNV_CHK(pf_nvuint32(nvl, "max_src_conn_rate.seconds",
+	    &rule->max_src_conn_rate.seconds));
+	PFNV_CHK(pf_nvuint32(nvl, "prob", &rule->prob));
+	PFNV_CHK(pf_nvuint32(nvl, "cuid", &rule->cuid));
+	PFNV_CHK(pf_nvuint32(nvl, "cpid", &rule->cpid));
+
+	PFNV_CHK(pf_nvuint16(nvl, "return_icmp", &rule->return_icmp));
+	PFNV_CHK(pf_nvuint16(nvl, "return_icmp6", &rule->return_icmp6));
+
+	PFNV_CHK(pf_nvuint16(nvl, "max_mss", &rule->max_mss));
+	PFNV_CHK(pf_nvuint16(nvl, "scrub_flags", &rule->scrub_flags));
+
+	if (! nvlist_exists_nvlist(nvl, "uid")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvrule_uid_to_rule_uid(nvlist_get_nvlist(nvl, "uid"),
+	    &rule->uid));
+
+	if (! nvlist_exists_nvlist(nvl, "gid")) {
+		error = EINVAL;
+		goto errout;
+	}
+	PFNV_CHK(pf_nvrule_gid_to_rule_gid(nvlist_get_nvlist(nvl, "gid"),
+	    &rule->gid));
+
+	PFNV_CHK(pf_nvuint32(nvl, "rule_flag", &rule->rule_flag));
+	PFNV_CHK(pf_nvuint8(nvl, "action", &rule->action));
+	PFNV_CHK(pf_nvuint8(nvl, "direction", &rule->direction));
+	PFNV_CHK(pf_nvuint8(nvl, "log", &rule->log));
+	PFNV_CHK(pf_nvuint8(nvl, "logif", &rule->logif));
+	PFNV_CHK(pf_nvuint8(nvl, "quick", &rule->quick));
+	PFNV_CHK(pf_nvuint8(nvl, "ifnot", &rule->ifnot));
+	PFNV_CHK(pf_nvuint8(nvl, "match_tag_not", &rule->match_tag_not));
+	PFNV_CHK(pf_nvuint8(nvl, "natpass", &rule->natpass));
+
+	PFNV_CHK(pf_nvuint8(nvl, "keep_state", &rule->keep_state));
+	PFNV_CHK(pf_nvuint8(nvl, "af", &rule->af));
+	PFNV_CHK(pf_nvuint8(nvl, "proto", &rule->proto));
+	PFNV_CHK(pf_nvuint8(nvl, "type", &rule->type));
+	PFNV_CHK(pf_nvuint8(nvl, "code", &rule->code));
+	PFNV_CHK(pf_nvuint8(nvl, "flags", &rule->flags));
+	PFNV_CHK(pf_nvuint8(nvl, "flagset", &rule->flagset));
+	PFNV_CHK(pf_nvuint8(nvl, "min_ttl", &rule->min_ttl));
+	PFNV_CHK(pf_nvuint8(nvl, "allow_opts", &rule->allow_opts));
+	PFNV_CHK(pf_nvuint8(nvl, "rt", &rule->rt));
+	PFNV_CHK(pf_nvuint8(nvl, "return_ttl", &rule->return_ttl));
+	PFNV_CHK(pf_nvuint8(nvl, "tos", &rule->tos));
+	PFNV_CHK(pf_nvuint8(nvl, "set_tos", &rule->set_tos));
+	PFNV_CHK(pf_nvuint8(nvl, "anchor_relative", &rule->anchor_relative));
+	PFNV_CHK(pf_nvuint8(nvl, "anchor_wildcard", &rule->anchor_wildcard));
+
+	PFNV_CHK(pf_nvuint8(nvl, "flush", &rule->flush));
+	PFNV_CHK(pf_nvuint8(nvl, "prio", &rule->prio));
+
+	PFNV_CHK(pf_nvuint8_array(nvl, "set_prio", &rule->prio, 2, NULL));
+
+	if (nvlist_exists_nvlist(nvl, "divert")) {
+		const nvlist_t *nvldivert = nvlist_get_nvlist(nvl, "divert");
+
+		if (! nvlist_exists_nvlist(nvldivert, "addr")) {
+			error = EINVAL;
+			goto errout;
+		}
+		PFNV_CHK(pf_nvaddr_to_addr(nvlist_get_nvlist(nvldivert, "addr"),
+		    &rule->divert.addr));
+		PFNV_CHK(pf_nvuint16(nvldivert, "port", &rule->divert.port));
+	}
+
+	/* Validation */
+#ifndef INET
+	if (rule->af == AF_INET) {
+		error = EAFNOSUPPORT;
+		goto errout;
+	}
+#endif /* INET */
+#ifndef INET6
+	if (rule->af == AF_INET6) {
+		error = EAFNOSUPPORT;
+		goto errout;
+	}
+#endif /* INET6 */
+
+	PFNV_CHK(pf_check_rule_addr(&rule->src));
+	PFNV_CHK(pf_check_rule_addr(&rule->dst));
+
+	*prule = rule;
+
+	return (0);
+
+errout:
+	pf_krule_free(rule);
+	*prule = NULL;
+
+	return (error);
+}
+
 static int
 pf_rule_to_krule(const struct pf_rule *rule, struct pf_krule *krule)
 {
@@ -1797,6 +2087,163 @@ relock_DIOCKILLSTATES:
 	return (killed);
 }
 
+static int
+pf_ioctl_addrule(struct pf_krule *rule, uint32_t ticket,
+    uint32_t pool_ticket, const char *anchor, const char *anchor_call,
+    struct thread *td)
+{
+	struct pf_kruleset	*ruleset;
+	struct pf_krule		*tail;
+	struct pf_kpooladdr	*pa;
+	struct pfi_kkif		*kif = NULL;
+	int			 rs_num;
+	int			 error = 0;
+
+	if ((rule->return_icmp >> 8) > ICMP_MAXTYPE) {
+		error = EINVAL;
+		goto errout_unlocked;
+	}
+
+#define	ERROUT(x)	{ error = (x); goto errout; }
+
+	if (rule->ifname[0])
+		kif = pf_kkif_create(M_WAITOK);
+	rule->evaluations = counter_u64_alloc(M_WAITOK);
+	for (int i = 0; i < 2; i++) {
+		rule->packets[i] = counter_u64_alloc(M_WAITOK);
+		rule->bytes[i] = counter_u64_alloc(M_WAITOK);
+	}
+	rule->states_cur = counter_u64_alloc(M_WAITOK);
+	rule->states_tot = counter_u64_alloc(M_WAITOK);
+	rule->src_nodes = counter_u64_alloc(M_WAITOK);
+	rule->cuid = td->td_ucred->cr_ruid;
+	rule->cpid = td->td_proc ? td->td_proc->p_pid : 0;
+	TAILQ_INIT(&rule->rpool.list);
+
+	PF_RULES_WLOCK();
+	ruleset = pf_find_kruleset(anchor);
+	if (ruleset == NULL)
+		ERROUT(EINVAL);
+	rs_num = pf_get_ruleset_number(rule->action);
+	if (rs_num >= PF_RULESET_MAX)
+		ERROUT(EINVAL);
+	if (ticket != ruleset->rules[rs_num].inactive.ticket) {
+		DPFPRINTF(PF_DEBUG_MISC,
+		    ("ticket: %d != [%d]%d\n", ticket, rs_num,
+		    ruleset->rules[rs_num].inactive.ticket));
+		ERROUT(EBUSY);
+	}
+	if (pool_ticket != V_ticket_pabuf) {
+		DPFPRINTF(PF_DEBUG_MISC,
+		    ("pool_ticket: %d != %d\n", pool_ticket,
+		    V_ticket_pabuf));
+		ERROUT(EBUSY);
+	}
+
+	tail = TAILQ_LAST(ruleset->rules[rs_num].inactive.ptr,
+	    pf_krulequeue);
+	if (tail)
+		rule->nr = tail->nr + 1;
+	else
+		rule->nr = 0;
+	if (rule->ifname[0]) {
+		rule->kif = pfi_kkif_attach(kif, rule->ifname);
+		pfi_kkif_ref(rule->kif);
+	} else
+		rule->kif = NULL;
+
+	if (rule->rtableid > 0 && rule->rtableid >= rt_numfibs)
+		error = EBUSY;
+
+#ifdef ALTQ
+	/* set queue IDs */
+	if (rule->qname[0] != 0) {
+		if ((rule->qid = pf_qname2qid(rule->qname)) == 0)
+			error = EBUSY;
+		else if (rule->pqname[0] != 0) {
+			if ((rule->pqid =
+			    pf_qname2qid(rule->pqname)) == 0)
+				error = EBUSY;
+		} else
+			rule->pqid = rule->qid;
+	}
+#endif
+	if (rule->tagname[0])
+		if ((rule->tag = pf_tagname2tag(rule->tagname)) == 0)
+			error = EBUSY;
+	if (rule->match_tagname[0])
+		if ((rule->match_tag =
+		    pf_tagname2tag(rule->match_tagname)) == 0)
+			error = EBUSY;
+	if (rule->rt && !rule->direction)
+		error = EINVAL;
+	if (!rule->log)
+		rule->logif = 0;
+	if (rule->logif >= PFLOGIFS_MAX)
+		error = EINVAL;
+	if (pf_addr_setup(ruleset, &rule->src.addr, rule->af))
+		error = ENOMEM;
+	if (pf_addr_setup(ruleset, &rule->dst.addr, rule->af))
+		error = ENOMEM;
+	if (pf_kanchor_setup(rule, ruleset, anchor_call))
+		error = EINVAL;
+	if (rule->scrub_flags & PFSTATE_SETPRIO &&
+	    (rule->set_prio[0] > PF_PRIO_MAX ||
+	    rule->set_prio[1] > PF_PRIO_MAX))
+		error = EINVAL;
+	TAILQ_FOREACH(pa, &V_pf_pabuf, entries)
+		if (pa->addr.type == PF_ADDR_TABLE) {
+			pa->addr.p.tbl = pfr_attach_table(ruleset,
+			    pa->addr.v.tblname);
+			if (pa->addr.p.tbl == NULL)
+				error = ENOMEM;
+		}
+
+	rule->overload_tbl = NULL;
+	if (rule->overload_tblname[0]) {
+		if ((rule->overload_tbl = pfr_attach_table(ruleset,
+		    rule->overload_tblname)) == NULL)
+			error = EINVAL;
+		else
+			rule->overload_tbl->pfrkt_flags |=
+			    PFR_TFLAG_ACTIVE;
+	}
+
+	pf_mv_kpool(&V_pf_pabuf, &rule->rpool.list);
+	if (((((rule->action == PF_NAT) || (rule->action == PF_RDR) ||
+	    (rule->action == PF_BINAT)) && rule->anchor == NULL) ||
+	    (rule->rt > PF_NOPFROUTE)) &&
+	    (TAILQ_FIRST(&rule->rpool.list) == NULL))
+		error = EINVAL;
+
+	if (error) {
+		pf_free_rule(rule);
+		rule = NULL;
+		ERROUT(error);
+	}
+
+	rule->rpool.cur = TAILQ_FIRST(&rule->rpool.list);
+	counter_u64_zero(rule->evaluations);
+	for (int i = 0; i < 2; i++) {
+		counter_u64_zero(rule->packets[i]);
+		counter_u64_zero(rule->bytes[i]);
+	}
+	TAILQ_INSERT_TAIL(ruleset->rules[rs_num].inactive.ptr,
+	    rule, entries);
+	ruleset->rules[rs_num].inactive.rcount++;
+	PF_RULES_WUNLOCK();
+
+	return (0);
+
+#undef ERROUT
+errout:
+	PF_RULES_WUNLOCK();
+errout_unlocked:
+	pf_kkif_free(kif);
+	pf_krule_free(rule);
+	return (error);
+}
+
 static int
 pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 {
@@ -1957,162 +2404,83 @@ pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td
 		}
 		break;
 
-	case DIOCADDRULE: {
-		struct pfioc_rule	*pr = (struct pfioc_rule *)addr;
-		struct pf_kruleset	*ruleset;
-		struct pf_krule		*rule, *tail;
-		struct pf_kpooladdr	*pa;
-		struct pfi_kkif		*kif = NULL;
-		int			 rs_num;
+	case DIOCADDRULENV: {
+		struct pfioc_nv	*nv = (struct pfioc_nv *)addr;
+		nvlist_t	*nvl = NULL;
+		void		*nvlpacked = NULL;
+		struct pf_krule	*rule = NULL;
+		const char	*anchor = "", *anchor_call = "";
+		uint32_t	 ticket = 0, pool_ticket = 0;
 
-		if (pr->rule.return_icmp >> 8 > ICMP_MAXTYPE) {
-			error = EINVAL;
-			break;
-		}
+#define	ERROUT(x)	do { error = (x); goto DIOCADDRULENV_error; } while (0)
 
-		rule = malloc(sizeof(*rule), M_PFRULE, M_WAITOK);
-		error = pf_rule_to_krule(&pr->rule, rule);
-		if (error != 0) {
-			free(rule, M_PFRULE);
-			break;
-		}
+		if (nv->len > pf_ioctl_maxcount)
+			ERROUT(ENOMEM);
 
-		if (rule->ifname[0])
-			kif = pf_kkif_create(M_WAITOK);
-		rule->evaluations = counter_u64_alloc(M_WAITOK);
-		for (int i = 0; i < 2; i++) {
-			rule->packets[i] = counter_u64_alloc(M_WAITOK);
-			rule->bytes[i] = counter_u64_alloc(M_WAITOK);
-		}
-		rule->states_cur = counter_u64_alloc(M_WAITOK);
-		rule->states_tot = counter_u64_alloc(M_WAITOK);
-		rule->src_nodes = counter_u64_alloc(M_WAITOK);
-		rule->cuid = td->td_ucred->cr_ruid;
-		rule->cpid = td->td_proc ? td->td_proc->p_pid : 0;
-		TAILQ_INIT(&rule->rpool.list);
+		nvlpacked = malloc(nv->len, M_TEMP, M_WAITOK);
+		error = copyin(nv->data, nvlpacked, nv->len);
+		if (error)
+			ERROUT(error);
 
-#define	ERROUT(x)	{ error = (x); goto DIOCADDRULE_error; }
+		nvl = nvlist_unpack(nvlpacked, nv->len, 0);
+		if (nvl == NULL)
+			ERROUT(EBADMSG);
 
-		PF_RULES_WLOCK();
-		pr->anchor[sizeof(pr->anchor) - 1] = 0;
-		ruleset = pf_find_kruleset(pr->anchor);
-		if (ruleset == NULL)
+		if (! nvlist_exists_number(nvl, "ticket"))
 			ERROUT(EINVAL);
-		rs_num = pf_get_ruleset_number(pr->rule.action);
-		if (rs_num >= PF_RULESET_MAX)
+		ticket = nvlist_get_number(nvl, "ticket");
+
+		if (! nvlist_exists_number(nvl, "pool_ticket"))
 			ERROUT(EINVAL);
-		if (pr->ticket != ruleset->rules[rs_num].inactive.ticket) {
-			DPFPRINTF(PF_DEBUG_MISC,
-			    ("ticket: %d != [%d]%d\n", pr->ticket, rs_num,
-			    ruleset->rules[rs_num].inactive.ticket));
-			ERROUT(EBUSY);
-		}
-		if (pr->pool_ticket != V_ticket_pabuf) {
-			DPFPRINTF(PF_DEBUG_MISC,
-			    ("pool_ticket: %d != %d\n", pr->pool_ticket,
-			    V_ticket_pabuf));
-			ERROUT(EBUSY);
-		}
+		pool_ticket = nvlist_get_number(nvl, "pool_ticket");
 
-		tail = TAILQ_LAST(ruleset->rules[rs_num].inactive.ptr,
-		    pf_krulequeue);
-		if (tail)
-			rule->nr = tail->nr + 1;
-		else
-			rule->nr = 0;
-		if (rule->ifname[0]) {
-			rule->kif = pfi_kkif_attach(kif, rule->ifname);
-			pfi_kkif_ref(rule->kif);
-		} else
-			rule->kif = NULL;
+		if (! nvlist_exists_nvlist(nvl, "rule"))
+			ERROUT(EINVAL);
 
-		if (rule->rtableid > 0 && rule->rtableid >= rt_numfibs)
-			error = EBUSY;
+		error = pf_nvrule_to_krule(nvlist_get_nvlist(nvl, "rule"),
+		    &rule);
+		if (error)
+			ERROUT(error);
 
-#ifdef ALTQ
-		/* set queue IDs */
-		if (rule->qname[0] != 0) {
-			if ((rule->qid = pf_qname2qid(rule->qname)) == 0)
-				error = EBUSY;
-			else if (rule->pqname[0] != 0) {
-				if ((rule->pqid =
-				    pf_qname2qid(rule->pqname)) == 0)
-					error = EBUSY;
-			} else
-				rule->pqid = rule->qid;
-		}
-#endif
-		if (rule->tagname[0])
-			if ((rule->tag = pf_tagname2tag(rule->tagname)) == 0)
-				error = EBUSY;
-		if (rule->match_tagname[0])
-			if ((rule->match_tag =
-			    pf_tagname2tag(rule->match_tagname)) == 0)
-				error = EBUSY;
-		if (rule->rt && !rule->direction)
-			error = EINVAL;
-		if (!rule->log)
-			rule->logif = 0;
-		if (rule->logif >= PFLOGIFS_MAX)
-			error = EINVAL;
-		if (pf_addr_setup(ruleset, &rule->src.addr, rule->af))
-			error = ENOMEM;
-		if (pf_addr_setup(ruleset, &rule->dst.addr, rule->af))
-			error = ENOMEM;
-		if (pf_kanchor_setup(rule, ruleset, pr->anchor_call))
-			error = EINVAL;
-		if (rule->scrub_flags & PFSTATE_SETPRIO &&
-		    (rule->set_prio[0] > PF_PRIO_MAX ||
-		    rule->set_prio[1] > PF_PRIO_MAX))
-			error = EINVAL;
-		TAILQ_FOREACH(pa, &V_pf_pabuf, entries)
-			if (pa->addr.type == PF_ADDR_TABLE) {
-				pa->addr.p.tbl = pfr_attach_table(ruleset,
-				    pa->addr.v.tblname);
-				if (pa->addr.p.tbl == NULL)
-					error = ENOMEM;
-			}
+		if (nvlist_exists_string(nvl, "anchor"))
+			anchor = nvlist_get_string(nvl, "anchor");
+		if (nvlist_exists_string(nvl, "anchor_call"))
+			anchor_call = nvlist_get_string(nvl, "anchor_call");
 
-		rule->overload_tbl = NULL;
-		if (rule->overload_tblname[0]) {
-			if ((rule->overload_tbl = pfr_attach_table(ruleset,
-			    rule->overload_tblname)) == NULL)
-				error = EINVAL;
-			else
-				rule->overload_tbl->pfrkt_flags |=
-				    PFR_TFLAG_ACTIVE;
-		}
+		if ((error = nvlist_error(nvl)))
+			ERROUT(error);
 
-		pf_mv_kpool(&V_pf_pabuf, &rule->rpool.list);
-		if (((((rule->action == PF_NAT) || (rule->action == PF_RDR) ||
-		    (rule->action == PF_BINAT)) && rule->anchor == NULL) ||
-		    (rule->rt > PF_NOPFROUTE)) &&
-		    (TAILQ_FIRST(&rule->rpool.list) == NULL))
-			error = EINVAL;
+		/* Frees rule on error */
+		error = pf_ioctl_addrule(rule, ticket, pool_ticket, anchor,
+		    anchor_call, td);
 
-		if (error) {
-			pf_free_rule(rule);
-			PF_RULES_WUNLOCK();
+		nvlist_destroy(nvl);
+		free(nvlpacked, M_TEMP);
+		break;
+#undef ERROUT
+DIOCADDRULENV_error:
+		pf_krule_free(rule);
+		nvlist_destroy(nvl);
+		free(nvlpacked, M_TEMP);
+
+		break;
+	}
+	case DIOCADDRULE: {
+		struct pfioc_rule	*pr = (struct pfioc_rule *)addr;
+		struct pf_krule		*rule;
+
+		rule = malloc(sizeof(*rule), M_PFRULE, M_WAITOK);
+		error = pf_rule_to_krule(&pr->rule, rule);
+		if (error != 0) {
+			free(rule, M_PFRULE);
 			break;
 		}
 
-		rule->rpool.cur = TAILQ_FIRST(&rule->rpool.list);
-		counter_u64_zero(rule->evaluations);
-		for (int i = 0; i < 2; i++) {
-			counter_u64_zero(rule->packets[i]);
-			counter_u64_zero(rule->bytes[i]);
-		}
-		TAILQ_INSERT_TAIL(ruleset->rules[rs_num].inactive.ptr,
-		    rule, entries);
-		ruleset->rules[rs_num].inactive.rcount++;
-		PF_RULES_WUNLOCK();
-		break;
+		pr->anchor[sizeof(pr->anchor) - 1] = 0;
 
-#undef ERROUT
-DIOCADDRULE_error:
-		PF_RULES_WUNLOCK();
-		pf_krule_free(rule);
-		pf_kkif_free(kif);
+		/* Frees rule on error */
+		error = pf_ioctl_addrule(rule, pr->ticket, pr->pool_ticket,
+		    pr->anchor, pr->anchor_call, td);
 		break;
 	}
 
diff --git a/sys/netpfil/pf/pf_nv.c b/sys/netpfil/pf/pf_nv.c
new file mode 100644
index 000000000000..d583844c4086
--- /dev/null
+++ b/sys/netpfil/pf/pf_nv.c
@@ -0,0 +1,127 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/errno.h>
+#include <sys/limits.h>
+#include <sys/systm.h>
+
+#include <netpfil/pf/pf_nv.h>
+
+#define	PV_NV_IMPL_UINT(fnname, type, max)					\
+	int									\
+	fnname(const nvlist_t *nvl, const char *name, type *val)		\
+	{									\
+		uint64_t raw;							\
+		if (! nvlist_exists_number(nvl, name))				\
+			return (EINVAL);					\
+		raw = nvlist_get_number(nvl, name);				\
+		if (raw > max)							\
+			return (ERANGE);					\
+		*val = (type)raw;						\
+		return (0);							\
+	}									\
+	int									\
+	fnname ## _array(const nvlist_t *nvl, const char *name, type *array, 	\
+	    size_t maxelems, size_t *nelems)					\
+	{									\
+		const uint64_t *n;						\
+		size_t nitems;							\
+		bzero(array, sizeof(type) * maxelems);				\
+		if (! nvlist_exists_number_array(nvl, name))			\
+			return (EINVAL);					\
+		n = nvlist_get_number_array(nvl, name, &nitems);		\
+		if (nitems != maxelems)						\
+			return (E2BIG);						\
+		if (nelems != NULL)						\
+			*nelems = nitems;					\
+		for (size_t i = 0; i < nitems; i++) {				\
+			if (n[i] > max)						\
+				return (ERANGE);				\
+			array[i] = (type)n[i];					\
+		}								\
+		return (0);							\
+	}
+int
+pf_nvbinary(const nvlist_t *nvl, const char *name, void *data,
+    size_t expected_size)
+{
+	const uint8_t *nvdata;
+	size_t len;
+
+	bzero(data, expected_size);
+
+	if (! nvlist_exists_binary(nvl, name))
+		return (EINVAL);
+
+	nvdata = (const uint8_t *)nvlist_get_binary(nvl, name, &len);
+	if (len > expected_size)
+		return (EINVAL);
+
+	memcpy(data, nvdata, len);
+
+	return (0);
+}
+
+PV_NV_IMPL_UINT(pf_nvuint8, uint8_t, UINT8_MAX)
+PV_NV_IMPL_UINT(pf_nvuint16, uint16_t, UINT16_MAX);
+PV_NV_IMPL_UINT(pf_nvuint32, uint32_t, UINT32_MAX)
+
+int
+pf_nvint(const nvlist_t *nvl, const char *name, int *val)
+{
+	int64_t raw;
+
+	if (! nvlist_exists_number(nvl, name))
+		return (EINVAL);
+
+	raw = nvlist_get_number(nvl, name);
+	if (raw > INT_MAX || raw < INT_MIN)
+		return (ERANGE);
+
+	*val = (int)raw;
+
+	return (0);
+}
+
+int
+pf_nvstring(const nvlist_t *nvl, const char *name, char *str, size_t maxlen)
+{
+	int ret;
+
+	if (! nvlist_exists_string(nvl, name))
+		return (EINVAL);
+
+	ret = strlcpy(str, nvlist_get_string(nvl, name), maxlen);
+	if (ret >= maxlen)
+		return (EINVAL);
+
+	return (0);
+}
diff --git a/sys/netpfil/pf/pf_nv.h b/sys/netpfil/pf/pf_nv.h
new file mode 100644
index 000000000000..f0db1e880e9e
--- /dev/null
+++ b/sys/netpfil/pf/pf_nv.h
@@ -0,0 +1,53 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#ifndef _PF_NV_H_
+#define _PF_NV_H_
+
+#include <sys/types.h>
+#include <sys/nv.h>
+
+int	pf_nvbinary(const nvlist_t *, const char *, void *, size_t);
+int	pf_nvint(const nvlist_t *, const char *, int *);
+int	pf_nvuint8(const nvlist_t *, const char *, uint8_t *);
+int	pf_nvuint8_array(const nvlist_t *, const char *, uint8_t *,
+	    size_t, size_t *);
+int	pf_nvuint16(const nvlist_t *, const char *, uint16_t *);
+int	pf_nvuint16_array(const nvlist_t *, const char *, uint16_t *,
+	    size_t, size_t *);
+int	pf_nvuint32(const nvlist_t *, const char *, uint32_t *);
+int	pf_nvuint32_array(const nvlist_t *, const char *, uint32_t *,
+	    size_t, size_t *);
+int	pf_nvstring(const nvlist_t *, const char *, char *, size_t);
+
+#define	PFNV_CHK(x)	do {	\
+	error = (x);		\
+	if (error != 0)		\
+		goto errout;	\
+	} while (0)
+
+#endif

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3F7596310B8;
 Fri,  7 May 2021 15:25:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmN5XFyz4jx8;
 Fri,  7 May 2021 15:25:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2E5965C89;
 Fri,  7 May 2021 15:25:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPekT026108;
 Fri, 7 May 2021 15:25:40 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPeci026107;
 Fri, 7 May 2021 15:25:40 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:40 GMT
Message-Id: <202105071525.147FPeci026107@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 5b16c4b6e824 - stable/12 - pf: Implement nvlist variant of
 DIOCGETRULE
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 5b16c4b6e824ab3a708c75a51c73898cbf98599e
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:41 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=5b16c4b6e824ab3a708c75a51c73898cbf98599e

commit 5b16c4b6e824ab3a708c75a51c73898cbf98599e
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-25 09:39:14 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:00 +0000

    pf: Implement nvlist variant of DIOCGETRULE
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29559
    
    (cherry picked from commit d710367d1159423ed4da6628b7ab042d3e44f900)
---
 sys/net/pfvar.h             |   4 +
 sys/netpfil/pf/pf_ioctl.c   | 398 ++++++++++++++++++++++++++++++++++++++++++++
 sys/netpfil/pf/pf_nv.c      |  23 ++-
 sys/netpfil/pf/pf_nv.h      |   7 +
 sys/netpfil/pf/pf_ruleset.c |  47 ++++++
 5 files changed, 473 insertions(+), 6 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index eb9f365f2ec9..e6e011d6ef99 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -40,6 +40,7 @@
 #include <sys/counter.h>
 #include <sys/cpuset.h>
 #include <sys/malloc.h>
+#include <sys/nv.h>
 #include <sys/refcount.h>
 #include <sys/sysctl.h>
 #include <sys/lock.h>
@@ -1232,6 +1233,7 @@ struct pfioc_iface {
 #define DIOCADDRULENV	_IOWR('D',  4, struct pfioc_nv)
 #define DIOCGETRULES	_IOWR('D',  6, struct pfioc_rule)
 #define DIOCGETRULE	_IOWR('D',  7, struct pfioc_rule)
+#define DIOCGETRULENV	_IOWR('D',  7, struct pfioc_nv)
 /* XXX cut 8 - 17 */
 #define DIOCCLRSTATES	_IOWR('D', 18, struct pfioc_state_kill)
 #define DIOCGETSTATE	_IOWR('D', 19, struct pfioc_state)
@@ -1636,6 +1638,8 @@ int			 pf_get_ruleset_number(u_int8_t);
 void			 pf_init_kruleset(struct pf_kruleset *);
 int			 pf_kanchor_setup(struct pf_krule *,
 			    const struct pf_kruleset *, const char *);
+int			 pf_kanchor_nvcopyout(const struct pf_kruleset *,
+			    const struct pf_krule *, nvlist_t *);
 int			 pf_kanchor_copyout(const struct pf_kruleset *,
 			    const struct pf_krule *, struct pfioc_rule *);
 void			 pf_kanchor_remove(struct pf_krule *);
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 53c850a96538..7310fa18410b 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -1631,6 +1631,20 @@ pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *paddr)
 	return (pf_nvbinary(nvl, "addr", paddr, sizeof(*paddr)));
 }
 
+static nvlist_t *
+pf_addr_to_nvaddr(const struct pf_addr *paddr)
+{
+	nvlist_t *nvl;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	nvlist_add_binary(nvl, "addr", paddr, sizeof(*paddr));
+
+	return (nvl);
+}
+
 static int
 pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_kpool *kpool)
 {
@@ -1654,6 +1668,33 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_pool_to_nvpool(const struct pf_kpool *pool)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
+	tmp = pf_addr_to_nvaddr(&pool->counter);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "counter", tmp);
+
+	nvlist_add_number(nvl, "tblidx", pool->tblidx);
+	pf_uint16_array_nv(nvl, "proxy_port", pool->proxy_port, 2);
+	nvlist_add_number(nvl, "opts", pool->opts);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
 {
@@ -1694,6 +1735,37 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_addr_wrap_to_nvaddr_wrap(const struct pf_addr_wrap *addr)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	nvlist_add_number(nvl, "type", addr->type);
+	nvlist_add_number(nvl, "iflags", addr->iflags);
+	nvlist_add_string(nvl, "ifname", addr->v.ifname);
+	nvlist_add_string(nvl, "tblname", addr->v.tblname);
+
+	tmp = pf_addr_to_nvaddr(&addr->v.a.addr);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "addr", tmp);
+	tmp = pf_addr_to_nvaddr(&addr->v.a.mask);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "mask", tmp);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_validate_op(uint8_t op)
 {
@@ -1736,6 +1808,31 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_rule_addr_to_nvrule_addr(const struct pf_rule_addr *addr)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	tmp = pf_addr_wrap_to_nvaddr_wrap(&addr->addr);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "addr", tmp);
+	pf_uint16_array_nv(nvl, "port", addr->port, 2);
+	nvlist_add_number(nvl, "neg", addr->neg);
+	nvlist_add_number(nvl, "port_op", addr->port_op);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 {
@@ -1752,6 +1849,21 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_rule_uid_to_nvrule_uid(const struct pf_rule_uid *uid)
+{
+	nvlist_t *nvl;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	pf_uint32_array_nv(nvl, "uid", uid->uid, 2);
+	nvlist_add_number(nvl, "op", uid->op);
+
+	return (nvl);
+}
+
 static int
 pf_nvrule_gid_to_rule_gid(const nvlist_t *nvl, struct pf_rule_gid *gid)
 {
@@ -1913,6 +2025,158 @@ errout:
 	return (error);
 }
 
+static nvlist_t *
+pf_divert_to_nvdivert(const struct pf_krule *rule)
+{
+	nvlist_t *nvl;
+	nvlist_t *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (NULL);
+
+	tmp = pf_addr_to_nvaddr(&rule->divert.addr);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "addr", tmp);
+	nvlist_add_number(nvl, "port", rule->divert.port);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
+static nvlist_t *
+pf_krule_to_nvrule(const struct pf_krule *rule)
+{
+	nvlist_t *nvl, *tmp;
+
+	nvl = nvlist_create(0);
+	if (nvl == NULL)
+		return (nvl);
+
+	nvlist_add_number(nvl, "nr", rule->nr);
+	tmp = pf_rule_addr_to_nvrule_addr(&rule->src);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "src", tmp);
+	tmp = pf_rule_addr_to_nvrule_addr(&rule->dst);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "dst", tmp);
+
+	for (int i = 0; i < PF_SKIP_COUNT; i++) {
+		nvlist_append_number_array(nvl, "skip",
+		    rule->skip[i].ptr ? rule->skip[i].ptr->nr : -1);
+	}
+
+	nvlist_add_string(nvl, "label", rule->label);
+	nvlist_add_string(nvl, "ifname", rule->ifname);
+	nvlist_add_string(nvl, "qname", rule->qname);
+	nvlist_add_string(nvl, "pqname", rule->pqname);
+	nvlist_add_string(nvl, "tagname", rule->tagname);
+	nvlist_add_string(nvl, "match_tagname", rule->match_tagname);
+	nvlist_add_string(nvl, "overload_tblname", rule->overload_tblname);
+
+	tmp = pf_pool_to_nvpool(&rule->rpool);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "rpool", tmp);
+
+	nvlist_add_number(nvl, "evaluations",
+	    counter_u64_fetch(rule->evaluations));
+	for (int i = 0; i < 2; i++) {
+		nvlist_append_number_array(nvl, "packets",
+		    counter_u64_fetch(rule->packets[i]));
+		nvlist_append_number_array(nvl, "bytes",
+		    counter_u64_fetch(rule->bytes[i]));
+	}
+
+	nvlist_add_number(nvl, "os_fingerprint", rule->os_fingerprint);
+
+	nvlist_add_number(nvl, "rtableid", rule->rtableid);
+	pf_uint32_array_nv(nvl, "timeout", rule->timeout, PFTM_MAX);
+	nvlist_add_number(nvl, "max_states", rule->max_states);
+	nvlist_add_number(nvl, "max_src_nodes", rule->max_src_nodes);
+	nvlist_add_number(nvl, "max_src_states", rule->max_src_states);
+	nvlist_add_number(nvl, "max_src_conn", rule->max_src_conn);
+	nvlist_add_number(nvl, "max_src_conn_rate.limit",
+	    rule->max_src_conn_rate.limit);
+	nvlist_add_number(nvl, "max_src_conn_rate.seconds",
+	    rule->max_src_conn_rate.seconds);
+	nvlist_add_number(nvl, "qid", rule->qid);
+	nvlist_add_number(nvl, "pqid", rule->pqid);
+	nvlist_add_number(nvl, "prob", rule->prob);
+	nvlist_add_number(nvl, "cuid", rule->cuid);
+	nvlist_add_number(nvl, "cpid", rule->cpid);
+
+	nvlist_add_number(nvl, "states_cur",
+	    counter_u64_fetch(rule->states_cur));
+	nvlist_add_number(nvl, "states_tot",
+	    counter_u64_fetch(rule->states_tot));
+	nvlist_add_number(nvl, "src_nodes",
+	    counter_u64_fetch(rule->src_nodes));
+
+	nvlist_add_number(nvl, "return_icmp", rule->return_icmp);
+	nvlist_add_number(nvl, "return_icmp6", rule->return_icmp6);
+
+	nvlist_add_number(nvl, "max_mss", rule->max_mss);
+	nvlist_add_number(nvl, "scrub_flags", rule->scrub_flags);
+
+	tmp = pf_rule_uid_to_nvrule_uid(&rule->uid);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "uid", tmp);
+	tmp = pf_rule_uid_to_nvrule_uid((const struct pf_rule_uid *)&rule->gid);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "gid", tmp);
+
+	nvlist_add_number(nvl, "rule_flag", rule->rule_flag);
+	nvlist_add_number(nvl, "action", rule->action);
+	nvlist_add_number(nvl, "direction", rule->direction);
+	nvlist_add_number(nvl, "log", rule->log);
+	nvlist_add_number(nvl, "logif", rule->logif);
+	nvlist_add_number(nvl, "quick", rule->quick);
+	nvlist_add_number(nvl, "ifnot", rule->ifnot);
+	nvlist_add_number(nvl, "match_tag_not", rule->match_tag_not);
+	nvlist_add_number(nvl, "natpass", rule->natpass);
+
+	nvlist_add_number(nvl, "keep_state", rule->keep_state);
+	nvlist_add_number(nvl, "af", rule->af);
+	nvlist_add_number(nvl, "proto", rule->proto);
+	nvlist_add_number(nvl, "type", rule->type);
+	nvlist_add_number(nvl, "code", rule->code);
+	nvlist_add_number(nvl, "flags", rule->flags);
+	nvlist_add_number(nvl, "flagset", rule->flagset);
+	nvlist_add_number(nvl, "min_ttl", rule->min_ttl);
+	nvlist_add_number(nvl, "allow_opts", rule->allow_opts);
+	nvlist_add_number(nvl, "rt", rule->rt);
+	nvlist_add_number(nvl, "return_ttl", rule->return_ttl);
+	nvlist_add_number(nvl, "tos", rule->tos);
+	nvlist_add_number(nvl, "set_tos", rule->set_tos);
+	nvlist_add_number(nvl, "anchor_relative", rule->anchor_relative);
+	nvlist_add_number(nvl, "anchor_wildcard", rule->anchor_wildcard);
+
+	nvlist_add_number(nvl, "flush", rule->flush);
+	nvlist_add_number(nvl, "prio", rule->prio);
+
+	pf_uint8_array_nv(nvl, "set_prio", &rule->prio, 2);
+
+	tmp = pf_divert_to_nvdivert(rule);
+	if (tmp == NULL)
+		goto error;
+	nvlist_add_nvlist(nvl, "divert", tmp);
+
+	return (nvl);
+
+error:
+	nvlist_destroy(nvl);
+	return (NULL);
+}
+
 static int
 pf_rule_to_krule(const struct pf_rule *rule, struct pf_krule *krule)
 {
@@ -2255,6 +2519,7 @@ pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td
 		switch (cmd) {
 		case DIOCGETRULES:
 		case DIOCGETRULE:
+		case DIOCGETRULENV:
 		case DIOCGETADDRS:
 		case DIOCGETADDR:
 		case DIOCGETSTATE:
@@ -2336,6 +2601,7 @@ pfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td
 		case DIOCIGETIFACES:
 		case DIOCGIFSPEEDV1:
 		case DIOCGIFSPEEDV0:
+		case DIOCGETRULENV:
 			break;
 		case DIOCRCLRTABLES:
 		case DIOCRADDTABLES:
@@ -2571,6 +2837,138 @@ DIOCADDRULENV_error:
 		break;
 	}
 
+	case DIOCGETRULENV: {
+		struct pfioc_nv		*nv = (struct pfioc_nv *)addr;
+		nvlist_t		*nvrule = NULL;
+		nvlist_t		*nvl = NULL;
+		struct pf_kruleset	*ruleset;
+		struct pf_krule		*rule;
+		void			*nvlpacked = NULL;
+		int			 rs_num, nr;
+		bool			 clear_counter = false;
+
+#define	ERROUT(x)	do { error = (x); goto DIOCGETRULENV_error; } while (0)
+
+		if (nv->len > pf_ioctl_maxcount)
+			ERROUT(ENOMEM);
+
+		/* Copy the request in */
+		nvlpacked = malloc(nv->len, M_TEMP, M_WAITOK);
+		if (nvlpacked == NULL)
+			ERROUT(ENOMEM);
+
+		error = copyin(nv->data, nvlpacked, nv->len);
+		if (error)
+			ERROUT(error);
+
+		nvl = nvlist_unpack(nvlpacked, nv->len, 0);
+		if (nvl == NULL)
+			ERROUT(EBADMSG);
+
+		if (! nvlist_exists_string(nvl, "anchor"))
+			ERROUT(EBADMSG);
+		if (! nvlist_exists_number(nvl, "ruleset"))
+			ERROUT(EBADMSG);
+		if (! nvlist_exists_number(nvl, "ticket"))
+			ERROUT(EBADMSG);
+		if (! nvlist_exists_number(nvl, "nr"))
+			ERROUT(EBADMSG);
+
+		if (nvlist_exists_bool(nvl, "clear_counter"))
+			clear_counter = nvlist_get_bool(nvl, "clear_counter");
+
+		if (clear_counter && !(flags & FWRITE))
+			ERROUT(EACCES);
+
+		nr = nvlist_get_number(nvl, "nr");
+
+		PF_RULES_WLOCK();
+		ruleset = pf_find_kruleset(nvlist_get_string(nvl, "anchor"));
+		if (ruleset == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOENT);
+		}
+
+		rs_num = pf_get_ruleset_number(nvlist_get_number(nvl, "ruleset"));
+		if (rs_num >= PF_RULESET_MAX) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EINVAL);
+		}
+
+		if (nvlist_get_number(nvl, "ticket") !=
+		    ruleset->rules[rs_num].active.ticket) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EBUSY);
+			break;
+		}
+
+		if ((error = nvlist_error(nvl))) {
+			PF_RULES_WUNLOCK();
+			ERROUT(error);
+		}
+
+		rule = TAILQ_FIRST(ruleset->rules[rs_num].active.ptr);
+		while ((rule != NULL) && (rule->nr != nr))
+			rule = TAILQ_NEXT(rule, entries);
+		if (rule == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EBUSY);
+			break;
+		}
+
+		nvrule = pf_krule_to_nvrule(rule);
+
+		nvlist_destroy(nvl);
+		nvl = nvlist_create(0);
+		if (nvl == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOMEM);
+		}
+		nvlist_add_number(nvl, "nr", nr);
+		nvlist_add_nvlist(nvl, "rule", nvrule);
+		nvrule = NULL;
+		if (pf_kanchor_nvcopyout(ruleset, rule, nvl)) {
+			PF_RULES_WUNLOCK();
+			ERROUT(EBUSY);
+		}
+
+		free(nvlpacked, M_TEMP);
+		nvlpacked = nvlist_pack(nvl, &nv->len);
+		if (nvlpacked == NULL) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOMEM);
+		}
+
+		if (nv->size == 0) {
+			PF_RULES_WUNLOCK();
+			ERROUT(0);
+		}
+		else if (nv->size < nv->len) {
+			PF_RULES_WUNLOCK();
+			ERROUT(ENOSPC);
+		}
+
+		error = copyout(nvlpacked, nv->data, nv->len);
+
+		if (clear_counter) {
+			counter_u64_zero(rule->evaluations);
+			for (int i = 0; i < 2; i++) {
+				counter_u64_zero(rule->packets[i]);
+				counter_u64_zero(rule->bytes[i]);
+			}
+			counter_u64_zero(rule->states_tot);
+		}
+		PF_RULES_WUNLOCK();
+
+#undef ERROUT
+DIOCGETRULENV_error:
+		free(nvlpacked, M_TEMP);
+		nvlist_destroy(nvrule);
+		nvlist_destroy(nvl);
+
+		break;
+	}
+
 	case DIOCCHANGERULE: {
 		struct pfioc_rule	*pcr = (struct pfioc_rule *)addr;
 		struct pf_kruleset	*ruleset;
diff --git a/sys/netpfil/pf/pf_nv.c b/sys/netpfil/pf/pf_nv.c
index d583844c4086..d88c0b14e435 100644
--- a/sys/netpfil/pf/pf_nv.c
+++ b/sys/netpfil/pf/pf_nv.c
@@ -37,7 +37,7 @@ __FBSDID("$FreeBSD$");
 
 #define	PV_NV_IMPL_UINT(fnname, type, max)					\
 	int									\
-	fnname(const nvlist_t *nvl, const char *name, type *val)		\
+	pf_nv ## fnname(const nvlist_t *nvl, const char *name, type *val)	\
 	{									\
 		uint64_t raw;							\
 		if (! nvlist_exists_number(nvl, name))				\
@@ -49,8 +49,8 @@ __FBSDID("$FreeBSD$");
 		return (0);							\
 	}									\
 	int									\
-	fnname ## _array(const nvlist_t *nvl, const char *name, type *array, 	\
-	    size_t maxelems, size_t *nelems)					\
+	pf_nv ## fnname ## _array(const nvlist_t *nvl, const char *name,	\
+	    type *array, size_t maxelems, size_t *nelems)			\
 	{									\
 		const uint64_t *n;						\
 		size_t nitems;							\
@@ -68,7 +68,18 @@ __FBSDID("$FreeBSD$");
 			array[i] = (type)n[i];					\
 		}								\
 		return (0);							\
+	}									\
+	void									\
+	pf_ ## fnname ## _array_nv(nvlist_t *nvl, const char *name,		\
+	    const type *numbers, size_t count)					\
+	{									\
+		uint64_t tmp;							\
+		for (size_t i = 0; i < count; i++) {				\
+			tmp = numbers[i];					\
+			nvlist_append_number_array(nvl, name, tmp);		\
+		}								\
 	}
+
 int
 pf_nvbinary(const nvlist_t *nvl, const char *name, void *data,
     size_t expected_size)
@@ -90,9 +101,9 @@ pf_nvbinary(const nvlist_t *nvl, const char *name, void *data,
 	return (0);
 }
 
-PV_NV_IMPL_UINT(pf_nvuint8, uint8_t, UINT8_MAX)
-PV_NV_IMPL_UINT(pf_nvuint16, uint16_t, UINT16_MAX);
-PV_NV_IMPL_UINT(pf_nvuint32, uint32_t, UINT32_MAX)
+PV_NV_IMPL_UINT(uint8, uint8_t, UINT8_MAX)
+PV_NV_IMPL_UINT(uint16, uint16_t, UINT16_MAX);
+PV_NV_IMPL_UINT(uint32, uint32_t, UINT32_MAX)
 
 int
 pf_nvint(const nvlist_t *nvl, const char *name, int *val)
diff --git a/sys/netpfil/pf/pf_nv.h b/sys/netpfil/pf/pf_nv.h
index f0db1e880e9e..0a0f9beeef40 100644
--- a/sys/netpfil/pf/pf_nv.h
+++ b/sys/netpfil/pf/pf_nv.h
@@ -36,12 +36,19 @@ int	pf_nvint(const nvlist_t *, const char *, int *);
 int	pf_nvuint8(const nvlist_t *, const char *, uint8_t *);
 int	pf_nvuint8_array(const nvlist_t *, const char *, uint8_t *,
 	    size_t, size_t *);
+void	pf_uint8_array_nv(nvlist_t *, const char *, const uint8_t *,
+	    size_t);
 int	pf_nvuint16(const nvlist_t *, const char *, uint16_t *);
 int	pf_nvuint16_array(const nvlist_t *, const char *, uint16_t *,
 	    size_t, size_t *);
+void	pf_uint16_array_nv(nvlist_t *, const char *, const uint16_t *,
+	    size_t);
 int	pf_nvuint32(const nvlist_t *, const char *, uint32_t *);
 int	pf_nvuint32_array(const nvlist_t *, const char *, uint32_t *,
 	    size_t, size_t *);
+void	pf_uint32_array_nv(nvlist_t *, const char *, const uint32_t *,
+	    size_t);
+
 int	pf_nvstring(const nvlist_t *, const char *, char *, size_t);
 
 #define	PFNV_CHK(x)	do {	\
diff --git a/sys/netpfil/pf/pf_ruleset.c b/sys/netpfil/pf/pf_ruleset.c
index 31a4ed879937..227157c2876d 100644
--- a/sys/netpfil/pf/pf_ruleset.c
+++ b/sys/netpfil/pf/pf_ruleset.c
@@ -336,6 +336,53 @@ pf_kanchor_setup(struct pf_krule *r, const struct pf_kruleset *s,
 	return (0);
 }
 
+int
+pf_kanchor_nvcopyout(const struct pf_kruleset *rs, const struct pf_krule *r,
+    nvlist_t *nvl)
+{
+	char anchor_call[MAXPATHLEN] = { 0 };
+
+	if (r->anchor == NULL)
+		goto done;
+	if (!r->anchor_relative) {
+		strlcpy(anchor_call, "/", sizeof(anchor_call));
+		strlcat(anchor_call, r->anchor->path,
+		    sizeof(anchor_call));
+	} else {
+		char	 a[MAXPATHLEN];
+		char	*p;
+		int	 i;
+		if (rs->anchor == NULL)
+			a[0] = 0;
+		else
+			strlcpy(a, rs->anchor->path, MAXPATHLEN);
+		for (i = 1; i < r->anchor_relative; ++i) {
+			if ((p = strrchr(a, '/')) == NULL)
+				p = a;
+			*p = 0;
+			strlcat(anchor_call, "../",
+			    sizeof(anchor_call));
+		}
+		if (strncmp(a, r->anchor->path, strlen(a))) {
+			printf("pf_anchor_copyout: '%s' '%s'\n", a,
+			    r->anchor->path);
+			return (1);
+		}
+		if (strlen(r->anchor->path) > strlen(a))
+			strlcat(anchor_call, r->anchor->path + (a[0] ?
+			    strlen(a) + 1 : 0), sizeof(anchor_call));
+
+	}
+	if (r->anchor_wildcard)
+		strlcat(anchor_call, anchor_call[0] ? "/*" : "*",
+		    sizeof(anchor_call));
+
+done:
+	nvlist_add_string(nvl, "anchor_call", anchor_call);
+
+	return (0);
+}
+
 int
 pf_kanchor_copyout(const struct pf_kruleset *rs, const struct pf_krule *r,
     struct pfioc_rule *pr)

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:43 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2B3716310CD;
 Fri,  7 May 2021 15:25:43 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmQ2dg0z4k1y;
 Fri,  7 May 2021 15:25:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4811D5DBA;
 Fri,  7 May 2021 15:25:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPfDU026150;
 Fri, 7 May 2021 15:25:41 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPfFL026149;
 Fri, 7 May 2021 15:25:41 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:41 GMT
Message-Id: <202105071525.147FPfFL026149@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: d14cf045873b - stable/12 - pfctl: Use the new DIOCGETRULENV ioctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: d14cf045873bee3bd15e246274591da24cf5daed
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:43 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=d14cf045873bee3bd15e246274591da24cf5daed

commit d14cf045873bee3bd15e246274591da24cf5daed
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-26 10:22:15 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:00 +0000

    pfctl: Use the new DIOCGETRULENV ioctl
    
    Create wrapper functions to handle the parsing of the nvlist and move
    that code into pfctl_ioctl.c.
    At some point this should be moved into a libpfctl.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29560
    
    (cherry picked from commit 0d6c8174ef2f3d8d6fb02ec97753a0937796a5c6)
---
 sbin/pfctl/Makefile         |   2 +-
 sbin/pfctl/pfctl.c          |  12 +-
 sbin/pfctl/pfctl_ioctl.c    | 339 ++++++++++++++++++++++++++++++++++++++++++++
 sbin/pfctl/pfctl_ioctl.h    |  43 ++++++
 sbin/pfctl/pfctl_optimize.c |   7 +-
 5 files changed, 396 insertions(+), 7 deletions(-)

diff --git a/sbin/pfctl/Makefile b/sbin/pfctl/Makefile
index 74cefe6824a4..c84d558c989d 100644
--- a/sbin/pfctl/Makefile
+++ b/sbin/pfctl/Makefile
@@ -9,7 +9,7 @@ MAN=	pfctl.8
 
 SRCS = pfctl.c parse.y pfctl_parser.c pf_print_state.c pfctl_altq.c
 SRCS+= pfctl_osfp.c pfctl_radix.c pfctl_table.c pfctl_qstats.c
-SRCS+= pfctl_optimize.c
+SRCS+= pfctl_optimize.c pfctl_ioctl.c
 SRCS+= pf_ruleset.c
 
 WARNS?=	2
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 58a87a2b8395..1aa17065597b 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <unistd.h>
 
+#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
@@ -952,8 +953,9 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (ioctl(dev, DIOCGETRULE, &pr)) {
-			warn("DIOCGETRULE");
+		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_SCRUB,
+		    &pr.rule, pr.anchor_call)) {
+			warn("DIOCGETRULENV");
 			goto error;
 		}
 
@@ -984,7 +986,8 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 	mnr = pr.nr;
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (ioctl(dev, DIOCGETRULE, &pr)) {
+		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_PASS,
+		    &pr.rule, pr.anchor_call)) {
 			warn("DIOCGETRULE");
 			goto error;
 		}
@@ -1074,7 +1077,8 @@ pfctl_show_nat(int dev, int opts, char *anchorname)
 		mnr = pr.nr;
 		for (nr = 0; nr < mnr; ++nr) {
 			pr.nr = nr;
-			if (ioctl(dev, DIOCGETRULE, &pr)) {
+			if (pfctl_get_rule(dev, nr, pr.ticket, anchorname,
+			    nattype[i], &pr.rule, pr.anchor_call)) {
 				warn("DIOCGETRULE");
 				return (-1);
 			}
diff --git a/sbin/pfctl/pfctl_ioctl.c b/sbin/pfctl/pfctl_ioctl.c
new file mode 100644
index 000000000000..878a57de0fe4
--- /dev/null
+++ b/sbin/pfctl/pfctl_ioctl.c
@@ -0,0 +1,339 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/cdefs.h>
+
+#include <sys/ioctl.h>
+#include <sys/nv.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+
+#include <net/if.h>
+#include <net/pfvar.h>
+#include <netinet/in.h>
+
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pfctl_ioctl.h"
+
+static void
+pf_nvuint_8_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int8_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvuint_16_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int16_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvuint_32_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int32_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvuint_64_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int64_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *addr)
+{
+	size_t len;
+	const void *data;
+
+	data = nvlist_get_binary(nvl, "addr", &len);
+	assert(len == sizeof(struct pf_addr));
+	memcpy(addr, data, len);
+}
+
+static void
+pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
+{
+	addr->type = nvlist_get_number(nvl, "type");
+	addr->iflags = nvlist_get_number(nvl, "iflags");
+	strlcpy(addr->v.ifname, nvlist_get_string(nvl, "ifname"), IFNAMSIZ);
+	strlcpy(addr->v.tblname, nvlist_get_string(nvl, "tblname"),
+	    PF_TABLE_NAME_SIZE);
+
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"), &addr->v.a.addr);
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "mask"), &addr->v.a.mask);
+}
+
+static void
+pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
+{
+	pf_nvaddr_wrap_to_addr_wrap(nvlist_get_nvlist(nvl, "addr"), &addr->addr);
+
+	pf_nvuint_16_array(nvl, "port", 2, addr->port, NULL);
+	addr->neg = nvlist_get_number(nvl, "neg");
+	addr->port_op = nvlist_get_number(nvl, "port_op");
+}
+
+static void
+pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
+{
+	size_t len;
+	const void *data;
+
+	data = nvlist_get_binary(nvl, "key", &len);
+	assert(len == sizeof(pool->key));
+	memcpy(&pool->key, data, len);
+
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "counter"), &pool->counter);
+
+	pool->tblidx = nvlist_get_number(nvl, "tblidx");
+	pf_nvuint_16_array(nvl, "proxy_port", 2, pool->proxy_port, NULL);
+	pool->opts = nvlist_get_number(nvl, "opts");
+}
+
+static void
+pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
+{
+	pf_nvuint_32_array(nvl, "uid", 2, uid->uid, NULL);
+	uid->op = nvlist_get_number(nvl, "op");
+}
+
+static void
+pf_nvdivert_to_divert(const nvlist_t *nvl, struct pf_rule *rule)
+{
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"), &rule->divert.addr);
+	rule->divert.port = nvlist_get_number(nvl, "port");
+}
+
+static void
+pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
+{
+	const uint64_t *skip;
+	size_t skipcount;
+
+	rule->nr = nvlist_get_number(nvl, "nr");
+
+	pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "src"), &rule->src);
+	pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "dst"), &rule->dst);
+
+	skip = nvlist_get_number_array(nvl, "skip", &skipcount);
+	assert(skip);
+	assert(skipcount == PF_SKIP_COUNT);
+	for (int i = 0; i < PF_SKIP_COUNT; i++)
+		rule->skip[i].nr = skip[i];
+
+	strlcpy(rule->label, nvlist_get_string(nvl, "label"), PF_RULE_LABEL_SIZE);
+	strlcpy(rule->ifname, nvlist_get_string(nvl, "ifname"), IFNAMSIZ);
+	strlcpy(rule->qname, nvlist_get_string(nvl, "qname"), PF_QNAME_SIZE);
+	strlcpy(rule->pqname, nvlist_get_string(nvl, "pqname"), PF_QNAME_SIZE);
+	strlcpy(rule->tagname, nvlist_get_string(nvl, "tagname"),
+	    PF_TAG_NAME_SIZE);
+	strlcpy(rule->match_tagname, nvlist_get_string(nvl, "match_tagname"),
+	    PF_TAG_NAME_SIZE);
+
+	strlcpy(rule->overload_tblname, nvlist_get_string(nvl, "overload_tblname"),
+	    PF_TABLE_NAME_SIZE);
+
+	pf_nvpool_to_pool(nvlist_get_nvlist(nvl, "rpool"), &rule->rpool);
+
+	rule->evaluations = nvlist_get_number(nvl, "evaluations");
+	pf_nvuint_64_array(nvl, "packets", 2, rule->packets, NULL);
+	pf_nvuint_64_array(nvl, "bytes", 2, rule->bytes, NULL);
+
+	rule->os_fingerprint = nvlist_get_number(nvl, "os_fingerprint");
+
+	rule->rtableid = nvlist_get_number(nvl, "rtableid");
+	pf_nvuint_32_array(nvl, "timeout", PFTM_MAX, rule->timeout, NULL);
+	rule->max_states = nvlist_get_number(nvl, "max_states");
+	rule->max_src_nodes = nvlist_get_number(nvl, "max_src_nodes");
+	rule->max_src_states = nvlist_get_number(nvl, "max_src_states");
+	rule->max_src_conn = nvlist_get_number(nvl, "max_src_conn");
+	rule->max_src_conn_rate.limit =
+	    nvlist_get_number(nvl, "max_src_conn_rate.limit");
+	rule->max_src_conn_rate.seconds =
+	    nvlist_get_number(nvl, "max_src_conn_rate.seconds");
+	rule->qid = nvlist_get_number(nvl, "qid");
+	rule->pqid = nvlist_get_number(nvl, "pqid");
+	rule->prob = nvlist_get_number(nvl, "prob");
+	rule->cuid = nvlist_get_number(nvl, "cuid");
+	rule->cpid = nvlist_get_number(nvl, "cpid");
+
+	rule->return_icmp = nvlist_get_number(nvl, "return_icmp");
+	rule->return_icmp6 = nvlist_get_number(nvl, "return_icmp6");
+	rule->max_mss = nvlist_get_number(nvl, "max_mss");
+	rule->scrub_flags = nvlist_get_number(nvl, "scrub_flags");
+
+	pf_nvrule_uid_to_rule_uid(nvlist_get_nvlist(nvl, "uid"), &rule->uid);
+	pf_nvrule_uid_to_rule_uid(nvlist_get_nvlist(nvl, "gid"),
+	    (struct pf_rule_uid *)&rule->gid);
+
+	rule->rule_flag = nvlist_get_number(nvl, "rule_flag");
+	rule->action = nvlist_get_number(nvl, "action");
+	rule->direction = nvlist_get_number(nvl, "direction");
+	rule->log = nvlist_get_number(nvl, "log");
+	rule->logif = nvlist_get_number(nvl, "logif");
+	rule->quick = nvlist_get_number(nvl, "quick");
+	rule->ifnot = nvlist_get_number(nvl, "ifnot");
+	rule->match_tag_not = nvlist_get_number(nvl, "match_tag_not");
+	rule->natpass = nvlist_get_number(nvl, "natpass");
+
+	rule->keep_state = nvlist_get_number(nvl, "keep_state");
+	rule->af = nvlist_get_number(nvl, "af");
+	rule->proto = nvlist_get_number(nvl, "proto");
+	rule->type = nvlist_get_number(nvl, "type");
+	rule->code = nvlist_get_number(nvl, "code");
+	rule->flags = nvlist_get_number(nvl, "flags");
+	rule->flagset = nvlist_get_number(nvl, "flagset");
+	rule->min_ttl = nvlist_get_number(nvl, "min_ttl");
+	rule->allow_opts = nvlist_get_number(nvl, "allow_opts");
+	rule->rt = nvlist_get_number(nvl, "rt");
+	rule->return_ttl  = nvlist_get_number(nvl, "return_ttl");
+	rule->tos = nvlist_get_number(nvl, "tos");
+	rule->set_tos = nvlist_get_number(nvl, "set_tos");
+	rule->anchor_relative = nvlist_get_number(nvl, "anchor_relative");
+	rule->anchor_wildcard = nvlist_get_number(nvl, "anchor_wildcard");
+
+	rule->flush = nvlist_get_number(nvl, "flush");
+	rule->prio = nvlist_get_number(nvl, "prio");
+	pf_nvuint_8_array(nvl, "set_prio", 2, rule->set_prio, NULL);
+
+	pf_nvdivert_to_divert(nvlist_get_nvlist(nvl, "divert"), rule);
+
+	rule->u_states_cur = nvlist_get_number(nvl, "states_cur");
+	rule->u_states_tot = nvlist_get_number(nvl, "states_tot");
+	rule->u_src_nodes = nvlist_get_number(nvl, "src_nodes");
+}
+
+
+int
+pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
+    u_int32_t ruleset, struct pf_rule *rule, char *anchor_call)
+{
+	struct pfioc_nv nv;
+	nvlist_t *nvl;
+	void *nvlpacked;
+	int ret;
+
+	nvl = nvlist_create(0);
+	if (nvl == 0)
+		return (ENOMEM);
+
+	nvlist_add_number(nvl, "nr", nr);
+	nvlist_add_number(nvl, "ticket", ticket);
+	nvlist_add_string(nvl, "anchor", anchor);
+	nvlist_add_number(nvl, "ruleset", ruleset);
+
+	nvlpacked = nvlist_pack(nvl, &nv.len);
+	if (nvlpacked == NULL) {
+		nvlist_destroy(nvl);
+		return (ENOMEM);
+	}
+	nv.data = malloc(8182);
+	nv.size = 8192;
+	assert(nv.len <= nv.size);
+	memcpy(nv.data, nvlpacked, nv.len);
+	nvlist_destroy(nvl);
+	nvl = NULL;
+	free(nvlpacked);
+
+	ret = ioctl(dev, DIOCGETRULENV, &nv);
+	if (ret != 0) {
+		free(nv.data);
+		return (ret);
+	}
+
+	nvl = nvlist_unpack(nv.data, nv.len, 0);
+	if (nvl == NULL) {
+		free(nv.data);
+		return (EIO);
+	}
+
+	pf_nvrule_to_rule(nvlist_get_nvlist(nvl, "rule"), rule);
+
+	if (anchor_call)
+		strlcpy(anchor_call, nvlist_get_string(nvl, "anchor_call"),
+		    MAXPATHLEN);
+
+	free(nv.data);
+	nvlist_destroy(nvl);
+
+	return (0);
+}
diff --git a/sbin/pfctl/pfctl_ioctl.h b/sbin/pfctl/pfctl_ioctl.h
new file mode 100644
index 000000000000..41dd0776854a
--- /dev/null
+++ b/sbin/pfctl/pfctl_ioctl.h
@@ -0,0 +1,43 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _PFCTL_IOCTL_H_
+#define _PFCTL_IOCTL_H_
+
+#include <netpfil/pf/pf.h>
+
+int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
+	    char *anchor_call);
+
+#endif
diff --git a/sbin/pfctl/pfctl_optimize.c b/sbin/pfctl/pfctl_optimize.c
index 599ed2424ebf..d3f0aa1bf3a4 100644
--- a/sbin/pfctl/pfctl_optimize.c
+++ b/sbin/pfctl/pfctl_optimize.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 #include <string.h>
 
+#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
@@ -909,8 +910,10 @@ load_feedback_profile(struct pfctl *pf, struct superblocks *superblocks)
 			return (1);
 		}
 		pr.nr = nr;
-		if (ioctl(pf->dev, DIOCGETRULE, &pr)) {
-			warn("DIOCGETRULES");
+
+		if (pfctl_get_rule(pf->dev, nr, pr.ticket, "", PF_PASS,
+		    &pr.rule, pr.anchor_call)) {
+			warn("DIOCGETRULENV");
 			return (1);
 		}
 		memcpy(&por->por_rule, &pr.rule, sizeof(por->por_rule));

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:39 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id ACDAB63114B;
 Fri,  7 May 2021 15:25:39 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmM2NcQz4jbw;
 Fri,  7 May 2021 15:25:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0A2615771;
 Fri,  7 May 2021 15:25:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPc4j026066;
 Fri, 7 May 2021 15:25:38 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPcds026065;
 Fri, 7 May 2021 15:25:38 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:38 GMT
Message-Id: <202105071525.147FPcds026065@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 51a0e7f80dd6 - stable/12 - pfctl: Move to DIOCADDRULENV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 51a0e7f80dd6d5b41015d7a5ec20bceb5a0174cb
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:40 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=51a0e7f80dd6d5b41015d7a5ec20bceb5a0174cb

commit 51a0e7f80dd6d5b41015d7a5ec20bceb5a0174cb
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-12 17:03:14 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:00 +0000

    pfctl: Move to DIOCADDRULENV
    
    Start using the new nvlist based ioctl to add rules.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29558
    
    (cherry picked from commit 5c11c5a3655842a176124ef2334fcdf830422c8a)
---
 sbin/pfctl/Makefile |   2 +-
 sbin/pfctl/pfctl.c  | 217 +++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 207 insertions(+), 12 deletions(-)

diff --git a/sbin/pfctl/Makefile b/sbin/pfctl/Makefile
index 14dc83eb97b0..74cefe6824a4 100644
--- a/sbin/pfctl/Makefile
+++ b/sbin/pfctl/Makefile
@@ -27,7 +27,7 @@ CFLAGS+= -DWITH_INET
 
 YFLAGS=
 
-LIBADD=	m md
+LIBADD=	m md nv
 
 HAS_TESTS=
 SUBDIR.${MK_TESTS}+= tests
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 4e00bf2462a6..58a87a2b8395 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#include <sys/nv.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/endian.h>
@@ -1422,19 +1423,217 @@ pfctl_load_ruleset(struct pfctl *pf, char *path, struct pf_ruleset *rs,
 
 }
 
+static void
+pfctl_nv_add_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_addr *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "addr", addr, sizeof(*addr));
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_addr_wrap(nvlist_t *nvparent, const char *name,
+    const struct pf_addr_wrap *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_number(nvl, "type", addr->type);
+	nvlist_add_number(nvl, "iflags", addr->iflags);
+	nvlist_add_string(nvl, "ifname", addr->v.ifname);
+	nvlist_add_string(nvl, "tblname", addr->v.tblname);
+	pfctl_nv_add_addr(nvl, "addr", &addr->v.a.addr);
+	pfctl_nv_add_addr(nvl, "mask", &addr->v.a.mask);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_rule_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_addr *addr)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr_wrap(nvl, "addr", &addr->addr);
+	ports[0] = addr->port[0];
+	ports[1] = addr->port[1];
+	nvlist_add_number_array(nvl, "port", ports, 2);
+	nvlist_add_number(nvl, "neg", addr->neg);
+	nvlist_add_number(nvl, "port_op", addr->port_op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
+    const struct pf_pool *pool)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
+	pfctl_nv_add_addr(nvl, "counter", &pool->counter);
+	nvlist_add_number(nvl, "tblidx", pool->tblidx);
+
+	ports[0] = pool->proxy_port[0];
+	ports[1] = pool->proxy_port[1];
+	nvlist_add_number_array(nvl, "proxy_port", ports, 2);
+	nvlist_add_number(nvl, "opts", pool->opts);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_uid(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_uid *uid)
+{
+	u_int64_t uids[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	uids[0] = uid->uid[0];
+	uids[1] = uid->uid[1];
+	nvlist_add_number_array(nvl, "uid", uids, 2);
+	nvlist_add_number(nvl, "op", uid->op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static void
+pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
+    const struct pf_rule *r)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr(nvl, "addr", &r->divert.addr);
+	nvlist_add_number(nvl, "port", r->divert.port);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
+static int
+pfctl_addrule(struct pfctl *pf, const struct pf_rule *r, const char *anchor,
+    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
+{
+	struct pfioc_nv nv;
+	u_int64_t timeouts[PFTM_MAX];
+	u_int64_t set_prio[2];
+	nvlist_t *nvl, *nvlr;
+	int ret;
+
+	nvl = nvlist_create(0);
+	nvlr = nvlist_create(0);
+
+	nvlist_add_number(nvl, "ticket", ticket);
+	nvlist_add_number(nvl, "pool_ticket", pool_ticket);
+	nvlist_add_string(nvl, "anchor", anchor);
+	nvlist_add_string(nvl, "anchor_call", anchor_call);
+
+	nvlist_add_number(nvlr, "nr", r->nr);
+	pfctl_nv_add_rule_addr(nvlr, "src", &r->src);
+	pfctl_nv_add_rule_addr(nvlr, "dst", &r->dst);
+
+	nvlist_add_string(nvlr, "label", r->label);
+	nvlist_add_string(nvlr, "ifname", r->ifname);
+	nvlist_add_string(nvlr, "qname", r->qname);
+	nvlist_add_string(nvlr, "pqname", r->pqname);
+	nvlist_add_string(nvlr, "tagname", r->tagname);
+	nvlist_add_string(nvlr, "match_tagname", r->match_tagname);
+	nvlist_add_string(nvlr, "overload_tblname", r->overload_tblname);
+
+	pfctl_nv_add_pool(nvlr, "rpool", &r->rpool);
+
+	nvlist_add_number(nvlr, "os_fingerprint", r->os_fingerprint);
+
+	nvlist_add_number(nvlr, "rtableid", r->rtableid);
+	for (int i = 0; i < PFTM_MAX; i++)
+		timeouts[i] = r->timeout[i];
+	nvlist_add_number_array(nvlr, "timeout", timeouts, PFTM_MAX);
+	nvlist_add_number(nvlr, "max_states", r->max_states);
+	nvlist_add_number(nvlr, "max_src_nodes", r->max_src_nodes);
+	nvlist_add_number(nvlr, "max_src_states", r->max_src_states);
+	nvlist_add_number(nvlr, "max_src_conn", r->max_src_conn);
+	nvlist_add_number(nvlr, "max_src_conn_rate.limit",
+	    r->max_src_conn_rate.limit);
+	nvlist_add_number(nvlr, "max_src_conn_rate.seconds",
+	    r->max_src_conn_rate.seconds);
+	nvlist_add_number(nvlr, "prob", r->prob);
+	nvlist_add_number(nvlr, "cuid", r->cuid);
+	nvlist_add_number(nvlr, "cpid", r->cpid);
+
+	nvlist_add_number(nvlr, "return_icmp", r->return_icmp);
+	nvlist_add_number(nvlr, "return_icmp6", r->return_icmp6);
+
+	nvlist_add_number(nvlr, "max_mss", r->max_mss);
+	nvlist_add_number(nvlr, "scrub_flags", r->scrub_flags);
+
+	pfctl_nv_add_uid(nvlr, "uid", &r->uid);
+	pfctl_nv_add_uid(nvlr, "gid", (struct pf_rule_uid *)&r->gid);
+
+	nvlist_add_number(nvlr, "rule_flag", r->rule_flag);
+	nvlist_add_number(nvlr, "action", r->action);
+	nvlist_add_number(nvlr, "direction", r->direction);
+	nvlist_add_number(nvlr, "log", r->log);
+	nvlist_add_number(nvlr, "logif", r->logif);
+	nvlist_add_number(nvlr, "quick", r->quick);
+	nvlist_add_number(nvlr, "ifnot", r->ifnot);
+	nvlist_add_number(nvlr, "match_tag_not", r->match_tag_not);
+	nvlist_add_number(nvlr, "natpass", r->natpass);
+
+	nvlist_add_number(nvlr, "keep_state", r->keep_state);
+	nvlist_add_number(nvlr, "af", r->af);
+	nvlist_add_number(nvlr, "proto", r->proto);
+	nvlist_add_number(nvlr, "type", r->type);
+	nvlist_add_number(nvlr, "code", r->code);
+	nvlist_add_number(nvlr, "flags", r->flags);
+	nvlist_add_number(nvlr, "flagset", r->flagset);
+	nvlist_add_number(nvlr, "min_ttl", r->min_ttl);
+	nvlist_add_number(nvlr, "allow_opts", r->allow_opts);
+	nvlist_add_number(nvlr, "rt", r->rt);
+	nvlist_add_number(nvlr, "return_ttl", r->return_ttl);
+	nvlist_add_number(nvlr, "tos", r->tos);
+	nvlist_add_number(nvlr, "set_tos", r->set_tos);
+	nvlist_add_number(nvlr, "anchor_relative", r->anchor_relative);
+	nvlist_add_number(nvlr, "anchor_wildcard", r->anchor_wildcard);
+
+	nvlist_add_number(nvlr, "flush", r->flush);
+
+	nvlist_add_number(nvlr, "prio", r->prio);
+	set_prio[0] = r->set_prio[0];
+	set_prio[1] = r->set_prio[1];
+	nvlist_add_number_array(nvlr, "set_prio", set_prio, 2);
+
+	pfctl_nv_add_divert(nvlr, "divert", r);
+
+	nvlist_add_nvlist(nvl, "rule", nvlr);
+
+	/* Now do the call. */
+	nv.data = nvlist_pack(nvl, &nv.len);
+	nv.size = nv.len;
+
+	ret = ioctl(pf->dev, DIOCADDRULENV, &nv);
+
+	free(nv.data);
+	nvlist_destroy(nvl);
+
+	return (ret);
+}
+
 int
 pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 {
 	u_int8_t		rs_num = pf_get_ruleset_number(r->action);
 	char			*name;
-	struct pfioc_rule	pr;
+	u_int32_t		ticket;
+	char			anchor[PF_ANCHOR_NAME_SIZE];
 	int			len = strlen(path);
 
-	bzero(&pr, sizeof(pr));
 	/* set up anchor before adding to path for anchor_call */
 	if ((pf->opts & PF_OPT_NOACTION) == 0)
-		pr.ticket = pfctl_get_ticket(pf->trans, rs_num, path);
-	if (strlcpy(pr.anchor, path, sizeof(pr.anchor)) >= sizeof(pr.anchor))
+		ticket = pfctl_get_ticket(pf->trans, rs_num, path);
+	if (strlcpy(anchor, path, sizeof(anchor)) >= sizeof(anchor))
 		errx(1, "pfctl_load_rule: strlcpy");
 
 	if (r->anchor) {
@@ -1454,13 +1653,9 @@ pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 	if ((pf->opts & PF_OPT_NOACTION) == 0) {
 		if (pfctl_add_pool(pf, &r->rpool, r->af))
 			return (1);
-		pr.pool_ticket = pf->paddr.ticket;
-		memcpy(&pr.rule, r, sizeof(pr.rule));
-		if (r->anchor && strlcpy(pr.anchor_call, name,
-		    sizeof(pr.anchor_call)) >= sizeof(pr.anchor_call))
-			errx(1, "pfctl_load_rule: strlcpy");
-		if (ioctl(pf->dev, DIOCADDRULE, &pr))
-			err(1, "DIOCADDRULE");
+		if (pfctl_addrule(pf, r, anchor, name, ticket,
+		    pf->paddr.ticket))
+			err(1, "DIOCADDRULENV");
 	}
 
 	if (pf->opts & PF_OPT_VERBOSE) {

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:44 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4BDF86310CF;
 Fri,  7 May 2021 15:25:44 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmR3C5cz4jdl;
 Fri,  7 May 2021 15:25:43 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 162DD58EF;
 Fri,  7 May 2021 15:25:43 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPgdZ026219;
 Fri, 7 May 2021 15:25:42 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPgMm026218;
 Fri, 7 May 2021 15:25:42 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:42 GMT
Message-Id: <202105071525.147FPgMm026218@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 3711a144935f - stable/13 - (t)ftp-proxy: use libpfctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 3711a144935f2eee0819dc45e1840ca6737c7b4a
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:44 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=3711a144935f2eee0819dc45e1840ca6737c7b4a

commit 3711a144935f2eee0819dc45e1840ca6737c7b4a
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-29 12:03:39 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    (t)ftp-proxy: use libpfctl
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29641
    
    (cherry picked from commit 95be9288f01f30a50440ea56d11468a2c6e18fed)
---
 contrib/pf/ftp-proxy/filter.c  | 16 +++++++++++-----
 contrib/pf/tftp-proxy/filter.c | 10 +++++++---
 libexec/tftp-proxy/Makefile    |  3 +++
 usr.sbin/ftp-proxy/Makefile    |  3 ++-
 4 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/contrib/pf/ftp-proxy/filter.c b/contrib/pf/ftp-proxy/filter.c
index f575db1c69cc..db3735565dac 100644
--- a/contrib/pf/ftp-proxy/filter.c
+++ b/contrib/pf/ftp-proxy/filter.c
@@ -28,6 +28,7 @@
 
 #include <err.h>
 #include <errno.h>
+#include <libpfctl.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
@@ -68,7 +69,8 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 		return (-1);
 
 	pfr.rule.direction = dir;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -97,12 +99,14 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(nat)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	pfr.rule.rpool.proxy_port[0] = nat_range_low;
 	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -130,11 +134,13 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(rdr)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
diff --git a/contrib/pf/tftp-proxy/filter.c b/contrib/pf/tftp-proxy/filter.c
index e5a769a62a54..0b87d568809f 100644
--- a/contrib/pf/tftp-proxy/filter.c
+++ b/contrib/pf/tftp-proxy/filter.c
@@ -32,6 +32,7 @@
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <libpfctl.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -72,7 +73,8 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 		return (-1);
 
 	pfr.rule.direction = dir;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -106,7 +108,8 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 
 	pfr.rule.rpool.proxy_port[0] = nat_range_low;
 	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -138,7 +141,8 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		return (-1);
 
 	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
diff --git a/libexec/tftp-proxy/Makefile b/libexec/tftp-proxy/Makefile
index 596ca26cb61c..353e72007734 100644
--- a/libexec/tftp-proxy/Makefile
+++ b/libexec/tftp-proxy/Makefile
@@ -6,6 +6,9 @@ PROG=	tftp-proxy
 SRCS=	tftp-proxy.c filter.c
 MAN=	tftp-proxy.8
 
+CFLAGS+= -I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
+LIBADD= pfctl
+
 WARNS?=	3
 
 .include <bsd.prog.mk>
diff --git a/usr.sbin/ftp-proxy/Makefile b/usr.sbin/ftp-proxy/Makefile
index 7d05aa9bf624..768901f99131 100644
--- a/usr.sbin/ftp-proxy/Makefile
+++ b/usr.sbin/ftp-proxy/Makefile
@@ -8,8 +8,9 @@ MAN=	ftp-proxy.8
 SRCS=	ftp-proxy.c filter.c
 
 CFLAGS+=-I${SRCTOP}/contrib/pf/libevent
+CFLAGS+= -I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
 
-LIBADD=	event1
+LIBADD=	event1 pfctl
 
 WARNS?=	3
 

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3192E631360;
 Fri,  7 May 2021 15:25:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmP001pz4k1t;
 Fri,  7 May 2021 15:25:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CCDFD58ED;
 Fri,  7 May 2021 15:25:40 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPem5026129;
 Fri, 7 May 2021 15:25:40 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPeeB026128;
 Fri, 7 May 2021 15:25:40 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:40 GMT
Message-Id: <202105071525.147FPeeB026128@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 259e52433f0a - stable/13 - libnv: Build PIC
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 259e52433f0afd6fecbe28b4ed26fd5524f6566d
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:41 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=259e52433f0afd6fecbe28b4ed26fd5524f6566d

commit 259e52433f0afd6fecbe28b4ed26fd5524f6566d
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-02 15:06:02 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:41 +0000

    libnv: Build PIC
    
    Build libnv as position independent code so we can use it from shared
    libraries.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29561
    
    (cherry picked from commit 0dd13c77432ade1ae94c9661cbad5537e3e6ab1d)
---
 lib/libnv/Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/libnv/Makefile b/lib/libnv/Makefile
index b13758931c4e..854cd2c7f3f3 100644
--- a/lib/libnv/Makefile
+++ b/lib/libnv/Makefile
@@ -10,6 +10,7 @@ SHLIB_MAJOR= 0
 
 .PATH: ${SRCTOP}/sys/contrib/libnv ${SRCTOP}/sys/sys
 CFLAGS+=-I${.CURDIR}
+CFLAGS+=-fPIC
 
 SRCS=	cnvlist.c
 SRCS+=	dnvlist.c

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:42 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5E353631391;
 Fri,  7 May 2021 15:25:42 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmN24nwz4k1m;
 Fri,  7 May 2021 15:25:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B7C0D5ACF;
 Fri,  7 May 2021 15:25:39 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPdrU026087;
 Fri, 7 May 2021 15:25:39 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPd3W026086;
 Fri, 7 May 2021 15:25:39 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:39 GMT
Message-Id: <202105071525.147FPd3W026086@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: ad208b077153 - stable/13 - pfctl: Use the new DIOCGETRULENV ioctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: ad208b0771531b8d190e55f96dd987de6d18d3f8
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:42 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=ad208b0771531b8d190e55f96dd987de6d18d3f8

commit ad208b0771531b8d190e55f96dd987de6d18d3f8
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-26 10:22:15 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:41 +0000

    pfctl: Use the new DIOCGETRULENV ioctl
    
    Create wrapper functions to handle the parsing of the nvlist and move
    that code into pfctl_ioctl.c.
    At some point this should be moved into a libpfctl.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29560
    
    (cherry picked from commit 0d6c8174ef2f3d8d6fb02ec97753a0937796a5c6)
---
 sbin/pfctl/Makefile         |   2 +-
 sbin/pfctl/pfctl.c          |  12 +-
 sbin/pfctl/pfctl_ioctl.c    | 339 ++++++++++++++++++++++++++++++++++++++++++++
 sbin/pfctl/pfctl_ioctl.h    |  43 ++++++
 sbin/pfctl/pfctl_optimize.c |   7 +-
 5 files changed, 396 insertions(+), 7 deletions(-)

diff --git a/sbin/pfctl/Makefile b/sbin/pfctl/Makefile
index 74cefe6824a4..c84d558c989d 100644
--- a/sbin/pfctl/Makefile
+++ b/sbin/pfctl/Makefile
@@ -9,7 +9,7 @@ MAN=	pfctl.8
 
 SRCS = pfctl.c parse.y pfctl_parser.c pf_print_state.c pfctl_altq.c
 SRCS+= pfctl_osfp.c pfctl_radix.c pfctl_table.c pfctl_qstats.c
-SRCS+= pfctl_optimize.c
+SRCS+= pfctl_optimize.c pfctl_ioctl.c
 SRCS+= pf_ruleset.c
 
 WARNS?=	2
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 58a87a2b8395..1aa17065597b 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <unistd.h>
 
+#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
@@ -952,8 +953,9 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (ioctl(dev, DIOCGETRULE, &pr)) {
-			warn("DIOCGETRULE");
+		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_SCRUB,
+		    &pr.rule, pr.anchor_call)) {
+			warn("DIOCGETRULENV");
 			goto error;
 		}
 
@@ -984,7 +986,8 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 	mnr = pr.nr;
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (ioctl(dev, DIOCGETRULE, &pr)) {
+		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_PASS,
+		    &pr.rule, pr.anchor_call)) {
 			warn("DIOCGETRULE");
 			goto error;
 		}
@@ -1074,7 +1077,8 @@ pfctl_show_nat(int dev, int opts, char *anchorname)
 		mnr = pr.nr;
 		for (nr = 0; nr < mnr; ++nr) {
 			pr.nr = nr;
-			if (ioctl(dev, DIOCGETRULE, &pr)) {
+			if (pfctl_get_rule(dev, nr, pr.ticket, anchorname,
+			    nattype[i], &pr.rule, pr.anchor_call)) {
 				warn("DIOCGETRULE");
 				return (-1);
 			}
diff --git a/sbin/pfctl/pfctl_ioctl.c b/sbin/pfctl/pfctl_ioctl.c
new file mode 100644
index 000000000000..878a57de0fe4
--- /dev/null
+++ b/sbin/pfctl/pfctl_ioctl.c
@@ -0,0 +1,339 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/cdefs.h>
+
+#include <sys/ioctl.h>
+#include <sys/nv.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+
+#include <net/if.h>
+#include <net/pfvar.h>
+#include <netinet/in.h>
+
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pfctl_ioctl.h"
+
+static void
+pf_nvuint_8_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int8_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvuint_16_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int16_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvuint_32_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int32_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvuint_64_array(const nvlist_t *nvl, const char *name, size_t maxelems,
+    u_int64_t *numbers, size_t *nelems)
+{
+	const uint64_t *tmp;
+	size_t elems;
+
+	tmp = nvlist_get_number_array(nvl, name, &elems);
+	assert(elems <= maxelems);
+
+	for (size_t i = 0; i < elems; i++)
+		numbers[i] = tmp[i];
+
+	if (nelems)
+		*nelems = elems;
+}
+
+static void
+pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *addr)
+{
+	size_t len;
+	const void *data;
+
+	data = nvlist_get_binary(nvl, "addr", &len);
+	assert(len == sizeof(struct pf_addr));
+	memcpy(addr, data, len);
+}
+
+static void
+pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
+{
+	addr->type = nvlist_get_number(nvl, "type");
+	addr->iflags = nvlist_get_number(nvl, "iflags");
+	strlcpy(addr->v.ifname, nvlist_get_string(nvl, "ifname"), IFNAMSIZ);
+	strlcpy(addr->v.tblname, nvlist_get_string(nvl, "tblname"),
+	    PF_TABLE_NAME_SIZE);
+
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"), &addr->v.a.addr);
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "mask"), &addr->v.a.mask);
+}
+
+static void
+pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
+{
+	pf_nvaddr_wrap_to_addr_wrap(nvlist_get_nvlist(nvl, "addr"), &addr->addr);
+
+	pf_nvuint_16_array(nvl, "port", 2, addr->port, NULL);
+	addr->neg = nvlist_get_number(nvl, "neg");
+	addr->port_op = nvlist_get_number(nvl, "port_op");
+}
+
+static void
+pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
+{
+	size_t len;
+	const void *data;
+
+	data = nvlist_get_binary(nvl, "key", &len);
+	assert(len == sizeof(pool->key));
+	memcpy(&pool->key, data, len);
+
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "counter"), &pool->counter);
+
+	pool->tblidx = nvlist_get_number(nvl, "tblidx");
+	pf_nvuint_16_array(nvl, "proxy_port", 2, pool->proxy_port, NULL);
+	pool->opts = nvlist_get_number(nvl, "opts");
+}
+
+static void
+pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
+{
+	pf_nvuint_32_array(nvl, "uid", 2, uid->uid, NULL);
+	uid->op = nvlist_get_number(nvl, "op");
+}
+
+static void
+pf_nvdivert_to_divert(const nvlist_t *nvl, struct pf_rule *rule)
+{
+	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"), &rule->divert.addr);
+	rule->divert.port = nvlist_get_number(nvl, "port");
+}
+
+static void
+pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
+{
+	const uint64_t *skip;
+	size_t skipcount;
+
+	rule->nr = nvlist_get_number(nvl, "nr");
+
+	pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "src"), &rule->src);
+	pf_nvrule_addr_to_rule_addr(nvlist_get_nvlist(nvl, "dst"), &rule->dst);
+
+	skip = nvlist_get_number_array(nvl, "skip", &skipcount);
+	assert(skip);
+	assert(skipcount == PF_SKIP_COUNT);
+	for (int i = 0; i < PF_SKIP_COUNT; i++)
+		rule->skip[i].nr = skip[i];
+
+	strlcpy(rule->label, nvlist_get_string(nvl, "label"), PF_RULE_LABEL_SIZE);
+	strlcpy(rule->ifname, nvlist_get_string(nvl, "ifname"), IFNAMSIZ);
+	strlcpy(rule->qname, nvlist_get_string(nvl, "qname"), PF_QNAME_SIZE);
+	strlcpy(rule->pqname, nvlist_get_string(nvl, "pqname"), PF_QNAME_SIZE);
+	strlcpy(rule->tagname, nvlist_get_string(nvl, "tagname"),
+	    PF_TAG_NAME_SIZE);
+	strlcpy(rule->match_tagname, nvlist_get_string(nvl, "match_tagname"),
+	    PF_TAG_NAME_SIZE);
+
+	strlcpy(rule->overload_tblname, nvlist_get_string(nvl, "overload_tblname"),
+	    PF_TABLE_NAME_SIZE);
+
+	pf_nvpool_to_pool(nvlist_get_nvlist(nvl, "rpool"), &rule->rpool);
+
+	rule->evaluations = nvlist_get_number(nvl, "evaluations");
+	pf_nvuint_64_array(nvl, "packets", 2, rule->packets, NULL);
+	pf_nvuint_64_array(nvl, "bytes", 2, rule->bytes, NULL);
+
+	rule->os_fingerprint = nvlist_get_number(nvl, "os_fingerprint");
+
+	rule->rtableid = nvlist_get_number(nvl, "rtableid");
+	pf_nvuint_32_array(nvl, "timeout", PFTM_MAX, rule->timeout, NULL);
+	rule->max_states = nvlist_get_number(nvl, "max_states");
+	rule->max_src_nodes = nvlist_get_number(nvl, "max_src_nodes");
+	rule->max_src_states = nvlist_get_number(nvl, "max_src_states");
+	rule->max_src_conn = nvlist_get_number(nvl, "max_src_conn");
+	rule->max_src_conn_rate.limit =
+	    nvlist_get_number(nvl, "max_src_conn_rate.limit");
+	rule->max_src_conn_rate.seconds =
+	    nvlist_get_number(nvl, "max_src_conn_rate.seconds");
+	rule->qid = nvlist_get_number(nvl, "qid");
+	rule->pqid = nvlist_get_number(nvl, "pqid");
+	rule->prob = nvlist_get_number(nvl, "prob");
+	rule->cuid = nvlist_get_number(nvl, "cuid");
+	rule->cpid = nvlist_get_number(nvl, "cpid");
+
+	rule->return_icmp = nvlist_get_number(nvl, "return_icmp");
+	rule->return_icmp6 = nvlist_get_number(nvl, "return_icmp6");
+	rule->max_mss = nvlist_get_number(nvl, "max_mss");
+	rule->scrub_flags = nvlist_get_number(nvl, "scrub_flags");
+
+	pf_nvrule_uid_to_rule_uid(nvlist_get_nvlist(nvl, "uid"), &rule->uid);
+	pf_nvrule_uid_to_rule_uid(nvlist_get_nvlist(nvl, "gid"),
+	    (struct pf_rule_uid *)&rule->gid);
+
+	rule->rule_flag = nvlist_get_number(nvl, "rule_flag");
+	rule->action = nvlist_get_number(nvl, "action");
+	rule->direction = nvlist_get_number(nvl, "direction");
+	rule->log = nvlist_get_number(nvl, "log");
+	rule->logif = nvlist_get_number(nvl, "logif");
+	rule->quick = nvlist_get_number(nvl, "quick");
+	rule->ifnot = nvlist_get_number(nvl, "ifnot");
+	rule->match_tag_not = nvlist_get_number(nvl, "match_tag_not");
+	rule->natpass = nvlist_get_number(nvl, "natpass");
+
+	rule->keep_state = nvlist_get_number(nvl, "keep_state");
+	rule->af = nvlist_get_number(nvl, "af");
+	rule->proto = nvlist_get_number(nvl, "proto");
+	rule->type = nvlist_get_number(nvl, "type");
+	rule->code = nvlist_get_number(nvl, "code");
+	rule->flags = nvlist_get_number(nvl, "flags");
+	rule->flagset = nvlist_get_number(nvl, "flagset");
+	rule->min_ttl = nvlist_get_number(nvl, "min_ttl");
+	rule->allow_opts = nvlist_get_number(nvl, "allow_opts");
+	rule->rt = nvlist_get_number(nvl, "rt");
+	rule->return_ttl  = nvlist_get_number(nvl, "return_ttl");
+	rule->tos = nvlist_get_number(nvl, "tos");
+	rule->set_tos = nvlist_get_number(nvl, "set_tos");
+	rule->anchor_relative = nvlist_get_number(nvl, "anchor_relative");
+	rule->anchor_wildcard = nvlist_get_number(nvl, "anchor_wildcard");
+
+	rule->flush = nvlist_get_number(nvl, "flush");
+	rule->prio = nvlist_get_number(nvl, "prio");
+	pf_nvuint_8_array(nvl, "set_prio", 2, rule->set_prio, NULL);
+
+	pf_nvdivert_to_divert(nvlist_get_nvlist(nvl, "divert"), rule);
+
+	rule->u_states_cur = nvlist_get_number(nvl, "states_cur");
+	rule->u_states_tot = nvlist_get_number(nvl, "states_tot");
+	rule->u_src_nodes = nvlist_get_number(nvl, "src_nodes");
+}
+
+
+int
+pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
+    u_int32_t ruleset, struct pf_rule *rule, char *anchor_call)
+{
+	struct pfioc_nv nv;
+	nvlist_t *nvl;
+	void *nvlpacked;
+	int ret;
+
+	nvl = nvlist_create(0);
+	if (nvl == 0)
+		return (ENOMEM);
+
+	nvlist_add_number(nvl, "nr", nr);
+	nvlist_add_number(nvl, "ticket", ticket);
+	nvlist_add_string(nvl, "anchor", anchor);
+	nvlist_add_number(nvl, "ruleset", ruleset);
+
+	nvlpacked = nvlist_pack(nvl, &nv.len);
+	if (nvlpacked == NULL) {
+		nvlist_destroy(nvl);
+		return (ENOMEM);
+	}
+	nv.data = malloc(8182);
+	nv.size = 8192;
+	assert(nv.len <= nv.size);
+	memcpy(nv.data, nvlpacked, nv.len);
+	nvlist_destroy(nvl);
+	nvl = NULL;
+	free(nvlpacked);
+
+	ret = ioctl(dev, DIOCGETRULENV, &nv);
+	if (ret != 0) {
+		free(nv.data);
+		return (ret);
+	}
+
+	nvl = nvlist_unpack(nv.data, nv.len, 0);
+	if (nvl == NULL) {
+		free(nv.data);
+		return (EIO);
+	}
+
+	pf_nvrule_to_rule(nvlist_get_nvlist(nvl, "rule"), rule);
+
+	if (anchor_call)
+		strlcpy(anchor_call, nvlist_get_string(nvl, "anchor_call"),
+		    MAXPATHLEN);
+
+	free(nv.data);
+	nvlist_destroy(nvl);
+
+	return (0);
+}
diff --git a/sbin/pfctl/pfctl_ioctl.h b/sbin/pfctl/pfctl_ioctl.h
new file mode 100644
index 000000000000..41dd0776854a
--- /dev/null
+++ b/sbin/pfctl/pfctl_ioctl.h
@@ -0,0 +1,43 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _PFCTL_IOCTL_H_
+#define _PFCTL_IOCTL_H_
+
+#include <netpfil/pf/pf.h>
+
+int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
+	    char *anchor_call);
+
+#endif
diff --git a/sbin/pfctl/pfctl_optimize.c b/sbin/pfctl/pfctl_optimize.c
index 599ed2424ebf..d3f0aa1bf3a4 100644
--- a/sbin/pfctl/pfctl_optimize.c
+++ b/sbin/pfctl/pfctl_optimize.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 #include <string.h>
 
+#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
@@ -909,8 +910,10 @@ load_feedback_profile(struct pfctl *pf, struct superblocks *superblocks)
 			return (1);
 		}
 		pr.nr = nr;
-		if (ioctl(pf->dev, DIOCGETRULE, &pr)) {
-			warn("DIOCGETRULES");
+
+		if (pfctl_get_rule(pf->dev, nr, pr.ticket, "", PF_PASS,
+		    &pr.rule, pr.anchor_call)) {
+			warn("DIOCGETRULENV");
 			return (1);
 		}
 		memcpy(&por->por_rule, &pr.rule, sizeof(por->por_rule));

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:43 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1C066631396;
 Fri,  7 May 2021 15:25:43 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmQ2dm4z4k3l;
 Fri,  7 May 2021 15:25:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DCC575DBB;
 Fri,  7 May 2021 15:25:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPf3r026171;
 Fri, 7 May 2021 15:25:41 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPfEp026170;
 Fri, 7 May 2021 15:25:41 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:41 GMT
Message-Id: <202105071525.147FPfEp026170@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 0da554e4b60a - stable/13 - pfctl: Move ioctl abstraction
 functions into libpfctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 0da554e4b60a74340896cc4292bebd97b59e3685
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:43 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=0da554e4b60a74340896cc4292bebd97b59e3685

commit 0da554e4b60a74340896cc4292bebd97b59e3685
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-26 10:38:58 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    pfctl: Move ioctl abstraction functions into libpfctl
    
    Introduce a library to wrap the pf ioctl interface.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29562
    
    (cherry picked from commit 0d71f9f36e6c1849fdaf6c1edc1178be07357034)
---
 lib/Makefile                                       |   1 +
 lib/libpfctl/Makefile                              |  12 ++
 .../pfctl/pfctl_ioctl.c => lib/libpfctl/libpfctl.c | 199 ++++++++++++++++++-
 lib/libpfctl/libpfctl.h                            |  45 +++++
 sbin/pfctl/Makefile                                |   5 +-
 sbin/pfctl/parse.y                                 |   6 +-
 sbin/pfctl/pfctl.c                                 | 212 +--------------------
 sbin/pfctl/pfctl_ioctl.h                           |  43 -----
 sbin/pfctl/pfctl_optimize.c                        |   2 +-
 sbin/pfctl/pfctl_parser.h                          |   2 +-
 share/mk/src.libnames.mk                           |   5 +
 11 files changed, 276 insertions(+), 256 deletions(-)

diff --git a/lib/Makefile b/lib/Makefile
index 90f1f7f3cd73..35cba77d7d06 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -210,6 +210,7 @@ SUBDIR.${MK_BHYVE}+=	libvmmapi
 SUBDIR.${MK_OPENMP}+=	libomp
 .endif
 SUBDIR.${MK_OPENSSL}+=	libmp
+SUBDIR.${MK_PF}+=	libpfctl
 SUBDIR.${MK_PMC}+=	libpmc libpmcstat
 SUBDIR.${MK_RADIUS_SUPPORT}+=	libradius
 SUBDIR.${MK_SENDMAIL}+=	libmilter libsm libsmdb libsmutil
diff --git a/lib/libpfctl/Makefile b/lib/libpfctl/Makefile
new file mode 100644
index 000000000000..d7a00a94b349
--- /dev/null
+++ b/lib/libpfctl/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+PACKAGE=	lib${LIB}
+LIB=		pfctl
+INTERNALLIB=	true
+
+SRCS=	libpfctl.c
+INCS=	libpfctl.h
+
+CFLAGS+=	-fPIC
+
+.include <bsd.lib.mk>
diff --git a/sbin/pfctl/pfctl_ioctl.c b/lib/libpfctl/libpfctl.c
similarity index 62%
rename from sbin/pfctl/pfctl_ioctl.c
rename to lib/libpfctl/libpfctl.c
index 878a57de0fe4..e0d429112f5b 100644
--- a/sbin/pfctl/pfctl_ioctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -48,7 +48,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "pfctl_ioctl.h"
+#include "libpfctl.h"
 
 static void
 pf_nvuint_8_array(const nvlist_t *nvl, const char *name, size_t maxelems,
@@ -118,6 +118,17 @@ pf_nvuint_64_array(const nvlist_t *nvl, const char *name, size_t maxelems,
 		*nelems = elems;
 }
 
+static void
+pfctl_nv_add_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_addr *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "addr", addr, sizeof(*addr));
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *addr)
 {
@@ -129,6 +140,22 @@ pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *addr)
 	memcpy(addr, data, len);
 }
 
+static void
+pfctl_nv_add_addr_wrap(nvlist_t *nvparent, const char *name,
+    const struct pf_addr_wrap *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_number(nvl, "type", addr->type);
+	nvlist_add_number(nvl, "iflags", addr->iflags);
+	nvlist_add_string(nvl, "ifname", addr->v.ifname);
+	nvlist_add_string(nvl, "tblname", addr->v.tblname);
+	pfctl_nv_add_addr(nvl, "addr", &addr->v.a.addr);
+	pfctl_nv_add_addr(nvl, "mask", &addr->v.a.mask);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
 {
@@ -142,6 +169,23 @@ pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
 	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "mask"), &addr->v.a.mask);
 }
 
+static void
+pfctl_nv_add_rule_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_addr *addr)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr_wrap(nvl, "addr", &addr->addr);
+	ports[0] = addr->port[0];
+	ports[1] = addr->port[1];
+	nvlist_add_number_array(nvl, "port", ports, 2);
+	nvlist_add_number(nvl, "neg", addr->neg);
+	nvlist_add_number(nvl, "port_op", addr->port_op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
 {
@@ -152,6 +196,25 @@ pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
 	addr->port_op = nvlist_get_number(nvl, "port_op");
 }
 
+static void
+pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
+    const struct pf_pool *pool)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
+	pfctl_nv_add_addr(nvl, "counter", &pool->counter);
+	nvlist_add_number(nvl, "tblidx", pool->tblidx);
+
+	ports[0] = pool->proxy_port[0];
+	ports[1] = pool->proxy_port[1];
+	nvlist_add_number_array(nvl, "proxy_port", ports, 2);
+	nvlist_add_number(nvl, "opts", pool->opts);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
 {
@@ -169,6 +232,21 @@ pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
 	pool->opts = nvlist_get_number(nvl, "opts");
 }
 
+static void
+pfctl_nv_add_uid(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_uid *uid)
+{
+	u_int64_t uids[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	uids[0] = uid->uid[0];
+	uids[1] = uid->uid[1];
+	nvlist_add_number_array(nvl, "uid", uids, 2);
+	nvlist_add_number(nvl, "op", uid->op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 {
@@ -176,6 +254,18 @@ pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 	uid->op = nvlist_get_number(nvl, "op");
 }
 
+static void
+pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
+    const struct pf_rule *r)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr(nvl, "addr", &r->divert.addr);
+	nvlist_add_number(nvl, "port", r->divert.port);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvdivert_to_divert(const nvlist_t *nvl, struct pf_rule *rule)
 {
@@ -282,6 +372,113 @@ pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
 	rule->u_src_nodes = nvlist_get_number(nvl, "src_nodes");
 }
 
+int
+pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
+    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
+{
+	struct pfioc_nv nv;
+	u_int64_t timeouts[PFTM_MAX];
+	u_int64_t set_prio[2];
+	nvlist_t *nvl, *nvlr;
+	int ret;
+
+	nvl = nvlist_create(0);
+	nvlr = nvlist_create(0);
+
+	nvlist_add_number(nvl, "ticket", ticket);
+	nvlist_add_number(nvl, "pool_ticket", pool_ticket);
+	nvlist_add_string(nvl, "anchor", anchor);
+	nvlist_add_string(nvl, "anchor_call", anchor_call);
+
+	nvlist_add_number(nvlr, "nr", r->nr);
+	pfctl_nv_add_rule_addr(nvlr, "src", &r->src);
+	pfctl_nv_add_rule_addr(nvlr, "dst", &r->dst);
+
+	nvlist_add_string(nvlr, "label", r->label);
+	nvlist_add_string(nvlr, "ifname", r->ifname);
+	nvlist_add_string(nvlr, "qname", r->qname);
+	nvlist_add_string(nvlr, "pqname", r->pqname);
+	nvlist_add_string(nvlr, "tagname", r->tagname);
+	nvlist_add_string(nvlr, "match_tagname", r->match_tagname);
+	nvlist_add_string(nvlr, "overload_tblname", r->overload_tblname);
+
+	pfctl_nv_add_pool(nvlr, "rpool", &r->rpool);
+
+	nvlist_add_number(nvlr, "os_fingerprint", r->os_fingerprint);
+
+	nvlist_add_number(nvlr, "rtableid", r->rtableid);
+	for (int i = 0; i < PFTM_MAX; i++)
+		timeouts[i] = r->timeout[i];
+	nvlist_add_number_array(nvlr, "timeout", timeouts, PFTM_MAX);
+	nvlist_add_number(nvlr, "max_states", r->max_states);
+	nvlist_add_number(nvlr, "max_src_nodes", r->max_src_nodes);
+	nvlist_add_number(nvlr, "max_src_states", r->max_src_states);
+	nvlist_add_number(nvlr, "max_src_conn", r->max_src_conn);
+	nvlist_add_number(nvlr, "max_src_conn_rate.limit",
+	    r->max_src_conn_rate.limit);
+	nvlist_add_number(nvlr, "max_src_conn_rate.seconds",
+	    r->max_src_conn_rate.seconds);
+	nvlist_add_number(nvlr, "prob", r->prob);
+	nvlist_add_number(nvlr, "cuid", r->cuid);
+	nvlist_add_number(nvlr, "cpid", r->cpid);
+
+	nvlist_add_number(nvlr, "return_icmp", r->return_icmp);
+	nvlist_add_number(nvlr, "return_icmp6", r->return_icmp6);
+
+	nvlist_add_number(nvlr, "max_mss", r->max_mss);
+	nvlist_add_number(nvlr, "scrub_flags", r->scrub_flags);
+
+	pfctl_nv_add_uid(nvlr, "uid", &r->uid);
+	pfctl_nv_add_uid(nvlr, "gid", (const struct pf_rule_uid *)&r->gid);
+
+	nvlist_add_number(nvlr, "rule_flag", r->rule_flag);
+	nvlist_add_number(nvlr, "action", r->action);
+	nvlist_add_number(nvlr, "direction", r->direction);
+	nvlist_add_number(nvlr, "log", r->log);
+	nvlist_add_number(nvlr, "logif", r->logif);
+	nvlist_add_number(nvlr, "quick", r->quick);
+	nvlist_add_number(nvlr, "ifnot", r->ifnot);
+	nvlist_add_number(nvlr, "match_tag_not", r->match_tag_not);
+	nvlist_add_number(nvlr, "natpass", r->natpass);
+
+	nvlist_add_number(nvlr, "keep_state", r->keep_state);
+	nvlist_add_number(nvlr, "af", r->af);
+	nvlist_add_number(nvlr, "proto", r->proto);
+	nvlist_add_number(nvlr, "type", r->type);
+	nvlist_add_number(nvlr, "code", r->code);
+	nvlist_add_number(nvlr, "flags", r->flags);
+	nvlist_add_number(nvlr, "flagset", r->flagset);
+	nvlist_add_number(nvlr, "min_ttl", r->min_ttl);
+	nvlist_add_number(nvlr, "allow_opts", r->allow_opts);
+	nvlist_add_number(nvlr, "rt", r->rt);
+	nvlist_add_number(nvlr, "return_ttl", r->return_ttl);
+	nvlist_add_number(nvlr, "tos", r->tos);
+	nvlist_add_number(nvlr, "set_tos", r->set_tos);
+	nvlist_add_number(nvlr, "anchor_relative", r->anchor_relative);
+	nvlist_add_number(nvlr, "anchor_wildcard", r->anchor_wildcard);
+
+	nvlist_add_number(nvlr, "flush", r->flush);
+
+	nvlist_add_number(nvlr, "prio", r->prio);
+	set_prio[0] = r->set_prio[0];
+	set_prio[1] = r->set_prio[1];
+	nvlist_add_number_array(nvlr, "set_prio", set_prio, 2);
+
+	pfctl_nv_add_divert(nvlr, "divert", r);
+
+	nvlist_add_nvlist(nvl, "rule", nvlr);
+
+	/* Now do the call. */
+	nv.data = nvlist_pack(nvl, &nv.len);
+	nv.size = nv.len;
+
+	ret = ioctl(dev, DIOCADDRULENV, &nv);
+
+	free(nv.data);
+	nvlist_destroy(nvl);
+
+	return (ret);
+}
 
 int
 pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
new file mode 100644
index 000000000000..65ff2179f23d
--- /dev/null
+++ b/lib/libpfctl/libpfctl.h
@@ -0,0 +1,45 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _PFCTL_IOCTL_H_
+#define _PFCTL_IOCTL_H_
+
+#include <netpfil/pf/pf.h>
+
+int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
+	    char *anchor_call);
+int	pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
+	    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket);
+
+#endif
diff --git a/sbin/pfctl/Makefile b/sbin/pfctl/Makefile
index c84d558c989d..49bdfb9e3733 100644
--- a/sbin/pfctl/Makefile
+++ b/sbin/pfctl/Makefile
@@ -9,13 +9,14 @@ MAN=	pfctl.8
 
 SRCS = pfctl.c parse.y pfctl_parser.c pf_print_state.c pfctl_altq.c
 SRCS+= pfctl_osfp.c pfctl_radix.c pfctl_table.c pfctl_qstats.c
-SRCS+= pfctl_optimize.c pfctl_ioctl.c
+SRCS+= pfctl_optimize.c
 SRCS+= pf_ruleset.c
 
 WARNS?=	2
 CFLAGS+= -Wall -Wmissing-prototypes -Wno-uninitialized
 CFLAGS+= -Wstrict-prototypes
 CFLAGS+= -DENABLE_ALTQ -I${.CURDIR}
+CFLAGS+= -I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
 
 # Need to use "WITH_" prefix to not conflict with the l/y INET/INET6 keywords
 .if ${MK_INET6_SUPPORT} != "no"
@@ -27,7 +28,7 @@ CFLAGS+= -DWITH_INET
 
 YFLAGS=
 
-LIBADD=	m md nv
+LIBADD=	m md pfctl
 
 HAS_TESTS=
 SUBDIR.${MK_TESTS}+= tests
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index 9db85538feaf..89e421e6b5ad 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -1040,7 +1040,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			decide_address_family($6.src.host, &r.af);
 			decide_address_family($6.dst.host, &r.af);
 
-			pfctl_add_rule(pf, &r, $2);
+			pfctl_append_rule(pf, &r, $2);
 			free($2);
 		}
 		;
@@ -4390,7 +4390,7 @@ binatrule	: no BINAT natpasslog interface af proto FROM ipspec toipspec tag
 				free($13);
 			}
 
-			pfctl_add_rule(pf, &binat, "");
+			pfctl_append_rule(pf, &binat, "");
 		}
 		;
 
@@ -5407,7 +5407,7 @@ expand_rule(struct pf_rule *r,
 			yyerror("skipping rule due to errors");
 		else {
 			r->nr = pf->astack[pf->asd]->match++;
-			pfctl_add_rule(pf, r, anchor_call);
+			pfctl_append_rule(pf, r, anchor_call);
 			added++;
 		}
 
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 1aa17065597b..fde9d61260ef 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$");
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <libpfctl.h>
 #include <limits.h>
 #include <netdb.h>
 #include <stdint.h>
@@ -63,7 +64,6 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <unistd.h>
 
-#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
@@ -1291,7 +1291,7 @@ pfctl_add_pool(struct pfctl *pf, struct pf_pool *p, sa_family_t af)
 }
 
 int
-pfctl_add_rule(struct pfctl *pf, struct pf_rule *r, const char *anchor_call)
+pfctl_append_rule(struct pfctl *pf, struct pf_rule *r, const char *anchor_call)
 {
 	u_int8_t		rs_num;
 	struct pf_rule		*rule;
@@ -1309,22 +1309,22 @@ pfctl_add_rule(struct pfctl *pf, struct pf_rule *r, const char *anchor_call)
 		 * Don't make non-brace anchors part of the main anchor pool.
 		 */
 		if ((r->anchor = calloc(1, sizeof(*r->anchor))) == NULL)
-			err(1, "pfctl_add_rule: calloc");
+			err(1, "pfctl_append_rule: calloc");
 		
 		pf_init_ruleset(&r->anchor->ruleset);
 		r->anchor->ruleset.anchor = r->anchor;
 		if (strlcpy(r->anchor->path, anchor_call,
 		    sizeof(rule->anchor->path)) >= sizeof(rule->anchor->path))
-			errx(1, "pfctl_add_rule: strlcpy");
+			errx(1, "pfctl_append_rule: strlcpy");
 		if ((p = strrchr(anchor_call, '/')) != NULL) {
 			if (!strlen(p))
-				err(1, "pfctl_add_rule: bad anchor name %s",
+				err(1, "pfctl_append_rule: bad anchor name %s",
 				    anchor_call);
 		} else
 			p = (char *)anchor_call;
 		if (strlcpy(r->anchor->name, p,
 		    sizeof(rule->anchor->name)) >= sizeof(rule->anchor->name))
-			errx(1, "pfctl_add_rule: strlcpy");
+			errx(1, "pfctl_append_rule: strlcpy");
 	}
 
 	if ((rule = calloc(1, sizeof(*rule))) == NULL)
@@ -1427,204 +1427,6 @@ pfctl_load_ruleset(struct pfctl *pf, char *path, struct pf_ruleset *rs,
 
 }
 
-static void
-pfctl_nv_add_addr(nvlist_t *nvparent, const char *name,
-    const struct pf_addr *addr)
-{
-	nvlist_t *nvl = nvlist_create(0);
-
-	nvlist_add_binary(nvl, "addr", addr, sizeof(*addr));
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_addr_wrap(nvlist_t *nvparent, const char *name,
-    const struct pf_addr_wrap *addr)
-{
-	nvlist_t *nvl = nvlist_create(0);
-
-	nvlist_add_number(nvl, "type", addr->type);
-	nvlist_add_number(nvl, "iflags", addr->iflags);
-	nvlist_add_string(nvl, "ifname", addr->v.ifname);
-	nvlist_add_string(nvl, "tblname", addr->v.tblname);
-	pfctl_nv_add_addr(nvl, "addr", &addr->v.a.addr);
-	pfctl_nv_add_addr(nvl, "mask", &addr->v.a.mask);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_rule_addr(nvlist_t *nvparent, const char *name,
-    const struct pf_rule_addr *addr)
-{
-	u_int64_t ports[2];
-	nvlist_t *nvl = nvlist_create(0);
-
-	pfctl_nv_add_addr_wrap(nvl, "addr", &addr->addr);
-	ports[0] = addr->port[0];
-	ports[1] = addr->port[1];
-	nvlist_add_number_array(nvl, "port", ports, 2);
-	nvlist_add_number(nvl, "neg", addr->neg);
-	nvlist_add_number(nvl, "port_op", addr->port_op);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
-    const struct pf_pool *pool)
-{
-	u_int64_t ports[2];
-	nvlist_t *nvl = nvlist_create(0);
-
-	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
-	pfctl_nv_add_addr(nvl, "counter", &pool->counter);
-	nvlist_add_number(nvl, "tblidx", pool->tblidx);
-
-	ports[0] = pool->proxy_port[0];
-	ports[1] = pool->proxy_port[1];
-	nvlist_add_number_array(nvl, "proxy_port", ports, 2);
-	nvlist_add_number(nvl, "opts", pool->opts);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_uid(nvlist_t *nvparent, const char *name,
-    const struct pf_rule_uid *uid)
-{
-	u_int64_t uids[2];
-	nvlist_t *nvl = nvlist_create(0);
-
-	uids[0] = uid->uid[0];
-	uids[1] = uid->uid[1];
-	nvlist_add_number_array(nvl, "uid", uids, 2);
-	nvlist_add_number(nvl, "op", uid->op);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
-    const struct pf_rule *r)
-{
-	nvlist_t *nvl = nvlist_create(0);
-
-	pfctl_nv_add_addr(nvl, "addr", &r->divert.addr);
-	nvlist_add_number(nvl, "port", r->divert.port);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static int
-pfctl_addrule(struct pfctl *pf, const struct pf_rule *r, const char *anchor,
-    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
-{
-	struct pfioc_nv nv;
-	u_int64_t timeouts[PFTM_MAX];
-	u_int64_t set_prio[2];
-	nvlist_t *nvl, *nvlr;
-	int ret;
-
-	nvl = nvlist_create(0);
-	nvlr = nvlist_create(0);
-
-	nvlist_add_number(nvl, "ticket", ticket);
-	nvlist_add_number(nvl, "pool_ticket", pool_ticket);
-	nvlist_add_string(nvl, "anchor", anchor);
-	nvlist_add_string(nvl, "anchor_call", anchor_call);
-
-	nvlist_add_number(nvlr, "nr", r->nr);
-	pfctl_nv_add_rule_addr(nvlr, "src", &r->src);
-	pfctl_nv_add_rule_addr(nvlr, "dst", &r->dst);
-
-	nvlist_add_string(nvlr, "label", r->label);
-	nvlist_add_string(nvlr, "ifname", r->ifname);
-	nvlist_add_string(nvlr, "qname", r->qname);
-	nvlist_add_string(nvlr, "pqname", r->pqname);
-	nvlist_add_string(nvlr, "tagname", r->tagname);
-	nvlist_add_string(nvlr, "match_tagname", r->match_tagname);
-	nvlist_add_string(nvlr, "overload_tblname", r->overload_tblname);
-
-	pfctl_nv_add_pool(nvlr, "rpool", &r->rpool);
-
-	nvlist_add_number(nvlr, "os_fingerprint", r->os_fingerprint);
-
-	nvlist_add_number(nvlr, "rtableid", r->rtableid);
-	for (int i = 0; i < PFTM_MAX; i++)
-		timeouts[i] = r->timeout[i];
-	nvlist_add_number_array(nvlr, "timeout", timeouts, PFTM_MAX);
-	nvlist_add_number(nvlr, "max_states", r->max_states);
-	nvlist_add_number(nvlr, "max_src_nodes", r->max_src_nodes);
-	nvlist_add_number(nvlr, "max_src_states", r->max_src_states);
-	nvlist_add_number(nvlr, "max_src_conn", r->max_src_conn);
-	nvlist_add_number(nvlr, "max_src_conn_rate.limit",
-	    r->max_src_conn_rate.limit);
-	nvlist_add_number(nvlr, "max_src_conn_rate.seconds",
-	    r->max_src_conn_rate.seconds);
-	nvlist_add_number(nvlr, "prob", r->prob);
-	nvlist_add_number(nvlr, "cuid", r->cuid);
-	nvlist_add_number(nvlr, "cpid", r->cpid);
-
-	nvlist_add_number(nvlr, "return_icmp", r->return_icmp);
-	nvlist_add_number(nvlr, "return_icmp6", r->return_icmp6);
-
-	nvlist_add_number(nvlr, "max_mss", r->max_mss);
-	nvlist_add_number(nvlr, "scrub_flags", r->scrub_flags);
-
-	pfctl_nv_add_uid(nvlr, "uid", &r->uid);
-	pfctl_nv_add_uid(nvlr, "gid", (struct pf_rule_uid *)&r->gid);
-
-	nvlist_add_number(nvlr, "rule_flag", r->rule_flag);
-	nvlist_add_number(nvlr, "action", r->action);
-	nvlist_add_number(nvlr, "direction", r->direction);
-	nvlist_add_number(nvlr, "log", r->log);
-	nvlist_add_number(nvlr, "logif", r->logif);
-	nvlist_add_number(nvlr, "quick", r->quick);
-	nvlist_add_number(nvlr, "ifnot", r->ifnot);
-	nvlist_add_number(nvlr, "match_tag_not", r->match_tag_not);
-	nvlist_add_number(nvlr, "natpass", r->natpass);
-
-	nvlist_add_number(nvlr, "keep_state", r->keep_state);
-	nvlist_add_number(nvlr, "af", r->af);
-	nvlist_add_number(nvlr, "proto", r->proto);
-	nvlist_add_number(nvlr, "type", r->type);
-	nvlist_add_number(nvlr, "code", r->code);
-	nvlist_add_number(nvlr, "flags", r->flags);
-	nvlist_add_number(nvlr, "flagset", r->flagset);
-	nvlist_add_number(nvlr, "min_ttl", r->min_ttl);
-	nvlist_add_number(nvlr, "allow_opts", r->allow_opts);
-	nvlist_add_number(nvlr, "rt", r->rt);
-	nvlist_add_number(nvlr, "return_ttl", r->return_ttl);
-	nvlist_add_number(nvlr, "tos", r->tos);
-	nvlist_add_number(nvlr, "set_tos", r->set_tos);
-	nvlist_add_number(nvlr, "anchor_relative", r->anchor_relative);
-	nvlist_add_number(nvlr, "anchor_wildcard", r->anchor_wildcard);
-
-	nvlist_add_number(nvlr, "flush", r->flush);
-
-	nvlist_add_number(nvlr, "prio", r->prio);
-	set_prio[0] = r->set_prio[0];
-	set_prio[1] = r->set_prio[1];
-	nvlist_add_number_array(nvlr, "set_prio", set_prio, 2);
-
-	pfctl_nv_add_divert(nvlr, "divert", r);
-
-	nvlist_add_nvlist(nvl, "rule", nvlr);
-
-	/* Now do the call. */
-	nv.data = nvlist_pack(nvl, &nv.len);
-	nv.size = nv.len;
-
-	ret = ioctl(pf->dev, DIOCADDRULENV, &nv);
-
-	free(nv.data);
-	nvlist_destroy(nvl);
-
-	return (ret);
-}
-
 int
 pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 {
@@ -1657,7 +1459,7 @@ pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 	if ((pf->opts & PF_OPT_NOACTION) == 0) {
 		if (pfctl_add_pool(pf, &r->rpool, r->af))
 			return (1);
-		if (pfctl_addrule(pf, r, anchor, name, ticket,
+		if (pfctl_add_rule(pf->dev, r, anchor, name, ticket,
 		    pf->paddr.ticket))
 			err(1, "DIOCADDRULENV");
 	}
diff --git a/sbin/pfctl/pfctl_ioctl.h b/sbin/pfctl/pfctl_ioctl.h
index 41dd0776854a..e69de29bb2d1 100644
--- a/sbin/pfctl/pfctl_ioctl.h
+++ b/sbin/pfctl/pfctl_ioctl.h
@@ -1,43 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *    - Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *    - Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials provided
- *      with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _PFCTL_IOCTL_H_
-#define _PFCTL_IOCTL_H_
-
-#include <netpfil/pf/pf.h>
-
-int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
-	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
-	    char *anchor_call);
-
-#endif
diff --git a/sbin/pfctl/pfctl_optimize.c b/sbin/pfctl/pfctl_optimize.c
index d3f0aa1bf3a4..821a528932f3 100644
--- a/sbin/pfctl/pfctl_optimize.c
+++ b/sbin/pfctl/pfctl_optimize.c
@@ -33,12 +33,12 @@ __FBSDID("$FreeBSD$");
 #include <ctype.h>
 #include <err.h>
 #include <errno.h>
+#include <libpfctl.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
diff --git a/sbin/pfctl/pfctl_parser.h b/sbin/pfctl/pfctl_parser.h
index aa6d98d7cf91..2547caa1a8ce 100644
--- a/sbin/pfctl/pfctl_parser.h
+++ b/sbin/pfctl/pfctl_parser.h
@@ -252,7 +252,7 @@ TAILQ_HEAD(pf_opt_queue, pf_opt_rule);
 int	pfctl_rules(int, char *, int, int, char *, struct pfr_buffer *);
 int	pfctl_optimize_ruleset(struct pfctl *, struct pf_ruleset *);
 
-int	pfctl_add_rule(struct pfctl *, struct pf_rule *, const char *);
+int	pfctl_append_rule(struct pfctl *, struct pf_rule *, const char *);
 int	pfctl_add_altq(struct pfctl *, struct pf_altq *);
 int	pfctl_add_pool(struct pfctl *, struct pf_pool *, sa_family_t);
 void	pfctl_move_pool(struct pf_pool *, struct pf_pool *);
diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk
index 32cd1677bcd4..249443f1dcf2 100644
--- a/share/mk/src.libnames.mk
+++ b/share/mk/src.libnames.mk
@@ -57,6 +57,7 @@ _INTERNALLIBS=	\
 		opts \
 		parse \
 		pe \
+		pfctl \
 		pmcstat \
 		sl \
 		sm \
@@ -391,6 +392,7 @@ _DP_zutil=	avl tpool
 _DP_be=		zfs spl nvpair zfsbootenv
 _DP_netmap=
 _DP_ifconfig=	m
+_DP_pfctl=	nv
 
 # OFED support
 .if ${MK_OFED} != "no"
@@ -568,6 +570,9 @@ LIBOPTS?=	${LIBOPTSDIR}/libopts${PIE_SUFFIX}.a
 LIBPARSEDIR=	${_LIB_OBJTOP}/usr.sbin/ntp/libparse
 LIBPARSE?=	${LIBPARSEDIR}/libparse${PIE_SUFFIX}.a
 
+LIBPFCTL=	${_LIB_OBJTOP}/lib/libpfctl
+LIBPFCTL?=	${LIBPFCTLDIR}/libpfctl${PIE_SUFFIX}.a
+
 LIBLPRDIR=	${_LIB_OBJTOP}/usr.sbin/lpr/common_source
 LIBLPR?=	${LIBLPRDIR}/liblpr${PIE_SUFFIX}.a
 

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:44 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 20167631398;
 Fri,  7 May 2021 15:25:44 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmQ5lXBz4jxP;
 Fri,  7 May 2021 15:25:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6564558EE;
 Fri,  7 May 2021 15:25:42 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPgoS026192;
 Fri, 7 May 2021 15:25:42 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPg7j026191;
 Fri, 7 May 2021 15:25:42 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:42 GMT
Message-Id: <202105071525.147FPg7j026191@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: b5a4314fb312 - stable/12 - libnv: Build PIC
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: b5a4314fb3128c7fad26325e31c1a35b6d0a9e6b
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:44 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=b5a4314fb3128c7fad26325e31c1a35b6d0a9e6b

commit b5a4314fb3128c7fad26325e31c1a35b6d0a9e6b
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-02 15:06:02 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:00 +0000

    libnv: Build PIC
    
    Build libnv as position independent code so we can use it from shared
    libraries.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29561
    
    (cherry picked from commit 0dd13c77432ade1ae94c9661cbad5537e3e6ab1d)
---
 lib/libnv/Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/libnv/Makefile b/lib/libnv/Makefile
index bf92041d4c87..63e7a274f578 100644
--- a/lib/libnv/Makefile
+++ b/lib/libnv/Makefile
@@ -10,6 +10,7 @@ SHLIB_MAJOR= 0
 
 .PATH: ${SRCTOP}/sys/contrib/libnv ${SRCTOP}/sys/sys
 CFLAGS+=-I${.CURDIR}
+CFLAGS+=-fPIC
 
 SRCS=	cnvlist.c
 SRCS+=	dnvlist.c

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:46 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5DDFA631581;
 Fri,  7 May 2021 15:25:46 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmS5y0wz4jf2;
 Fri,  7 May 2021 15:25:44 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 27C355B3B;
 Fri,  7 May 2021 15:25:44 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPiL7026261;
 Fri, 7 May 2021 15:25:44 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPivq026260;
 Fri, 7 May 2021 15:25:44 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:44 GMT
Message-Id: <202105071525.147FPivq026260@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 5268c55fa5d5 - stable/13 - bsnmp: Use libpfctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 5268c55fa5d55e15657f1dcf05db1e286122fa91
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:46 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=5268c55fa5d55e15657f1dcf05db1e286122fa91

commit 5268c55fa5d55e15657f1dcf05db1e286122fa91
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-29 15:43:25 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    bsnmp: Use libpfctl
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29642
    
    (cherry picked from commit 956e7d232549ce4b17f5b1a079e5b51229479dda)
---
 usr.sbin/bsnmpd/modules/snmp_pf/Makefile  | 3 +++
 usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c | 4 +++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/Makefile b/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
index fdf77191f706..3ab6e436aa75 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
@@ -9,4 +9,7 @@ XSYM=	begemotPf
 DEFS=	${MOD}_tree.def
 BMIBS=	BEGEMOT-PF-MIB.txt
 
+CFLAGS+=	-I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
+LIBADD+=	pfctl
+
 .include <bsd.snmpmod.mk>
diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
index a14ab5841dfa..dc55c730bc5f 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
@@ -38,6 +38,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <libpfctl.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -1528,7 +1529,8 @@ pfl_scan_ruleset(const char *path)
 
 	for (nr = pr.nr, i = 0; i < nr; i++) {
 		pr.nr = i;
-		if (ioctl(dev, DIOCGETRULE, &pr)) {
+		if (pfctl_add_rule(dev, &pr.rule, pr.anchor, pr.anchor_call,
+		    pr.ticket, pr.pool_ticket)) {
 			syslog(LOG_ERR, "pfl_scan_ruleset: ioctl(DIOCGETRULE):"
 			    " %s", strerror(errno));
 			goto err;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:46 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5397C6310DC;
 Fri,  7 May 2021 15:25:46 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmS5rWnz4jf0;
 Fri,  7 May 2021 15:25:43 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 76CD758F0;
 Fri,  7 May 2021 15:25:43 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPh91026240;
 Fri, 7 May 2021 15:25:43 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPhBm026239;
 Fri, 7 May 2021 15:25:43 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:43 GMT
Message-Id: <202105071525.147FPhBm026239@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: b42eb4ffe5ea - stable/12 - pfctl: Move ioctl abstraction
 functions into libpfctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: b42eb4ffe5ea7323872dbda1e711a65cd30340bb
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:46 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=b42eb4ffe5ea7323872dbda1e711a65cd30340bb

commit b42eb4ffe5ea7323872dbda1e711a65cd30340bb
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-26 10:38:58 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:01 +0000

    pfctl: Move ioctl abstraction functions into libpfctl
    
    Introduce a library to wrap the pf ioctl interface.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29562
    
    (cherry picked from commit 0d71f9f36e6c1849fdaf6c1edc1178be07357034)
---
 lib/Makefile                                       |   1 +
 lib/libpfctl/Makefile                              |  12 ++
 .../pfctl/pfctl_ioctl.c => lib/libpfctl/libpfctl.c | 199 ++++++++++++++++++-
 lib/libpfctl/libpfctl.h                            |  45 +++++
 sbin/pfctl/Makefile                                |   5 +-
 sbin/pfctl/parse.y                                 |   6 +-
 sbin/pfctl/pfctl.c                                 | 212 +--------------------
 sbin/pfctl/pfctl_ioctl.h                           |  43 -----
 sbin/pfctl/pfctl_optimize.c                        |   2 +-
 sbin/pfctl/pfctl_parser.h                          |   2 +-
 share/mk/src.libnames.mk                           |   5 +
 11 files changed, 276 insertions(+), 256 deletions(-)

diff --git a/lib/Makefile b/lib/Makefile
index 1026760335d1..d797701de6b7 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -210,6 +210,7 @@ _libdl=		libdl
 SUBDIR.${MK_OPENMP}+=	libomp
 .endif
 SUBDIR.${MK_OPENSSL}+=	libmp
+SUBDIR.${MK_PF}+=	libpfctl
 SUBDIR.${MK_PMC}+=	libpmc libpmcstat
 SUBDIR.${MK_RADIUS_SUPPORT}+=	libradius
 SUBDIR.${MK_SENDMAIL}+=	libmilter libsm libsmdb libsmutil
diff --git a/lib/libpfctl/Makefile b/lib/libpfctl/Makefile
new file mode 100644
index 000000000000..d7a00a94b349
--- /dev/null
+++ b/lib/libpfctl/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+PACKAGE=	lib${LIB}
+LIB=		pfctl
+INTERNALLIB=	true
+
+SRCS=	libpfctl.c
+INCS=	libpfctl.h
+
+CFLAGS+=	-fPIC
+
+.include <bsd.lib.mk>
diff --git a/sbin/pfctl/pfctl_ioctl.c b/lib/libpfctl/libpfctl.c
similarity index 62%
rename from sbin/pfctl/pfctl_ioctl.c
rename to lib/libpfctl/libpfctl.c
index 878a57de0fe4..e0d429112f5b 100644
--- a/sbin/pfctl/pfctl_ioctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -48,7 +48,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "pfctl_ioctl.h"
+#include "libpfctl.h"
 
 static void
 pf_nvuint_8_array(const nvlist_t *nvl, const char *name, size_t maxelems,
@@ -118,6 +118,17 @@ pf_nvuint_64_array(const nvlist_t *nvl, const char *name, size_t maxelems,
 		*nelems = elems;
 }
 
+static void
+pfctl_nv_add_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_addr *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "addr", addr, sizeof(*addr));
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *addr)
 {
@@ -129,6 +140,22 @@ pf_nvaddr_to_addr(const nvlist_t *nvl, struct pf_addr *addr)
 	memcpy(addr, data, len);
 }
 
+static void
+pfctl_nv_add_addr_wrap(nvlist_t *nvparent, const char *name,
+    const struct pf_addr_wrap *addr)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_number(nvl, "type", addr->type);
+	nvlist_add_number(nvl, "iflags", addr->iflags);
+	nvlist_add_string(nvl, "ifname", addr->v.ifname);
+	nvlist_add_string(nvl, "tblname", addr->v.tblname);
+	pfctl_nv_add_addr(nvl, "addr", &addr->v.a.addr);
+	pfctl_nv_add_addr(nvl, "mask", &addr->v.a.mask);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
 {
@@ -142,6 +169,23 @@ pf_nvaddr_wrap_to_addr_wrap(const nvlist_t *nvl, struct pf_addr_wrap *addr)
 	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "mask"), &addr->v.a.mask);
 }
 
+static void
+pfctl_nv_add_rule_addr(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_addr *addr)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr_wrap(nvl, "addr", &addr->addr);
+	ports[0] = addr->port[0];
+	ports[1] = addr->port[1];
+	nvlist_add_number_array(nvl, "port", ports, 2);
+	nvlist_add_number(nvl, "neg", addr->neg);
+	nvlist_add_number(nvl, "port_op", addr->port_op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
 {
@@ -152,6 +196,25 @@ pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
 	addr->port_op = nvlist_get_number(nvl, "port_op");
 }
 
+static void
+pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
+    const struct pf_pool *pool)
+{
+	u_int64_t ports[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
+	pfctl_nv_add_addr(nvl, "counter", &pool->counter);
+	nvlist_add_number(nvl, "tblidx", pool->tblidx);
+
+	ports[0] = pool->proxy_port[0];
+	ports[1] = pool->proxy_port[1];
+	nvlist_add_number_array(nvl, "proxy_port", ports, 2);
+	nvlist_add_number(nvl, "opts", pool->opts);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
 {
@@ -169,6 +232,21 @@ pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
 	pool->opts = nvlist_get_number(nvl, "opts");
 }
 
+static void
+pfctl_nv_add_uid(nvlist_t *nvparent, const char *name,
+    const struct pf_rule_uid *uid)
+{
+	u_int64_t uids[2];
+	nvlist_t *nvl = nvlist_create(0);
+
+	uids[0] = uid->uid[0];
+	uids[1] = uid->uid[1];
+	nvlist_add_number_array(nvl, "uid", uids, 2);
+	nvlist_add_number(nvl, "op", uid->op);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 {
@@ -176,6 +254,18 @@ pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 	uid->op = nvlist_get_number(nvl, "op");
 }
 
+static void
+pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
+    const struct pf_rule *r)
+{
+	nvlist_t *nvl = nvlist_create(0);
+
+	pfctl_nv_add_addr(nvl, "addr", &r->divert.addr);
+	nvlist_add_number(nvl, "port", r->divert.port);
+
+	nvlist_add_nvlist(nvparent, name, nvl);
+}
+
 static void
 pf_nvdivert_to_divert(const nvlist_t *nvl, struct pf_rule *rule)
 {
@@ -282,6 +372,113 @@ pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
 	rule->u_src_nodes = nvlist_get_number(nvl, "src_nodes");
 }
 
+int
+pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
+    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
+{
+	struct pfioc_nv nv;
+	u_int64_t timeouts[PFTM_MAX];
+	u_int64_t set_prio[2];
+	nvlist_t *nvl, *nvlr;
+	int ret;
+
+	nvl = nvlist_create(0);
+	nvlr = nvlist_create(0);
+
+	nvlist_add_number(nvl, "ticket", ticket);
+	nvlist_add_number(nvl, "pool_ticket", pool_ticket);
+	nvlist_add_string(nvl, "anchor", anchor);
+	nvlist_add_string(nvl, "anchor_call", anchor_call);
+
+	nvlist_add_number(nvlr, "nr", r->nr);
+	pfctl_nv_add_rule_addr(nvlr, "src", &r->src);
+	pfctl_nv_add_rule_addr(nvlr, "dst", &r->dst);
+
+	nvlist_add_string(nvlr, "label", r->label);
+	nvlist_add_string(nvlr, "ifname", r->ifname);
+	nvlist_add_string(nvlr, "qname", r->qname);
+	nvlist_add_string(nvlr, "pqname", r->pqname);
+	nvlist_add_string(nvlr, "tagname", r->tagname);
+	nvlist_add_string(nvlr, "match_tagname", r->match_tagname);
+	nvlist_add_string(nvlr, "overload_tblname", r->overload_tblname);
+
+	pfctl_nv_add_pool(nvlr, "rpool", &r->rpool);
+
+	nvlist_add_number(nvlr, "os_fingerprint", r->os_fingerprint);
+
+	nvlist_add_number(nvlr, "rtableid", r->rtableid);
+	for (int i = 0; i < PFTM_MAX; i++)
+		timeouts[i] = r->timeout[i];
+	nvlist_add_number_array(nvlr, "timeout", timeouts, PFTM_MAX);
+	nvlist_add_number(nvlr, "max_states", r->max_states);
+	nvlist_add_number(nvlr, "max_src_nodes", r->max_src_nodes);
+	nvlist_add_number(nvlr, "max_src_states", r->max_src_states);
+	nvlist_add_number(nvlr, "max_src_conn", r->max_src_conn);
+	nvlist_add_number(nvlr, "max_src_conn_rate.limit",
+	    r->max_src_conn_rate.limit);
+	nvlist_add_number(nvlr, "max_src_conn_rate.seconds",
+	    r->max_src_conn_rate.seconds);
+	nvlist_add_number(nvlr, "prob", r->prob);
+	nvlist_add_number(nvlr, "cuid", r->cuid);
+	nvlist_add_number(nvlr, "cpid", r->cpid);
+
+	nvlist_add_number(nvlr, "return_icmp", r->return_icmp);
+	nvlist_add_number(nvlr, "return_icmp6", r->return_icmp6);
+
+	nvlist_add_number(nvlr, "max_mss", r->max_mss);
+	nvlist_add_number(nvlr, "scrub_flags", r->scrub_flags);
+
+	pfctl_nv_add_uid(nvlr, "uid", &r->uid);
+	pfctl_nv_add_uid(nvlr, "gid", (const struct pf_rule_uid *)&r->gid);
+
+	nvlist_add_number(nvlr, "rule_flag", r->rule_flag);
+	nvlist_add_number(nvlr, "action", r->action);
+	nvlist_add_number(nvlr, "direction", r->direction);
+	nvlist_add_number(nvlr, "log", r->log);
+	nvlist_add_number(nvlr, "logif", r->logif);
+	nvlist_add_number(nvlr, "quick", r->quick);
+	nvlist_add_number(nvlr, "ifnot", r->ifnot);
+	nvlist_add_number(nvlr, "match_tag_not", r->match_tag_not);
+	nvlist_add_number(nvlr, "natpass", r->natpass);
+
+	nvlist_add_number(nvlr, "keep_state", r->keep_state);
+	nvlist_add_number(nvlr, "af", r->af);
+	nvlist_add_number(nvlr, "proto", r->proto);
+	nvlist_add_number(nvlr, "type", r->type);
+	nvlist_add_number(nvlr, "code", r->code);
+	nvlist_add_number(nvlr, "flags", r->flags);
+	nvlist_add_number(nvlr, "flagset", r->flagset);
+	nvlist_add_number(nvlr, "min_ttl", r->min_ttl);
+	nvlist_add_number(nvlr, "allow_opts", r->allow_opts);
+	nvlist_add_number(nvlr, "rt", r->rt);
+	nvlist_add_number(nvlr, "return_ttl", r->return_ttl);
+	nvlist_add_number(nvlr, "tos", r->tos);
+	nvlist_add_number(nvlr, "set_tos", r->set_tos);
+	nvlist_add_number(nvlr, "anchor_relative", r->anchor_relative);
+	nvlist_add_number(nvlr, "anchor_wildcard", r->anchor_wildcard);
+
+	nvlist_add_number(nvlr, "flush", r->flush);
+
+	nvlist_add_number(nvlr, "prio", r->prio);
+	set_prio[0] = r->set_prio[0];
+	set_prio[1] = r->set_prio[1];
+	nvlist_add_number_array(nvlr, "set_prio", set_prio, 2);
+
+	pfctl_nv_add_divert(nvlr, "divert", r);
+
+	nvlist_add_nvlist(nvl, "rule", nvlr);
+
+	/* Now do the call. */
+	nv.data = nvlist_pack(nvl, &nv.len);
+	nv.size = nv.len;
+
+	ret = ioctl(dev, DIOCADDRULENV, &nv);
+
+	free(nv.data);
+	nvlist_destroy(nvl);
+
+	return (ret);
+}
 
 int
 pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
new file mode 100644
index 000000000000..65ff2179f23d
--- /dev/null
+++ b/lib/libpfctl/libpfctl.h
@@ -0,0 +1,45 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _PFCTL_IOCTL_H_
+#define _PFCTL_IOCTL_H_
+
+#include <netpfil/pf/pf.h>
+
+int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
+	    char *anchor_call);
+int	pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
+	    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket);
+
+#endif
diff --git a/sbin/pfctl/Makefile b/sbin/pfctl/Makefile
index c84d558c989d..49bdfb9e3733 100644
--- a/sbin/pfctl/Makefile
+++ b/sbin/pfctl/Makefile
@@ -9,13 +9,14 @@ MAN=	pfctl.8
 
 SRCS = pfctl.c parse.y pfctl_parser.c pf_print_state.c pfctl_altq.c
 SRCS+= pfctl_osfp.c pfctl_radix.c pfctl_table.c pfctl_qstats.c
-SRCS+= pfctl_optimize.c pfctl_ioctl.c
+SRCS+= pfctl_optimize.c
 SRCS+= pf_ruleset.c
 
 WARNS?=	2
 CFLAGS+= -Wall -Wmissing-prototypes -Wno-uninitialized
 CFLAGS+= -Wstrict-prototypes
 CFLAGS+= -DENABLE_ALTQ -I${.CURDIR}
+CFLAGS+= -I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
 
 # Need to use "WITH_" prefix to not conflict with the l/y INET/INET6 keywords
 .if ${MK_INET6_SUPPORT} != "no"
@@ -27,7 +28,7 @@ CFLAGS+= -DWITH_INET
 
 YFLAGS=
 
-LIBADD=	m md nv
+LIBADD=	m md pfctl
 
 HAS_TESTS=
 SUBDIR.${MK_TESTS}+= tests
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index ed4a09c0d14c..56c1f82e39a0 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -1032,7 +1032,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			decide_address_family($6.src.host, &r.af);
 			decide_address_family($6.dst.host, &r.af);
 
-			pfctl_add_rule(pf, &r, $2);
+			pfctl_append_rule(pf, &r, $2);
 			free($2);
 		}
 		;
@@ -4382,7 +4382,7 @@ binatrule	: no BINAT natpasslog interface af proto FROM ipspec toipspec tag
 				free($13);
 			}
 
-			pfctl_add_rule(pf, &binat, "");
+			pfctl_append_rule(pf, &binat, "");
 		}
 		;
 
@@ -5399,7 +5399,7 @@ expand_rule(struct pf_rule *r,
 			yyerror("skipping rule due to errors");
 		else {
 			r->nr = pf->astack[pf->asd]->match++;
-			pfctl_add_rule(pf, r, anchor_call);
+			pfctl_append_rule(pf, r, anchor_call);
 			added++;
 		}
 
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 1aa17065597b..fde9d61260ef 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$");
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <libpfctl.h>
 #include <limits.h>
 #include <netdb.h>
 #include <stdint.h>
@@ -63,7 +64,6 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <unistd.h>
 
-#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
@@ -1291,7 +1291,7 @@ pfctl_add_pool(struct pfctl *pf, struct pf_pool *p, sa_family_t af)
 }
 
 int
-pfctl_add_rule(struct pfctl *pf, struct pf_rule *r, const char *anchor_call)
+pfctl_append_rule(struct pfctl *pf, struct pf_rule *r, const char *anchor_call)
 {
 	u_int8_t		rs_num;
 	struct pf_rule		*rule;
@@ -1309,22 +1309,22 @@ pfctl_add_rule(struct pfctl *pf, struct pf_rule *r, const char *anchor_call)
 		 * Don't make non-brace anchors part of the main anchor pool.
 		 */
 		if ((r->anchor = calloc(1, sizeof(*r->anchor))) == NULL)
-			err(1, "pfctl_add_rule: calloc");
+			err(1, "pfctl_append_rule: calloc");
 		
 		pf_init_ruleset(&r->anchor->ruleset);
 		r->anchor->ruleset.anchor = r->anchor;
 		if (strlcpy(r->anchor->path, anchor_call,
 		    sizeof(rule->anchor->path)) >= sizeof(rule->anchor->path))
-			errx(1, "pfctl_add_rule: strlcpy");
+			errx(1, "pfctl_append_rule: strlcpy");
 		if ((p = strrchr(anchor_call, '/')) != NULL) {
 			if (!strlen(p))
-				err(1, "pfctl_add_rule: bad anchor name %s",
+				err(1, "pfctl_append_rule: bad anchor name %s",
 				    anchor_call);
 		} else
 			p = (char *)anchor_call;
 		if (strlcpy(r->anchor->name, p,
 		    sizeof(rule->anchor->name)) >= sizeof(rule->anchor->name))
-			errx(1, "pfctl_add_rule: strlcpy");
+			errx(1, "pfctl_append_rule: strlcpy");
 	}
 
 	if ((rule = calloc(1, sizeof(*rule))) == NULL)
@@ -1427,204 +1427,6 @@ pfctl_load_ruleset(struct pfctl *pf, char *path, struct pf_ruleset *rs,
 
 }
 
-static void
-pfctl_nv_add_addr(nvlist_t *nvparent, const char *name,
-    const struct pf_addr *addr)
-{
-	nvlist_t *nvl = nvlist_create(0);
-
-	nvlist_add_binary(nvl, "addr", addr, sizeof(*addr));
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_addr_wrap(nvlist_t *nvparent, const char *name,
-    const struct pf_addr_wrap *addr)
-{
-	nvlist_t *nvl = nvlist_create(0);
-
-	nvlist_add_number(nvl, "type", addr->type);
-	nvlist_add_number(nvl, "iflags", addr->iflags);
-	nvlist_add_string(nvl, "ifname", addr->v.ifname);
-	nvlist_add_string(nvl, "tblname", addr->v.tblname);
-	pfctl_nv_add_addr(nvl, "addr", &addr->v.a.addr);
-	pfctl_nv_add_addr(nvl, "mask", &addr->v.a.mask);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_rule_addr(nvlist_t *nvparent, const char *name,
-    const struct pf_rule_addr *addr)
-{
-	u_int64_t ports[2];
-	nvlist_t *nvl = nvlist_create(0);
-
-	pfctl_nv_add_addr_wrap(nvl, "addr", &addr->addr);
-	ports[0] = addr->port[0];
-	ports[1] = addr->port[1];
-	nvlist_add_number_array(nvl, "port", ports, 2);
-	nvlist_add_number(nvl, "neg", addr->neg);
-	nvlist_add_number(nvl, "port_op", addr->port_op);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
-    const struct pf_pool *pool)
-{
-	u_int64_t ports[2];
-	nvlist_t *nvl = nvlist_create(0);
-
-	nvlist_add_binary(nvl, "key", &pool->key, sizeof(pool->key));
-	pfctl_nv_add_addr(nvl, "counter", &pool->counter);
-	nvlist_add_number(nvl, "tblidx", pool->tblidx);
-
-	ports[0] = pool->proxy_port[0];
-	ports[1] = pool->proxy_port[1];
-	nvlist_add_number_array(nvl, "proxy_port", ports, 2);
-	nvlist_add_number(nvl, "opts", pool->opts);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_uid(nvlist_t *nvparent, const char *name,
-    const struct pf_rule_uid *uid)
-{
-	u_int64_t uids[2];
-	nvlist_t *nvl = nvlist_create(0);
-
-	uids[0] = uid->uid[0];
-	uids[1] = uid->uid[1];
-	nvlist_add_number_array(nvl, "uid", uids, 2);
-	nvlist_add_number(nvl, "op", uid->op);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static void
-pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
-    const struct pf_rule *r)
-{
-	nvlist_t *nvl = nvlist_create(0);
-
-	pfctl_nv_add_addr(nvl, "addr", &r->divert.addr);
-	nvlist_add_number(nvl, "port", r->divert.port);
-
-	nvlist_add_nvlist(nvparent, name, nvl);
-}
-
-static int
-pfctl_addrule(struct pfctl *pf, const struct pf_rule *r, const char *anchor,
-    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
-{
-	struct pfioc_nv nv;
-	u_int64_t timeouts[PFTM_MAX];
-	u_int64_t set_prio[2];
-	nvlist_t *nvl, *nvlr;
-	int ret;
-
-	nvl = nvlist_create(0);
-	nvlr = nvlist_create(0);
-
-	nvlist_add_number(nvl, "ticket", ticket);
-	nvlist_add_number(nvl, "pool_ticket", pool_ticket);
-	nvlist_add_string(nvl, "anchor", anchor);
-	nvlist_add_string(nvl, "anchor_call", anchor_call);
-
-	nvlist_add_number(nvlr, "nr", r->nr);
-	pfctl_nv_add_rule_addr(nvlr, "src", &r->src);
-	pfctl_nv_add_rule_addr(nvlr, "dst", &r->dst);
-
-	nvlist_add_string(nvlr, "label", r->label);
-	nvlist_add_string(nvlr, "ifname", r->ifname);
-	nvlist_add_string(nvlr, "qname", r->qname);
-	nvlist_add_string(nvlr, "pqname", r->pqname);
-	nvlist_add_string(nvlr, "tagname", r->tagname);
-	nvlist_add_string(nvlr, "match_tagname", r->match_tagname);
-	nvlist_add_string(nvlr, "overload_tblname", r->overload_tblname);
-
-	pfctl_nv_add_pool(nvlr, "rpool", &r->rpool);
-
-	nvlist_add_number(nvlr, "os_fingerprint", r->os_fingerprint);
-
-	nvlist_add_number(nvlr, "rtableid", r->rtableid);
-	for (int i = 0; i < PFTM_MAX; i++)
-		timeouts[i] = r->timeout[i];
-	nvlist_add_number_array(nvlr, "timeout", timeouts, PFTM_MAX);
-	nvlist_add_number(nvlr, "max_states", r->max_states);
-	nvlist_add_number(nvlr, "max_src_nodes", r->max_src_nodes);
-	nvlist_add_number(nvlr, "max_src_states", r->max_src_states);
-	nvlist_add_number(nvlr, "max_src_conn", r->max_src_conn);
-	nvlist_add_number(nvlr, "max_src_conn_rate.limit",
-	    r->max_src_conn_rate.limit);
-	nvlist_add_number(nvlr, "max_src_conn_rate.seconds",
-	    r->max_src_conn_rate.seconds);
-	nvlist_add_number(nvlr, "prob", r->prob);
-	nvlist_add_number(nvlr, "cuid", r->cuid);
-	nvlist_add_number(nvlr, "cpid", r->cpid);
-
-	nvlist_add_number(nvlr, "return_icmp", r->return_icmp);
-	nvlist_add_number(nvlr, "return_icmp6", r->return_icmp6);
-
-	nvlist_add_number(nvlr, "max_mss", r->max_mss);
-	nvlist_add_number(nvlr, "scrub_flags", r->scrub_flags);
-
-	pfctl_nv_add_uid(nvlr, "uid", &r->uid);
-	pfctl_nv_add_uid(nvlr, "gid", (struct pf_rule_uid *)&r->gid);
-
-	nvlist_add_number(nvlr, "rule_flag", r->rule_flag);
-	nvlist_add_number(nvlr, "action", r->action);
-	nvlist_add_number(nvlr, "direction", r->direction);
-	nvlist_add_number(nvlr, "log", r->log);
-	nvlist_add_number(nvlr, "logif", r->logif);
-	nvlist_add_number(nvlr, "quick", r->quick);
-	nvlist_add_number(nvlr, "ifnot", r->ifnot);
-	nvlist_add_number(nvlr, "match_tag_not", r->match_tag_not);
-	nvlist_add_number(nvlr, "natpass", r->natpass);
-
-	nvlist_add_number(nvlr, "keep_state", r->keep_state);
-	nvlist_add_number(nvlr, "af", r->af);
-	nvlist_add_number(nvlr, "proto", r->proto);
-	nvlist_add_number(nvlr, "type", r->type);
-	nvlist_add_number(nvlr, "code", r->code);
-	nvlist_add_number(nvlr, "flags", r->flags);
-	nvlist_add_number(nvlr, "flagset", r->flagset);
-	nvlist_add_number(nvlr, "min_ttl", r->min_ttl);
-	nvlist_add_number(nvlr, "allow_opts", r->allow_opts);
-	nvlist_add_number(nvlr, "rt", r->rt);
-	nvlist_add_number(nvlr, "return_ttl", r->return_ttl);
-	nvlist_add_number(nvlr, "tos", r->tos);
-	nvlist_add_number(nvlr, "set_tos", r->set_tos);
-	nvlist_add_number(nvlr, "anchor_relative", r->anchor_relative);
-	nvlist_add_number(nvlr, "anchor_wildcard", r->anchor_wildcard);
-
-	nvlist_add_number(nvlr, "flush", r->flush);
-
-	nvlist_add_number(nvlr, "prio", r->prio);
-	set_prio[0] = r->set_prio[0];
-	set_prio[1] = r->set_prio[1];
-	nvlist_add_number_array(nvlr, "set_prio", set_prio, 2);
-
-	pfctl_nv_add_divert(nvlr, "divert", r);
-
-	nvlist_add_nvlist(nvl, "rule", nvlr);
-
-	/* Now do the call. */
-	nv.data = nvlist_pack(nvl, &nv.len);
-	nv.size = nv.len;
-
-	ret = ioctl(pf->dev, DIOCADDRULENV, &nv);
-
-	free(nv.data);
-	nvlist_destroy(nvl);
-
-	return (ret);
-}
-
 int
 pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 {
@@ -1657,7 +1459,7 @@ pfctl_load_rule(struct pfctl *pf, char *path, struct pf_rule *r, int depth)
 	if ((pf->opts & PF_OPT_NOACTION) == 0) {
 		if (pfctl_add_pool(pf, &r->rpool, r->af))
 			return (1);
-		if (pfctl_addrule(pf, r, anchor, name, ticket,
+		if (pfctl_add_rule(pf->dev, r, anchor, name, ticket,
 		    pf->paddr.ticket))
 			err(1, "DIOCADDRULENV");
 	}
diff --git a/sbin/pfctl/pfctl_ioctl.h b/sbin/pfctl/pfctl_ioctl.h
index 41dd0776854a..e69de29bb2d1 100644
--- a/sbin/pfctl/pfctl_ioctl.h
+++ b/sbin/pfctl/pfctl_ioctl.h
@@ -1,43 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *    - Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *    - Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials provided
- *      with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _PFCTL_IOCTL_H_
-#define _PFCTL_IOCTL_H_
-
-#include <netpfil/pf/pf.h>
-
-int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
-	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
-	    char *anchor_call);
-
-#endif
diff --git a/sbin/pfctl/pfctl_optimize.c b/sbin/pfctl/pfctl_optimize.c
index d3f0aa1bf3a4..821a528932f3 100644
--- a/sbin/pfctl/pfctl_optimize.c
+++ b/sbin/pfctl/pfctl_optimize.c
@@ -33,12 +33,12 @@ __FBSDID("$FreeBSD$");
 #include <ctype.h>
 #include <err.h>
 #include <errno.h>
+#include <libpfctl.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "pfctl_ioctl.h"
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
diff --git a/sbin/pfctl/pfctl_parser.h b/sbin/pfctl/pfctl_parser.h
index aa6d98d7cf91..2547caa1a8ce 100644
--- a/sbin/pfctl/pfctl_parser.h
+++ b/sbin/pfctl/pfctl_parser.h
@@ -252,7 +252,7 @@ TAILQ_HEAD(pf_opt_queue, pf_opt_rule);
 int	pfctl_rules(int, char *, int, int, char *, struct pfr_buffer *);
 int	pfctl_optimize_ruleset(struct pfctl *, struct pf_ruleset *);
 
-int	pfctl_add_rule(struct pfctl *, struct pf_rule *, const char *);
+int	pfctl_append_rule(struct pfctl *, struct pf_rule *, const char *);
 int	pfctl_add_altq(struct pfctl *, struct pf_altq *);
 int	pfctl_add_pool(struct pfctl *, struct pf_pool *, sa_family_t);
 void	pfctl_move_pool(struct pf_pool *, struct pf_pool *);
diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk
index 27e5cdaf2736..f293d8cb3f5f 100644
--- a/share/mk/src.libnames.mk
+++ b/share/mk/src.libnames.mk
@@ -49,6 +49,7 @@ _INTERNALLIBS=	\
 		opts \
 		parse \
 		pe \
+		pfctl \
 		pmcstat \
 		sl \
 		sm \
@@ -365,6 +366,7 @@ _DP_zfs_core=	nvpair
 _DP_zpool=	md pthread z nvpair avl umem
 _DP_be=		zfs nvpair
 _DP_netmap=
+_DP_pfctl=	nv
 
 # OFED support
 .if ${MK_OFED} != "no"
@@ -517,6 +519,9 @@ LIBOPTS?=	${LIBOPTSDIR}/libopts${PIE_SUFFIX}.a
 LIBPARSEDIR=	${OBJTOP}/usr.sbin/ntp/libparse
 LIBPARSE?=	${LIBPARSEDIR}/libparse${PIE_SUFFIX}.a
 
+LIBPFCTL=	${_LIB_OBJTOP}/lib/libpfctl
+LIBPFCTL?=	${LIBPFCTLDIR}/libpfctl${PIE_SUFFIX}.a
+
 LIBLPRDIR=	${OBJTOP}/usr.sbin/lpr/common_source
 LIBLPR?=	${LIBLPRDIR}/liblpr${PIE_SUFFIX}.a
 

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:47 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 48F77631605;
 Fri,  7 May 2021 15:25:47 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmV17CTz4jxf;
 Fri,  7 May 2021 15:25:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4887A5C3F;
 Fri,  7 May 2021 15:25:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPjhA026303;
 Fri, 7 May 2021 15:25:45 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPjor026302;
 Fri, 7 May 2021 15:25:45 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:45 GMT
Message-Id: <202105071525.147FPjor026302@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: c3f3f537715c - stable/13 - pf: Move prototypes for userspace
 functions to userspace header
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: c3f3f537715c918bdf50f7ec8548ba7ad2778036
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:47 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=c3f3f537715c918bdf50f7ec8548ba7ad2778036

commit c3f3f537715c918bdf50f7ec8548ba7ad2778036
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-07 17:49:51 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    pf: Move prototypes for userspace functions to userspace header
    
    These functions no longer exist in the kernel, so there's no reason to
    keep the prototypes in a kernel header. Move them to pfctl where they're
    actually implemented.
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29643
    
    (cherry picked from commit a9b338b260be39cc74dddb599d6c95b8794ca98b)
---
 sbin/pfctl/pf_ruleset.c | 2 ++
 sbin/pfctl/pfctl.h      | 8 ++++++++
 sys/netpfil/pf/pf.h     | 9 +--------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/sbin/pfctl/pf_ruleset.c b/sbin/pfctl/pf_ruleset.c
index 7c337d7a2da7..baac1deb4fa7 100644
--- a/sbin/pfctl/pf_ruleset.c
+++ b/sbin/pfctl/pf_ruleset.c
@@ -64,6 +64,8 @@ __FBSDID("$FreeBSD$");
 #define rs_malloc(x)		 calloc(1, x)
 #define rs_free(x)		 free(x)
 
+#include "pfctl.h"
+
 #ifdef PFDEBUG
 #include <sys/stdarg.h>
 #define DPFPRINTF(format, x...)	fprintf(stderr, format , ##x)
diff --git a/sbin/pfctl/pfctl.h b/sbin/pfctl/pfctl.h
index f43b71e19fec..5aa94b2bb0c8 100644
--- a/sbin/pfctl/pfctl.h
+++ b/sbin/pfctl/pfctl.h
@@ -128,4 +128,12 @@ u_int32_t
 	 pfctl_get_ticket(struct pfr_buffer *, int, const char *);
 int	 pfctl_trans(int, struct pfr_buffer *, u_long, int);
 
+int	 pf_get_ruleset_number(u_int8_t);
+void	 pf_init_ruleset(struct pf_ruleset *);
+int	 pf_anchor_setup(struct pf_rule *,
+	    const struct pf_ruleset *, const char *);
+void	 pf_remove_if_empty_ruleset(struct pf_ruleset *);
+struct pf_ruleset	*pf_find_ruleset(const char *);
+struct pf_ruleset	*pf_find_or_create_ruleset(const char *);
+
 #endif /* _PFCTL_H_ */
diff --git a/sys/netpfil/pf/pf.h b/sys/netpfil/pf/pf.h
index bc6cd92ae7b8..3e358de8aba5 100644
--- a/sys/netpfil/pf/pf.h
+++ b/sys/netpfil/pf/pf.h
@@ -637,13 +637,6 @@ struct pf_anchor {
 RB_PROTOTYPE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare);
 RB_PROTOTYPE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare);
 
-/* these ruleset functions can be linked into userland programs (pfctl) */
-int			 pf_get_ruleset_number(u_int8_t);
-void			 pf_init_ruleset(struct pf_ruleset *);
-int			 pf_anchor_setup(struct pf_rule *,
-			    const struct pf_ruleset *, const char *);
-void			 pf_remove_if_empty_ruleset(struct pf_ruleset *);
-struct pf_ruleset	*pf_find_ruleset(const char *);
-struct pf_ruleset	*pf_find_or_create_ruleset(const char *);
+int	 pf_get_ruleset_number(u_int8_t);
 
 #endif	/* _NET_PF_H_ */

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:47 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id C2BAC6311FB;
 Fri,  7 May 2021 15:25:47 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmW01pzz4k46;
 Fri,  7 May 2021 15:25:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AE56258F1;
 Fri,  7 May 2021 15:25:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPjxn026324;
 Fri, 7 May 2021 15:25:45 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPj3n026323;
 Fri, 7 May 2021 15:25:45 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:45 GMT
Message-Id: <202105071525.147FPj3n026323@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: aa1d70283bee - stable/12 - bsnmp: Use libpfctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: aa1d70283bee4a679ff816357867a36152bd7293
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:48 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=aa1d70283bee4a679ff816357867a36152bd7293

commit aa1d70283bee4a679ff816357867a36152bd7293
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-29 15:43:25 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:01 +0000

    bsnmp: Use libpfctl
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29642
    
    (cherry picked from commit 956e7d232549ce4b17f5b1a079e5b51229479dda)
---
 usr.sbin/bsnmpd/modules/snmp_pf/Makefile  | 3 +++
 usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c | 4 +++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/Makefile b/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
index fdf77191f706..3ab6e436aa75 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
@@ -9,4 +9,7 @@ XSYM=	begemotPf
 DEFS=	${MOD}_tree.def
 BMIBS=	BEGEMOT-PF-MIB.txt
 
+CFLAGS+=	-I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
+LIBADD+=	pfctl
+
 .include <bsd.snmpmod.mk>
diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
index a14ab5841dfa..dc55c730bc5f 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
@@ -38,6 +38,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <libpfctl.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -1528,7 +1529,8 @@ pfl_scan_ruleset(const char *path)
 
 	for (nr = pr.nr, i = 0; i < nr; i++) {
 		pr.nr = i;
-		if (ioctl(dev, DIOCGETRULE, &pr)) {
+		if (pfctl_add_rule(dev, &pr.rule, pr.anchor, pr.anchor_call,
+		    pr.ticket, pr.pool_ticket)) {
 			syslog(LOG_ERR, "pfl_scan_ruleset: ioctl(DIOCGETRULE):"
 			    " %s", strerror(errno));
 			goto err;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:48 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 20B2763145D;
 Fri,  7 May 2021 15:25:48 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmW4442z4k2B;
 Fri,  7 May 2021 15:25:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 62A625AD0;
 Fri,  7 May 2021 15:25:46 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPkS5026345;
 Fri, 7 May 2021 15:25:46 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPkXB026344;
 Fri, 7 May 2021 15:25:46 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:46 GMT
Message-Id: <202105071525.147FPkXB026344@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 6fd48efd8d6d - stable/13 - libpfctl: Switch to pfctl_rule
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 6fd48efd8d6d4a6fc12e60baf9ea717034b40eca
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:48 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=6fd48efd8d6d4a6fc12e60baf9ea717034b40eca

commit 6fd48efd8d6d4a6fc12e60baf9ea717034b40eca
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-08 08:31:46 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    libpfctl: Switch to pfctl_rule
    
    Stop using the kernel's struct pf_rule, switch to libpfctl's pfctl_rule.
    Now that we use nvlists to communicate with the kernel these structures
    can be fully decoupled.
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29644
    
    (cherry picked from commit e9eb09414a8de8f3329f51b48c90a5e5ac8f09cf)
---
 contrib/pf/ftp-proxy/filter.c             | 100 +++++++++++----------
 contrib/pf/tftp-proxy/filter.c            |  90 ++++++++++---------
 lib/libpfctl/libpfctl.c                   |  10 +--
 lib/libpfctl/libpfctl.h                   | 143 +++++++++++++++++++++++++++++-
 sbin/pfctl/parse.y                        |  52 +++++------
 sbin/pfctl/pf_ruleset.c                   |  63 ++++++-------
 sbin/pfctl/pfctl.c                        |  91 ++++++++++---------
 sbin/pfctl/pfctl.h                        |  14 +--
 sbin/pfctl/pfctl_optimize.c               |  82 ++++++++---------
 sbin/pfctl/pfctl_parser.c                 |   2 +-
 sbin/pfctl/pfctl_parser.h                 |  14 +--
 usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c |  17 ++--
 12 files changed, 416 insertions(+), 262 deletions(-)

diff --git a/contrib/pf/ftp-proxy/filter.c b/contrib/pf/ftp-proxy/filter.c
index db3735565dac..dad6324808bc 100644
--- a/contrib/pf/ftp-proxy/filter.c
+++ b/contrib/pf/ftp-proxy/filter.c
@@ -50,7 +50,11 @@ int server_lookup6(struct sockaddr_in6 *, struct sockaddr_in6 *,
     struct sockaddr_in6 *);
 
 static struct pfioc_pooladdr	pfp;
-static struct pfioc_rule	pfr;
+static struct pfctl_rule	pfrule;
+static char			pfanchor[PF_ANCHOR_NAME_SIZE];
+static char			pfanchor_call[PF_ANCHOR_NAME_SIZE];
+static uint32_t			pfticket;
+static uint32_t			pfpool_ticket;
 static struct pfioc_trans	pft;
 static struct pfioc_trans_e	pfte[TRANS_SIZE];
 static int dev, rule_log;
@@ -68,9 +72,9 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 	if (prepare_rule(id, PF_RULESET_FILTER, src, dst, d_port) == -1)
 		return (-1);
 
-	pfr.rule.direction = dir;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.direction = dir;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -99,14 +103,14 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(nat)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = nat_range_low;
-	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = nat_range_low;
+	pfrule.rpool.proxy_port[1] = nat_range_high;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -134,13 +138,13 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(rdr)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = rdr_port;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -237,21 +241,21 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 
 	memset(&pfp, 0, sizeof pfp);
-	memset(&pfr, 0, sizeof pfr);
+	memset(&pfrule, 0, sizeof pfrule);
 	snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTP_PROXY_ANCHOR,
 	    getpid(), id);
 	strlcpy(pfp.anchor, an, PF_ANCHOR_NAME_SIZE);
-	strlcpy(pfr.anchor, an, PF_ANCHOR_NAME_SIZE);
+	strlcpy(pfanchor, an, PF_ANCHOR_NAME_SIZE);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
-		pfr.ticket = pfte[TRANS_FILTER].ticket;
+		pfticket = pfte[TRANS_FILTER].ticket;
 		break;
 	case PF_RULESET_NAT:
-		pfr.ticket = pfte[TRANS_NAT].ticket;
+		pfticket = pfte[TRANS_NAT].ticket;
 		break;
 	case PF_RULESET_RDR:
-		pfr.ticket = pfte[TRANS_RDR].ticket;
+		pfticket = pfte[TRANS_RDR].ticket;
 		break;
 	default:
 		errno = EINVAL;
@@ -259,30 +263,30 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 	if (ioctl(dev, DIOCBEGINADDRS, &pfp) == -1)
 		return (-1);
-	pfr.pool_ticket = pfp.ticket;
+	pfpool_ticket = pfp.ticket;
 
 	/* Generic for all rule types. */
-	pfr.rule.af = src->sa_family;
-	pfr.rule.proto = IPPROTO_TCP;
-	pfr.rule.src.addr.type = PF_ADDR_ADDRMASK;
-	pfr.rule.dst.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.af = src->sa_family;
+	pfrule.proto = IPPROTO_TCP;
+	pfrule.src.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.dst.addr.type = PF_ADDR_ADDRMASK;
 	if (src->sa_family == AF_INET) {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v4,
+		memcpy(&pfrule.src.addr.v.a.addr.v4,
 		    &satosin(src)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 4);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v4,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 4);
+		memcpy(&pfrule.dst.addr.v.a.addr.v4,
 		    &satosin(dst)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 4);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 4);
 	} else {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v6,
+		memcpy(&pfrule.src.addr.v.a.addr.v6,
 		    &satosin6(src)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 16);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v6,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 16);
+		memcpy(&pfrule.dst.addr.v.a.addr.v6,
 		    &satosin6(dst)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 16);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 16);
 	}
-	pfr.rule.dst.port_op = PF_OP_EQ;
-	pfr.rule.dst.port[0] = htons(d_port);
+	pfrule.dst.port_op = PF_OP_EQ;
+	pfrule.dst.port[0] = htons(d_port);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
@@ -291,32 +295,32 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 		 *     from $src to $dst port = $d_port flags S/SA keep state
 		 *     (max 1) [queue qname] [tag tagname]
 		 */
-		pfr.rule.action = PF_PASS;
-		pfr.rule.quick = 1;
-		pfr.rule.log = rule_log;
-		pfr.rule.keep_state = 1;
-		pfr.rule.flags = TH_SYN;
-		pfr.rule.flagset = (TH_SYN|TH_ACK);
-		pfr.rule.max_states = 1;
+		pfrule.action = PF_PASS;
+		pfrule.quick = 1;
+		pfrule.log = rule_log;
+		pfrule.keep_state = 1;
+		pfrule.flags = TH_SYN;
+		pfrule.flagset = (TH_SYN|TH_ACK);
+		pfrule.max_states = 1;
 		if (qname != NULL)
-			strlcpy(pfr.rule.qname, qname, sizeof pfr.rule.qname);
+			strlcpy(pfrule.qname, qname, sizeof pfrule.qname);
 		if (tagname != NULL) {
-			pfr.rule.quick = 0;
-			strlcpy(pfr.rule.tagname, tagname,
-                                sizeof pfr.rule.tagname);
+			pfrule.quick = 0;
+			strlcpy(pfrule.tagname, tagname,
+                                sizeof pfrule.tagname);
 		}
 		break;
 	case PF_RULESET_NAT:
 		/*
 		 * nat inet[6] proto tcp from $src to $dst port $d_port -> $nat
 		 */
-		pfr.rule.action = PF_NAT;
+		pfrule.action = PF_NAT;
 		break;
 	case PF_RULESET_RDR:
 		/*
 		 * rdr inet[6] proto tcp from $src to $dst port $d_port -> $rdr
 		 */
-		pfr.rule.action = PF_RDR;
+		pfrule.action = PF_RDR;
 		break;
 	default:
 		errno = EINVAL;
diff --git a/contrib/pf/tftp-proxy/filter.c b/contrib/pf/tftp-proxy/filter.c
index 0b87d568809f..1689d3465fd3 100644
--- a/contrib/pf/tftp-proxy/filter.c
+++ b/contrib/pf/tftp-proxy/filter.c
@@ -54,7 +54,11 @@ int server_lookup6(struct sockaddr_in6 *, struct sockaddr_in6 *,
     struct sockaddr_in6 *, u_int8_t);
 
 static struct pfioc_pooladdr	pfp;
-static struct pfioc_rule	pfr;
+static struct pfctl_rule	pfrule;
+static uint32_t			pfticket;
+static uint32_t			pfpool_ticket;
+static char			pfanchor[PF_ANCHOR_NAME_SIZE];
+static char			pfanchor_call[PF_ANCHOR_NAME_SIZE];
 static struct pfioc_trans	pft;
 static struct pfioc_trans_e	pfte[TRANS_SIZE];
 static int dev, rule_log;
@@ -72,9 +76,9 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 	if (prepare_rule(id, PF_RULESET_FILTER, src, dst, d_port, proto) == -1)
 		return (-1);
 
-	pfr.rule.direction = dir;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.direction = dir;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -106,10 +110,10 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = nat_range_low;
-	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = nat_range_low;
+	pfrule.rpool.proxy_port[1] = nat_range_high;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -140,9 +144,9 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = rdr_port;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -244,21 +248,21 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 
 	memset(&pfp, 0, sizeof pfp);
-	memset(&pfr, 0, sizeof pfr);
+	memset(&pfrule, 0, sizeof pfrule);
 	snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTP_PROXY_ANCHOR,
 	    getpid(), id);
 	strlcpy(pfp.anchor, an, PF_ANCHOR_NAME_SIZE);
-	strlcpy(pfr.anchor, an, PF_ANCHOR_NAME_SIZE);
+	strlcpy(pfanchor, an, PF_ANCHOR_NAME_SIZE);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
-		pfr.ticket = pfte[TRANS_FILTER].ticket;
+		pfticket = pfte[TRANS_FILTER].ticket;
 		break;
 	case PF_RULESET_NAT:
-		pfr.ticket = pfte[TRANS_NAT].ticket;
+		pfticket = pfte[TRANS_NAT].ticket;
 		break;
 	case PF_RULESET_RDR:
-		pfr.ticket = pfte[TRANS_RDR].ticket;
+		pfticket = pfte[TRANS_RDR].ticket;
 		break;
 	default:
 		errno = EINVAL;
@@ -266,30 +270,30 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 	if (ioctl(dev, DIOCBEGINADDRS, &pfp) == -1)
 		return (-1);
-	pfr.pool_ticket = pfp.ticket;
+	pfpool_ticket = pfp.ticket;
 
 	/* Generic for all rule types. */
-	pfr.rule.af = src->sa_family;
-	pfr.rule.proto = proto;
-	pfr.rule.src.addr.type = PF_ADDR_ADDRMASK;
-	pfr.rule.dst.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.af = src->sa_family;
+	pfrule.proto = proto;
+	pfrule.src.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.dst.addr.type = PF_ADDR_ADDRMASK;
 	if (src->sa_family == AF_INET) {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v4,
+		memcpy(&pfrule.src.addr.v.a.addr.v4,
 		    &satosin(src)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 4);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v4,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 4);
+		memcpy(&pfrule.dst.addr.v.a.addr.v4,
 		    &satosin(dst)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 4);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 4);
 	} else {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v6,
+		memcpy(&pfrule.src.addr.v.a.addr.v6,
 		    &satosin6(src)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 16);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v6,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 16);
+		memcpy(&pfrule.dst.addr.v.a.addr.v6,
 		    &satosin6(dst)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 16);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 16);
 	}
-	pfr.rule.dst.port_op = PF_OP_EQ;
-	pfr.rule.dst.port[0] = htons(d_port);
+	pfrule.dst.port_op = PF_OP_EQ;
+	pfrule.dst.port[0] = htons(d_port);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
@@ -298,34 +302,34 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 		 *     from $src to $dst port = $d_port flags S/SAFR keep state
 		 *     (max 1) [queue qname]
 		 */
-		pfr.rule.action = PF_PASS;
-		pfr.rule.quick = 1;
-		pfr.rule.log = rule_log;
-		pfr.rule.keep_state = 1;
+		pfrule.action = PF_PASS;
+		pfrule.quick = 1;
+		pfrule.log = rule_log;
+		pfrule.keep_state = 1;
 #ifdef __FreeBSD__
-		pfr.rule.flags = (proto == IPPROTO_TCP ? TH_SYN : 0);
-		pfr.rule.flagset = (proto == IPPROTO_TCP ?
+		pfrule.flags = (proto == IPPROTO_TCP ? TH_SYN : 0);
+		pfrule.flagset = (proto == IPPROTO_TCP ?
 		    (TH_SYN|TH_ACK|TH_FIN|TH_RST) : 0);
 #else
-		pfr.rule.flags = (proto == IPPROTO_TCP ? TH_SYN : NULL);
-		pfr.rule.flagset = (proto == IPPROTO_TCP ?
+		pfrule.flags = (proto == IPPROTO_TCP ? TH_SYN : NULL);
+		pfrule.flagset = (proto == IPPROTO_TCP ?
 		    (TH_SYN|TH_ACK|TH_FIN|TH_RST) : NULL);
 #endif
-		pfr.rule.max_states = 1;
+		pfrule.max_states = 1;
 		if (qname != NULL)
-			strlcpy(pfr.rule.qname, qname, sizeof pfr.rule.qname);
+			strlcpy(pfrule.qname, qname, sizeof pfrule.qname);
 		break;
 	case PF_RULESET_NAT:
 		/*
 		 * nat inet[6] proto tcp from $src to $dst port $d_port -> $nat
 		 */
-		pfr.rule.action = PF_NAT;
+		pfrule.action = PF_NAT;
 		break;
 	case PF_RULESET_RDR:
 		/*
 		 * rdr inet[6] proto tcp from $src to $dst port $d_port -> $rdr
 		 */
-		pfr.rule.action = PF_RDR;
+		pfrule.action = PF_RDR;
 		break;
 	default:
 		errno = EINVAL;
diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index e0d429112f5b..dc174d8d5b72 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -256,7 +256,7 @@ pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 
 static void
 pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
-    const struct pf_rule *r)
+    const struct pfctl_rule *r)
 {
 	nvlist_t *nvl = nvlist_create(0);
 
@@ -267,14 +267,14 @@ pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
 }
 
 static void
-pf_nvdivert_to_divert(const nvlist_t *nvl, struct pf_rule *rule)
+pf_nvdivert_to_divert(const nvlist_t *nvl, struct pfctl_rule *rule)
 {
 	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"), &rule->divert.addr);
 	rule->divert.port = nvlist_get_number(nvl, "port");
 }
 
 static void
-pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
+pf_nvrule_to_rule(const nvlist_t *nvl, struct pfctl_rule *rule)
 {
 	const uint64_t *skip;
 	size_t skipcount;
@@ -373,7 +373,7 @@ pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
 }
 
 int
-pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
+pfctl_add_rule(int dev, const struct pfctl_rule *r, const char *anchor,
     const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
 {
 	struct pfioc_nv nv;
@@ -482,7 +482,7 @@ pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
 
 int
 pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
-    u_int32_t ruleset, struct pf_rule *rule, char *anchor_call)
+    u_int32_t ruleset, struct pfctl_rule *rule, char *anchor_call)
 {
 	struct pfioc_nv nv;
 	nvlist_t *nvl;
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index 65ff2179f23d..996830619489 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -36,10 +36,147 @@
 
 #include <netpfil/pf/pf.h>
 
+struct pfctl_anchor;
+
+struct pfctl_rule {
+	struct pf_rule_addr	 src;
+	struct pf_rule_addr	 dst;
+	union pf_rule_ptr	 skip[PF_SKIP_COUNT];
+	char			 label[PF_RULE_LABEL_SIZE];
+	char			 ifname[IFNAMSIZ];
+	char			 qname[PF_QNAME_SIZE];
+	char			 pqname[PF_QNAME_SIZE];
+	char			 tagname[PF_TAG_NAME_SIZE];
+	char			 match_tagname[PF_TAG_NAME_SIZE];
+
+	char			 overload_tblname[PF_TABLE_NAME_SIZE];
+
+	TAILQ_ENTRY(pfctl_rule)	 entries;
+	struct pf_pool		 rpool;
+
+	u_int64_t		 evaluations;
+	u_int64_t		 packets[2];
+	u_int64_t		 bytes[2];
+
+	struct pfi_kif		*kif;
+	struct pfctl_anchor	*anchor;
+	struct pfr_ktable	*overload_tbl;
+
+	pf_osfp_t		 os_fingerprint;
+
+	int			 rtableid;
+	u_int32_t		 timeout[PFTM_MAX];
+	u_int32_t		 max_states;
+	u_int32_t		 max_src_nodes;
+	u_int32_t		 max_src_states;
+	u_int32_t		 max_src_conn;
+	struct {
+		u_int32_t		limit;
+		u_int32_t		seconds;
+	}			 max_src_conn_rate;
+	u_int32_t		 qid;
+	u_int32_t		 pqid;
+	u_int32_t		 nr;
+	u_int32_t		 prob;
+	uid_t			 cuid;
+	pid_t			 cpid;
+
+	counter_u64_t		 states_cur;
+	counter_u64_t		 states_tot;
+	counter_u64_t		 src_nodes;
+
+	u_int16_t		 return_icmp;
+	u_int16_t		 return_icmp6;
+	u_int16_t		 max_mss;
+	u_int16_t		 tag;
+	u_int16_t		 match_tag;
+	u_int16_t		 scrub_flags;
+
+	struct pf_rule_uid	 uid;
+	struct pf_rule_gid	 gid;
+
+	u_int32_t		 rule_flag;
+	u_int8_t		 action;
+	u_int8_t		 direction;
+	u_int8_t		 log;
+	u_int8_t		 logif;
+	u_int8_t		 quick;
+	u_int8_t		 ifnot;
+	u_int8_t		 match_tag_not;
+	u_int8_t		 natpass;
+
+	u_int8_t		 keep_state;
+	sa_family_t		 af;
+	u_int8_t		 proto;
+	u_int8_t		 type;
+	u_int8_t		 code;
+	u_int8_t		 flags;
+	u_int8_t		 flagset;
+	u_int8_t		 min_ttl;
+	u_int8_t		 allow_opts;
+	u_int8_t		 rt;
+	u_int8_t		 return_ttl;
+	u_int8_t		 tos;
+	u_int8_t		 set_tos;
+	u_int8_t		 anchor_relative;
+	u_int8_t		 anchor_wildcard;
+
+	u_int8_t		 flush;
+	u_int8_t		 prio;
+	u_int8_t		 set_prio[2];
+
+	struct {
+		struct pf_addr		addr;
+		u_int16_t		port;
+	}			divert;
+
+	uint64_t		 u_states_cur;
+	uint64_t		 u_states_tot;
+	uint64_t		 u_src_nodes;
+};
+
+TAILQ_HEAD(pfctl_rulequeue, pfctl_rule);
+
+struct pfctl_ruleset {
+	struct {
+		struct pfctl_rulequeue	 queues[2];
+		struct {
+			struct pfctl_rulequeue	*ptr;
+			struct pfctl_rule	**ptr_array;
+			u_int32_t		 rcount;
+			u_int32_t		 ticket;
+			int			 open;
+		}			 active, inactive;
+	}			 rules[PF_RULESET_MAX];
+	struct pfctl_anchor	*anchor;
+	u_int32_t		 tticket;
+	int			 tables;
+	int			 topen;
+};
+
+RB_HEAD(pfctl_anchor_global, pfctl_anchor);
+RB_HEAD(pfctl_anchor_node, pfctl_anchor);
+struct pfctl_anchor {
+	RB_ENTRY(pfctl_anchor)	 entry_global;
+	RB_ENTRY(pfctl_anchor)	 entry_node;
+	struct pfctl_anchor	*parent;
+	struct pfctl_anchor_node children;
+	char			 name[PF_ANCHOR_NAME_SIZE];
+	char			 path[MAXPATHLEN];
+	struct pfctl_ruleset	 ruleset;
+	int			 refcnt;	/* anchor rules */
+	int			 match;	/* XXX: used for pfctl black magic */
+};
+RB_PROTOTYPE(pfctl_anchor_global, pfctl_anchor, entry_global,
+    pf_anchor_compare);
+RB_PROTOTYPE(pfctl_anchor_node, pfctl_anchor, entry_node,
+    pf_anchor_compare);
+
 int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
-	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
+	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
 	    char *anchor_call);
-int	pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
-	    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket);
+int	pfctl_add_rule(int dev, const struct pfctl_rule *r,
+	    const char *anchor, const char *anchor_call, u_int32_t ticket,
+	    u_int32_t pool_ticket);
 
 #endif
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index 89e421e6b5ad..08da7e6bddd6 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -317,10 +317,10 @@ static struct node_state_opt	*keep_state_defaults = NULL;
 int		 disallow_table(struct node_host *, const char *);
 int		 disallow_urpf_failed(struct node_host *, const char *);
 int		 disallow_alias(struct node_host *, const char *);
-int		 rule_consistent(struct pf_rule *, int);
-int		 filter_consistent(struct pf_rule *, int);
-int		 nat_consistent(struct pf_rule *);
-int		 rdr_consistent(struct pf_rule *);
+int		 rule_consistent(struct pfctl_rule *, int);
+int		 filter_consistent(struct pfctl_rule *, int);
+int		 nat_consistent(struct pfctl_rule *);
+int		 rdr_consistent(struct pfctl_rule *);
 int		 process_tabledef(char *, struct table_opts *);
 void		 expand_label_str(char *, size_t, const char *, const char *);
 void		 expand_label_if(const char *, char *, size_t, const char *);
@@ -333,7 +333,7 @@ void		 expand_label_nr(const char *, char *, size_t);
 void		 expand_label(char *, size_t, const char *, u_int8_t,
 		    struct node_host *, struct node_port *, struct node_host *,
 		    struct node_port *, u_int8_t);
-void		 expand_rule(struct pf_rule *, struct node_if *,
+void		 expand_rule(struct pfctl_rule *, struct node_if *,
 		    struct node_host *, struct node_proto *, struct node_os *,
 		    struct node_host *, struct node_port *, struct node_host *,
 		    struct node_port *, struct node_uid *, struct node_gid *,
@@ -348,10 +348,10 @@ int		 expand_skip_interface(struct node_if *);
 
 int	 check_rulestate(int);
 int	 getservice(char *);
-int	 rule_label(struct pf_rule *, char *);
+int	 rule_label(struct pfctl_rule *, char *);
 int	 rt_tableid_max(void);
 
-void	 mv_rules(struct pf_ruleset *, struct pf_ruleset *);
+void	 mv_rules(struct pfctl_ruleset *, struct pfctl_ruleset *);
 void	 decide_address_family(struct node_host *, sa_family_t *);
 void	 remove_invalid_hosts(struct node_host **, sa_family_t *);
 int	 invalid_redirect(struct node_host *, sa_family_t);
@@ -788,7 +788,7 @@ pfa_anchorlist	: /* empty */
 pfa_anchor	: '{'
 		{
 			char ta[PF_ANCHOR_NAME_SIZE];
-			struct pf_ruleset *rs;
+			struct pfctl_ruleset *rs;
 
 			/* steping into a brace anchor */
 			pf->asd++;
@@ -814,7 +814,7 @@ pfa_anchor	: '{'
 anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 		    filter_opts pfa_anchor
 		{
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 			struct node_proto	*proto;
 
 			if (check_rulestate(PFCTL_STATE_FILTER)) {
@@ -833,7 +833,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			memset(&r, 0, sizeof(r));
 			if (pf->astack[pf->asd + 1]) {
 				/* move inline rules into relative location */
-				pf_anchor_setup(&r,
+				pfctl_anchor_setup(&r,
 				    &pf->astack[pf->asd]->ruleset,
 				    $2 ? $2 : pf->alast->name);
 		
@@ -946,7 +946,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			pf->astack[pf->asd + 1] = NULL;
 		}
 		| NATANCHOR string interface af proto fromto rtable {
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT)) {
 				free($2);
@@ -967,7 +967,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			free($2);
 		}
 		| RDRANCHOR string interface af proto fromto rtable {
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT)) {
 				free($2);
@@ -1009,7 +1009,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			free($2);
 		}
 		| BINATANCHOR string interface af proto fromto rtable {
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT)) {
 				free($2);
@@ -1087,7 +1087,7 @@ scrubaction	: no SCRUB {
 
 scrubrule	: scrubaction dir logquick interface af proto fromto scrub_opts
 		{
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_SCRUB))
 				YYERROR;
@@ -1247,7 +1247,7 @@ fragcache	: FRAGMENT REASSEMBLE	{ $$ = 0; /* default */ }
 		;
 
 antispoof	: ANTISPOOF logquick antispoof_ifspc af antispoof_opts {
-			struct pf_rule		 r;
+			struct pfctl_rule	 r;
 			struct node_host	*h = NULL, *hh;
 			struct node_if		*i, *j;
 
@@ -2022,7 +2022,7 @@ qassign_item	: STRING			{
 pfrule		: action dir logquick interface route af proto fromto
 		    filter_opts
 		{
-			struct pf_rule		 r;
+			struct pfctl_rule	 r;
 			struct node_state_opt	*o;
 			struct node_proto	*proto;
 			int			 srctrack = 0;
@@ -4071,7 +4071,7 @@ nataction	: no NAT natpasslog {
 natrule		: nataction interface af proto fromto tag tagged rtable
 		    redirpool pool_opts
 		{
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT))
 				YYERROR;
@@ -4230,7 +4230,7 @@ natrule		: nataction interface af proto fromto tag tagged rtable
 binatrule	: no BINAT natpasslog interface af proto FROM ipspec toipspec tag
 		    tagged rtable redirection
 		{
-			struct pf_rule		binat;
+			struct pfctl_rule	binat;
 			struct pf_pooladdr	*pa;
 
 			if (check_rulestate(PFCTL_STATE_NAT))
@@ -4615,7 +4615,7 @@ disallow_alias(struct node_host *h, const char *fmt)
 }
 
 int
-rule_consistent(struct pf_rule *r, int anchor_call)
+rule_consistent(struct pfctl_rule *r, int anchor_call)
 {
 	int	problems = 0;
 
@@ -4643,7 +4643,7 @@ rule_consistent(struct pf_rule *r, int anchor_call)
 }
 
 int
-filter_consistent(struct pf_rule *r, int anchor_call)
+filter_consistent(struct pfctl_rule *r, int anchor_call)
 {
 	int	problems = 0;
 
@@ -4706,13 +4706,13 @@ filter_consistent(struct pf_rule *r, int anchor_call)
 }
 
 int
-nat_consistent(struct pf_rule *r)
+nat_consistent(struct pfctl_rule *r)
 {
 	return (0);	/* yeah! */
 }
 
 int
-rdr_consistent(struct pf_rule *r)
+rdr_consistent(struct pfctl_rule *r)
 {
 	int			 problems = 0;
 
@@ -5248,7 +5248,7 @@ expand_queue(struct pf_altq *a, struct node_if *interfaces,
 }
 
 void
-expand_rule(struct pf_rule *r,
+expand_rule(struct pfctl_rule *r,
     struct node_if *interfaces, struct node_host *rpool_hosts,
     struct node_proto *protos, struct node_os *src_oses,
     struct node_host *src_hosts, struct node_port *src_ports,
@@ -6080,10 +6080,10 @@ symget(const char *nam)
 }
 
 void
-mv_rules(struct pf_ruleset *src, struct pf_ruleset *dst)
+mv_rules(struct pfctl_ruleset *src, struct pfctl_ruleset *dst)
 {
 	int i;
-	struct pf_rule *r;
+	struct pfctl_rule *r;
 
 	for (i = 0; i < PF_RULESET_MAX; ++i) {
 		while ((r = TAILQ_FIRST(src->rules[i].active.ptr))
@@ -6214,7 +6214,7 @@ getservice(char *n)
 }
 
 int
-rule_label(struct pf_rule *r, char *s)
+rule_label(struct pfctl_rule *r, char *s)
 {
 	if (s) {
 		if (strlcpy(r->label, s, sizeof(r->label)) >=
diff --git a/sbin/pfctl/pf_ruleset.c b/sbin/pfctl/pf_ruleset.c
index baac1deb4fa7..f5cddf481871 100644
--- a/sbin/pfctl/pf_ruleset.c
+++ b/sbin/pfctl/pf_ruleset.c
@@ -73,22 +73,23 @@ __FBSDID("$FreeBSD$");
 #define DPFPRINTF(format, x...)	((void)0)
 #endif /* PFDEBUG */
 
-struct pf_anchor_global	 pf_anchors;
-struct pf_anchor	 pf_main_anchor;
+struct pfctl_anchor_global	 pf_anchors;
+struct pfctl_anchor	 pf_main_anchor;
 #undef V_pf_anchors
 #define V_pf_anchors		 pf_anchors
 #undef pf_main_ruleset
 #define pf_main_ruleset		 pf_main_anchor.ruleset
 
-static __inline int		pf_anchor_compare(struct pf_anchor *,
-				    struct pf_anchor *);
-static struct pf_anchor		*pf_find_anchor(const char *);
+static __inline int		pf_anchor_compare(struct pfctl_anchor *,
+				    struct pfctl_anchor *);
+static struct pfctl_anchor	*pf_find_anchor(const char *);
 
-RB_GENERATE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare);
-RB_GENERATE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare);
+RB_GENERATE(pfctl_anchor_global, pfctl_anchor, entry_global,
+    pf_anchor_compare);
+RB_GENERATE(pfctl_anchor_node, pfctl_anchor, entry_node, pf_anchor_compare);
 
 static __inline int
-pf_anchor_compare(struct pf_anchor *a, struct pf_anchor *b)
+pf_anchor_compare(struct pfctl_anchor *a, struct pfctl_anchor *b)
 {
 	int c = strcmp(a->path, b->path);
 
@@ -126,11 +127,11 @@ pf_get_ruleset_number(u_int8_t action)
 }
 
 void
-pf_init_ruleset(struct pf_ruleset *ruleset)
+pf_init_ruleset(struct pfctl_ruleset *ruleset)
 {
 	int	i;
 
-	memset(ruleset, 0, sizeof(struct pf_ruleset));
+	memset(ruleset, 0, sizeof(struct pfctl_ruleset));
 	for (i = 0; i < PF_RULESET_MAX; i++) {
 		TAILQ_INIT(&ruleset->rules[i].queues[0]);
 		TAILQ_INIT(&ruleset->rules[i].queues[1]);
@@ -139,24 +140,24 @@ pf_init_ruleset(struct pf_ruleset *ruleset)
 	}
 }
 
-static struct pf_anchor *
+static struct pfctl_anchor *
 pf_find_anchor(const char *path)
 {
-	struct pf_anchor	*key, *found;
+	struct pfctl_anchor	*key, *found;
 
-	key = (struct pf_anchor *)rs_malloc(sizeof(*key));
+	key = (struct pfctl_anchor *)rs_malloc(sizeof(*key));
 	if (key == NULL)
 		return (NULL);
 	strlcpy(key->path, path, sizeof(key->path));
-	found = RB_FIND(pf_anchor_global, &V_pf_anchors, key);
+	found = RB_FIND(pfctl_anchor_global, &V_pf_anchors, key);
 	rs_free(key);
 	return (found);
 }
 
-struct pf_ruleset *
+struct pfctl_ruleset *
 pf_find_ruleset(const char *path)
 {
-	struct pf_anchor	*anchor;
+	struct pfctl_anchor	*anchor;
 
 	while (*path == '/')
 		path++;
@@ -169,12 +170,12 @@ pf_find_ruleset(const char *path)
 		return (&anchor->ruleset);
 }
 
-struct pf_ruleset *
+struct pfctl_ruleset *
 pf_find_or_create_ruleset(const char *path)
 {
 	char			*p, *q, *r;
-	struct pf_ruleset	*ruleset;
-	struct pf_anchor	*anchor = NULL, *dup, *parent = NULL;
+	struct pfctl_ruleset	*ruleset;
+	struct pfctl_anchor	*anchor = NULL, *dup, *parent = NULL;
 
 	if (path[0] == 0)
 		return (&pf_main_ruleset);
@@ -212,7 +213,7 @@ pf_find_or_create_ruleset(const char *path)
 			rs_free(p);
 			return (NULL);
 		}
-		anchor = (struct pf_anchor *)rs_malloc(sizeof(*anchor));
+		anchor = (struct pfctl_anchor *)rs_malloc(sizeof(*anchor));
 		if (anchor == NULL) {
 			rs_free(p);
 			return (NULL);
@@ -225,7 +226,7 @@ pf_find_or_create_ruleset(const char *path)
 			strlcat(anchor->path, "/", sizeof(anchor->path));
 		}
 		strlcat(anchor->path, anchor->name, sizeof(anchor->path));
-		if ((dup = RB_INSERT(pf_anchor_global, &V_pf_anchors, anchor)) !=
+		if ((dup = RB_INSERT(pfctl_anchor_global, &V_pf_anchors, anchor)) !=
 		    NULL) {
 			printf("pf_find_or_create_ruleset: RB_INSERT1 "
 			    "'%s' '%s' collides with '%s' '%s'\n",
@@ -236,13 +237,13 @@ pf_find_or_create_ruleset(const char *path)
 		}
 		if (parent != NULL) {
 			anchor->parent = parent;
-			if ((dup = RB_INSERT(pf_anchor_node, &parent->children,
+			if ((dup = RB_INSERT(pfctl_anchor_node, &parent->children,
 			    anchor)) != NULL) {
 				printf("pf_find_or_create_ruleset: "
 				    "RB_INSERT2 '%s' '%s' collides with "
 				    "'%s' '%s'\n", anchor->path, anchor->name,
 				    dup->path, dup->name);
-				RB_REMOVE(pf_anchor_global, &V_pf_anchors,
+				RB_REMOVE(pfctl_anchor_global, &V_pf_anchors,
 				    anchor);
 				rs_free(anchor);
 				rs_free(p);
@@ -262,9 +263,9 @@ pf_find_or_create_ruleset(const char *path)
 }
 
 void
-pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
+pf_remove_if_empty_ruleset(struct pfctl_ruleset *ruleset)
 {
-	struct pf_anchor	*parent;
+	struct pfctl_anchor	*parent;
 	int			 i;
 
 	while (ruleset != NULL) {
@@ -278,9 +279,9 @@ pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
 			    !TAILQ_EMPTY(ruleset->rules[i].inactive.ptr) ||
 			    ruleset->rules[i].inactive.open)
 				return;
-		RB_REMOVE(pf_anchor_global, &V_pf_anchors, ruleset->anchor);
+		RB_REMOVE(pfctl_anchor_global, &V_pf_anchors, ruleset->anchor);
 		if ((parent = ruleset->anchor->parent) != NULL)
-			RB_REMOVE(pf_anchor_node, &parent->children,
+			RB_REMOVE(pfctl_anchor_node, &parent->children,
 			    ruleset->anchor);
 		rs_free(ruleset->anchor);
 		if (parent == NULL)
@@ -289,11 +290,11 @@ pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
 	}
 }
 int
-pf_anchor_setup(struct pf_rule *r, const struct pf_ruleset *s,
+pfctl_anchor_setup(struct pfctl_rule *r, const struct pfctl_ruleset *s,
     const char *name)
 {
 	char			*p, *path;
-	struct pf_ruleset	*ruleset;
+	struct pfctl_ruleset	*ruleset;
 
 	r->anchor = NULL;
 	r->anchor_relative = 0;
@@ -314,7 +315,7 @@ pf_anchor_setup(struct pf_rule *r, const struct pf_ruleset *s,
 			strlcpy(path, s->anchor->path, MAXPATHLEN);
 		while (name[0] == '.' && name[1] == '.' && name[2] == '/') {
 			if (!path[0]) {
-				printf("pf_anchor_setup: .. beyond root\n");
+				printf("pfctl_anchor_setup: .. beyond root\n");
*** 690 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:47 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 18989631450;
 Fri,  7 May 2021 15:25:47 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmT2PrJz4k41;
 Fri,  7 May 2021 15:25:44 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9A2355B3C;
 Fri,  7 May 2021 15:25:44 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPi8e026282;
 Fri, 7 May 2021 15:25:44 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPiZ2026281;
 Fri, 7 May 2021 15:25:44 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:44 GMT
Message-Id: <202105071525.147FPiZ2026281@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: c1526a55d363 - stable/12 - (t)ftp-proxy: use libpfctl
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: c1526a55d363f451e3579581c9be94ab859312c6
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:47 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=c1526a55d363f451e3579581c9be94ab859312c6

commit c1526a55d363f451e3579581c9be94ab859312c6
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-03-29 12:03:39 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:01 +0000

    (t)ftp-proxy: use libpfctl
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29641
    
    (cherry picked from commit 95be9288f01f30a50440ea56d11468a2c6e18fed)
---
 contrib/pf/ftp-proxy/filter.c  | 16 +++++++++++-----
 contrib/pf/tftp-proxy/filter.c | 10 +++++++---
 libexec/tftp-proxy/Makefile    |  3 +++
 usr.sbin/ftp-proxy/Makefile    |  3 ++-
 4 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/contrib/pf/ftp-proxy/filter.c b/contrib/pf/ftp-proxy/filter.c
index f575db1c69cc..db3735565dac 100644
--- a/contrib/pf/ftp-proxy/filter.c
+++ b/contrib/pf/ftp-proxy/filter.c
@@ -28,6 +28,7 @@
 
 #include <err.h>
 #include <errno.h>
+#include <libpfctl.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
@@ -68,7 +69,8 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 		return (-1);
 
 	pfr.rule.direction = dir;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -97,12 +99,14 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(nat)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	pfr.rule.rpool.proxy_port[0] = nat_range_low;
 	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -130,11 +134,13 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(rdr)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
diff --git a/contrib/pf/tftp-proxy/filter.c b/contrib/pf/tftp-proxy/filter.c
index e5a769a62a54..0b87d568809f 100644
--- a/contrib/pf/tftp-proxy/filter.c
+++ b/contrib/pf/tftp-proxy/filter.c
@@ -32,6 +32,7 @@
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <libpfctl.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -72,7 +73,8 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 		return (-1);
 
 	pfr.rule.direction = dir;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -106,7 +108,8 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 
 	pfr.rule.rpool.proxy_port[0] = nat_range_low;
 	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
@@ -138,7 +141,8 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		return (-1);
 
 	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (ioctl(dev, DIOCADDRULE, &pfr) == -1)
+	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
+	    pfr.ticket, pfr.pool_ticket))
 		return (-1);
 
 	return (0);
diff --git a/libexec/tftp-proxy/Makefile b/libexec/tftp-proxy/Makefile
index 596ca26cb61c..353e72007734 100644
--- a/libexec/tftp-proxy/Makefile
+++ b/libexec/tftp-proxy/Makefile
@@ -6,6 +6,9 @@ PROG=	tftp-proxy
 SRCS=	tftp-proxy.c filter.c
 MAN=	tftp-proxy.8
 
+CFLAGS+= -I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
+LIBADD= pfctl
+
 WARNS?=	3
 
 .include <bsd.prog.mk>
diff --git a/usr.sbin/ftp-proxy/Makefile b/usr.sbin/ftp-proxy/Makefile
index 443db1c00a2d..a7b2ba6b43d5 100644
--- a/usr.sbin/ftp-proxy/Makefile
+++ b/usr.sbin/ftp-proxy/Makefile
@@ -8,8 +8,9 @@ MAN=	ftp-proxy.8
 SRCS=	ftp-proxy.c filter.c
 
 CFLAGS+=-I${SRCTOP}/contrib/pf/libevent
+CFLAGS+= -I${SRCTOP}/lib/libpfctl -I${OBJTOP}/lib/libpfctl
 
-LIBADD=	event
+LIBADD=	event pfctl
 
 WARNS?=	3
 

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:49 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id A229863160A;
 Fri,  7 May 2021 15:25:49 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmY18P8z4k6J;
 Fri,  7 May 2021 15:25:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EA6A45C40;
 Fri,  7 May 2021 15:25:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPluK026408;
 Fri, 7 May 2021 15:25:47 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPl0Y026407;
 Fri, 7 May 2021 15:25:47 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:47 GMT
Message-Id: <202105071525.147FPl0Y026407@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: e055cd8e7a2c - stable/12 - libpfctl: Switch to pfctl_rule
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: e055cd8e7a2c6ba5a96ec095290ad4893bb38f88
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:50 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=e055cd8e7a2c6ba5a96ec095290ad4893bb38f88

commit e055cd8e7a2c6ba5a96ec095290ad4893bb38f88
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-08 08:31:46 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:01 +0000

    libpfctl: Switch to pfctl_rule
    
    Stop using the kernel's struct pf_rule, switch to libpfctl's pfctl_rule.
    Now that we use nvlists to communicate with the kernel these structures
    can be fully decoupled.
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29644
    
    (cherry picked from commit e9eb09414a8de8f3329f51b48c90a5e5ac8f09cf)
---
 contrib/pf/ftp-proxy/filter.c             | 100 +++++++++++----------
 contrib/pf/tftp-proxy/filter.c            |  90 ++++++++++---------
 lib/libpfctl/libpfctl.c                   |  10 +--
 lib/libpfctl/libpfctl.h                   | 143 +++++++++++++++++++++++++++++-
 sbin/pfctl/parse.y                        |  52 +++++------
 sbin/pfctl/pf_ruleset.c                   |  63 ++++++-------
 sbin/pfctl/pfctl.c                        |  91 ++++++++++---------
 sbin/pfctl/pfctl.h                        |  14 +--
 sbin/pfctl/pfctl_optimize.c               |  82 ++++++++---------
 sbin/pfctl/pfctl_parser.c                 |   2 +-
 sbin/pfctl/pfctl_parser.h                 |  14 +--
 usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c |  17 ++--
 12 files changed, 416 insertions(+), 262 deletions(-)

diff --git a/contrib/pf/ftp-proxy/filter.c b/contrib/pf/ftp-proxy/filter.c
index db3735565dac..dad6324808bc 100644
--- a/contrib/pf/ftp-proxy/filter.c
+++ b/contrib/pf/ftp-proxy/filter.c
@@ -50,7 +50,11 @@ int server_lookup6(struct sockaddr_in6 *, struct sockaddr_in6 *,
     struct sockaddr_in6 *);
 
 static struct pfioc_pooladdr	pfp;
-static struct pfioc_rule	pfr;
+static struct pfctl_rule	pfrule;
+static char			pfanchor[PF_ANCHOR_NAME_SIZE];
+static char			pfanchor_call[PF_ANCHOR_NAME_SIZE];
+static uint32_t			pfticket;
+static uint32_t			pfpool_ticket;
 static struct pfioc_trans	pft;
 static struct pfioc_trans_e	pfte[TRANS_SIZE];
 static int dev, rule_log;
@@ -68,9 +72,9 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 	if (prepare_rule(id, PF_RULESET_FILTER, src, dst, d_port) == -1)
 		return (-1);
 
-	pfr.rule.direction = dir;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.direction = dir;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -99,14 +103,14 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(nat)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = nat_range_low;
-	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = nat_range_low;
+	pfrule.rpool.proxy_port[1] = nat_range_high;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -134,13 +138,13 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 		    &satosin6(rdr)->sin6_addr.s6_addr, 16);
 		memset(&pfp.addr.addr.v.a.mask.addr8, 255, 16);
 	}
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = rdr_port;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -237,21 +241,21 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 
 	memset(&pfp, 0, sizeof pfp);
-	memset(&pfr, 0, sizeof pfr);
+	memset(&pfrule, 0, sizeof pfrule);
 	snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTP_PROXY_ANCHOR,
 	    getpid(), id);
 	strlcpy(pfp.anchor, an, PF_ANCHOR_NAME_SIZE);
-	strlcpy(pfr.anchor, an, PF_ANCHOR_NAME_SIZE);
+	strlcpy(pfanchor, an, PF_ANCHOR_NAME_SIZE);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
-		pfr.ticket = pfte[TRANS_FILTER].ticket;
+		pfticket = pfte[TRANS_FILTER].ticket;
 		break;
 	case PF_RULESET_NAT:
-		pfr.ticket = pfte[TRANS_NAT].ticket;
+		pfticket = pfte[TRANS_NAT].ticket;
 		break;
 	case PF_RULESET_RDR:
-		pfr.ticket = pfte[TRANS_RDR].ticket;
+		pfticket = pfte[TRANS_RDR].ticket;
 		break;
 	default:
 		errno = EINVAL;
@@ -259,30 +263,30 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 	if (ioctl(dev, DIOCBEGINADDRS, &pfp) == -1)
 		return (-1);
-	pfr.pool_ticket = pfp.ticket;
+	pfpool_ticket = pfp.ticket;
 
 	/* Generic for all rule types. */
-	pfr.rule.af = src->sa_family;
-	pfr.rule.proto = IPPROTO_TCP;
-	pfr.rule.src.addr.type = PF_ADDR_ADDRMASK;
-	pfr.rule.dst.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.af = src->sa_family;
+	pfrule.proto = IPPROTO_TCP;
+	pfrule.src.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.dst.addr.type = PF_ADDR_ADDRMASK;
 	if (src->sa_family == AF_INET) {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v4,
+		memcpy(&pfrule.src.addr.v.a.addr.v4,
 		    &satosin(src)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 4);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v4,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 4);
+		memcpy(&pfrule.dst.addr.v.a.addr.v4,
 		    &satosin(dst)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 4);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 4);
 	} else {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v6,
+		memcpy(&pfrule.src.addr.v.a.addr.v6,
 		    &satosin6(src)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 16);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v6,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 16);
+		memcpy(&pfrule.dst.addr.v.a.addr.v6,
 		    &satosin6(dst)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 16);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 16);
 	}
-	pfr.rule.dst.port_op = PF_OP_EQ;
-	pfr.rule.dst.port[0] = htons(d_port);
+	pfrule.dst.port_op = PF_OP_EQ;
+	pfrule.dst.port[0] = htons(d_port);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
@@ -291,32 +295,32 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 		 *     from $src to $dst port = $d_port flags S/SA keep state
 		 *     (max 1) [queue qname] [tag tagname]
 		 */
-		pfr.rule.action = PF_PASS;
-		pfr.rule.quick = 1;
-		pfr.rule.log = rule_log;
-		pfr.rule.keep_state = 1;
-		pfr.rule.flags = TH_SYN;
-		pfr.rule.flagset = (TH_SYN|TH_ACK);
-		pfr.rule.max_states = 1;
+		pfrule.action = PF_PASS;
+		pfrule.quick = 1;
+		pfrule.log = rule_log;
+		pfrule.keep_state = 1;
+		pfrule.flags = TH_SYN;
+		pfrule.flagset = (TH_SYN|TH_ACK);
+		pfrule.max_states = 1;
 		if (qname != NULL)
-			strlcpy(pfr.rule.qname, qname, sizeof pfr.rule.qname);
+			strlcpy(pfrule.qname, qname, sizeof pfrule.qname);
 		if (tagname != NULL) {
-			pfr.rule.quick = 0;
-			strlcpy(pfr.rule.tagname, tagname,
-                                sizeof pfr.rule.tagname);
+			pfrule.quick = 0;
+			strlcpy(pfrule.tagname, tagname,
+                                sizeof pfrule.tagname);
 		}
 		break;
 	case PF_RULESET_NAT:
 		/*
 		 * nat inet[6] proto tcp from $src to $dst port $d_port -> $nat
 		 */
-		pfr.rule.action = PF_NAT;
+		pfrule.action = PF_NAT;
 		break;
 	case PF_RULESET_RDR:
 		/*
 		 * rdr inet[6] proto tcp from $src to $dst port $d_port -> $rdr
 		 */
-		pfr.rule.action = PF_RDR;
+		pfrule.action = PF_RDR;
 		break;
 	default:
 		errno = EINVAL;
diff --git a/contrib/pf/tftp-proxy/filter.c b/contrib/pf/tftp-proxy/filter.c
index 0b87d568809f..1689d3465fd3 100644
--- a/contrib/pf/tftp-proxy/filter.c
+++ b/contrib/pf/tftp-proxy/filter.c
@@ -54,7 +54,11 @@ int server_lookup6(struct sockaddr_in6 *, struct sockaddr_in6 *,
     struct sockaddr_in6 *, u_int8_t);
 
 static struct pfioc_pooladdr	pfp;
-static struct pfioc_rule	pfr;
+static struct pfctl_rule	pfrule;
+static uint32_t			pfticket;
+static uint32_t			pfpool_ticket;
+static char			pfanchor[PF_ANCHOR_NAME_SIZE];
+static char			pfanchor_call[PF_ANCHOR_NAME_SIZE];
 static struct pfioc_trans	pft;
 static struct pfioc_trans_e	pfte[TRANS_SIZE];
 static int dev, rule_log;
@@ -72,9 +76,9 @@ add_filter(u_int32_t id, u_int8_t dir, struct sockaddr *src,
 	if (prepare_rule(id, PF_RULESET_FILTER, src, dst, d_port, proto) == -1)
 		return (-1);
 
-	pfr.rule.direction = dir;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.direction = dir;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -106,10 +110,10 @@ add_nat(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = nat_range_low;
-	pfr.rule.rpool.proxy_port[1] = nat_range_high;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = nat_range_low;
+	pfrule.rpool.proxy_port[1] = nat_range_high;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -140,9 +144,9 @@ add_rdr(u_int32_t id, struct sockaddr *src, struct sockaddr *dst,
 	if (ioctl(dev, DIOCADDADDR, &pfp) == -1)
 		return (-1);
 
-	pfr.rule.rpool.proxy_port[0] = rdr_port;
-	if (pfctl_add_rule(dev, &pfr.rule, pfr.anchor, pfr.anchor_call,
-	    pfr.ticket, pfr.pool_ticket))
+	pfrule.rpool.proxy_port[0] = rdr_port;
+	if (pfctl_add_rule(dev, &pfrule, pfanchor, pfanchor_call,
+	    pfticket, pfpool_ticket))
 		return (-1);
 
 	return (0);
@@ -244,21 +248,21 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 
 	memset(&pfp, 0, sizeof pfp);
-	memset(&pfr, 0, sizeof pfr);
+	memset(&pfrule, 0, sizeof pfrule);
 	snprintf(an, PF_ANCHOR_NAME_SIZE, "%s/%d.%d", FTP_PROXY_ANCHOR,
 	    getpid(), id);
 	strlcpy(pfp.anchor, an, PF_ANCHOR_NAME_SIZE);
-	strlcpy(pfr.anchor, an, PF_ANCHOR_NAME_SIZE);
+	strlcpy(pfanchor, an, PF_ANCHOR_NAME_SIZE);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
-		pfr.ticket = pfte[TRANS_FILTER].ticket;
+		pfticket = pfte[TRANS_FILTER].ticket;
 		break;
 	case PF_RULESET_NAT:
-		pfr.ticket = pfte[TRANS_NAT].ticket;
+		pfticket = pfte[TRANS_NAT].ticket;
 		break;
 	case PF_RULESET_RDR:
-		pfr.ticket = pfte[TRANS_RDR].ticket;
+		pfticket = pfte[TRANS_RDR].ticket;
 		break;
 	default:
 		errno = EINVAL;
@@ -266,30 +270,30 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 	}
 	if (ioctl(dev, DIOCBEGINADDRS, &pfp) == -1)
 		return (-1);
-	pfr.pool_ticket = pfp.ticket;
+	pfpool_ticket = pfp.ticket;
 
 	/* Generic for all rule types. */
-	pfr.rule.af = src->sa_family;
-	pfr.rule.proto = proto;
-	pfr.rule.src.addr.type = PF_ADDR_ADDRMASK;
-	pfr.rule.dst.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.af = src->sa_family;
+	pfrule.proto = proto;
+	pfrule.src.addr.type = PF_ADDR_ADDRMASK;
+	pfrule.dst.addr.type = PF_ADDR_ADDRMASK;
 	if (src->sa_family == AF_INET) {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v4,
+		memcpy(&pfrule.src.addr.v.a.addr.v4,
 		    &satosin(src)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 4);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v4,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 4);
+		memcpy(&pfrule.dst.addr.v.a.addr.v4,
 		    &satosin(dst)->sin_addr.s_addr, 4);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 4);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 4);
 	} else {
-		memcpy(&pfr.rule.src.addr.v.a.addr.v6,
+		memcpy(&pfrule.src.addr.v.a.addr.v6,
 		    &satosin6(src)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.src.addr.v.a.mask.addr8, 255, 16);
-		memcpy(&pfr.rule.dst.addr.v.a.addr.v6,
+		memset(&pfrule.src.addr.v.a.mask.addr8, 255, 16);
+		memcpy(&pfrule.dst.addr.v.a.addr.v6,
 		    &satosin6(dst)->sin6_addr.s6_addr, 16);
-		memset(&pfr.rule.dst.addr.v.a.mask.addr8, 255, 16);
+		memset(&pfrule.dst.addr.v.a.mask.addr8, 255, 16);
 	}
-	pfr.rule.dst.port_op = PF_OP_EQ;
-	pfr.rule.dst.port[0] = htons(d_port);
+	pfrule.dst.port_op = PF_OP_EQ;
+	pfrule.dst.port[0] = htons(d_port);
 
 	switch (rs_num) {
 	case PF_RULESET_FILTER:
@@ -298,34 +302,34 @@ prepare_rule(u_int32_t id, int rs_num, struct sockaddr *src,
 		 *     from $src to $dst port = $d_port flags S/SAFR keep state
 		 *     (max 1) [queue qname]
 		 */
-		pfr.rule.action = PF_PASS;
-		pfr.rule.quick = 1;
-		pfr.rule.log = rule_log;
-		pfr.rule.keep_state = 1;
+		pfrule.action = PF_PASS;
+		pfrule.quick = 1;
+		pfrule.log = rule_log;
+		pfrule.keep_state = 1;
 #ifdef __FreeBSD__
-		pfr.rule.flags = (proto == IPPROTO_TCP ? TH_SYN : 0);
-		pfr.rule.flagset = (proto == IPPROTO_TCP ?
+		pfrule.flags = (proto == IPPROTO_TCP ? TH_SYN : 0);
+		pfrule.flagset = (proto == IPPROTO_TCP ?
 		    (TH_SYN|TH_ACK|TH_FIN|TH_RST) : 0);
 #else
-		pfr.rule.flags = (proto == IPPROTO_TCP ? TH_SYN : NULL);
-		pfr.rule.flagset = (proto == IPPROTO_TCP ?
+		pfrule.flags = (proto == IPPROTO_TCP ? TH_SYN : NULL);
+		pfrule.flagset = (proto == IPPROTO_TCP ?
 		    (TH_SYN|TH_ACK|TH_FIN|TH_RST) : NULL);
 #endif
-		pfr.rule.max_states = 1;
+		pfrule.max_states = 1;
 		if (qname != NULL)
-			strlcpy(pfr.rule.qname, qname, sizeof pfr.rule.qname);
+			strlcpy(pfrule.qname, qname, sizeof pfrule.qname);
 		break;
 	case PF_RULESET_NAT:
 		/*
 		 * nat inet[6] proto tcp from $src to $dst port $d_port -> $nat
 		 */
-		pfr.rule.action = PF_NAT;
+		pfrule.action = PF_NAT;
 		break;
 	case PF_RULESET_RDR:
 		/*
 		 * rdr inet[6] proto tcp from $src to $dst port $d_port -> $rdr
 		 */
-		pfr.rule.action = PF_RDR;
+		pfrule.action = PF_RDR;
 		break;
 	default:
 		errno = EINVAL;
diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index e0d429112f5b..dc174d8d5b72 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -256,7 +256,7 @@ pf_nvrule_uid_to_rule_uid(const nvlist_t *nvl, struct pf_rule_uid *uid)
 
 static void
 pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
-    const struct pf_rule *r)
+    const struct pfctl_rule *r)
 {
 	nvlist_t *nvl = nvlist_create(0);
 
@@ -267,14 +267,14 @@ pfctl_nv_add_divert(nvlist_t *nvparent, const char *name,
 }
 
 static void
-pf_nvdivert_to_divert(const nvlist_t *nvl, struct pf_rule *rule)
+pf_nvdivert_to_divert(const nvlist_t *nvl, struct pfctl_rule *rule)
 {
 	pf_nvaddr_to_addr(nvlist_get_nvlist(nvl, "addr"), &rule->divert.addr);
 	rule->divert.port = nvlist_get_number(nvl, "port");
 }
 
 static void
-pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
+pf_nvrule_to_rule(const nvlist_t *nvl, struct pfctl_rule *rule)
 {
 	const uint64_t *skip;
 	size_t skipcount;
@@ -373,7 +373,7 @@ pf_nvrule_to_rule(const nvlist_t *nvl, struct pf_rule *rule)
 }
 
 int
-pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
+pfctl_add_rule(int dev, const struct pfctl_rule *r, const char *anchor,
     const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket)
 {
 	struct pfioc_nv nv;
@@ -482,7 +482,7 @@ pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
 
 int
 pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
-    u_int32_t ruleset, struct pf_rule *rule, char *anchor_call)
+    u_int32_t ruleset, struct pfctl_rule *rule, char *anchor_call)
 {
 	struct pfioc_nv nv;
 	nvlist_t *nvl;
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index 65ff2179f23d..996830619489 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -36,10 +36,147 @@
 
 #include <netpfil/pf/pf.h>
 
+struct pfctl_anchor;
+
+struct pfctl_rule {
+	struct pf_rule_addr	 src;
+	struct pf_rule_addr	 dst;
+	union pf_rule_ptr	 skip[PF_SKIP_COUNT];
+	char			 label[PF_RULE_LABEL_SIZE];
+	char			 ifname[IFNAMSIZ];
+	char			 qname[PF_QNAME_SIZE];
+	char			 pqname[PF_QNAME_SIZE];
+	char			 tagname[PF_TAG_NAME_SIZE];
+	char			 match_tagname[PF_TAG_NAME_SIZE];
+
+	char			 overload_tblname[PF_TABLE_NAME_SIZE];
+
+	TAILQ_ENTRY(pfctl_rule)	 entries;
+	struct pf_pool		 rpool;
+
+	u_int64_t		 evaluations;
+	u_int64_t		 packets[2];
+	u_int64_t		 bytes[2];
+
+	struct pfi_kif		*kif;
+	struct pfctl_anchor	*anchor;
+	struct pfr_ktable	*overload_tbl;
+
+	pf_osfp_t		 os_fingerprint;
+
+	int			 rtableid;
+	u_int32_t		 timeout[PFTM_MAX];
+	u_int32_t		 max_states;
+	u_int32_t		 max_src_nodes;
+	u_int32_t		 max_src_states;
+	u_int32_t		 max_src_conn;
+	struct {
+		u_int32_t		limit;
+		u_int32_t		seconds;
+	}			 max_src_conn_rate;
+	u_int32_t		 qid;
+	u_int32_t		 pqid;
+	u_int32_t		 nr;
+	u_int32_t		 prob;
+	uid_t			 cuid;
+	pid_t			 cpid;
+
+	counter_u64_t		 states_cur;
+	counter_u64_t		 states_tot;
+	counter_u64_t		 src_nodes;
+
+	u_int16_t		 return_icmp;
+	u_int16_t		 return_icmp6;
+	u_int16_t		 max_mss;
+	u_int16_t		 tag;
+	u_int16_t		 match_tag;
+	u_int16_t		 scrub_flags;
+
+	struct pf_rule_uid	 uid;
+	struct pf_rule_gid	 gid;
+
+	u_int32_t		 rule_flag;
+	u_int8_t		 action;
+	u_int8_t		 direction;
+	u_int8_t		 log;
+	u_int8_t		 logif;
+	u_int8_t		 quick;
+	u_int8_t		 ifnot;
+	u_int8_t		 match_tag_not;
+	u_int8_t		 natpass;
+
+	u_int8_t		 keep_state;
+	sa_family_t		 af;
+	u_int8_t		 proto;
+	u_int8_t		 type;
+	u_int8_t		 code;
+	u_int8_t		 flags;
+	u_int8_t		 flagset;
+	u_int8_t		 min_ttl;
+	u_int8_t		 allow_opts;
+	u_int8_t		 rt;
+	u_int8_t		 return_ttl;
+	u_int8_t		 tos;
+	u_int8_t		 set_tos;
+	u_int8_t		 anchor_relative;
+	u_int8_t		 anchor_wildcard;
+
+	u_int8_t		 flush;
+	u_int8_t		 prio;
+	u_int8_t		 set_prio[2];
+
+	struct {
+		struct pf_addr		addr;
+		u_int16_t		port;
+	}			divert;
+
+	uint64_t		 u_states_cur;
+	uint64_t		 u_states_tot;
+	uint64_t		 u_src_nodes;
+};
+
+TAILQ_HEAD(pfctl_rulequeue, pfctl_rule);
+
+struct pfctl_ruleset {
+	struct {
+		struct pfctl_rulequeue	 queues[2];
+		struct {
+			struct pfctl_rulequeue	*ptr;
+			struct pfctl_rule	**ptr_array;
+			u_int32_t		 rcount;
+			u_int32_t		 ticket;
+			int			 open;
+		}			 active, inactive;
+	}			 rules[PF_RULESET_MAX];
+	struct pfctl_anchor	*anchor;
+	u_int32_t		 tticket;
+	int			 tables;
+	int			 topen;
+};
+
+RB_HEAD(pfctl_anchor_global, pfctl_anchor);
+RB_HEAD(pfctl_anchor_node, pfctl_anchor);
+struct pfctl_anchor {
+	RB_ENTRY(pfctl_anchor)	 entry_global;
+	RB_ENTRY(pfctl_anchor)	 entry_node;
+	struct pfctl_anchor	*parent;
+	struct pfctl_anchor_node children;
+	char			 name[PF_ANCHOR_NAME_SIZE];
+	char			 path[MAXPATHLEN];
+	struct pfctl_ruleset	 ruleset;
+	int			 refcnt;	/* anchor rules */
+	int			 match;	/* XXX: used for pfctl black magic */
+};
+RB_PROTOTYPE(pfctl_anchor_global, pfctl_anchor, entry_global,
+    pf_anchor_compare);
+RB_PROTOTYPE(pfctl_anchor_node, pfctl_anchor, entry_node,
+    pf_anchor_compare);
+
 int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
-	    const char *anchor, u_int32_t ruleset, struct pf_rule *rule,
+	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
 	    char *anchor_call);
-int	pfctl_add_rule(int dev, const struct pf_rule *r, const char *anchor,
-	    const char *anchor_call, u_int32_t ticket, u_int32_t pool_ticket);
+int	pfctl_add_rule(int dev, const struct pfctl_rule *r,
+	    const char *anchor, const char *anchor_call, u_int32_t ticket,
+	    u_int32_t pool_ticket);
 
 #endif
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index 56c1f82e39a0..ff4eca03f4cf 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -317,10 +317,10 @@ static struct node_state_opt	*keep_state_defaults = NULL;
 int		 disallow_table(struct node_host *, const char *);
 int		 disallow_urpf_failed(struct node_host *, const char *);
 int		 disallow_alias(struct node_host *, const char *);
-int		 rule_consistent(struct pf_rule *, int);
-int		 filter_consistent(struct pf_rule *, int);
-int		 nat_consistent(struct pf_rule *);
-int		 rdr_consistent(struct pf_rule *);
+int		 rule_consistent(struct pfctl_rule *, int);
+int		 filter_consistent(struct pfctl_rule *, int);
+int		 nat_consistent(struct pfctl_rule *);
+int		 rdr_consistent(struct pfctl_rule *);
 int		 process_tabledef(char *, struct table_opts *);
 void		 expand_label_str(char *, size_t, const char *, const char *);
 void		 expand_label_if(const char *, char *, size_t, const char *);
@@ -333,7 +333,7 @@ void		 expand_label_nr(const char *, char *, size_t);
 void		 expand_label(char *, size_t, const char *, u_int8_t,
 		    struct node_host *, struct node_port *, struct node_host *,
 		    struct node_port *, u_int8_t);
-void		 expand_rule(struct pf_rule *, struct node_if *,
+void		 expand_rule(struct pfctl_rule *, struct node_if *,
 		    struct node_host *, struct node_proto *, struct node_os *,
 		    struct node_host *, struct node_port *, struct node_host *,
 		    struct node_port *, struct node_uid *, struct node_gid *,
@@ -348,10 +348,10 @@ int		 expand_skip_interface(struct node_if *);
 
 int	 check_rulestate(int);
 int	 getservice(char *);
-int	 rule_label(struct pf_rule *, char *);
+int	 rule_label(struct pfctl_rule *, char *);
 int	 rt_tableid_max(void);
 
-void	 mv_rules(struct pf_ruleset *, struct pf_ruleset *);
+void	 mv_rules(struct pfctl_ruleset *, struct pfctl_ruleset *);
 void	 decide_address_family(struct node_host *, sa_family_t *);
 void	 remove_invalid_hosts(struct node_host **, sa_family_t *);
 int	 invalid_redirect(struct node_host *, sa_family_t);
@@ -780,7 +780,7 @@ pfa_anchorlist	: /* empty */
 pfa_anchor	: '{'
 		{
 			char ta[PF_ANCHOR_NAME_SIZE];
-			struct pf_ruleset *rs;
+			struct pfctl_ruleset *rs;
 
 			/* steping into a brace anchor */
 			pf->asd++;
@@ -806,7 +806,7 @@ pfa_anchor	: '{'
 anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 		    filter_opts pfa_anchor
 		{
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 			struct node_proto	*proto;
 
 			if (check_rulestate(PFCTL_STATE_FILTER)) {
@@ -825,7 +825,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			memset(&r, 0, sizeof(r));
 			if (pf->astack[pf->asd + 1]) {
 				/* move inline rules into relative location */
-				pf_anchor_setup(&r,
+				pfctl_anchor_setup(&r,
 				    &pf->astack[pf->asd]->ruleset,
 				    $2 ? $2 : pf->alast->name);
 		
@@ -938,7 +938,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			pf->astack[pf->asd + 1] = NULL;
 		}
 		| NATANCHOR string interface af proto fromto rtable {
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT)) {
 				free($2);
@@ -959,7 +959,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			free($2);
 		}
 		| RDRANCHOR string interface af proto fromto rtable {
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT)) {
 				free($2);
@@ -1001,7 +1001,7 @@ anchorrule	: ANCHOR anchorname dir quick interface af proto fromto
 			free($2);
 		}
 		| BINATANCHOR string interface af proto fromto rtable {
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT)) {
 				free($2);
@@ -1079,7 +1079,7 @@ scrubaction	: no SCRUB {
 
 scrubrule	: scrubaction dir logquick interface af proto fromto scrub_opts
 		{
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_SCRUB))
 				YYERROR;
@@ -1239,7 +1239,7 @@ fragcache	: FRAGMENT REASSEMBLE	{ $$ = 0; /* default */ }
 		;
 
 antispoof	: ANTISPOOF logquick antispoof_ifspc af antispoof_opts {
-			struct pf_rule		 r;
+			struct pfctl_rule	 r;
 			struct node_host	*h = NULL, *hh;
 			struct node_if		*i, *j;
 
@@ -2014,7 +2014,7 @@ qassign_item	: STRING			{
 pfrule		: action dir logquick interface route af proto fromto
 		    filter_opts
 		{
-			struct pf_rule		 r;
+			struct pfctl_rule	 r;
 			struct node_state_opt	*o;
 			struct node_proto	*proto;
 			int			 srctrack = 0;
@@ -4063,7 +4063,7 @@ nataction	: no NAT natpasslog {
 natrule		: nataction interface af proto fromto tag tagged rtable
 		    redirpool pool_opts
 		{
-			struct pf_rule	r;
+			struct pfctl_rule	r;
 
 			if (check_rulestate(PFCTL_STATE_NAT))
 				YYERROR;
@@ -4222,7 +4222,7 @@ natrule		: nataction interface af proto fromto tag tagged rtable
 binatrule	: no BINAT natpasslog interface af proto FROM ipspec toipspec tag
 		    tagged rtable redirection
 		{
-			struct pf_rule		binat;
+			struct pfctl_rule	binat;
 			struct pf_pooladdr	*pa;
 
 			if (check_rulestate(PFCTL_STATE_NAT))
@@ -4607,7 +4607,7 @@ disallow_alias(struct node_host *h, const char *fmt)
 }
 
 int
-rule_consistent(struct pf_rule *r, int anchor_call)
+rule_consistent(struct pfctl_rule *r, int anchor_call)
 {
 	int	problems = 0;
 
@@ -4635,7 +4635,7 @@ rule_consistent(struct pf_rule *r, int anchor_call)
 }
 
 int
-filter_consistent(struct pf_rule *r, int anchor_call)
+filter_consistent(struct pfctl_rule *r, int anchor_call)
 {
 	int	problems = 0;
 
@@ -4698,13 +4698,13 @@ filter_consistent(struct pf_rule *r, int anchor_call)
 }
 
 int
-nat_consistent(struct pf_rule *r)
+nat_consistent(struct pfctl_rule *r)
 {
 	return (0);	/* yeah! */
 }
 
 int
-rdr_consistent(struct pf_rule *r)
+rdr_consistent(struct pfctl_rule *r)
 {
 	int			 problems = 0;
 
@@ -5240,7 +5240,7 @@ expand_queue(struct pf_altq *a, struct node_if *interfaces,
 }
 
 void
-expand_rule(struct pf_rule *r,
+expand_rule(struct pfctl_rule *r,
     struct node_if *interfaces, struct node_host *rpool_hosts,
     struct node_proto *protos, struct node_os *src_oses,
     struct node_host *src_hosts, struct node_port *src_ports,
@@ -6072,10 +6072,10 @@ symget(const char *nam)
 }
 
 void
-mv_rules(struct pf_ruleset *src, struct pf_ruleset *dst)
+mv_rules(struct pfctl_ruleset *src, struct pfctl_ruleset *dst)
 {
 	int i;
-	struct pf_rule *r;
+	struct pfctl_rule *r;
 
 	for (i = 0; i < PF_RULESET_MAX; ++i) {
 		while ((r = TAILQ_FIRST(src->rules[i].active.ptr))
@@ -6206,7 +6206,7 @@ getservice(char *n)
 }
 
 int
-rule_label(struct pf_rule *r, char *s)
+rule_label(struct pfctl_rule *r, char *s)
 {
 	if (s) {
 		if (strlcpy(r->label, s, sizeof(r->label)) >=
diff --git a/sbin/pfctl/pf_ruleset.c b/sbin/pfctl/pf_ruleset.c
index baac1deb4fa7..f5cddf481871 100644
--- a/sbin/pfctl/pf_ruleset.c
+++ b/sbin/pfctl/pf_ruleset.c
@@ -73,22 +73,23 @@ __FBSDID("$FreeBSD$");
 #define DPFPRINTF(format, x...)	((void)0)
 #endif /* PFDEBUG */
 
-struct pf_anchor_global	 pf_anchors;
-struct pf_anchor	 pf_main_anchor;
+struct pfctl_anchor_global	 pf_anchors;
+struct pfctl_anchor	 pf_main_anchor;
 #undef V_pf_anchors
 #define V_pf_anchors		 pf_anchors
 #undef pf_main_ruleset
 #define pf_main_ruleset		 pf_main_anchor.ruleset
 
-static __inline int		pf_anchor_compare(struct pf_anchor *,
-				    struct pf_anchor *);
-static struct pf_anchor		*pf_find_anchor(const char *);
+static __inline int		pf_anchor_compare(struct pfctl_anchor *,
+				    struct pfctl_anchor *);
+static struct pfctl_anchor	*pf_find_anchor(const char *);
 
-RB_GENERATE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare);
-RB_GENERATE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare);
+RB_GENERATE(pfctl_anchor_global, pfctl_anchor, entry_global,
+    pf_anchor_compare);
+RB_GENERATE(pfctl_anchor_node, pfctl_anchor, entry_node, pf_anchor_compare);
 
 static __inline int
-pf_anchor_compare(struct pf_anchor *a, struct pf_anchor *b)
+pf_anchor_compare(struct pfctl_anchor *a, struct pfctl_anchor *b)
 {
 	int c = strcmp(a->path, b->path);
 
@@ -126,11 +127,11 @@ pf_get_ruleset_number(u_int8_t action)
 }
 
 void
-pf_init_ruleset(struct pf_ruleset *ruleset)
+pf_init_ruleset(struct pfctl_ruleset *ruleset)
 {
 	int	i;
 
-	memset(ruleset, 0, sizeof(struct pf_ruleset));
+	memset(ruleset, 0, sizeof(struct pfctl_ruleset));
 	for (i = 0; i < PF_RULESET_MAX; i++) {
 		TAILQ_INIT(&ruleset->rules[i].queues[0]);
 		TAILQ_INIT(&ruleset->rules[i].queues[1]);
@@ -139,24 +140,24 @@ pf_init_ruleset(struct pf_ruleset *ruleset)
 	}
 }
 
-static struct pf_anchor *
+static struct pfctl_anchor *
 pf_find_anchor(const char *path)
 {
-	struct pf_anchor	*key, *found;
+	struct pfctl_anchor	*key, *found;
 
-	key = (struct pf_anchor *)rs_malloc(sizeof(*key));
+	key = (struct pfctl_anchor *)rs_malloc(sizeof(*key));
 	if (key == NULL)
 		return (NULL);
 	strlcpy(key->path, path, sizeof(key->path));
-	found = RB_FIND(pf_anchor_global, &V_pf_anchors, key);
+	found = RB_FIND(pfctl_anchor_global, &V_pf_anchors, key);
 	rs_free(key);
 	return (found);
 }
 
-struct pf_ruleset *
+struct pfctl_ruleset *
 pf_find_ruleset(const char *path)
 {
-	struct pf_anchor	*anchor;
+	struct pfctl_anchor	*anchor;
 
 	while (*path == '/')
 		path++;
@@ -169,12 +170,12 @@ pf_find_ruleset(const char *path)
 		return (&anchor->ruleset);
 }
 
-struct pf_ruleset *
+struct pfctl_ruleset *
 pf_find_or_create_ruleset(const char *path)
 {
 	char			*p, *q, *r;
-	struct pf_ruleset	*ruleset;
-	struct pf_anchor	*anchor = NULL, *dup, *parent = NULL;
+	struct pfctl_ruleset	*ruleset;
+	struct pfctl_anchor	*anchor = NULL, *dup, *parent = NULL;
 
 	if (path[0] == 0)
 		return (&pf_main_ruleset);
@@ -212,7 +213,7 @@ pf_find_or_create_ruleset(const char *path)
 			rs_free(p);
 			return (NULL);
 		}
-		anchor = (struct pf_anchor *)rs_malloc(sizeof(*anchor));
+		anchor = (struct pfctl_anchor *)rs_malloc(sizeof(*anchor));
 		if (anchor == NULL) {
 			rs_free(p);
 			return (NULL);
@@ -225,7 +226,7 @@ pf_find_or_create_ruleset(const char *path)
 			strlcat(anchor->path, "/", sizeof(anchor->path));
 		}
 		strlcat(anchor->path, anchor->name, sizeof(anchor->path));
-		if ((dup = RB_INSERT(pf_anchor_global, &V_pf_anchors, anchor)) !=
+		if ((dup = RB_INSERT(pfctl_anchor_global, &V_pf_anchors, anchor)) !=
 		    NULL) {
 			printf("pf_find_or_create_ruleset: RB_INSERT1 "
 			    "'%s' '%s' collides with '%s' '%s'\n",
@@ -236,13 +237,13 @@ pf_find_or_create_ruleset(const char *path)
 		}
 		if (parent != NULL) {
 			anchor->parent = parent;
-			if ((dup = RB_INSERT(pf_anchor_node, &parent->children,
+			if ((dup = RB_INSERT(pfctl_anchor_node, &parent->children,
 			    anchor)) != NULL) {
 				printf("pf_find_or_create_ruleset: "
 				    "RB_INSERT2 '%s' '%s' collides with "
 				    "'%s' '%s'\n", anchor->path, anchor->name,
 				    dup->path, dup->name);
-				RB_REMOVE(pf_anchor_global, &V_pf_anchors,
+				RB_REMOVE(pfctl_anchor_global, &V_pf_anchors,
 				    anchor);
 				rs_free(anchor);
 				rs_free(p);
@@ -262,9 +263,9 @@ pf_find_or_create_ruleset(const char *path)
 }
 
 void
-pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
+pf_remove_if_empty_ruleset(struct pfctl_ruleset *ruleset)
 {
-	struct pf_anchor	*parent;
+	struct pfctl_anchor	*parent;
 	int			 i;
 
 	while (ruleset != NULL) {
@@ -278,9 +279,9 @@ pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
 			    !TAILQ_EMPTY(ruleset->rules[i].inactive.ptr) ||
 			    ruleset->rules[i].inactive.open)
 				return;
-		RB_REMOVE(pf_anchor_global, &V_pf_anchors, ruleset->anchor);
+		RB_REMOVE(pfctl_anchor_global, &V_pf_anchors, ruleset->anchor);
 		if ((parent = ruleset->anchor->parent) != NULL)
-			RB_REMOVE(pf_anchor_node, &parent->children,
+			RB_REMOVE(pfctl_anchor_node, &parent->children,
 			    ruleset->anchor);
 		rs_free(ruleset->anchor);
 		if (parent == NULL)
@@ -289,11 +290,11 @@ pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
 	}
 }
 int
-pf_anchor_setup(struct pf_rule *r, const struct pf_ruleset *s,
+pfctl_anchor_setup(struct pfctl_rule *r, const struct pfctl_ruleset *s,
     const char *name)
 {
 	char			*p, *path;
-	struct pf_ruleset	*ruleset;
+	struct pfctl_ruleset	*ruleset;
 
 	r->anchor = NULL;
 	r->anchor_relative = 0;
@@ -314,7 +315,7 @@ pf_anchor_setup(struct pf_rule *r, const struct pf_ruleset *s,
 			strlcpy(path, s->anchor->path, MAXPATHLEN);
 		while (name[0] == '.' && name[1] == '.' && name[2] == '/') {
 			if (!path[0]) {
-				printf("pf_anchor_setup: .. beyond root\n");
+				printf("pfctl_anchor_setup: .. beyond root\n");
*** 690 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:49 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 319C9631683;
 Fri,  7 May 2021 15:25:49 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmX1Ytsz4jmm;
 Fri,  7 May 2021 15:25:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 89B2C55E4;
 Fri,  7 May 2021 15:25:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPltW026387;
 Fri, 7 May 2021 15:25:47 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPl8A026386;
 Fri, 7 May 2021 15:25:47 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:47 GMT
Message-Id: <202105071525.147FPl8A026386@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 1398367b3a89 - stable/13 - libpfctl: Fix u_* counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 1398367b3a89ce2bf882ecbd181d08cfd044a7dc
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:49 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=1398367b3a89ce2bf882ecbd181d08cfd044a7dc

commit 1398367b3a89ce2bf882ecbd181d08cfd044a7dc
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-08 08:36:18 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    libpfctl: Fix u_* counters
    
    struct pf_rule had a few counter_u64_t counters. Those couldn't be
    usefully comminicated with userspace, so the fields were doubled up in
    uint64_t u_* versions.
    
    Now that we use struct pfctl_rule (i.e. a fully userspace version) we
    can safely change the structure and remove this wart.
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29645
    
    (cherry picked from commit ab5707a5cf86ed66dbd11e03ad9676766da9a47b)
---
 lib/libpfctl/libpfctl.c |  6 +++---
 lib/libpfctl/libpfctl.h | 10 +++-------
 sbin/pfctl/pfctl.c      |  6 +++---
 3 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index dc174d8d5b72..2a7b64f1cbc8 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -367,9 +367,9 @@ pf_nvrule_to_rule(const nvlist_t *nvl, struct pfctl_rule *rule)
 
 	pf_nvdivert_to_divert(nvlist_get_nvlist(nvl, "divert"), rule);
 
-	rule->u_states_cur = nvlist_get_number(nvl, "states_cur");
-	rule->u_states_tot = nvlist_get_number(nvl, "states_tot");
-	rule->u_src_nodes = nvlist_get_number(nvl, "src_nodes");
+	rule->states_cur = nvlist_get_number(nvl, "states_cur");
+	rule->states_tot = nvlist_get_number(nvl, "states_tot");
+	rule->src_nodes = nvlist_get_number(nvl, "src_nodes");
 }
 
 int
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index 996830619489..95f6d4e3c77f 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -81,9 +81,9 @@ struct pfctl_rule {
 	uid_t			 cuid;
 	pid_t			 cpid;
 
-	counter_u64_t		 states_cur;
-	counter_u64_t		 states_tot;
-	counter_u64_t		 src_nodes;
+	uint64_t		 states_cur;
+	uint64_t		 states_tot;
+	uint64_t		 src_nodes;
 
 	u_int16_t		 return_icmp;
 	u_int16_t		 return_icmp6;
@@ -129,10 +129,6 @@ struct pfctl_rule {
 		struct pf_addr		addr;
 		u_int16_t		port;
 	}			divert;
-
-	uint64_t		 u_states_cur;
-	uint64_t		 u_states_tot;
-	uint64_t		 u_src_nodes;
 };
 
 TAILQ_HEAD(pfctl_rulequeue, pfctl_rule);
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 548aab0f839e..bc646ab335e1 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -891,12 +891,12 @@ pfctl_print_rule_counters(struct pfctl_rule *rule, int opts)
 			    (unsigned long long)(rule->packets[0] +
 			    rule->packets[1]),
 			    (unsigned long long)(rule->bytes[0] +
-			    rule->bytes[1]), (uintmax_t)rule->u_states_cur);
+			    rule->bytes[1]), (uintmax_t)rule->states_cur);
 		if (!(opts & PF_OPT_DEBUG))
 			printf("  [ Inserted: uid %u pid %u "
 			    "State Creations: %-6ju]\n",
 			    (unsigned)rule->cuid, (unsigned)rule->cpid,
-			    (uintmax_t)rule->u_states_tot);
+			    (uintmax_t)rule->states_tot);
 	}
 }
 
@@ -1012,7 +1012,7 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 				    (unsigned long long)rule.bytes[0],
 				    (unsigned long long)rule.packets[1],
 				    (unsigned long long)rule.bytes[1],
-				    (uintmax_t)rule.u_states_tot);
+				    (uintmax_t)rule.states_tot);
 			}
 			break;
 		case PFCTL_SHOW_RULES:

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:48 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 287E063145E;
 Fri,  7 May 2021 15:25:48 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmW3yhmz4k6G;
 Fri,  7 May 2021 15:25:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C0ACE5DBC;
 Fri,  7 May 2021 15:25:46 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPkMP026366;
 Fri, 7 May 2021 15:25:46 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPkpA026365;
 Fri, 7 May 2021 15:25:46 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:46 GMT
Message-Id: <202105071525.147FPkpA026365@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 7d9af27cd6f5 - stable/12 - pf: Move prototypes for userspace
 functions to userspace header
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 7d9af27cd6f5fd583636c8d3b9107021f0f16e1c
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:48 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=7d9af27cd6f5fd583636c8d3b9107021f0f16e1c

commit 7d9af27cd6f5fd583636c8d3b9107021f0f16e1c
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-07 17:49:51 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:01 +0000

    pf: Move prototypes for userspace functions to userspace header
    
    These functions no longer exist in the kernel, so there's no reason to
    keep the prototypes in a kernel header. Move them to pfctl where they're
    actually implemented.
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29643
    
    (cherry picked from commit a9b338b260be39cc74dddb599d6c95b8794ca98b)
---
 sbin/pfctl/pf_ruleset.c | 2 ++
 sbin/pfctl/pfctl.h      | 8 ++++++++
 sys/netpfil/pf/pf.h     | 9 +--------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/sbin/pfctl/pf_ruleset.c b/sbin/pfctl/pf_ruleset.c
index 7c337d7a2da7..baac1deb4fa7 100644
--- a/sbin/pfctl/pf_ruleset.c
+++ b/sbin/pfctl/pf_ruleset.c
@@ -64,6 +64,8 @@ __FBSDID("$FreeBSD$");
 #define rs_malloc(x)		 calloc(1, x)
 #define rs_free(x)		 free(x)
 
+#include "pfctl.h"
+
 #ifdef PFDEBUG
 #include <sys/stdarg.h>
 #define DPFPRINTF(format, x...)	fprintf(stderr, format , ##x)
diff --git a/sbin/pfctl/pfctl.h b/sbin/pfctl/pfctl.h
index f43b71e19fec..5aa94b2bb0c8 100644
--- a/sbin/pfctl/pfctl.h
+++ b/sbin/pfctl/pfctl.h
@@ -128,4 +128,12 @@ u_int32_t
 	 pfctl_get_ticket(struct pfr_buffer *, int, const char *);
 int	 pfctl_trans(int, struct pfr_buffer *, u_long, int);
 
+int	 pf_get_ruleset_number(u_int8_t);
+void	 pf_init_ruleset(struct pf_ruleset *);
+int	 pf_anchor_setup(struct pf_rule *,
+	    const struct pf_ruleset *, const char *);
+void	 pf_remove_if_empty_ruleset(struct pf_ruleset *);
+struct pf_ruleset	*pf_find_ruleset(const char *);
+struct pf_ruleset	*pf_find_or_create_ruleset(const char *);
+
 #endif /* _PFCTL_H_ */
diff --git a/sys/netpfil/pf/pf.h b/sys/netpfil/pf/pf.h
index bc6cd92ae7b8..3e358de8aba5 100644
--- a/sys/netpfil/pf/pf.h
+++ b/sys/netpfil/pf/pf.h
@@ -637,13 +637,6 @@ struct pf_anchor {
 RB_PROTOTYPE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare);
 RB_PROTOTYPE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare);
 
-/* these ruleset functions can be linked into userland programs (pfctl) */
-int			 pf_get_ruleset_number(u_int8_t);
-void			 pf_init_ruleset(struct pf_ruleset *);
-int			 pf_anchor_setup(struct pf_rule *,
-			    const struct pf_ruleset *, const char *);
-void			 pf_remove_if_empty_ruleset(struct pf_ruleset *);
-struct pf_ruleset	*pf_find_ruleset(const char *);
-struct pf_ruleset	*pf_find_or_create_ruleset(const char *);
+int	 pf_get_ruleset_number(u_int8_t);
 
 #endif	/* _NET_PF_H_ */

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:52 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 21EE463153C;
 Fri,  7 May 2021 15:25:52 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmZ2LQLz4jkV;
 Fri,  7 May 2021 15:25:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 93D605C8A;
 Fri,  7 May 2021 15:25:48 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPmUI026433;
 Fri, 7 May 2021 15:25:48 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPmtE026432;
 Fri, 7 May 2021 15:25:48 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:48 GMT
Message-Id: <202105071525.147FPmtE026432@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: b77243fe044f - stable/13 - libnv: Use PICFLAG rather than -fPIC
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: b77243fe044ff488e9eb6aa1199b447b90a0fe01
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:52 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=b77243fe044ff488e9eb6aa1199b447b90a0fe01

commit b77243fe044ff488e9eb6aa1199b447b90a0fe01
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-10 09:23:57 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    libnv: Use PICFLAG rather than -fPIC
    
    Suggested by:   andrew
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit 15ca66220874c177602c13a114b2f3d17773b788)
---
 lib/libnv/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/libnv/Makefile b/lib/libnv/Makefile
index 854cd2c7f3f3..6105f6244fce 100644
--- a/lib/libnv/Makefile
+++ b/lib/libnv/Makefile
@@ -10,7 +10,7 @@ SHLIB_MAJOR= 0
 
 .PATH: ${SRCTOP}/sys/contrib/libnv ${SRCTOP}/sys/sys
 CFLAGS+=-I${.CURDIR}
-CFLAGS+=-fPIC
+CFLAGS+=${PICFLAG}
 
 SRCS=	cnvlist.c
 SRCS+=	dnvlist.c

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:53 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 62E04631708;
 Fri,  7 May 2021 15:25:53 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmd0vR9z4k2W;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3A15D5AD1;
 Fri,  7 May 2021 15:25:50 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPo2m026498;
 Fri, 7 May 2021 15:25:50 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPoB0026497;
 Fri, 7 May 2021 15:25:50 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:50 GMT
Message-Id: <202105071525.147FPoB0026497@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: e3859eb57651 - stable/12 - libnv: Use PICFLAG rather than -fPIC
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: e3859eb576517e88c287dd86e9d6da32b9620d61
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:53 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=e3859eb576517e88c287dd86e9d6da32b9620d61

commit e3859eb576517e88c287dd86e9d6da32b9620d61
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-10 09:23:57 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    libnv: Use PICFLAG rather than -fPIC
    
    Suggested by:   andrew
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit 15ca66220874c177602c13a114b2f3d17773b788)
---
 lib/libnv/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/libnv/Makefile b/lib/libnv/Makefile
index 63e7a274f578..2e227cbc0b04 100644
--- a/lib/libnv/Makefile
+++ b/lib/libnv/Makefile
@@ -10,7 +10,7 @@ SHLIB_MAJOR= 0
 
 .PATH: ${SRCTOP}/sys/contrib/libnv ${SRCTOP}/sys/sys
 CFLAGS+=-I${.CURDIR}
-CFLAGS+=-fPIC
+CFLAGS+=${PICFLAG}
 
 SRCS=	cnvlist.c
 SRCS+=	dnvlist.c

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:53 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 62A596315A0;
 Fri,  7 May 2021 15:25:53 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmd0lWMz4jqZ;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B7DB958F3;
 Fri,  7 May 2021 15:25:50 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPonm026519;
 Fri, 7 May 2021 15:25:50 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPoDZ026518;
 Fri, 7 May 2021 15:25:50 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:50 GMT
Message-Id: <202105071525.147FPoDZ026518@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 55059f90750d - stable/13 - pfctl, libpfctl: introduce pfctl_pool
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 55059f90750dcba322e10b6221fd4823d849085b
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:53 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=55059f90750dcba322e10b6221fd4823d849085b

commit 55059f90750dcba322e10b6221fd4823d849085b
Author:     Kurosawa Takahiro <takahiro.kurosawa@gmail.com>
AuthorDate: 2021-04-12 14:03:40 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    pfctl, libpfctl: introduce pfctl_pool
    
    Introduce pfctl_pool to be able to extend the pool part of the pf rule
    without breaking the ABI.
    
    Reviewed by:    kp
    MFC after:      4 weeks
    Differential Revision:  https://reviews.freebsd.org/D29721
    
    (cherry picked from commit 600bd6ce0639c84b763516477250df5964e8edf6)
---
 lib/libpfctl/libpfctl.c   |  4 ++--
 lib/libpfctl/libpfctl.h   | 12 +++++++++++-
 sbin/pfctl/pfctl.c        | 10 +++++-----
 sbin/pfctl/pfctl_parser.c |  2 +-
 sbin/pfctl/pfctl_parser.h |  8 ++++----
 5 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index 2a7b64f1cbc8..a487e5a20018 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -198,7 +198,7 @@ pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
 
 static void
 pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
-    const struct pf_pool *pool)
+    const struct pfctl_pool *pool)
 {
 	u_int64_t ports[2];
 	nvlist_t *nvl = nvlist_create(0);
@@ -216,7 +216,7 @@ pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
 }
 
 static void
-pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
+pf_nvpool_to_pool(const nvlist_t *nvl, struct pfctl_pool *pool)
 {
 	size_t len;
 	const void *data;
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index 95f6d4e3c77f..bc27c18cfbb6 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -38,6 +38,16 @@
 
 struct pfctl_anchor;
 
+struct pfctl_pool {
+	struct pf_palist	 list;
+	struct pf_pooladdr	*cur;
+	struct pf_poolhashkey	 key;
+	struct pf_addr		 counter;
+	int			 tblidx;
+	u_int16_t		 proxy_port[2];
+	u_int8_t		 opts;
+};
+
 struct pfctl_rule {
 	struct pf_rule_addr	 src;
 	struct pf_rule_addr	 dst;
@@ -52,7 +62,7 @@ struct pfctl_rule {
 	char			 overload_tblname[PF_TABLE_NAME_SIZE];
 
 	TAILQ_ENTRY(pfctl_rule)	 entries;
-	struct pf_pool		 rpool;
+	struct pfctl_pool	 rpool;
 
 	u_int64_t		 evaluations;
 	u_int64_t		 packets[2];
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index bc646ab335e1..879fc876826c 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -92,7 +92,7 @@ int	 pfctl_load_timeout(struct pfctl *, unsigned int, unsigned int);
 int	 pfctl_load_debug(struct pfctl *, unsigned int);
 int	 pfctl_load_logif(struct pfctl *, char *);
 int	 pfctl_load_hostid(struct pfctl *, u_int32_t);
-int	 pfctl_get_pool(int, struct pf_pool *, u_int32_t, u_int32_t, int,
+int	 pfctl_get_pool(int, struct pfctl_pool *, u_int32_t, u_int32_t, int,
 	    char *);
 void	 pfctl_print_rule_counters(struct pfctl_rule *, int);
 int	 pfctl_show_rules(int, char *, int, enum pfctl_show, char *, int);
@@ -805,7 +805,7 @@ pfctl_id_kill_states(int dev, const char *iface, int opts)
 }
 
 int
-pfctl_get_pool(int dev, struct pf_pool *pool, u_int32_t nr,
+pfctl_get_pool(int dev, struct pfctl_pool *pool, u_int32_t nr,
     u_int32_t ticket, int r_action, char *anchorname)
 {
 	struct pfioc_pooladdr pp;
@@ -840,7 +840,7 @@ pfctl_get_pool(int dev, struct pf_pool *pool, u_int32_t nr,
 }
 
 void
-pfctl_move_pool(struct pf_pool *src, struct pf_pool *dst)
+pfctl_move_pool(struct pfctl_pool *src, struct pfctl_pool *dst)
 {
 	struct pf_pooladdr *pa;
 
@@ -851,7 +851,7 @@ pfctl_move_pool(struct pf_pool *src, struct pf_pool *dst)
 }
 
 void
-pfctl_clear_pool(struct pf_pool *pool)
+pfctl_clear_pool(struct pfctl_pool *pool)
 {
 	struct pf_pooladdr *pa;
 
@@ -1272,7 +1272,7 @@ pfctl_show_limits(int dev, int opts)
 
 /* callbacks for rule/nat/rdr/addr */
 int
-pfctl_add_pool(struct pfctl *pf, struct pf_pool *p, sa_family_t af)
+pfctl_add_pool(struct pfctl *pf, struct pfctl_pool *p, sa_family_t af)
 {
 	struct pf_pooladdr *pa;
 
diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c
index e75ef514d14a..bc06ac46787c 100644
--- a/sbin/pfctl/pfctl_parser.c
+++ b/sbin/pfctl/pfctl_parser.c
@@ -412,7 +412,7 @@ print_fromto(struct pf_rule_addr *src, pf_osfp_t osfp, struct pf_rule_addr *dst,
 }
 
 void
-print_pool(struct pf_pool *pool, u_int16_t p1, u_int16_t p2,
+print_pool(struct pfctl_pool *pool, u_int16_t p1, u_int16_t p2,
     sa_family_t af, int id)
 {
 	struct pf_pooladdr	*pooladdr;
diff --git a/sbin/pfctl/pfctl_parser.h b/sbin/pfctl/pfctl_parser.h
index f36e8f1d4ac8..43d8488dcab8 100644
--- a/sbin/pfctl/pfctl_parser.h
+++ b/sbin/pfctl/pfctl_parser.h
@@ -256,9 +256,9 @@ int	pfctl_optimize_ruleset(struct pfctl *, struct pfctl_ruleset *);
 
 int	pfctl_append_rule(struct pfctl *, struct pfctl_rule *, const char *);
 int	pfctl_add_altq(struct pfctl *, struct pf_altq *);
-int	pfctl_add_pool(struct pfctl *, struct pf_pool *, sa_family_t);
-void	pfctl_move_pool(struct pf_pool *, struct pf_pool *);
-void	pfctl_clear_pool(struct pf_pool *);
+int	pfctl_add_pool(struct pfctl *, struct pfctl_pool *, sa_family_t);
+void	pfctl_move_pool(struct pfctl_pool *, struct pfctl_pool *);
+void	pfctl_clear_pool(struct pfctl_pool *);
 
 int	pfctl_set_timeout(struct pfctl *, const char *, int, int);
 int	pfctl_set_optimization(struct pfctl *, const char *);
@@ -272,7 +272,7 @@ int	parse_config(char *, struct pfctl *);
 int	parse_flags(char *);
 int	pfctl_load_anchors(int, struct pfctl *, struct pfr_buffer *);
 
-void	print_pool(struct pf_pool *, u_int16_t, u_int16_t, sa_family_t, int);
+void	print_pool(struct pfctl_pool *, u_int16_t, u_int16_t, sa_family_t, int);
 void	print_src_node(struct pf_src_node *, int);
 void	print_rule(struct pfctl_rule *, const char *, int, int);
 void	print_tabledef(const char *, int, int, struct node_tinithead *);

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:53 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4396E6314A8;
 Fri,  7 May 2021 15:25:53 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmc4kYhz4k2V;
 Fri,  7 May 2021 15:25:52 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B107358F2;
 Fri,  7 May 2021 15:25:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPnd5026477;
 Fri, 7 May 2021 15:25:49 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPnRl026476;
 Fri, 7 May 2021 15:25:49 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:49 GMT
Message-Id: <202105071525.147FPnRl026476@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 7b15ca116c1d - stable/13 - pf: Ensure that we don't use kif
 passed to pfi_kkif_attach()
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 7b15ca116c1d257f5c734b1c6f3b9c10ad80e7a8
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:53 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=7b15ca116c1d257f5c734b1c6f3b9c10ad80e7a8

commit 7b15ca116c1d257f5c734b1c6f3b9c10ad80e7a8
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-12 09:45:48 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:42 +0000

    pf: Ensure that we don't use kif passed to pfi_kkif_attach()
    
    Once a kif is passed to pfi_kkif_attach() we must ensure we never re-use
    it for anything else.
    Set the kif to NULL afterwards to guarantee this.
    
    Reported-by: syzbot+be5d4f4a7a4c295e659a@syzkaller.appspotmail.com
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit 5e98cae661f3a7e85df7f277660765b823454073)
---
 sys/netpfil/pf/pf_if.c    | 1 +
 sys/netpfil/pf/pf_ioctl.c | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/sys/netpfil/pf/pf_if.c b/sys/netpfil/pf/pf_if.c
index be290a1e1f2e..4630098221c8 100644
--- a/sys/netpfil/pf/pf_if.c
+++ b/sys/netpfil/pf/pf_if.c
@@ -486,6 +486,7 @@ pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af)
 		dyn->pfid_kif = pfi_kkif_attach(kif, IFG_ALL);
 	else
 		dyn->pfid_kif = pfi_kkif_attach(kif, aw->v.ifname);
+	kif = NULL;
 	pfi_kkif_ref(dyn->pfid_kif);
 
 	dyn->pfid_net = pfi_unmask(&aw->v.a.mask);
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index cdff32916953..e6ab3ab5e91f 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -2411,6 +2411,7 @@ pf_ioctl_addrule(struct pf_krule *rule, uint32_t ticket,
 		rule->nr = 0;
 	if (rule->ifname[0]) {
 		rule->kif = pfi_kkif_attach(kif, rule->ifname);
+		kif = NULL;
 		pfi_kkif_ref(rule->kif);
 	} else
 		rule->kif = NULL;
@@ -3028,6 +3029,7 @@ DIOCGETRULENV_error:
 			if (newrule->ifname[0]) {
 				newrule->kif = pfi_kkif_attach(kif,
 				    newrule->ifname);
+				kif = NULL;
 				pfi_kkif_ref(newrule->kif);
 			} else
 				newrule->kif = NULL;
@@ -3761,6 +3763,7 @@ DIOCGETSTATES_full:
 		}
 		if (pa->ifname[0]) {
 			pa->kif = pfi_kkif_attach(kif, pa->ifname);
+			kif = NULL;
 			pfi_kkif_ref(pa->kif);
 		} else
 			pa->kif = NULL;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:57 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2464D631788;
 Fri,  7 May 2021 15:25:57 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmg53yRz4k8k;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E8B7B5B3D;
 Fri,  7 May 2021 15:25:51 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPpWY026561;
 Fri, 7 May 2021 15:25:51 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPprB026560;
 Fri, 7 May 2021 15:25:51 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:51 GMT
Message-Id: <202105071525.147FPprB026560@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 65dd1a98de78 - stable/13 - pfctl: Fix clearing rules counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 65dd1a98de786afdf44e55534d9f09b6a97e9383
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:57 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=65dd1a98de786afdf44e55534d9f09b6a97e9383

commit 65dd1a98de786afdf44e55534d9f09b6a97e9383
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-12 15:23:33 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:43 +0000

    pfctl: Fix clearing rules counters
    
    After the migration to libpfctl for rule retrieval we accidentally lost
    support for clearing the rules counters.
    
    Introduce a get_clear variant of pfctl_get_rule() which allows rules
    counters to be cleared.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29727
    
    (cherry picked from commit 4eabfe468b6e80a0823523d83dc908c27ec823c7)
---
 lib/libpfctl/libpfctl.c | 11 +++++++++++
 lib/libpfctl/libpfctl.h |  3 +++
 sbin/pfctl/pfctl.c      | 10 ++++------
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index a487e5a20018..6d5397cb64b2 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -483,6 +483,14 @@ pfctl_add_rule(int dev, const struct pfctl_rule *r, const char *anchor,
 int
 pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
     u_int32_t ruleset, struct pfctl_rule *rule, char *anchor_call)
+{
+	return (pfctl_get_clear_rule(dev, nr, ticket, anchor, ruleset, rule,
+	    anchor_call, false));
+}
+
+int	pfctl_get_clear_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
+	    char *anchor_call, bool clear)
 {
 	struct pfioc_nv nv;
 	nvlist_t *nvl;
@@ -498,6 +506,9 @@ pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
 	nvlist_add_string(nvl, "anchor", anchor);
 	nvlist_add_number(nvl, "ruleset", ruleset);
 
+	if (clear)
+		nvlist_add_bool(nvl, "clear_counter", true);
+
 	nvlpacked = nvlist_pack(nvl, &nv.len);
 	if (nvlpacked == NULL) {
 		nvlist_destroy(nvl);
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index bc27c18cfbb6..38108de769f4 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -181,6 +181,9 @@ RB_PROTOTYPE(pfctl_anchor_node, pfctl_anchor, entry_node,
 int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
 	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
 	    char *anchor_call);
+int	pfctl_get_clear_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
+	    char *anchor_call, bool clear);
 int	pfctl_add_rule(int dev, const struct pfctl_rule *r,
 	    const char *anchor, const char *anchor_call, u_int32_t ticket,
 	    u_int32_t pool_ticket);
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 879fc876826c..9f6b3d2e36ea 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -949,13 +949,11 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 			pfctl_print_title("LABEL COUNTERS:");
 	}
 	mnr = pr.nr;
-	if (opts & PF_OPT_CLRRULECTRS)
-		pr.action = PF_GET_CLR_CNTR;
 
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_SCRUB,
-		    &rule, pr.anchor_call)) {
+		if (pfctl_get_clear_rule(dev, nr, pr.ticket, path, PF_SCRUB,
+		    &rule, pr.anchor_call, opts & PF_OPT_CLRRULECTRS)) {
 			warn("DIOCGETRULENV");
 			goto error;
 		}
@@ -987,8 +985,8 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 	mnr = pr.nr;
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_PASS,
-		    &rule, pr.anchor_call)) {
+		if (pfctl_get_clear_rule(dev, nr, pr.ticket, path, PF_PASS,
+		    &rule, pr.anchor_call, opts & PF_OPT_CLRRULECTRS)) {
 			warn("DIOCGETRULE");
 			goto error;
 		}

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:52 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 44B09631700;
 Fri,  7 May 2021 15:25:52 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmZ1YnQz4jn2;
 Fri,  7 May 2021 15:25:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 14A9E55E5;
 Fri,  7 May 2021 15:25:49 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPmvH026456;
 Fri, 7 May 2021 15:25:48 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPmhe026455;
 Fri, 7 May 2021 15:25:48 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:48 GMT
Message-Id: <202105071525.147FPmhe026455@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 75ca6ff7d687 - stable/12 - libpfctl: Fix u_* counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 75ca6ff7d68753f8c21244c2fdf1d13cb8fb09e1
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:52 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=75ca6ff7d68753f8c21244c2fdf1d13cb8fb09e1

commit 75ca6ff7d68753f8c21244c2fdf1d13cb8fb09e1
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-08 08:36:18 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    libpfctl: Fix u_* counters
    
    struct pf_rule had a few counter_u64_t counters. Those couldn't be
    usefully comminicated with userspace, so the fields were doubled up in
    uint64_t u_* versions.
    
    Now that we use struct pfctl_rule (i.e. a fully userspace version) we
    can safely change the structure and remove this wart.
    
    Reviewed by:    glebius
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29645
    
    (cherry picked from commit ab5707a5cf86ed66dbd11e03ad9676766da9a47b)
---
 lib/libpfctl/libpfctl.c |  6 +++---
 lib/libpfctl/libpfctl.h | 10 +++-------
 sbin/pfctl/pfctl.c      |  6 +++---
 3 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index dc174d8d5b72..2a7b64f1cbc8 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -367,9 +367,9 @@ pf_nvrule_to_rule(const nvlist_t *nvl, struct pfctl_rule *rule)
 
 	pf_nvdivert_to_divert(nvlist_get_nvlist(nvl, "divert"), rule);
 
-	rule->u_states_cur = nvlist_get_number(nvl, "states_cur");
-	rule->u_states_tot = nvlist_get_number(nvl, "states_tot");
-	rule->u_src_nodes = nvlist_get_number(nvl, "src_nodes");
+	rule->states_cur = nvlist_get_number(nvl, "states_cur");
+	rule->states_tot = nvlist_get_number(nvl, "states_tot");
+	rule->src_nodes = nvlist_get_number(nvl, "src_nodes");
 }
 
 int
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index 996830619489..95f6d4e3c77f 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -81,9 +81,9 @@ struct pfctl_rule {
 	uid_t			 cuid;
 	pid_t			 cpid;
 
-	counter_u64_t		 states_cur;
-	counter_u64_t		 states_tot;
-	counter_u64_t		 src_nodes;
+	uint64_t		 states_cur;
+	uint64_t		 states_tot;
+	uint64_t		 src_nodes;
 
 	u_int16_t		 return_icmp;
 	u_int16_t		 return_icmp6;
@@ -129,10 +129,6 @@ struct pfctl_rule {
 		struct pf_addr		addr;
 		u_int16_t		port;
 	}			divert;
-
-	uint64_t		 u_states_cur;
-	uint64_t		 u_states_tot;
-	uint64_t		 u_src_nodes;
 };
 
 TAILQ_HEAD(pfctl_rulequeue, pfctl_rule);
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 548aab0f839e..bc646ab335e1 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -891,12 +891,12 @@ pfctl_print_rule_counters(struct pfctl_rule *rule, int opts)
 			    (unsigned long long)(rule->packets[0] +
 			    rule->packets[1]),
 			    (unsigned long long)(rule->bytes[0] +
-			    rule->bytes[1]), (uintmax_t)rule->u_states_cur);
+			    rule->bytes[1]), (uintmax_t)rule->states_cur);
 		if (!(opts & PF_OPT_DEBUG))
 			printf("  [ Inserted: uid %u pid %u "
 			    "State Creations: %-6ju]\n",
 			    (unsigned)rule->cuid, (unsigned)rule->cpid,
-			    (uintmax_t)rule->u_states_tot);
+			    (uintmax_t)rule->states_tot);
 	}
 }
 
@@ -1012,7 +1012,7 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 				    (unsigned long long)rule.bytes[0],
 				    (unsigned long long)rule.packets[1],
 				    (unsigned long long)rule.bytes[1],
-				    (uintmax_t)rule.u_states_tot);
+				    (uintmax_t)rule.states_tot);
 			}
 			break;
 		case PFCTL_SHOW_RULES:

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:53 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7FAD463169C;
 Fri,  7 May 2021 15:25:53 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmd18gDz4jfQ;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4F25758F4;
 Fri,  7 May 2021 15:25:51 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPpUw026540;
 Fri, 7 May 2021 15:25:51 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPpvB026539;
 Fri, 7 May 2021 15:25:51 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:51 GMT
Message-Id: <202105071525.147FPpvB026539@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 2c3c6531bc85 - stable/12 - pf: Ensure that we don't use kif
 passed to pfi_kkif_attach()
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 2c3c6531bc85c55fd48bde5fc8233b70e86ac814
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:53 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=2c3c6531bc85c55fd48bde5fc8233b70e86ac814

commit 2c3c6531bc85c55fd48bde5fc8233b70e86ac814
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-12 09:45:48 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    pf: Ensure that we don't use kif passed to pfi_kkif_attach()
    
    Once a kif is passed to pfi_kkif_attach() we must ensure we never re-use
    it for anything else.
    Set the kif to NULL afterwards to guarantee this.
    
    Reported-by: syzbot+be5d4f4a7a4c295e659a@syzkaller.appspotmail.com
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit 5e98cae661f3a7e85df7f277660765b823454073)
---
 sys/netpfil/pf/pf_if.c    | 1 +
 sys/netpfil/pf/pf_ioctl.c | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/sys/netpfil/pf/pf_if.c b/sys/netpfil/pf/pf_if.c
index 7e4d8033da0d..656cdfab6018 100644
--- a/sys/netpfil/pf/pf_if.c
+++ b/sys/netpfil/pf/pf_if.c
@@ -474,6 +474,7 @@ pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af)
 		dyn->pfid_kif = pfi_kkif_attach(kif, IFG_ALL);
 	else
 		dyn->pfid_kif = pfi_kkif_attach(kif, aw->v.ifname);
+	kif = NULL;
 	pfi_kkif_ref(dyn->pfid_kif);
 
 	dyn->pfid_net = pfi_unmask(&aw->v.a.mask);
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 7310fa18410b..edc87cf7983a 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -2412,6 +2412,7 @@ pf_ioctl_addrule(struct pf_krule *rule, uint32_t ticket,
 		rule->nr = 0;
 	if (rule->ifname[0]) {
 		rule->kif = pfi_kkif_attach(kif, rule->ifname);
+		kif = NULL;
 		pfi_kkif_ref(rule->kif);
 	} else
 		rule->kif = NULL;
@@ -3040,6 +3041,7 @@ DIOCGETRULENV_error:
 			if (newrule->ifname[0]) {
 				newrule->kif = pfi_kkif_attach(kif,
 				    newrule->ifname);
+				kif = NULL;
 				pfi_kkif_ref(newrule->kif);
 			} else
 				newrule->kif = NULL;
@@ -3774,6 +3776,7 @@ DIOCGETSTATES_full:
 		}
 		if (pa->ifname[0]) {
 			pa->kif = pfi_kkif_attach(kif, pa->ifname);
+			kif = NULL;
 			pfi_kkif_ref(pa->kif);
 		} else
 			pa->kif = NULL;

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:57 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4D7A3631616;
 Fri,  7 May 2021 15:25:57 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmg4cwqz4k04;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7992F55E6;
 Fri,  7 May 2021 15:25:52 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPqmN026582;
 Fri, 7 May 2021 15:25:52 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPqUD026581;
 Fri, 7 May 2021 15:25:52 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:52 GMT
Message-Id: <202105071525.147FPqUD026581@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 4649dfb184cb - stable/12 - pfctl, libpfctl: introduce pfctl_pool
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 4649dfb184cb7855624fb2ffbb3f81008d5911ef
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:57 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=4649dfb184cb7855624fb2ffbb3f81008d5911ef

commit 4649dfb184cb7855624fb2ffbb3f81008d5911ef
Author:     Kurosawa Takahiro <takahiro.kurosawa@gmail.com>
AuthorDate: 2021-04-12 14:03:40 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    pfctl, libpfctl: introduce pfctl_pool
    
    Introduce pfctl_pool to be able to extend the pool part of the pf rule
    without breaking the ABI.
    
    Reviewed by:    kp
    MFC after:      4 weeks
    Differential Revision:  https://reviews.freebsd.org/D29721
    
    (cherry picked from commit 600bd6ce0639c84b763516477250df5964e8edf6)
---
 lib/libpfctl/libpfctl.c   |  4 ++--
 lib/libpfctl/libpfctl.h   | 12 +++++++++++-
 sbin/pfctl/pfctl.c        | 10 +++++-----
 sbin/pfctl/pfctl_parser.c |  2 +-
 sbin/pfctl/pfctl_parser.h |  8 ++++----
 5 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index 2a7b64f1cbc8..a487e5a20018 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -198,7 +198,7 @@ pf_nvrule_addr_to_rule_addr(const nvlist_t *nvl, struct pf_rule_addr *addr)
 
 static void
 pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
-    const struct pf_pool *pool)
+    const struct pfctl_pool *pool)
 {
 	u_int64_t ports[2];
 	nvlist_t *nvl = nvlist_create(0);
@@ -216,7 +216,7 @@ pfctl_nv_add_pool(nvlist_t *nvparent, const char *name,
 }
 
 static void
-pf_nvpool_to_pool(const nvlist_t *nvl, struct pf_pool *pool)
+pf_nvpool_to_pool(const nvlist_t *nvl, struct pfctl_pool *pool)
 {
 	size_t len;
 	const void *data;
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index 95f6d4e3c77f..bc27c18cfbb6 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -38,6 +38,16 @@
 
 struct pfctl_anchor;
 
+struct pfctl_pool {
+	struct pf_palist	 list;
+	struct pf_pooladdr	*cur;
+	struct pf_poolhashkey	 key;
+	struct pf_addr		 counter;
+	int			 tblidx;
+	u_int16_t		 proxy_port[2];
+	u_int8_t		 opts;
+};
+
 struct pfctl_rule {
 	struct pf_rule_addr	 src;
 	struct pf_rule_addr	 dst;
@@ -52,7 +62,7 @@ struct pfctl_rule {
 	char			 overload_tblname[PF_TABLE_NAME_SIZE];
 
 	TAILQ_ENTRY(pfctl_rule)	 entries;
-	struct pf_pool		 rpool;
+	struct pfctl_pool	 rpool;
 
 	u_int64_t		 evaluations;
 	u_int64_t		 packets[2];
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index bc646ab335e1..879fc876826c 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -92,7 +92,7 @@ int	 pfctl_load_timeout(struct pfctl *, unsigned int, unsigned int);
 int	 pfctl_load_debug(struct pfctl *, unsigned int);
 int	 pfctl_load_logif(struct pfctl *, char *);
 int	 pfctl_load_hostid(struct pfctl *, u_int32_t);
-int	 pfctl_get_pool(int, struct pf_pool *, u_int32_t, u_int32_t, int,
+int	 pfctl_get_pool(int, struct pfctl_pool *, u_int32_t, u_int32_t, int,
 	    char *);
 void	 pfctl_print_rule_counters(struct pfctl_rule *, int);
 int	 pfctl_show_rules(int, char *, int, enum pfctl_show, char *, int);
@@ -805,7 +805,7 @@ pfctl_id_kill_states(int dev, const char *iface, int opts)
 }
 
 int
-pfctl_get_pool(int dev, struct pf_pool *pool, u_int32_t nr,
+pfctl_get_pool(int dev, struct pfctl_pool *pool, u_int32_t nr,
     u_int32_t ticket, int r_action, char *anchorname)
 {
 	struct pfioc_pooladdr pp;
@@ -840,7 +840,7 @@ pfctl_get_pool(int dev, struct pf_pool *pool, u_int32_t nr,
 }
 
 void
-pfctl_move_pool(struct pf_pool *src, struct pf_pool *dst)
+pfctl_move_pool(struct pfctl_pool *src, struct pfctl_pool *dst)
 {
 	struct pf_pooladdr *pa;
 
@@ -851,7 +851,7 @@ pfctl_move_pool(struct pf_pool *src, struct pf_pool *dst)
 }
 
 void
-pfctl_clear_pool(struct pf_pool *pool)
+pfctl_clear_pool(struct pfctl_pool *pool)
 {
 	struct pf_pooladdr *pa;
 
@@ -1272,7 +1272,7 @@ pfctl_show_limits(int dev, int opts)
 
 /* callbacks for rule/nat/rdr/addr */
 int
-pfctl_add_pool(struct pfctl *pf, struct pf_pool *p, sa_family_t af)
+pfctl_add_pool(struct pfctl *pf, struct pfctl_pool *p, sa_family_t af)
 {
 	struct pf_pooladdr *pa;
 
diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c
index b7ac9527db69..b2300df880ca 100644
--- a/sbin/pfctl/pfctl_parser.c
+++ b/sbin/pfctl/pfctl_parser.c
@@ -412,7 +412,7 @@ print_fromto(struct pf_rule_addr *src, pf_osfp_t osfp, struct pf_rule_addr *dst,
 }
 
 void
-print_pool(struct pf_pool *pool, u_int16_t p1, u_int16_t p2,
+print_pool(struct pfctl_pool *pool, u_int16_t p1, u_int16_t p2,
     sa_family_t af, int id)
 {
 	struct pf_pooladdr	*pooladdr;
diff --git a/sbin/pfctl/pfctl_parser.h b/sbin/pfctl/pfctl_parser.h
index f36e8f1d4ac8..43d8488dcab8 100644
--- a/sbin/pfctl/pfctl_parser.h
+++ b/sbin/pfctl/pfctl_parser.h
@@ -256,9 +256,9 @@ int	pfctl_optimize_ruleset(struct pfctl *, struct pfctl_ruleset *);
 
 int	pfctl_append_rule(struct pfctl *, struct pfctl_rule *, const char *);
 int	pfctl_add_altq(struct pfctl *, struct pf_altq *);
-int	pfctl_add_pool(struct pfctl *, struct pf_pool *, sa_family_t);
-void	pfctl_move_pool(struct pf_pool *, struct pf_pool *);
-void	pfctl_clear_pool(struct pf_pool *);
+int	pfctl_add_pool(struct pfctl *, struct pfctl_pool *, sa_family_t);
+void	pfctl_move_pool(struct pfctl_pool *, struct pfctl_pool *);
+void	pfctl_clear_pool(struct pfctl_pool *);
 
 int	pfctl_set_timeout(struct pfctl *, const char *, int, int);
 int	pfctl_set_optimization(struct pfctl *, const char *);
@@ -272,7 +272,7 @@ int	parse_config(char *, struct pfctl *);
 int	parse_flags(char *);
 int	pfctl_load_anchors(int, struct pfctl *, struct pfr_buffer *);
 
-void	print_pool(struct pf_pool *, u_int16_t, u_int16_t, sa_family_t, int);
+void	print_pool(struct pfctl_pool *, u_int16_t, u_int16_t, sa_family_t, int);
 void	print_src_node(struct pf_src_node *, int);
 void	print_rule(struct pfctl_rule *, const char *, int, int);
 void	print_tabledef(const char *, int, int, struct node_tinithead *);

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:57 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7C6B8631789;
 Fri,  7 May 2021 15:25:57 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmh3v8pz4jkt;
 Fri,  7 May 2021 15:25:56 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 96C815AD2;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPrsm026624;
 Fri, 7 May 2021 15:25:53 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPrhh026623;
 Fri, 7 May 2021 15:25:53 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:53 GMT
Message-Id: <202105071525.147FPrhh026623@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 9f283b1ca6df - stable/12 - pfctl: Fix clearing rules counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 9f283b1ca6df02e798f51d4d891b0d34446d2fcc
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:57 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=9f283b1ca6df02e798f51d4d891b0d34446d2fcc

commit 9f283b1ca6df02e798f51d4d891b0d34446d2fcc
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-12 15:23:33 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    pfctl: Fix clearing rules counters
    
    After the migration to libpfctl for rule retrieval we accidentally lost
    support for clearing the rules counters.
    
    Introduce a get_clear variant of pfctl_get_rule() which allows rules
    counters to be cleared.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29727
    
    (cherry picked from commit 4eabfe468b6e80a0823523d83dc908c27ec823c7)
---
 lib/libpfctl/libpfctl.c | 11 +++++++++++
 lib/libpfctl/libpfctl.h |  3 +++
 sbin/pfctl/pfctl.c      | 10 ++++------
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index a487e5a20018..6d5397cb64b2 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -483,6 +483,14 @@ pfctl_add_rule(int dev, const struct pfctl_rule *r, const char *anchor,
 int
 pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
     u_int32_t ruleset, struct pfctl_rule *rule, char *anchor_call)
+{
+	return (pfctl_get_clear_rule(dev, nr, ticket, anchor, ruleset, rule,
+	    anchor_call, false));
+}
+
+int	pfctl_get_clear_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
+	    char *anchor_call, bool clear)
 {
 	struct pfioc_nv nv;
 	nvlist_t *nvl;
@@ -498,6 +506,9 @@ pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket, const char *anchor,
 	nvlist_add_string(nvl, "anchor", anchor);
 	nvlist_add_number(nvl, "ruleset", ruleset);
 
+	if (clear)
+		nvlist_add_bool(nvl, "clear_counter", true);
+
 	nvlpacked = nvlist_pack(nvl, &nv.len);
 	if (nvlpacked == NULL) {
 		nvlist_destroy(nvl);
diff --git a/lib/libpfctl/libpfctl.h b/lib/libpfctl/libpfctl.h
index bc27c18cfbb6..38108de769f4 100644
--- a/lib/libpfctl/libpfctl.h
+++ b/lib/libpfctl/libpfctl.h
@@ -181,6 +181,9 @@ RB_PROTOTYPE(pfctl_anchor_node, pfctl_anchor, entry_node,
 int	pfctl_get_rule(int dev, u_int32_t nr, u_int32_t ticket,
 	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
 	    char *anchor_call);
+int	pfctl_get_clear_rule(int dev, u_int32_t nr, u_int32_t ticket,
+	    const char *anchor, u_int32_t ruleset, struct pfctl_rule *rule,
+	    char *anchor_call, bool clear);
 int	pfctl_add_rule(int dev, const struct pfctl_rule *r,
 	    const char *anchor, const char *anchor_call, u_int32_t ticket,
 	    u_int32_t pool_ticket);
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index 879fc876826c..9f6b3d2e36ea 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -949,13 +949,11 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 			pfctl_print_title("LABEL COUNTERS:");
 	}
 	mnr = pr.nr;
-	if (opts & PF_OPT_CLRRULECTRS)
-		pr.action = PF_GET_CLR_CNTR;
 
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_SCRUB,
-		    &rule, pr.anchor_call)) {
+		if (pfctl_get_clear_rule(dev, nr, pr.ticket, path, PF_SCRUB,
+		    &rule, pr.anchor_call, opts & PF_OPT_CLRRULECTRS)) {
 			warn("DIOCGETRULENV");
 			goto error;
 		}
@@ -987,8 +985,8 @@ pfctl_show_rules(int dev, char *path, int opts, enum pfctl_show format,
 	mnr = pr.nr;
 	for (nr = 0; nr < mnr; ++nr) {
 		pr.nr = nr;
-		if (pfctl_get_rule(dev, nr, pr.ticket, path, PF_PASS,
-		    &rule, pr.anchor_call)) {
+		if (pfctl_get_clear_rule(dev, nr, pr.ticket, path, PF_PASS,
+		    &rule, pr.anchor_call, opts & PF_OPT_CLRRULECTRS)) {
 			warn("DIOCGETRULE");
 			goto error;
 		}

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:59 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 928C3631726;
 Fri,  7 May 2021 15:25:59 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDml0TXzz4k4j;
 Fri,  7 May 2021 15:25:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 090545C8B;
 Fri,  7 May 2021 15:25:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPu7Y026756;
 Fri, 7 May 2021 15:25:56 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPuHp026755;
 Fri, 7 May 2021 15:25:56 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:56 GMT
Message-Id: <202105071525.147FPuHp026755@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: dc202b6e0fb5 - stable/12 - pf: PFRULE_REFS should not be
 user-visible
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: dc202b6e0fb5848a1b38fe490b89ee5e2d2fbded
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:59 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=dc202b6e0fb5848a1b38fe490b89ee5e2d2fbded

commit dc202b6e0fb5848a1b38fe490b89ee5e2d2fbded
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-15 11:38:56 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:03 +0000

    pf: PFRULE_REFS should not be user-visible
    
    Split the PFRULE_REFS flag from the rule_flag field. PFRULE_REFS is a
    kernel-internal flag and should not be exposed to or read from
    userspace.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29778
    
    (cherry picked from commit 4f1f67e88853ac9e3c2d8897cf6dab6cfda8d16e)
---
 sys/net/pfvar.h           |  1 +
 sys/netpfil/pf/pf.c       | 12 ++++++------
 sys/netpfil/pf/pf_ioctl.c |  2 +-
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index e6e011d6ef99..1c0359fcbfbf 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -377,6 +377,7 @@ struct pf_krule {
 	struct pf_rule_gid	 gid;
 
 	u_int32_t		 rule_flag;
+	uint32_t		 rule_ref;
 	u_int8_t		 action;
 	u_int8_t		 direction;
 	u_int8_t		 log;
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index a02c9254c714..736d41203874 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -1639,7 +1639,7 @@ pf_purge_expired_src_nodes()
 			pf_unlink_src_node(cur);
 			LIST_INSERT_HEAD(&freelist, cur, entry);
 		} else if (cur->rule.ptr != NULL)
-			cur->rule.ptr->rule_flag |= PFRULE_REFS;
+			cur->rule.ptr->rule_ref |= PFRULE_REFS;
 	    PF_HASHROW_UNLOCK(sh);
 	}
 
@@ -1782,11 +1782,11 @@ relock:
 					    pf_unlink_state(s, PF_ENTER_LOCKED);
 					goto relock;
 				}
-				s->rule.ptr->rule_flag |= PFRULE_REFS;
+				s->rule.ptr->rule_ref |= PFRULE_REFS;
 				if (s->nat_rule.ptr != NULL)
-					s->nat_rule.ptr->rule_flag |= PFRULE_REFS;
+					s->nat_rule.ptr->rule_ref |= PFRULE_REFS;
 				if (s->anchor.ptr != NULL)
-					s->anchor.ptr->rule_flag |= PFRULE_REFS;
+					s->anchor.ptr->rule_ref |= PFRULE_REFS;
 				s->kif->pfik_flags |= PFI_IFLAG_REFS;
 				if (s->rt_kif)
 					s->rt_kif->pfik_flags |= PFI_IFLAG_REFS;
@@ -1838,11 +1838,11 @@ pf_purge_unlinked_rules()
 	TAILQ_INIT(&tmpq);
 	PF_UNLNKDRULES_LOCK();
 	TAILQ_FOREACH_SAFE(r, &V_pf_unlinked_rules, entries, r1) {
-		if (!(r->rule_flag & PFRULE_REFS)) {
+		if (!(r->rule_ref & PFRULE_REFS)) {
 			TAILQ_REMOVE(&V_pf_unlinked_rules, r, entries);
 			TAILQ_INSERT_TAIL(&tmpq, r, entries);
 		} else
-			r->rule_flag &= ~PFRULE_REFS;
+			r->rule_ref &= ~PFRULE_REFS;
 	}
 	PF_UNLNKDRULES_UNLOCK();
 
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index edc87cf7983a..99bf8efcca1a 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -426,7 +426,7 @@ pf_unlink_rule(struct pf_krulequeue *rulequeue, struct pf_krule *rule)
 	TAILQ_REMOVE(rulequeue, rule, entries);
 
 	PF_UNLNKDRULES_LOCK();
-	rule->rule_flag |= PFRULE_REFS;
+	rule->rule_ref |= PFRULE_REFS;
 	TAILQ_INSERT_TAIL(&V_pf_unlinked_rules, rule, entries);
 	PF_UNLNKDRULES_UNLOCK();
 }

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:57 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 36B0063171B;
 Fri,  7 May 2021 15:25:57 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmf2Vfbz4jfZ;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 177025DBD;
 Fri,  7 May 2021 15:25:53 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPqum026603;
 Fri, 7 May 2021 15:25:52 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPql2026602;
 Fri, 7 May 2021 15:25:52 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:52 GMT
Message-Id: <202105071525.147FPql2026602@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 07baf5f27e52 - stable/13 - pf tests: Test clearing rules counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 07baf5f27e527e4e74b106cb966a61cf63a895ef
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:57 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=07baf5f27e527e4e74b106cb966a61cf63a895ef

commit 07baf5f27e527e4e74b106cb966a61cf63a895ef
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-12 15:29:19 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:43 +0000

    pf tests: Test clearing rules counters
    
    This was briefly broken, so ensure that we can read and clear rules
    counters.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29728
    
    (cherry picked from commit 112f007e12818ba3d54869b331139090e69dbc74)
---
 tests/sys/netpfil/pf/Makefile         |  1 +
 tests/sys/netpfil/pf/rules_counter.sh | 79 +++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+)

diff --git a/tests/sys/netpfil/pf/Makefile b/tests/sys/netpfil/pf/Makefile
index ea9d71610c77..e422da3b9e3d 100644
--- a/tests/sys/netpfil/pf/Makefile
+++ b/tests/sys/netpfil/pf/Makefile
@@ -18,6 +18,7 @@ ATF_TESTS_SH+=	anchor \
 		pfsync	\
 		rdr \
 		route_to \
+		rules_counter \
 		set_skip \
 		set_tos \
 		src_track \
diff --git a/tests/sys/netpfil/pf/rules_counter.sh b/tests/sys/netpfil/pf/rules_counter.sh
new file mode 100644
index 000000000000..56dc159f49c8
--- /dev/null
+++ b/tests/sys/netpfil/pf/rules_counter.sh
@@ -0,0 +1,79 @@
+# $FreeBSD$
+#
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+. $(atf_get_srcdir)/utils.subr
+
+atf_test_case "get_clear" "cleanup"
+get_clear_head()
+{
+	atf_set descr 'Test clearing rules counters on get rules'
+	atf_set require.user root
+}
+
+get_clear_body()
+{
+	pft_init
+
+	epair_send=$(vnet_mkepair)
+	ifconfig ${epair_send}a 192.0.2.1/24 up
+
+	vnet_mkjail alcatraz ${epair_send}b
+	jexec alcatraz ifconfig ${epair_send}b 192.0.2.2/24 up
+	jexec alcatraz pfctl -e
+
+	pft_set_rules alcatraz \
+		"pass all"
+
+	# Ensure the rule matched packets, so we can verify non-zero counters
+	atf_check -s exit:0 -o ignore ping -c 3 192.0.2.2
+
+	# Expect non-zero counters
+	atf_check -s exit:0 -e ignore \
+	    -o match:'Evaluations: [1-9][0-9]*[[:space:]]*Packets: [1-9][0-9]*[[:space:]]*Bytes: [1-9][0-9]*[[:space:]]*' \
+	    jexec alcatraz pfctl -s r -v
+
+	# We should still see non-zero because we didn't clear on the last
+	# pfctl, but are going to clear now
+	atf_check -s exit:0 -e ignore \
+	    -o match:'Evaluations: [1-9][0-9]*[[:space:]]*Packets: [1-9][0-9]*[[:space:]]*Bytes: [1-9][0-9]*[[:space:]]*' \
+	    jexec alcatraz pfctl -s r -v -z
+
+	# Expect zero counters
+	atf_check -s exit:0 -e ignore \
+	    -o match:'Evaluations: 0[[:space:]]*Packets: 0*[[:space:]]*Bytes: 0*[[:space:]]*' \
+	    jexec alcatraz pfctl -s r -v
+}
+
+get_clear_cleanup()
+{
+	pft_cleanup
+}
+
+atf_init_test_cases()
+{
+	atf_add_test_case "get_clear"
+}

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:58 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 55AF36313E5;
 Fri,  7 May 2021 15:25:58 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmj65R7z4jqk;
 Fri,  7 May 2021 15:25:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D4D855C42;
 Fri,  7 May 2021 15:25:55 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPt1p026714;
 Fri, 7 May 2021 15:25:55 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPtHA026713;
 Fri, 7 May 2021 15:25:55 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:55 GMT
Message-Id: <202105071525.147FPtHA026713@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: db3ccc52a6a3 - stable/12 - libpfct: Fix PIC flag
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: db3ccc52a6a3204291d5e69b037004fb29149015
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:58 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=db3ccc52a6a3204291d5e69b037004fb29149015

commit db3ccc52a6a3204291d5e69b037004fb29149015
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-16 19:00:51 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:03 +0000

    libpfct: Fix PIC flag
    
    Use ${PICFLAG} rather than hard-adding -fPIC, which removes the
    requirement for libnv to be built PIC.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit 8403170b3d39326f836bc999534fe8c4d41cda11)
---
 lib/libnv/Makefile    | 1 -
 lib/libpfctl/Makefile | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/libnv/Makefile b/lib/libnv/Makefile
index 2e227cbc0b04..bf92041d4c87 100644
--- a/lib/libnv/Makefile
+++ b/lib/libnv/Makefile
@@ -10,7 +10,6 @@ SHLIB_MAJOR= 0
 
 .PATH: ${SRCTOP}/sys/contrib/libnv ${SRCTOP}/sys/sys
 CFLAGS+=-I${.CURDIR}
-CFLAGS+=${PICFLAG}
 
 SRCS=	cnvlist.c
 SRCS+=	dnvlist.c
diff --git a/lib/libpfctl/Makefile b/lib/libpfctl/Makefile
index d7a00a94b349..69500ae496f4 100644
--- a/lib/libpfctl/Makefile
+++ b/lib/libpfctl/Makefile
@@ -7,6 +7,6 @@ INTERNALLIB=	true
 SRCS=	libpfctl.c
 INCS=	libpfctl.h
 
-CFLAGS+=	-fPIC
+CFLAGS+=${PICFLAG}
 
 .include <bsd.lib.mk>

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:57 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id D086263171F;
 Fri,  7 May 2021 15:25:57 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmj41qGz4k6v;
 Fri,  7 May 2021 15:25:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 394475DBE;
 Fri,  7 May 2021 15:25:54 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPsRt026647;
 Fri, 7 May 2021 15:25:54 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPsRo026646;
 Fri, 7 May 2021 15:25:54 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:54 GMT
Message-Id: <202105071525.147FPsRo026646@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 9c238775a80d - stable/13 - libpfct: Fix PIC flag
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 9c238775a80d8fbaa61e72c8f08122be47481501
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:58 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=9c238775a80d8fbaa61e72c8f08122be47481501

commit 9c238775a80d8fbaa61e72c8f08122be47481501
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-16 19:00:51 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:43 +0000

    libpfct: Fix PIC flag
    
    Use ${PICFLAG} rather than hard-adding -fPIC, which removes the
    requirement for libnv to be built PIC.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit 8403170b3d39326f836bc999534fe8c4d41cda11)
---
 lib/libnv/Makefile    | 1 -
 lib/libpfctl/Makefile | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/libnv/Makefile b/lib/libnv/Makefile
index 6105f6244fce..b13758931c4e 100644
--- a/lib/libnv/Makefile
+++ b/lib/libnv/Makefile
@@ -10,7 +10,6 @@ SHLIB_MAJOR= 0
 
 .PATH: ${SRCTOP}/sys/contrib/libnv ${SRCTOP}/sys/sys
 CFLAGS+=-I${.CURDIR}
-CFLAGS+=${PICFLAG}
 
 SRCS=	cnvlist.c
 SRCS+=	dnvlist.c
diff --git a/lib/libpfctl/Makefile b/lib/libpfctl/Makefile
index d7a00a94b349..69500ae496f4 100644
--- a/lib/libpfctl/Makefile
+++ b/lib/libpfctl/Makefile
@@ -7,6 +7,6 @@ INTERNALLIB=	true
 SRCS=	libpfctl.c
 INCS=	libpfctl.h
 
-CFLAGS+=	-fPIC
+CFLAGS+=${PICFLAG}
 
 .include <bsd.lib.mk>

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:58 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 536EF6314BE;
 Fri,  7 May 2021 15:25:58 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmj5bqDz4k2p;
 Fri,  7 May 2021 15:25:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4979858F6;
 Fri,  7 May 2021 15:25:55 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPtE4026693;
 Fri, 7 May 2021 15:25:55 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPt87026692;
 Fri, 7 May 2021 15:25:55 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:55 GMT
Message-Id: <202105071525.147FPt87026692@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 326f189d5b0e - stable/13 - pf: PFRULE_REFS should not be
 user-visible
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 326f189d5b0e8d4feaf147a2d5340f0391e90fc9
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:58 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=326f189d5b0e8d4feaf147a2d5340f0391e90fc9

commit 326f189d5b0e8d4feaf147a2d5340f0391e90fc9
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-15 11:38:56 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:15:43 +0000

    pf: PFRULE_REFS should not be user-visible
    
    Split the PFRULE_REFS flag from the rule_flag field. PFRULE_REFS is a
    kernel-internal flag and should not be exposed to or read from
    userspace.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29778
    
    (cherry picked from commit 4f1f67e88853ac9e3c2d8897cf6dab6cfda8d16e)
---
 sys/net/pfvar.h           |  1 +
 sys/netpfil/pf/pf.c       | 12 ++++++------
 sys/netpfil/pf/pf_ioctl.c |  2 +-
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 0ca46bb8048a..a6510560bb0e 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -377,6 +377,7 @@ struct pf_krule {
 	struct pf_rule_gid	 gid;
 
 	u_int32_t		 rule_flag;
+	uint32_t		 rule_ref;
 	u_int8_t		 action;
 	u_int8_t		 direction;
 	u_int8_t		 log;
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index ca8adeba52c3..20c3d160188f 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -1641,7 +1641,7 @@ pf_purge_expired_src_nodes()
 			pf_unlink_src_node(cur);
 			LIST_INSERT_HEAD(&freelist, cur, entry);
 		} else if (cur->rule.ptr != NULL)
-			cur->rule.ptr->rule_flag |= PFRULE_REFS;
+			cur->rule.ptr->rule_ref |= PFRULE_REFS;
 	    PF_HASHROW_UNLOCK(sh);
 	}
 
@@ -1783,11 +1783,11 @@ relock:
 					    pf_unlink_state(s, PF_ENTER_LOCKED);
 					goto relock;
 				}
-				s->rule.ptr->rule_flag |= PFRULE_REFS;
+				s->rule.ptr->rule_ref |= PFRULE_REFS;
 				if (s->nat_rule.ptr != NULL)
-					s->nat_rule.ptr->rule_flag |= PFRULE_REFS;
+					s->nat_rule.ptr->rule_ref |= PFRULE_REFS;
 				if (s->anchor.ptr != NULL)
-					s->anchor.ptr->rule_flag |= PFRULE_REFS;
+					s->anchor.ptr->rule_ref |= PFRULE_REFS;
 				s->kif->pfik_flags |= PFI_IFLAG_REFS;
 				if (s->rt_kif)
 					s->rt_kif->pfik_flags |= PFI_IFLAG_REFS;
@@ -1839,11 +1839,11 @@ pf_purge_unlinked_rules()
 	TAILQ_INIT(&tmpq);
 	PF_UNLNKDRULES_LOCK();
 	TAILQ_FOREACH_SAFE(r, &V_pf_unlinked_rules, entries, r1) {
-		if (!(r->rule_flag & PFRULE_REFS)) {
+		if (!(r->rule_ref & PFRULE_REFS)) {
 			TAILQ_REMOVE(&V_pf_unlinked_rules, r, entries);
 			TAILQ_INSERT_TAIL(&tmpq, r, entries);
 		} else
-			r->rule_flag &= ~PFRULE_REFS;
+			r->rule_ref &= ~PFRULE_REFS;
 	}
 	PF_UNLNKDRULES_UNLOCK();
 
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index e6ab3ab5e91f..522f6a6a8f54 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -426,7 +426,7 @@ pf_unlink_rule(struct pf_krulequeue *rulequeue, struct pf_krule *rule)
 	TAILQ_REMOVE(rulequeue, rule, entries);
 
 	PF_UNLNKDRULES_LOCK();
-	rule->rule_flag |= PFRULE_REFS;
+	rule->rule_ref |= PFRULE_REFS;
 	TAILQ_INSERT_TAIL(&V_pf_unlinked_rules, rule, entries);
 	PF_UNLNKDRULES_UNLOCK();
 }

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:59 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0A6686313F7;
 Fri,  7 May 2021 15:25:59 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmk11W3z4jkx;
 Fri,  7 May 2021 15:25:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 512275772;
 Fri,  7 May 2021 15:25:56 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPuJ5026735;
 Fri, 7 May 2021 15:25:56 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPuRC026734;
 Fri, 7 May 2021 15:25:56 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:56 GMT
Message-Id: <202105071525.147FPuRC026734@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 70e8fe5eee7c - stable/13 - pf: Fix IP checksum on reassembly
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 70e8fe5eee7c35a2c7ce988d402d84a7a9901818
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:59 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=70e8fe5eee7c35a2c7ce988d402d84a7a9901818

commit 70e8fe5eee7c35a2c7ce988d402d84a7a9901818
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-28 10:56:06 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    pf: Fix IP checksum on reassembly
    
    If we reassemble a packet we modify the IP header (to set the length and
    remove the fragment offset information), but we failed to update the
    checksum. On certain setups (mostly where we did not re-fragment again
    afterwards) this could lead to us sending out packets with incorrect
    checksums.
    
    PR:             255432
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D30026
    
    (cherry picked from commit 055c55abefbe19fe46a56894595af9c9dad7678c)
---
 sys/netpfil/pf/pf_norm.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sys/netpfil/pf/pf_norm.c b/sys/netpfil/pf/pf_norm.c
index d7310c7bccb4..6de1efa8ff84 100644
--- a/sys/netpfil/pf/pf_norm.c
+++ b/sys/netpfil/pf/pf_norm.c
@@ -794,7 +794,11 @@ pf_reassemble(struct mbuf **m0, struct ip *ip, int dir, u_short *reason)
 	}
 
 	ip = mtod(m, struct ip *);
+	ip->ip_sum = pf_cksum_fixup(ip->ip_sum, ip->ip_len,
+	    htons(hdrlen + total), 0);
 	ip->ip_len = htons(hdrlen + total);
+	ip->ip_sum = pf_cksum_fixup(ip->ip_sum, ip->ip_off,
+	    ip->ip_off & ~(IP_MF|IP_OFFMASK), 0);
 	ip->ip_off &= ~(IP_MF|IP_OFFMASK);
 
 	if (hdrlen + total > IP_MAXPACKET) {

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:26:03 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0A90B6315D4;
 Fri,  7 May 2021 15:26:03 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmm6X8jz4jr1;
 Fri,  7 May 2021 15:26:00 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 18D295AD3;
 Fri,  7 May 2021 15:25:58 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPvr3026798;
 Fri, 7 May 2021 15:25:57 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPvsa026797;
 Fri, 7 May 2021 15:25:57 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:57 GMT
Message-Id: <202105071525.147FPvsa026797@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: af1b05bb32b5 - stable/12 - pf: Fix IP checksum on reassembly
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: af1b05bb32b5440dd999853bd7c01a5b8c0d73f4
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:26:03 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=af1b05bb32b5440dd999853bd7c01a5b8c0d73f4

commit af1b05bb32b5440dd999853bd7c01a5b8c0d73f4
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-28 10:56:06 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:17:50 +0000

    pf: Fix IP checksum on reassembly
    
    If we reassemble a packet we modify the IP header (to set the length and
    remove the fragment offset information), but we failed to update the
    checksum. On certain setups (mostly where we did not re-fragment again
    afterwards) this could lead to us sending out packets with incorrect
    checksums.
    
    PR:             255432
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D30026
    
    (cherry picked from commit 055c55abefbe19fe46a56894595af9c9dad7678c)
---
 sys/netpfil/pf/pf_norm.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sys/netpfil/pf/pf_norm.c b/sys/netpfil/pf/pf_norm.c
index 2a3c1d442fd4..8f970b68373b 100644
--- a/sys/netpfil/pf/pf_norm.c
+++ b/sys/netpfil/pf/pf_norm.c
@@ -790,7 +790,11 @@ pf_reassemble(struct mbuf **m0, struct ip *ip, int dir, u_short *reason)
 	}
 
 	ip = mtod(m, struct ip *);
+	ip->ip_sum = pf_cksum_fixup(ip->ip_sum, ip->ip_len,
+	    htons(hdrlen + total), 0);
 	ip->ip_len = htons(hdrlen + total);
+	ip->ip_sum = pf_cksum_fixup(ip->ip_sum, ip->ip_off,
+	    ip->ip_off & ~(IP_MF|IP_OFFMASK), 0);
 	ip->ip_off &= ~(IP_MF|IP_OFFMASK);
 
 	if (hdrlen + total > IP_MAXPACKET) {

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:26:04 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5305C6317A9;
 Fri,  7 May 2021 15:26:04 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmq6Lmnz4jl6;
 Fri,  7 May 2021 15:26:03 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3D2DD5AD4;
 Fri,  7 May 2021 15:25:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPxhV026956;
 Fri, 7 May 2021 15:25:59 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPxqp026955;
 Fri, 7 May 2021 15:25:59 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:59 GMT
Message-Id: <202105071525.147FPxqp026955@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: becdc0c0dc76 - stable/12 - pf tests: Test scrub fragment
 reassemble on interfaces with different MTU
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: becdc0c0dc7604389dd06b682ab11ed4dc43afea
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:26:04 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=becdc0c0dc7604389dd06b682ab11ed4dc43afea

commit becdc0c0dc7604389dd06b682ab11ed4dc43afea
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-27 16:46:03 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:19:05 +0000

    pf tests: Test scrub fragment reassemble on interfaces with different MTU
    
    There's a problem with pf's reassembly code where it produces incorrect
    checksums when reassembling across interfaces with different MTUs.
    Test this.
    
    PR:             255432
    Reviewed by:    donner
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D30013
    
    (cherry picked from commit 388c0cde10293d9a3434e99146bf391aec6878a3)
---
 tests/sys/netpfil/pf/fragmentation.sh | 49 +++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/tests/sys/netpfil/pf/fragmentation.sh b/tests/sys/netpfil/pf/fragmentation.sh
index 943c76e478f3..1be6a3bc17cd 100755
--- a/tests/sys/netpfil/pf/fragmentation.sh
+++ b/tests/sys/netpfil/pf/fragmentation.sh
@@ -116,8 +116,57 @@ v6_cleanup()
 	pft_cleanup
 }
 
+atf_test_case "mtu_diff" "cleanup"
+mtu_diff_head()
+{
+	atf_set descr 'Test reassembly across different MTUs, PR #255432'
+	atf_set require.user root
+}
+
+mtu_diff_body()
+{
+	pft_init
+
+	epair_small=$(vnet_mkepair)
+	epair_large=$(vnet_mkepair)
+
+	vnet_mkjail first ${epair_small}b ${epair_large}a
+	vnet_mkjail second ${epair_large}b
+
+	ifconfig ${epair_small}a 192.0.2.1/25 up
+	jexec first ifconfig ${epair_small}b 192.0.2.2/25 up
+
+	jexec first sysctl net.inet.ip.forwarding=1
+	jexec first ifconfig ${epair_large}a 192.0.2.130/25 up
+	jexec first ifconfig ${epair_large}a mtu 9000
+	jexec second ifconfig ${epair_large}b 192.0.2.131/25 up
+	jexec second ifconfig ${epair_large}b mtu 9000
+	jexec second route add default 192.0.2.130
+
+	route add 192.0.2.128/25 192.0.2.2
+
+	jexec first pfctl -e
+	pft_set_rules first \
+		"scrub all fragment reassemble"
+
+	# Sanity checks
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.130
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.131
+
+	# Large packet that'll get reassembled and sent out in one on the large
+	# epair
+	atf_check -s exit:0 -o ignore ping -c 1 -s 8000 192.0.2.131
+}
+
+mtu_diff_cleanup()
+{
+	pft_cleanup
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case "too_many_fragments"
 	atf_add_test_case "v6"
+	atf_add_test_case "mtu_diff"
 }

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:25:58 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5C15C6314BF;
 Fri,  7 May 2021 15:25:58 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmj5qgFz4k2q;
 Fri,  7 May 2021 15:25:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BD3C558F5;
 Fri,  7 May 2021 15:25:54 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPsEK026672;
 Fri, 7 May 2021 15:25:54 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPsb8026671;
 Fri, 7 May 2021 15:25:54 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:54 GMT
Message-Id: <202105071525.147FPsb8026671@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 8a6337a79d73 - stable/12 - pf tests: Test clearing rules counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 8a6337a79d73237b090b0a85df204da4b12bb039
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:25:58 -0000

The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=8a6337a79d73237b090b0a85df204da4b12bb039

commit 8a6337a79d73237b090b0a85df204da4b12bb039
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-12 15:29:19 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:02 +0000

    pf tests: Test clearing rules counters
    
    This was briefly broken, so ensure that we can read and clear rules
    counters.
    
    MFC after:      4 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D29728
    
    (cherry picked from commit 112f007e12818ba3d54869b331139090e69dbc74)
---
 tests/sys/netpfil/pf/Makefile         |  1 +
 tests/sys/netpfil/pf/rules_counter.sh | 79 +++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+)

diff --git a/tests/sys/netpfil/pf/Makefile b/tests/sys/netpfil/pf/Makefile
index 951a1392ae1f..b4f2a5a988f9 100644
--- a/tests/sys/netpfil/pf/Makefile
+++ b/tests/sys/netpfil/pf/Makefile
@@ -14,6 +14,7 @@ ATF_TESTS_SH+=	anchor \
 		killstate \
 		names \
 		nat \
+		rules_counter \
 		set_tos \
 		src_track \
 		rdr \
diff --git a/tests/sys/netpfil/pf/rules_counter.sh b/tests/sys/netpfil/pf/rules_counter.sh
new file mode 100644
index 000000000000..56dc159f49c8
--- /dev/null
+++ b/tests/sys/netpfil/pf/rules_counter.sh
@@ -0,0 +1,79 @@
+# $FreeBSD$
+#
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2021 Rubicon Communications, LLC (Netgate)
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+. $(atf_get_srcdir)/utils.subr
+
+atf_test_case "get_clear" "cleanup"
+get_clear_head()
+{
+	atf_set descr 'Test clearing rules counters on get rules'
+	atf_set require.user root
+}
+
+get_clear_body()
+{
+	pft_init
+
+	epair_send=$(vnet_mkepair)
+	ifconfig ${epair_send}a 192.0.2.1/24 up
+
+	vnet_mkjail alcatraz ${epair_send}b
+	jexec alcatraz ifconfig ${epair_send}b 192.0.2.2/24 up
+	jexec alcatraz pfctl -e
+
+	pft_set_rules alcatraz \
+		"pass all"
+
+	# Ensure the rule matched packets, so we can verify non-zero counters
+	atf_check -s exit:0 -o ignore ping -c 3 192.0.2.2
+
+	# Expect non-zero counters
+	atf_check -s exit:0 -e ignore \
+	    -o match:'Evaluations: [1-9][0-9]*[[:space:]]*Packets: [1-9][0-9]*[[:space:]]*Bytes: [1-9][0-9]*[[:space:]]*' \
+	    jexec alcatraz pfctl -s r -v
+
+	# We should still see non-zero because we didn't clear on the last
+	# pfctl, but are going to clear now
+	atf_check -s exit:0 -e ignore \
+	    -o match:'Evaluations: [1-9][0-9]*[[:space:]]*Packets: [1-9][0-9]*[[:space:]]*Bytes: [1-9][0-9]*[[:space:]]*' \
+	    jexec alcatraz pfctl -s r -v -z
+
+	# Expect zero counters
+	atf_check -s exit:0 -e ignore \
+	    -o match:'Evaluations: 0[[:space:]]*Packets: 0*[[:space:]]*Bytes: 0*[[:space:]]*' \
+	    jexec alcatraz pfctl -s r -v
+}
+
+get_clear_cleanup()
+{
+	pft_cleanup
+}
+
+atf_init_test_cases()
+{
+	atf_add_test_case "get_clear"
+}

From owner-dev-commits-src-branches@freebsd.org  Fri May  7 15:26:03 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1CF1E63180B;
 Fri,  7 May 2021 15:26:03 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcDmp0H17z4k51;
 Fri,  7 May 2021 15:26:00 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7D4F05B3E;
 Fri,  7 May 2021 15:25:57 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147FPvmL026777;
 Fri, 7 May 2021 15:25:57 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147FPvq6026776;
 Fri, 7 May 2021 15:25:57 GMT (envelope-from git)
Date: Fri, 7 May 2021 15:25:57 GMT
Message-Id: <202105071525.147FPvq6026776@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Kristof Provost <kp@FreeBSD.org>
Subject: git: 3f9591da1863 - stable/13 - pf tests: Test scrub fragment
 reassemble on interfaces with different MTU
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: kp
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 3f9591da1863acb55d3b11b7d0619a3aa70fcb7c
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 07 May 2021 15:26:03 -0000

The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=3f9591da1863acb55d3b11b7d0619a3aa70fcb7c

commit 3f9591da1863acb55d3b11b7d0619a3aa70fcb7c
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-04-27 16:46:03 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-05-07 08:16:23 +0000

    pf tests: Test scrub fragment reassemble on interfaces with different MTU
    
    There's a problem with pf's reassembly code where it produces incorrect
    checksums when reassembling across interfaces with different MTUs.
    Test this.
    
    PR:             255432
    Reviewed by:    donner
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D30013
    
    (cherry picked from commit 388c0cde10293d9a3434e99146bf391aec6878a3)
---
 tests/sys/netpfil/pf/fragmentation.sh | 49 +++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/tests/sys/netpfil/pf/fragmentation.sh b/tests/sys/netpfil/pf/fragmentation.sh
index e697281b0826..8b57bcf11487 100644
--- a/tests/sys/netpfil/pf/fragmentation.sh
+++ b/tests/sys/netpfil/pf/fragmentation.sh
@@ -141,8 +141,57 @@ v6_cleanup()
 	pft_cleanup
 }
 
+atf_test_case "mtu_diff" "cleanup"
+mtu_diff_head()
+{
+	atf_set descr 'Test reassembly across different MTUs, PR #255432'
+	atf_set require.user root
+}
+
+mtu_diff_body()
+{
+	pft_init
+
+	epair_small=$(vnet_mkepair)
+	epair_large=$(vnet_mkepair)
+
+	vnet_mkjail first ${epair_small}b ${epair_large}a
+	vnet_mkjail second ${epair_large}b
+
+	ifconfig ${epair_small}a 192.0.2.1/25 up
+	jexec first ifconfig ${epair_small}b 192.0.2.2/25 up
+
+	jexec first sysctl net.inet.ip.forwarding=1
+	jexec first ifconfig ${epair_large}a 192.0.2.130/25 up
+	jexec first ifconfig ${epair_large}a mtu 9000
+	jexec second ifconfig ${epair_large}b 192.0.2.131/25 up
+	jexec second ifconfig ${epair_large}b mtu 9000
+	jexec second route add default 192.0.2.130
+
+	route add 192.0.2.128/25 192.0.2.2
+
+	jexec first pfctl -e
+	pft_set_rules first \
+		"scrub all fragment reassemble"
+
+	# Sanity checks
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.130
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.131
+
+	# Large packet that'll get reassembled and sent out in one on the large
+	# epair
+	atf_check -s exit:0 -o ignore ping -c 1 -s 8000 192.0.2.131
+}
+
+mtu_diff_cleanup()
+{
+	pft_cleanup
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case "too_many_fragments"
 	atf_add_test_case "v6"
+	atf_add_test_case "mtu_diff"
 }

From owner-dev-commits-src-branches@freebsd.org  Sat May  8 04:49:04 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1EFB0628B3B;
 Sat,  8 May 2021 04:49:04 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FcZbN0M6Bz4Tsk;
 Sat,  8 May 2021 04:49:04 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F351818CA4;
 Sat,  8 May 2021 04:49:03 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1484n3oX090519;
 Sat, 8 May 2021 04:49:03 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1484n3ik090518;
 Sat, 8 May 2021 04:49:03 GMT (envelope-from git)
Date: Sat, 8 May 2021 04:49:03 GMT
Message-Id: <202105080449.1484n3ik090518@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Gordon Bergling <gbe@FreeBSD.org>
Subject: git: 0da5e909e9c9 - stable/12 - release.7: update for current context
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: gbe
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 0da5e909e9c97c8937fec68888eea674fd59a081
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 08 May 2021 04:49:04 -0000

The branch stable/12 has been updated by gbe (doc committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=0da5e909e9c97c8937fec68888eea674fd59a081

commit 0da5e909e9c97c8937fec68888eea674fd59a081
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2020-09-01 15:30:40 +0000
Commit:     Gordon Bergling <gbe@FreeBSD.org>
CommitDate: 2021-05-08 04:47:16 +0000

    release.7: update for current context
    
    It's no longer unusual to be able to build a release with a single
    command, so drop "actually" that hints at a surprise.  Also just use
    "network install directory" instead of referencing FTP; it's more
    likely to be HTTP now.
    
    Reviewed by:    gjb
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D26260
    
    (cherry picked from commit 55c9a224e2a9c01d461003837ff6563803b63210)
---
 share/man/man7/release.7 | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/share/man/man7/release.7 b/share/man/man7/release.7
index cd25a86c985e..02ee2dfc0e5e 100644
--- a/share/man/man7/release.7
+++ b/share/man/man7/release.7
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd January 16, 2020
+.Dd September 1, 2020
 .Dt RELEASE 7
 .Os
 .Sh NAME
@@ -40,9 +40,9 @@ All of the tools necessary to build a release are available from the
 .Fx
 source code repository in
 .Pa src/release .
-A complete release can actually be built with only a single command,
+A complete release can be built with only a single command,
 including the creation of ISO images suitable for burning to CD-ROM,
-memory stick images, and an FTP install directory.
+memory stick images, and a network install directory.
 This command is aptly named
 .Dq Li "make release" .
 .Pp
@@ -96,7 +96,7 @@ assurance, or other aspects of the release engineering process.
 .Sh CLEAN RELEASE GENERATION
 Official releases of
 .Fx
-are produced in a totally clean environment to
+are produced in a clean environment to
 ensure consistency between the versions of the src, ports, and doc trees
 and to avoid contamination from the host system
 .Po such as local patches, changes

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 01:46:45 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7B41164584D;
 Sun,  9 May 2021 01:46:45 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fd6VY1rXbz4T2R;
 Sun,  9 May 2021 01:46:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 324A2F62;
 Sun,  9 May 2021 01:46:45 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1491kjFb062074;
 Sun, 9 May 2021 01:46:45 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1491kjXo062073;
 Sun, 9 May 2021 01:46:45 GMT (envelope-from git)
Date: Sun, 9 May 2021 01:46:45 GMT
Message-Id: <202105090146.1491kjXo062073@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Ed Maste <emaste@FreeBSD.org>
Subject: git: 6fd4891545c2 - stable/13 - Revert "Add workaround for a
 QoS-related bug in VMWare Workstation."
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: emaste
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 6fd4891545c2a6d06dbc1927b2e0b375cd2b0b17
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 01:46:45 -0000

The branch stable/13 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=6fd4891545c2a6d06dbc1927b2e0b375cd2b0b17

commit 6fd4891545c2a6d06dbc1927b2e0b375cd2b0b17
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2021-04-25 21:14:23 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2021-05-09 01:45:55 +0000

    Revert "Add workaround for a QoS-related bug in VMWare Workstation."
    
    This reverts commit 77c2fe20df6a9a7c1a353e1a4ab2ba80fefab881.
    
    The VMware Workstation issue was fixed in 2019[1], and we'd rather not
    carry unnecessary local changes in OpenSSH.
    
    [1] https://communities.vmware.com/t5/VMware-Workstation-Pro/Regression-ssh-results-in-broken-pipe-upon-connecting-in-Vmware/m-p/486105/highlight/true#M25470
    
    PR:             234426
    Discussed with: yuripv
    Approved by:    des
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit d55bf492f8f587e4a99f4dcb39a96159b4431782)
---
 crypto/openssh/readconf.c   | 22 ----------------------
 secure/usr.bin/ssh/Makefile |  3 ---
 2 files changed, 25 deletions(-)

diff --git a/crypto/openssh/readconf.c b/crypto/openssh/readconf.c
index 75fbd4ca222f..c1147a9e2e5f 100644
--- a/crypto/openssh/readconf.c
+++ b/crypto/openssh/readconf.c
@@ -16,9 +16,6 @@
 __RCSID("$FreeBSD$");
 
 #include <sys/types.h>
-#ifdef VMWARE_GUEST_WORKAROUND
-#include <sys/sysctl.h>
-#endif
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/wait.h>
@@ -1983,15 +1980,6 @@ fill_default_options(Options * options)
 {
 	char *all_cipher, *all_mac, *all_kex, *all_key, *all_sig;
 	int r;
-#ifdef VMWARE_GUEST_WORKAROUND
-	char scval[7];	/* "vmware\0" */
-	size_t scsiz = sizeof(scval);
-	int vmwguest = 0;
-
-	if (sysctlbyname("kern.vm_guest", scval, &scsiz, NULL, 0) == 0 &&
-	    strcmp(scval, "vmware") == 0)
-		vmwguest = 1;
-#endif
 
 	if (options->forward_agent == -1)
 		options->forward_agent = 0;
@@ -2126,18 +2114,8 @@ fill_default_options(Options * options)
 	if (options->visual_host_key == -1)
 		options->visual_host_key = 0;
 	if (options->ip_qos_interactive == -1)
-#ifdef VMWARE_GUEST_WORKAROUND
-		if (vmwguest)
-			options->ip_qos_interactive = IPTOS_LOWDELAY;
-		else
-#endif
 		options->ip_qos_interactive = IPTOS_DSCP_AF21;
 	if (options->ip_qos_bulk == -1)
-#ifdef VMWARE_GUEST_WORKAROUND
-		if (vmwguest)
-			options->ip_qos_bulk = IPTOS_THROUGHPUT;
-		else
-#endif
 		options->ip_qos_bulk = IPTOS_DSCP_CS1;
 	if (options->request_tty == -1)
 		options->request_tty = REQUEST_TTY_AUTO;
diff --git a/secure/usr.bin/ssh/Makefile b/secure/usr.bin/ssh/Makefile
index 023fa4a55be9..614cc7627fc5 100644
--- a/secure/usr.bin/ssh/Makefile
+++ b/secure/usr.bin/ssh/Makefile
@@ -37,9 +37,6 @@ LIBADD+=	crypto
 CFLAGS+= -DXAUTH_PATH=\"${LOCALBASE}/bin/xauth\"
 .endif
 
-# Workaround VMware Workstation NAT bug
-CFLAGS+=-DVMWARE_GUEST_WORKAROUND
-
 .include <bsd.prog.mk>
 
 .PATH:	${SSHDIR}

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 02:31:39 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 04908646C6E;
 Sun,  9 May 2021 02:31:39 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fd7VL6jGhz4WDg;
 Sun,  9 May 2021 02:31:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D96AE1A3A;
 Sun,  9 May 2021 02:31:38 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1492Vcj2027194;
 Sun, 9 May 2021 02:31:38 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1492VcEV027193;
 Sun, 9 May 2021 02:31:38 GMT (envelope-from git)
Date: Sun, 9 May 2021 02:31:38 GMT
Message-Id: <202105090231.1492VcEV027193@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Xin LI <delphij@FreeBSD.org>
Subject: git: 8c10d2979c55 - stable/13 - less: upgrade to v581.2.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: delphij
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 8c10d2979c55c1856ea997dc4fae59256ec0ba31
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 02:31:39 -0000

The branch stable/13 has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=8c10d2979c55c1856ea997dc4fae59256ec0ba31

commit 8c10d2979c55c1856ea997dc4fae59256ec0ba31
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2021-04-19 02:46:19 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2021-05-09 02:31:02 +0000

    less: upgrade to v581.2.
    
    (cherry picked from commit 50d31dbc6e2bc3aa6007edb8cdecbcb84e85d6c0)
    
    less: upgrade to v581.
    
    (cherry picked from commit 2235c7feac959bcc9ddfd6a2bc6be32102b1f84c)
---
 contrib/less/INSTALL      |  10 +-
 contrib/less/NEWS         |  50 ++-
 contrib/less/README       |  38 +-
 contrib/less/brac.c       |   2 +-
 contrib/less/ch.c         |  54 ++-
 contrib/less/charset.c    | 154 ++++----
 contrib/less/charset.h    |   2 +-
 contrib/less/cmd.h        |  20 +-
 contrib/less/cmdbuf.c     |  87 ++---
 contrib/less/command.c    | 189 +++++++---
 contrib/less/cvt.c        |  12 +-
 contrib/less/decode.c     | 367 ++++++++++---------
 contrib/less/edit.c       |  33 +-
 contrib/less/filename.c   |  29 +-
 contrib/less/forwback.c   |  11 +-
 contrib/less/funcs.h      |  35 +-
 contrib/less/help.c       |  24 +-
 contrib/less/ifile.c      |  39 +-
 contrib/less/input.c      |  45 ++-
 contrib/less/jump.c       |   2 +-
 contrib/less/less.h       | 419 +++++++++++----------
 contrib/less/less.hlp     |  22 +-
 contrib/less/less.nro     | 204 +++++++++--
 contrib/less/lessecho.c   |  14 +-
 contrib/less/lessecho.nro |   8 +-
 contrib/less/lesskey.c    | 163 ++++-----
 contrib/less/lesskey.h    |  38 +-
 contrib/less/lesskey.nro  |  25 +-
 contrib/less/lglob.h      | 110 +++---
 contrib/less/line.c       | 905 ++++++++++++++++++++++++++--------------------
 contrib/less/linenum.c    |  31 +-
 contrib/less/lsystem.c    |  44 +--
 contrib/less/main.c       |  85 +++--
 contrib/less/mark.c       |  26 +-
 contrib/less/optfunc.c    | 309 ++++++++++++----
 contrib/less/option.c     |  25 +-
 contrib/less/option.h     |  62 ++--
 contrib/less/opttbl.c     | 154 +++++---
 contrib/less/os.c         |  94 ++++-
 contrib/less/output.c     | 612 ++++++++++++++++---------------
 contrib/less/pattern.c    |  11 +-
 contrib/less/pattern.h    |  18 +-
 contrib/less/pckeys.h     |  38 +-
 contrib/less/position.c   |  12 +-
 contrib/less/position.h   |  12 +-
 contrib/less/prompt.c     |  88 ++---
 contrib/less/regexp.h     |  14 +-
 contrib/less/screen.c     | 796 ++++++++++++++++++++++++++++------------
 contrib/less/scrsize.c    |   2 +-
 contrib/less/search.c     | 359 +++++++++++++-----
 contrib/less/signal.c     |  14 +-
 contrib/less/tags.c       |  77 ++--
 contrib/less/ttyin.c      |  51 ++-
 contrib/less/version.c    |  30 +-
 usr.bin/less/defines.h    |  13 +-
 55 files changed, 3782 insertions(+), 2306 deletions(-)

diff --git a/contrib/less/INSTALL b/contrib/less/INSTALL
index c2ab230e4470..78ae93246d88 100644
--- a/contrib/less/INSTALL
+++ b/contrib/less/INSTALL
@@ -1,6 +1,6 @@
-   This file describes how to build and install less using 
-the "configure" script.  This only works on Unix systems.  
-To install on other systems, read the README file.
+This file contains generic instructions on how to build and
+install software using autoconf. For specific instructions
+on how to build "less", see the README or README.VER file.
 
 
 Basic Installation
@@ -24,8 +24,8 @@ diffs or instructions to the address given in the `README' so they can
 be considered for the next release.  If at some point `config.cache'
 contains results you don't want to keep, you may remove or edit it.
 
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
+   The file `configure.ac' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.ac' if you want to change
 it or regenerate `configure' using a newer version of `autoconf'.
 
 The simplest way to compile this package is:
diff --git a/contrib/less/NEWS b/contrib/less/NEWS
index b0644fd2e0de..bc5afd655ddc 100644
--- a/contrib/less/NEWS
+++ b/contrib/less/NEWS
@@ -4,10 +4,56 @@
 ======================================================================
 
   For the latest news about less, see the "less" Web page:
-      http://www.greenwoodsoftware.com/less
+      https://greenwoodsoftware.com/less
   You can also download the latest version of less from there.
 
-  To report bugs, suggestions or comments, send email to bug-less@gnu.org
+  Report bugs, suggestions or comments at 
+  https://github.com/gwsw/less/issues.
+
+======================================================================
+
+	Major changes between "less" versions 563 and 581.2
+
+* Change ESC-u command to toggle, not disable, highlighting per man page.
+
+* Add ESC-U command. 
+
+* Add ctrl-W search modifier for wrapping search.
+
+* F command can be interrupted by ^X.
+
+* Support OSC 8 hyperlinks when -R is in effect.
+
+* g command with no number will ignore -j and put first line at top of screen.
+
+* Multiple + or -p command line options are handled better.
+
+* Add the --incsearch option.
+
+* Add the --line-num-width option.
+
+* Add the --status-col-width option.
+
+* Add the --use-color and --color options.
+
+* Display -w highlight even if highlighted line is empty.
+
+* If search result is in a long line, scroll to ensure it is visible.
+
+* Editing the same file under different names now creates only
+  one entry in the file list.
+
+* Make visual bell more visible on some terminals.
+
+* Ring end-of-file bell no more than once per second.
+
+* Build can use either Python or Perl for Makefile.aut operations.
+
+* Fix crash when using the @ search modifier.
+
+* Fix crash in the 's' command due to duplicate free.
+
+* Fix realpath crash on Darwin.
 
 ======================================================================
 
diff --git a/contrib/less/README b/contrib/less/README
index 81cb7e091296..2acbd00d762a 100644
--- a/contrib/less/README
+++ b/contrib/less/README
@@ -7,9 +7,9 @@
 **************************************************************************
 **************************************************************************
 
-                            Less, version 563
+                            Less, version 581.2
 
-    This is the distribution of less, version 563, released 13 Jun 2020.
+    This is the distribution of less, version 581.2, released 28 Apr 2021.
     This program is part of the GNU project (http://www.gnu.org).
 
     This program is free software.  You may redistribute it and/or
@@ -21,33 +21,29 @@
     or
     2. The Less License, in the file LICENSE.
 
-    Please report any problems to bug-less@gnu.org.
-    See http://www.greenwoodsoftware.com/less for the latest info.
+    Please report any problems at https://github.com/gwsw/less/issues.
+    See https://greenwoodsoftware.com/less for the latest info.
     Source repository is at https://github.com/gwsw/less.git.
 
 =========================================================================
 
-This is the distribution of "less", a paginator similar to "more" or "pg".
-
 The formatted manual page is in less.man.
 The manual page nroff source is in less.nro.
 Major changes made since the last posted version are in NEWS.
 
 =======================================================================
-PRE-INSTALLATION (when using git)
-
-If you are building from a clone of a git repository,
-type "make -f Makefile.aut".
-If you are building from a numbered release package (a tar or zip file 
-with a name like less-999.tar.gz or less-999.zip), you should skip this step. 
-
-=======================================================================
-INSTALLATION (Unix systems only):
+INSTALLATION (Unix & Linux systems only):
 
 1. Move the distributed source to its own directory and unpack it,
    if you have not already done so.  
 
-2. Type "sh configure".
+2. If you are building from a clone of a git repository,
+   type "make -f Makefile.aut".
+   If you are building from a numbered release package (a tar or 
+   zip file with a name like less-999.tar.gz or less-999.zip downloaded 
+   from greenwoodsoftware.com, not from github), you should skip this step. 
+
+3. Type "sh configure".
    This will generate a Makefile and a defines.h.
    Warning: if you have a GNU sed, make sure it is version 2.05 or later.
 
@@ -79,7 +75,7 @@ INSTALLATION (Unix systems only):
      commands, etc.
 
 
-3. It is a good idea to look over the generated Makefile and defines.h
+4. It is a good idea to look over the generated Makefile and defines.h
    and make sure they look ok.  If you know of any peculiarities of
    your system that configure might not have detected, you may fix the
    Makefile now.  Take particular notice of the list of "terminal" 
@@ -93,13 +89,13 @@ INSTALLATION (Unix systems only):
    to remove the descriptions of the features which you are removing.
    If you edit less.hlp, you should run "make -f Makefile.aut help.c".
 
-4. Type "make" and watch the fun.
+5. Type "make" and watch the fun.
 
-5. If the make succeeds, it will generate the programs "less",
+6. If the make succeeds, it will generate the programs "less",
    "lesskey" and "lessecho" in your current directory.  Test the 
    generated programs.
 
-6. When satisfied that it works, if you wish to install it
+7. When satisfied that it works, if you wish to install it
    in a public place, type "make install".
 
    The default install destinations are:
@@ -108,8 +104,6 @@ INSTALLATION (Unix systems only):
    If you want to install any of these files elsewhere, define
    bindir and/or mandir to the appropriate directories.
 
-If you have any problems building or running "less", suggestions, 
-complaints, etc., you may mail to bug-less@gnu.org.
 
 Note to hackers: comments noting possible improvements are enclosed
 in double curly brackets {{ like this }}.
diff --git a/contrib/less/brac.c b/contrib/less/brac.c
index db3a2951db08..53ada50aab56 100644
--- a/contrib/less/brac.c
+++ b/contrib/less/brac.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
diff --git a/contrib/less/ch.c b/contrib/less/ch.c
index 70fad1002dbf..bab0692f7437 100644
--- a/contrib/less/ch.c
+++ b/contrib/less/ch.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -41,7 +41,7 @@ struct bufnode {
 	struct bufnode *hnext, *hprev;
 };
 
-#define	LBUFSIZE	8192
+#define LBUFSIZE        8192
 struct buf {
 	struct bufnode node;
 	BLOCKNUM block;
@@ -54,7 +54,7 @@ struct buf {
  * The file state is maintained in a filestate structure.
  * A pointer to the filestate is kept in the ifile structure.
  */
-#define	BUFHASH_SIZE	1024
+#define BUFHASH_SIZE    1024
 struct filestate {
 	struct bufnode buflist;
 	struct bufnode hashtbl[BUFHASH_SIZE];
@@ -67,24 +67,24 @@ struct filestate {
 	POSITION fsize;
 };
 
-#define	ch_bufhead	thisfile->buflist.next
-#define	ch_buftail	thisfile->buflist.prev
-#define	ch_nbufs	thisfile->nbufs
-#define	ch_block	thisfile->block
-#define	ch_offset	thisfile->offset
-#define	ch_fpos		thisfile->fpos
-#define	ch_fsize	thisfile->fsize
-#define	ch_flags	thisfile->flags
-#define	ch_file		thisfile->file
+#define ch_bufhead      thisfile->buflist.next
+#define ch_buftail      thisfile->buflist.prev
+#define ch_nbufs        thisfile->nbufs
+#define ch_block        thisfile->block
+#define ch_offset       thisfile->offset
+#define ch_fpos         thisfile->fpos
+#define ch_fsize        thisfile->fsize
+#define ch_flags        thisfile->flags
+#define ch_file         thisfile->file
 
-#define	END_OF_CHAIN	(&thisfile->buflist)
-#define	END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
-#define BUFHASH(blk)	((blk) & (BUFHASH_SIZE-1))
+#define END_OF_CHAIN    (&thisfile->buflist)
+#define END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
+#define BUFHASH(blk)    ((blk) & (BUFHASH_SIZE-1))
 
 /*
  * Macros to manipulate the list of buffers in thisfile->buflist.
  */
-#define	FOR_BUFS(bn) \
+#define FOR_BUFS(bn) \
 	for (bn = ch_bufhead;  bn != END_OF_CHAIN;  bn = bn->next)
 
 #define BUF_RM(bn) \
@@ -106,15 +106,15 @@ struct filestate {
 /*
  * Macros to manipulate the list of buffers in thisfile->hashtbl[n].
  */
-#define	FOR_BUFS_IN_CHAIN(h,bn) \
+#define FOR_BUFS_IN_CHAIN(h,bn) \
 	for (bn = thisfile->hashtbl[h].hnext;  \
 	     bn != END_OF_HCHAIN(h);  bn = bn->hnext)
 
-#define	BUF_HASH_RM(bn) \
+#define BUF_HASH_RM(bn) \
 	(bn)->hnext->hprev = (bn)->hprev; \
 	(bn)->hprev->hnext = (bn)->hnext;
 
-#define	BUF_HASH_INS(bn,h) \
+#define BUF_HASH_INS(bn,h) \
 	(bn)->hnext = thisfile->hashtbl[h].hnext; \
 	(bn)->hprev = END_OF_HCHAIN(h); \
 	thisfile->hashtbl[h].hnext->hprev = (bn); \
@@ -240,12 +240,12 @@ ch_get(VOID_PARAM)
 			return ('?');
 		if (lseek(ch_file, (off_t)pos, SEEK_SET) == BAD_LSEEK)
 		{
- 			error("seek error", NULL_PARG);
+			error("seek error", NULL_PARG);
 			clear_eol();
 			return (EOI);
- 		}
- 		ch_fpos = pos;
- 	}
+		}
+		ch_fpos = pos;
+	}
 
 	/*
 	 * Read the block.
@@ -311,13 +311,7 @@ ch_get(VOID_PARAM)
 				parg.p_string = wait_message();
 				ierror("%s", &parg);
 			}
-#if !MSDOS_COMPILER
-	 		sleep(1);
-#else
-#if MSDOS_COMPILER==WIN32C
-			Sleep(1000);
-#endif
-#endif
+			sleep_ms(2); /* Reduce system load */
 			slept = TRUE;
 
 #if HAVE_STAT_INO
diff --git a/contrib/less/charset.c b/contrib/less/charset.c
index 4897cbaf6adc..b37c8a29cbd9 100644
--- a/contrib/less/charset.c
+++ b/contrib/less/charset.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -40,27 +40,27 @@ struct charset {
 	int *p_flag;
 	char *desc;
 } charsets[] = {
-	{ "ascii",		NULL,       "8bcccbcc18b95.b" },
-	{ "utf-8",		&utf_mode,  "8bcccbcc18b95.b126.bb" },
-	{ "iso8859",		NULL,       "8bcccbcc18b95.33b." },
-	{ "latin3",		NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
-	{ "arabic",		NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
-	{ "greek",		NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
-	{ "greek2005",		NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
-	{ "hebrew",		NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
-	{ "koi8-r",		NULL,       "8bcccbcc18b95.b." },
-	{ "KOI8-T",		NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
-	{ "georgianps",		NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
-	{ "tcvn",		NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
-	{ "TIS-620",		NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
-	{ "next",		NULL,       "8bcccbcc18b95.bb125.bb" },
-	{ "dos",		NULL,       "8bcccbcc12bc5b95.b." },
-	{ "windows-1251",	NULL,       "8bcccbcc12bc5b95.b24.b." },
-	{ "windows-1252",	NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
-	{ "windows-1255",	NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
-	{ "ebcdic",		NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
-	{ "IBM-1047",		NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
-	{ NULL, NULL, NULL }
+		{ "ascii",              NULL,       "8bcccbcc18b95.b" },
+		{ "utf-8",              &utf_mode,  "8bcccbcc18b95.b126.bb" },
+		{ "iso8859",            NULL,       "8bcccbcc18b95.33b." },
+		{ "latin3",             NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
+		{ "arabic",             NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
+		{ "greek",              NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
+		{ "greek2005",          NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
+		{ "hebrew",             NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
+		{ "koi8-r",             NULL,       "8bcccbcc18b95.b." },
+		{ "KOI8-T",             NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
+		{ "georgianps",         NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
+		{ "tcvn",               NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
+		{ "TIS-620",            NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
+		{ "next",               NULL,       "8bcccbcc18b95.bb125.bb" },
+		{ "dos",                NULL,       "8bcccbcc12bc5b95.b." },
+		{ "windows-1251",       NULL,       "8bcccbcc12bc5b95.b24.b." },
+		{ "windows-1252",       NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
+		{ "windows-1255",       NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
+		{ "ebcdic",             NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
+		{ "IBM-1047",           NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
+		{ NULL, NULL, NULL }
 };
 
 /*
@@ -70,58 +70,58 @@ struct cs_alias {
 	char *name;
 	char *oname;
 } cs_aliases[] = {
-	{ "UTF-8",		"utf-8" },
-	{ "utf8",		"utf-8" },
-	{ "UTF8",		"utf-8" },
-	{ "ANSI_X3.4-1968",	"ascii" },
-	{ "US-ASCII",		"ascii" },
-	{ "latin1",		"iso8859" },
-	{ "ISO-8859-1",		"iso8859" },
-	{ "latin9",		"iso8859" },
-	{ "ISO-8859-15",	"iso8859" },
-	{ "latin2",		"iso8859" },
-	{ "ISO-8859-2",		"iso8859" },
-	{ "ISO-8859-3",		"latin3" },
-	{ "latin4",		"iso8859" },
-	{ "ISO-8859-4",		"iso8859" },
-	{ "cyrillic",		"iso8859" },
-	{ "ISO-8859-5",		"iso8859" },
-	{ "ISO-8859-6",		"arabic" },
-	{ "ISO-8859-7",		"greek" },
-	{ "IBM9005",		"greek2005" },
-	{ "ISO-8859-8",		"hebrew" },
-	{ "latin5",		"iso8859" },
-	{ "ISO-8859-9",		"iso8859" },
-	{ "latin6",		"iso8859" },
-	{ "ISO-8859-10",	"iso8859" },
-	{ "latin7",		"iso8859" },
-	{ "ISO-8859-13",	"iso8859" },
-	{ "latin8",		"iso8859" },
-	{ "ISO-8859-14",	"iso8859" },
-	{ "latin10",		"iso8859" },
-	{ "ISO-8859-16",	"iso8859" },
-	{ "IBM437",		"dos" },
-	{ "EBCDIC-US",		"ebcdic" },
-	{ "IBM1047",		"IBM-1047" },
-	{ "KOI8-R",		"koi8-r" },
-	{ "KOI8-U",		"koi8-r" },
-	{ "GEORGIAN-PS",	"georgianps" },
-	{ "TCVN5712-1", 	"tcvn" },
-	{ "NEXTSTEP",		"next" },
-	{ "windows",		"windows-1252" }, /* backward compatibility */
-	{ "CP1251",		"windows-1251" },
-	{ "CP1252",		"windows-1252" },
-	{ "CP1255",		"windows-1255" },
+	{ "UTF-8",              "utf-8" },
+	{ "utf8",               "utf-8" },
+	{ "UTF8",               "utf-8" },
+	{ "ANSI_X3.4-1968",     "ascii" },
+	{ "US-ASCII",           "ascii" },
+	{ "latin1",             "iso8859" },
+	{ "ISO-8859-1",         "iso8859" },
+	{ "latin9",             "iso8859" },
+	{ "ISO-8859-15",        "iso8859" },
+	{ "latin2",             "iso8859" },
+	{ "ISO-8859-2",         "iso8859" },
+	{ "ISO-8859-3",         "latin3" },
+	{ "latin4",             "iso8859" },
+	{ "ISO-8859-4",         "iso8859" },
+	{ "cyrillic",           "iso8859" },
+	{ "ISO-8859-5",         "iso8859" },
+	{ "ISO-8859-6",         "arabic" },
+	{ "ISO-8859-7",         "greek" },
+	{ "IBM9005",            "greek2005" },
+	{ "ISO-8859-8",         "hebrew" },
+	{ "latin5",             "iso8859" },
+	{ "ISO-8859-9",         "iso8859" },
+	{ "latin6",             "iso8859" },
+	{ "ISO-8859-10",        "iso8859" },
+	{ "latin7",             "iso8859" },
+	{ "ISO-8859-13",        "iso8859" },
+	{ "latin8",             "iso8859" },
+	{ "ISO-8859-14",        "iso8859" },
+	{ "latin10",            "iso8859" },
+	{ "ISO-8859-16",        "iso8859" },
+	{ "IBM437",             "dos" },
+	{ "EBCDIC-US",          "ebcdic" },
+	{ "IBM1047",            "IBM-1047" },
+	{ "KOI8-R",             "koi8-r" },
+	{ "KOI8-U",             "koi8-r" },
+	{ "GEORGIAN-PS",        "georgianps" },
+	{ "TCVN5712-1",         "tcvn" },
+	{ "NEXTSTEP",           "next" },
+	{ "windows",            "windows-1252" }, /* backward compatibility */
+	{ "CP1251",             "windows-1251" },
+	{ "CP1252",             "windows-1252" },
+	{ "CP1255",             "windows-1255" },
 	{ NULL, NULL }
 };
 
-#define	IS_BINARY_CHAR	01
-#define	IS_CONTROL_CHAR	02
+#define IS_BINARY_CHAR  01
+#define IS_CONTROL_CHAR 02
 
 static char chardef[256];
 static char *binfmt = NULL;
 static char *utfbinfmt = NULL;
-public int binattr = AT_STANDOUT;
+public int binattr = AT_STANDOUT|AT_COLOR_BIN;
 
 
 /*
@@ -134,9 +134,9 @@ public int binattr = AT_STANDOUT;
  * repetition of the letter.
  *
  * Each letter is one of:
- *	. normal character
- *	b binary character
- *	c control character
+ *      . normal character
+ *      b binary character
+ *      c control character
  */
 	static void
 ichardef(s)
@@ -457,16 +457,16 @@ prchar(c)
 		SNPRINTF1(buf, sizeof(buf), "^%c",
 		/*
 		 * This array roughly inverts CONTROL() #defined in less.h,
-	 	 * and should be kept in sync with CONTROL() and IBM-1047.
- 	 	 */
+		 * and should be kept in sync with CONTROL() and IBM-1047.
+		 */
 		"@ABC.I.?...KLMNO"
 		"PQRS.JH.XY.."
 		"\\]^_"
 		"......W[.....EFG"
 		"..V....D....TU.Z"[c]);
 #else
-  	else if (c < 128 && !control_char(c ^ 0100))
-  		SNPRINTF1(buf, sizeof(buf), "^%c", (int) (c ^ 0100));
+	else if (c < 128 && !control_char(c ^ 0100))
+		SNPRINTF1(buf, sizeof(buf), "^%c", (int) (c ^ 0100));
 #endif
 	else
 		SNPRINTF1(buf, sizeof(buf), binfmt, c);
@@ -484,7 +484,7 @@ prutfchar(ch)
 
 	if (ch == ESC)
 		strcpy(buf, "ESC");
-  	else if (ch < 128 && control_char(ch))
+	else if (ch < 128 && control_char(ch))
 	{
 		if (!control_char(ch ^ 0100))
 			SNPRINTF1(buf, sizeof(buf), "^%c", ((char) ch) ^ 0100);
@@ -732,9 +732,9 @@ step_char(pp, dir, limit)
  */
 
 #define DECLARE_RANGE_TABLE_START(name) \
-    static struct wchar_range name##_array[] = {
+	static struct wchar_range name##_array[] = {
 #define DECLARE_RANGE_TABLE_END(name) \
-    }; struct wchar_range_table name##_table = { name##_array, sizeof(name##_array)/sizeof(*name##_array) };
+	}; struct wchar_range_table name##_table = { name##_array, sizeof(name##_array)/sizeof(*name##_array) };
 
 DECLARE_RANGE_TABLE_START(compose)
 #include "compose.uni"
diff --git a/contrib/less/charset.h b/contrib/less/charset.h
index cc0c3af59e89..3e7ecf73db94 100644
--- a/contrib/less/charset.h
+++ b/contrib/less/charset.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
diff --git a/contrib/less/cmd.h b/contrib/less/cmd.h
index 95a2e5801717..c51f0bc5c4f3 100644
--- a/contrib/less/cmd.h
+++ b/contrib/less/cmd.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -31,7 +31,6 @@
 #define A_HELP                 19
 #define A_NEXT_FILE            20
 #define A_PERCENT              21
-#define A_PREFIX               22
 #define A_PREV_FILE            23
 #define A_QUIT                 24
 #define A_REPAINT              25
@@ -72,19 +71,19 @@
 #define A_CLRMARK              62
 #define A_SETMARKBOT           63
 #define A_X11MOUSE_IN          64
-#define A_X11MOUSE_IGNORE      65
 #define A_F_MOUSE              66
 #define A_B_MOUSE              67
 /* Note "X116" refers to extended (1006) X11 mouse reporting. */
 #define A_X116MOUSE_IN         68
-#define A_X116MOUSE_IGNORE     69
+#define A_CLR_SEARCH           70
 
+/* These values must not conflict with any A_* or EC_* value. */
 #define A_INVALID              100
 #define A_NOACTION             101
 #define A_UINVALID             102
 #define A_END_LIST             103
 #define A_SPECIAL_KEY          104
-
+#define A_PREFIX               105
 #define A_SKIP                 127
 
 #define A_EXTRA                0200
@@ -111,15 +110,16 @@
 #define EC_B_COMPLETE          18
 #define EC_LITERAL             19
 #define EC_ABORT               20
+#define EC_X11MOUSE            21
+#define EC_X116MOUSE           22
 
-#define EC_NOACTION            101
 #define EC_UINVALID            102
 
 /* Flags for editchar() */
-#define EC_PEEK                01
-#define EC_NOHISTORY           02
-#define EC_NOCOMPLETE          04
-#define EC_NORIGHTLEFT         010
+#define ECF_PEEK                01
+#define ECF_NOHISTORY           02
+#define ECF_NOCOMPLETE          04
+#define ECF_NORIGHTLEFT         010
 
 /* Environment variable stuff */
 #define EV_OK                  01
diff --git a/contrib/less/cmdbuf.c b/contrib/less/cmdbuf.c
index ed78ded00307..9cc1f3e94977 100644
--- a/contrib/less/cmdbuf.c
+++ b/contrib/less/cmdbuf.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -26,12 +26,12 @@ extern int no_hist_dups;
 extern int marks_modified;
 
 static char cmdbuf[CMDBUF_SIZE]; /* Buffer for holding a multi-char command */
-static int cmd_col;		/* Current column of the cursor */
-static int prompt_col;		/* Column of cursor just after prompt */
-static char *cp;		/* Pointer into cmdbuf */
-static int cmd_offset;		/* Index into cmdbuf of first displayed char */
-static int literal;		/* Next input char should not be interpreted */
-static int updown_match = -1;	/* Prefix length in up/down movement */
+static int cmd_col;              /* Current column of the cursor */
+static int prompt_col;           /* Column of cursor just after prompt */
+static char *cp;                 /* Pointer into cmdbuf */
+static int cmd_offset;           /* Index into cmdbuf of first displayed char */
+static int literal;              /* Next input char should not be interpreted */
+static int updown_match = -1;    /* Prefix length in up/down movement */
 
 #if TAB_COMPLETE_FILENAME
 static int cmd_complete LESSPARAMS((int action));
@@ -223,7 +223,7 @@ cmd_step_common(p, ch, len, pwidth, bswidth)
 		}
 	}
 	if (pwidth != NULL)
-		*pwidth	= width;
+		*pwidth = width;
 	if (bswidth != NULL)
 		*bswidth = width;
 	return (pr);
@@ -259,17 +259,42 @@ cmd_step_left(pp, pwidth, bswidth)
 	return cmd_step_common(*pp, ch, p - *pp, pwidth, bswidth);
 }
 
+/*
+ * Put the cursor at "home" (just after the prompt),
+ * and set cp to the corresponding char in cmdbuf.
+ */
+	static void
+cmd_home(VOID_PARAM)
+{
+	while (cmd_col > prompt_col)
+	{
+		int width, bswidth;
+
+		cmd_step_left(&cp, &width, &bswidth);
+		while (bswidth-- > 0)
+			putbs();
+		cmd_col -= width;
+	}
+
+	cp = &cmdbuf[cmd_offset];
+}
+
 /*
  * Repaint the line from cp onwards.
  * Then position the cursor just after the char old_cp (a pointer into cmdbuf).
  */
-	static void
+	public void
 cmd_repaint(old_cp)
 	constant char *old_cp;
 {
 	/*
 	 * Repaint the line from the current position.
 	 */
+	if (old_cp == NULL)
+	{
+		old_cp = cp;
+		cmd_home();
+	}
 	clear_eol();
 	while (*cp != '\0')
 	{
@@ -300,26 +325,6 @@ cmd_repaint(old_cp)
 		cmd_left();
 }
 
-/*
- * Put the cursor at "home" (just after the prompt),
- * and set cp to the corresponding char in cmdbuf.
- */
-	static void
-cmd_home(VOID_PARAM)
-{
-	while (cmd_col > prompt_col)
-	{
-		int width, bswidth;
-
-		cmd_step_left(&cp, &width, &bswidth);
-		while (bswidth-- > 0)
-			putbs();
-		cmd_col -= width;
-	}
-
-	cp = &cmdbuf[cmd_offset];
-}
-
 /*
  * Shift the cmdbuf display left a half-screen.
  */
@@ -826,9 +831,9 @@ cmd_accept(VOID_PARAM)
  * Try to perform a line-edit function on the command buffer,
  * using a specified char as a line-editing command.
  * Returns:
- *	CC_PASS	The char does not invoke a line edit function.
- *	CC_OK	Line edit function done.
- *	CC_QUIT	The char requests the current command to be aborted.
+ *      CC_PASS The char does not invoke a line edit function.
+ *      CC_OK   Line edit function done.
+ *      CC_QUIT The char requests the current command to be aborted.
  */
 	static int
 cmd_edit(c)
@@ -838,9 +843,9 @@ cmd_edit(c)
 	int flags;
 
 #if TAB_COMPLETE_FILENAME
-#define	not_in_completion()	in_completion = 0
+#define not_in_completion()     in_completion = 0
 #else
-#define	not_in_completion(VOID_PARAM)
+#define not_in_completion(VOID_PARAM)
 #endif
 	
 	/*
@@ -852,20 +857,22 @@ cmd_edit(c)
 		/*
 		 * No current history; don't accept history manipulation cmds.
 		 */
-		flags |= EC_NOHISTORY;
+		flags |= ECF_NOHISTORY;
 #endif
 #if TAB_COMPLETE_FILENAME
 	if (curr_mlist == ml_search)
 		/*
 		 * In a search command; don't accept file-completion cmds.
 		 */
-		flags |= EC_NOCOMPLETE;
+		flags |= ECF_NOCOMPLETE;
 #endif
 
 	action = editchar(c, flags);
 
 	switch (action)
 	{
+	case A_NOACTION:
+		return (CC_OK);
 	case EC_RIGHT:
 		not_in_completion();
 		return (cmd_right());
@@ -934,8 +941,6 @@ cmd_edit(c)
 	case EC_EXPAND:
 		return (cmd_complete(action));
 #endif
-	case EC_NOACTION:
-		return (CC_OK);
 	default:
 		not_in_completion();
 		return (CC_PASS);
@@ -1237,9 +1242,9 @@ fail:
  * Process a single character of a multi-character command, such as
  * a number, or the pattern of a search command.
  * Returns:
- *	CC_OK		The char was accepted.
- *	CC_QUIT		The char requests the command to be aborted.
- *	CC_ERROR	The char could not be accepted due to an error.
+ *      CC_OK           The char was accepted.
+ *      CC_QUIT         The char requests the command to be aborted.
+ *      CC_ERROR        The char could not be accepted due to an error.
  */
 	public int
 cmd_char(c)
diff --git a/contrib/less/command.c b/contrib/less/command.c
index 8e0ae4b34d67..ae59181c2827 100644
--- a/contrib/less/command.c
+++ b/contrib/less/command.c
@@ -1,6 +1,6 @@
 /* $FreeBSD$ */
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -57,21 +57,22 @@ extern void *ml_shell;
 extern char *editor;
 extern char *editproto;
 #endif
-extern int screen_trashed;	/* The screen has been overwritten */
+extern int screen_trashed;      /* The screen has been overwritten */
 extern int shift_count;
 extern int oldbot;
 extern int forw_prompt;
+extern int incr_search;
 #if MSDOS_COMPILER==WIN32C
 extern int utf_mode;
 #endif
 
 #if SHELL_ESCAPE
-static char *shellcmd = NULL;	/* For holding last shell command for "!!" */
+static char *shellcmd = NULL;   /* For holding last shell command for "!!" */
 #endif
-static int mca;			/* The multicharacter command (action) */
-static int search_type;		/* The previous type of search */
-static LINENUM number;		/* The number typed by the user */
-static long fraction;		/* The fractional part of the number */
+static int mca;                 /* The multicharacter command (action) */
+static int search_type;         /* The previous type of search */
+static LINENUM number;          /* The number typed by the user */
+static long fraction;           /* The fractional part of the number */
 static struct loption *curropt;
 static int opt_lower;
 static int optflag;
@@ -113,7 +114,6 @@ set_mca(action)
 	int action;
 {
 	mca = action;
-	deinit_mouse(); /* we don't want mouse events while entering a cmd */
 	clear_bot();
 	clear_cmd();
 }
@@ -127,7 +127,6 @@ clear_mca(VOID_PARAM)
 	if (mca == 0)
 		return;
 	mca = 0;
-	init_mouse();
 }
 
 /*
@@ -177,6 +176,8 @@ mca_search(VOID_PARAM)
 		cmd_putstr("Keep-pos ");
 	if (search_type & SRCH_NO_REGEX)
 		cmd_putstr("Regex-off ");
+	if (search_type & SRCH_WRAP)
+		cmd_putstr("Wrap ");
 
 #if HILITE_SEARCH
 	if (search_type & SRCH_FILTER)
@@ -520,9 +521,9 @@ mca_search_char(c)
 	/*
 	 * Certain characters as the first char of 
 	 * the pattern have special meaning:
-	 *	!  Toggle the NO_MATCH flag
-	 *	*  Toggle the PAST_EOF flag
-	 *	@  Toggle the FIRST_FILE flag
+	 *      !  Toggle the NO_MATCH flag
+	 *      *  Toggle the PAST_EOF flag
+	 *      @  Toggle the FIRST_FILE flag
 	 */
 	if (len_cmdbuf() > 0)
 		return (NO_MCA);
@@ -547,6 +548,10 @@ mca_search_char(c)
 		if (mca != A_FILTER)
 			flag = SRCH_NO_MOVE;
 		break;
+	case CONTROL('W'): /* WRAP around */
+		if (mca != A_FILTER)
+			flag = SRCH_WRAP;
+		break;
 	case CONTROL('R'): /* Don't use REGULAR EXPRESSIONS */
 		flag = SRCH_NO_REGEX;
 		break;
@@ -558,7 +563,8 @@ mca_search_char(c)
 
 	if (flag != 0)
 	{
-		search_type ^= flag;
+		/* Toggle flag, but keep PAST_EOF and WRAP mutually exclusive. */
+		search_type ^= flag | (search_type & (SRCH_PAST_EOF|SRCH_WRAP));
 		mca_search();
 		return (MCA_MORE);
 	}
@@ -596,9 +602,16 @@ mca_char(c)
 		 * Entering digits of a number.
 		 * Terminated by a non-digit.
 		 */
-		if (!((c >= '0' && c <= '9') || c == '.') && 
-		  editchar(c, EC_PEEK|EC_NOHISTORY|EC_NOCOMPLETE|EC_NORIGHTLEFT) == A_INVALID)
+		if ((c >= '0' && c <= '9') || c == '.')
+			break;
+		switch (editchar(c, ECF_PEEK|ECF_NOHISTORY|ECF_NOCOMPLETE|ECF_NORIGHTLEFT))
 		{
+		case A_NOACTION:
+			/*
+			 * Ignore this char and get another one.
+			 */
+			return (MCA_MORE);
+		case A_INVALID:
 			/*
 			 * Not part of the number.
 			 * End the number and treat this char 
@@ -651,15 +664,44 @@ mca_char(c)
 		 */
 		return (MCA_DONE);
 
-	if ((mca == A_F_BRACKET || mca == A_B_BRACKET) && len_cmdbuf() >= 2)
*** 9553 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 02:31:59 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id F24D5646E8D;
 Sun,  9 May 2021 02:31:59 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fd7Vl6S9jz4W19;
 Sun,  9 May 2021 02:31:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D04A719AF;
 Sun,  9 May 2021 02:31:59 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1492VxpK028180;
 Sun, 9 May 2021 02:31:59 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1492VxqD028179;
 Sun, 9 May 2021 02:31:59 GMT (envelope-from git)
Date: Sun, 9 May 2021 02:31:59 GMT
Message-Id: <202105090231.1492VxqD028179@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Xin LI <delphij@FreeBSD.org>
Subject: git: 3c540c328d56 - stable/12 - less: upgrade to v581.2.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: delphij
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 3c540c328d566fc6e60e489d0ed3aa4e50cd4e33
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 02:32:00 -0000

The branch stable/12 has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=3c540c328d566fc6e60e489d0ed3aa4e50cd4e33

commit 3c540c328d566fc6e60e489d0ed3aa4e50cd4e33
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2021-04-19 02:46:19 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2021-05-09 02:31:53 +0000

    less: upgrade to v581.2.
    
    (cherry picked from commit 50d31dbc6e2bc3aa6007edb8cdecbcb84e85d6c0)
    
    less: upgrade to v581.
    
    (cherry picked from commit 2235c7feac959bcc9ddfd6a2bc6be32102b1f84c)
---
 contrib/less/INSTALL      |  10 +-
 contrib/less/NEWS         |  50 ++-
 contrib/less/README       |  38 +-
 contrib/less/brac.c       |   2 +-
 contrib/less/ch.c         |  54 ++-
 contrib/less/charset.c    | 154 ++++----
 contrib/less/charset.h    |   2 +-
 contrib/less/cmd.h        |  20 +-
 contrib/less/cmdbuf.c     |  87 ++---
 contrib/less/command.c    | 189 +++++++---
 contrib/less/cvt.c        |  12 +-
 contrib/less/decode.c     | 367 ++++++++++---------
 contrib/less/edit.c       |  33 +-
 contrib/less/filename.c   |  29 +-
 contrib/less/forwback.c   |  11 +-
 contrib/less/funcs.h      |  35 +-
 contrib/less/help.c       |  24 +-
 contrib/less/ifile.c      |  39 +-
 contrib/less/input.c      |  45 ++-
 contrib/less/jump.c       |   2 +-
 contrib/less/less.h       | 419 +++++++++++----------
 contrib/less/less.hlp     |  22 +-
 contrib/less/less.nro     | 204 +++++++++--
 contrib/less/lessecho.c   |  14 +-
 contrib/less/lessecho.nro |   8 +-
 contrib/less/lesskey.c    | 163 ++++-----
 contrib/less/lesskey.h    |  38 +-
 contrib/less/lesskey.nro  |  25 +-
 contrib/less/lglob.h      | 110 +++---
 contrib/less/line.c       | 905 ++++++++++++++++++++++++++--------------------
 contrib/less/linenum.c    |  31 +-
 contrib/less/lsystem.c    |  44 +--
 contrib/less/main.c       |  85 +++--
 contrib/less/mark.c       |  26 +-
 contrib/less/optfunc.c    | 309 ++++++++++++----
 contrib/less/option.c     |  25 +-
 contrib/less/option.h     |  62 ++--
 contrib/less/opttbl.c     | 154 +++++---
 contrib/less/os.c         |  94 ++++-
 contrib/less/output.c     | 612 ++++++++++++++++---------------
 contrib/less/pattern.c    |  11 +-
 contrib/less/pattern.h    |  18 +-
 contrib/less/pckeys.h     |  38 +-
 contrib/less/position.c   |  12 +-
 contrib/less/position.h   |  12 +-
 contrib/less/prompt.c     |  88 ++---
 contrib/less/regexp.h     |  14 +-
 contrib/less/screen.c     | 796 ++++++++++++++++++++++++++++------------
 contrib/less/scrsize.c    |   2 +-
 contrib/less/search.c     | 359 +++++++++++++-----
 contrib/less/signal.c     |  14 +-
 contrib/less/tags.c       |  77 ++--
 contrib/less/ttyin.c      |  51 ++-
 contrib/less/version.c    |  30 +-
 usr.bin/less/defines.h    |  13 +-
 55 files changed, 3782 insertions(+), 2306 deletions(-)

diff --git a/contrib/less/INSTALL b/contrib/less/INSTALL
index c2ab230e4470..78ae93246d88 100644
--- a/contrib/less/INSTALL
+++ b/contrib/less/INSTALL
@@ -1,6 +1,6 @@
-   This file describes how to build and install less using 
-the "configure" script.  This only works on Unix systems.  
-To install on other systems, read the README file.
+This file contains generic instructions on how to build and
+install software using autoconf. For specific instructions
+on how to build "less", see the README or README.VER file.
 
 
 Basic Installation
@@ -24,8 +24,8 @@ diffs or instructions to the address given in the `README' so they can
 be considered for the next release.  If at some point `config.cache'
 contains results you don't want to keep, you may remove or edit it.
 
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
+   The file `configure.ac' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.ac' if you want to change
 it or regenerate `configure' using a newer version of `autoconf'.
 
 The simplest way to compile this package is:
diff --git a/contrib/less/NEWS b/contrib/less/NEWS
index b0644fd2e0de..bc5afd655ddc 100644
--- a/contrib/less/NEWS
+++ b/contrib/less/NEWS
@@ -4,10 +4,56 @@
 ======================================================================
 
   For the latest news about less, see the "less" Web page:
-      http://www.greenwoodsoftware.com/less
+      https://greenwoodsoftware.com/less
   You can also download the latest version of less from there.
 
-  To report bugs, suggestions or comments, send email to bug-less@gnu.org
+  Report bugs, suggestions or comments at 
+  https://github.com/gwsw/less/issues.
+
+======================================================================
+
+	Major changes between "less" versions 563 and 581.2
+
+* Change ESC-u command to toggle, not disable, highlighting per man page.
+
+* Add ESC-U command. 
+
+* Add ctrl-W search modifier for wrapping search.
+
+* F command can be interrupted by ^X.
+
+* Support OSC 8 hyperlinks when -R is in effect.
+
+* g command with no number will ignore -j and put first line at top of screen.
+
+* Multiple + or -p command line options are handled better.
+
+* Add the --incsearch option.
+
+* Add the --line-num-width option.
+
+* Add the --status-col-width option.
+
+* Add the --use-color and --color options.
+
+* Display -w highlight even if highlighted line is empty.
+
+* If search result is in a long line, scroll to ensure it is visible.
+
+* Editing the same file under different names now creates only
+  one entry in the file list.
+
+* Make visual bell more visible on some terminals.
+
+* Ring end-of-file bell no more than once per second.
+
+* Build can use either Python or Perl for Makefile.aut operations.
+
+* Fix crash when using the @ search modifier.
+
+* Fix crash in the 's' command due to duplicate free.
+
+* Fix realpath crash on Darwin.
 
 ======================================================================
 
diff --git a/contrib/less/README b/contrib/less/README
index 81cb7e091296..2acbd00d762a 100644
--- a/contrib/less/README
+++ b/contrib/less/README
@@ -7,9 +7,9 @@
 **************************************************************************
 **************************************************************************
 
-                            Less, version 563
+                            Less, version 581.2
 
-    This is the distribution of less, version 563, released 13 Jun 2020.
+    This is the distribution of less, version 581.2, released 28 Apr 2021.
     This program is part of the GNU project (http://www.gnu.org).
 
     This program is free software.  You may redistribute it and/or
@@ -21,33 +21,29 @@
     or
     2. The Less License, in the file LICENSE.
 
-    Please report any problems to bug-less@gnu.org.
-    See http://www.greenwoodsoftware.com/less for the latest info.
+    Please report any problems at https://github.com/gwsw/less/issues.
+    See https://greenwoodsoftware.com/less for the latest info.
     Source repository is at https://github.com/gwsw/less.git.
 
 =========================================================================
 
-This is the distribution of "less", a paginator similar to "more" or "pg".
-
 The formatted manual page is in less.man.
 The manual page nroff source is in less.nro.
 Major changes made since the last posted version are in NEWS.
 
 =======================================================================
-PRE-INSTALLATION (when using git)
-
-If you are building from a clone of a git repository,
-type "make -f Makefile.aut".
-If you are building from a numbered release package (a tar or zip file 
-with a name like less-999.tar.gz or less-999.zip), you should skip this step. 
-
-=======================================================================
-INSTALLATION (Unix systems only):
+INSTALLATION (Unix & Linux systems only):
 
 1. Move the distributed source to its own directory and unpack it,
    if you have not already done so.  
 
-2. Type "sh configure".
+2. If you are building from a clone of a git repository,
+   type "make -f Makefile.aut".
+   If you are building from a numbered release package (a tar or 
+   zip file with a name like less-999.tar.gz or less-999.zip downloaded 
+   from greenwoodsoftware.com, not from github), you should skip this step. 
+
+3. Type "sh configure".
    This will generate a Makefile and a defines.h.
    Warning: if you have a GNU sed, make sure it is version 2.05 or later.
 
@@ -79,7 +75,7 @@ INSTALLATION (Unix systems only):
      commands, etc.
 
 
-3. It is a good idea to look over the generated Makefile and defines.h
+4. It is a good idea to look over the generated Makefile and defines.h
    and make sure they look ok.  If you know of any peculiarities of
    your system that configure might not have detected, you may fix the
    Makefile now.  Take particular notice of the list of "terminal" 
@@ -93,13 +89,13 @@ INSTALLATION (Unix systems only):
    to remove the descriptions of the features which you are removing.
    If you edit less.hlp, you should run "make -f Makefile.aut help.c".
 
-4. Type "make" and watch the fun.
+5. Type "make" and watch the fun.
 
-5. If the make succeeds, it will generate the programs "less",
+6. If the make succeeds, it will generate the programs "less",
    "lesskey" and "lessecho" in your current directory.  Test the 
    generated programs.
 
-6. When satisfied that it works, if you wish to install it
+7. When satisfied that it works, if you wish to install it
    in a public place, type "make install".
 
    The default install destinations are:
@@ -108,8 +104,6 @@ INSTALLATION (Unix systems only):
    If you want to install any of these files elsewhere, define
    bindir and/or mandir to the appropriate directories.
 
-If you have any problems building or running "less", suggestions, 
-complaints, etc., you may mail to bug-less@gnu.org.
 
 Note to hackers: comments noting possible improvements are enclosed
 in double curly brackets {{ like this }}.
diff --git a/contrib/less/brac.c b/contrib/less/brac.c
index db3a2951db08..53ada50aab56 100644
--- a/contrib/less/brac.c
+++ b/contrib/less/brac.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
diff --git a/contrib/less/ch.c b/contrib/less/ch.c
index 70fad1002dbf..bab0692f7437 100644
--- a/contrib/less/ch.c
+++ b/contrib/less/ch.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -41,7 +41,7 @@ struct bufnode {
 	struct bufnode *hnext, *hprev;
 };
 
-#define	LBUFSIZE	8192
+#define LBUFSIZE        8192
 struct buf {
 	struct bufnode node;
 	BLOCKNUM block;
@@ -54,7 +54,7 @@ struct buf {
  * The file state is maintained in a filestate structure.
  * A pointer to the filestate is kept in the ifile structure.
  */
-#define	BUFHASH_SIZE	1024
+#define BUFHASH_SIZE    1024
 struct filestate {
 	struct bufnode buflist;
 	struct bufnode hashtbl[BUFHASH_SIZE];
@@ -67,24 +67,24 @@ struct filestate {
 	POSITION fsize;
 };
 
-#define	ch_bufhead	thisfile->buflist.next
-#define	ch_buftail	thisfile->buflist.prev
-#define	ch_nbufs	thisfile->nbufs
-#define	ch_block	thisfile->block
-#define	ch_offset	thisfile->offset
-#define	ch_fpos		thisfile->fpos
-#define	ch_fsize	thisfile->fsize
-#define	ch_flags	thisfile->flags
-#define	ch_file		thisfile->file
+#define ch_bufhead      thisfile->buflist.next
+#define ch_buftail      thisfile->buflist.prev
+#define ch_nbufs        thisfile->nbufs
+#define ch_block        thisfile->block
+#define ch_offset       thisfile->offset
+#define ch_fpos         thisfile->fpos
+#define ch_fsize        thisfile->fsize
+#define ch_flags        thisfile->flags
+#define ch_file         thisfile->file
 
-#define	END_OF_CHAIN	(&thisfile->buflist)
-#define	END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
-#define BUFHASH(blk)	((blk) & (BUFHASH_SIZE-1))
+#define END_OF_CHAIN    (&thisfile->buflist)
+#define END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
+#define BUFHASH(blk)    ((blk) & (BUFHASH_SIZE-1))
 
 /*
  * Macros to manipulate the list of buffers in thisfile->buflist.
  */
-#define	FOR_BUFS(bn) \
+#define FOR_BUFS(bn) \
 	for (bn = ch_bufhead;  bn != END_OF_CHAIN;  bn = bn->next)
 
 #define BUF_RM(bn) \
@@ -106,15 +106,15 @@ struct filestate {
 /*
  * Macros to manipulate the list of buffers in thisfile->hashtbl[n].
  */
-#define	FOR_BUFS_IN_CHAIN(h,bn) \
+#define FOR_BUFS_IN_CHAIN(h,bn) \
 	for (bn = thisfile->hashtbl[h].hnext;  \
 	     bn != END_OF_HCHAIN(h);  bn = bn->hnext)
 
-#define	BUF_HASH_RM(bn) \
+#define BUF_HASH_RM(bn) \
 	(bn)->hnext->hprev = (bn)->hprev; \
 	(bn)->hprev->hnext = (bn)->hnext;
 
-#define	BUF_HASH_INS(bn,h) \
+#define BUF_HASH_INS(bn,h) \
 	(bn)->hnext = thisfile->hashtbl[h].hnext; \
 	(bn)->hprev = END_OF_HCHAIN(h); \
 	thisfile->hashtbl[h].hnext->hprev = (bn); \
@@ -240,12 +240,12 @@ ch_get(VOID_PARAM)
 			return ('?');
 		if (lseek(ch_file, (off_t)pos, SEEK_SET) == BAD_LSEEK)
 		{
- 			error("seek error", NULL_PARG);
+			error("seek error", NULL_PARG);
 			clear_eol();
 			return (EOI);
- 		}
- 		ch_fpos = pos;
- 	}
+		}
+		ch_fpos = pos;
+	}
 
 	/*
 	 * Read the block.
@@ -311,13 +311,7 @@ ch_get(VOID_PARAM)
 				parg.p_string = wait_message();
 				ierror("%s", &parg);
 			}
-#if !MSDOS_COMPILER
-	 		sleep(1);
-#else
-#if MSDOS_COMPILER==WIN32C
-			Sleep(1000);
-#endif
-#endif
+			sleep_ms(2); /* Reduce system load */
 			slept = TRUE;
 
 #if HAVE_STAT_INO
diff --git a/contrib/less/charset.c b/contrib/less/charset.c
index 4897cbaf6adc..b37c8a29cbd9 100644
--- a/contrib/less/charset.c
+++ b/contrib/less/charset.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -40,27 +40,27 @@ struct charset {
 	int *p_flag;
 	char *desc;
 } charsets[] = {
-	{ "ascii",		NULL,       "8bcccbcc18b95.b" },
-	{ "utf-8",		&utf_mode,  "8bcccbcc18b95.b126.bb" },
-	{ "iso8859",		NULL,       "8bcccbcc18b95.33b." },
-	{ "latin3",		NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
-	{ "arabic",		NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
-	{ "greek",		NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
-	{ "greek2005",		NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
-	{ "hebrew",		NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
-	{ "koi8-r",		NULL,       "8bcccbcc18b95.b." },
-	{ "KOI8-T",		NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
-	{ "georgianps",		NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
-	{ "tcvn",		NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
-	{ "TIS-620",		NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
-	{ "next",		NULL,       "8bcccbcc18b95.bb125.bb" },
-	{ "dos",		NULL,       "8bcccbcc12bc5b95.b." },
-	{ "windows-1251",	NULL,       "8bcccbcc12bc5b95.b24.b." },
-	{ "windows-1252",	NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
-	{ "windows-1255",	NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
-	{ "ebcdic",		NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
-	{ "IBM-1047",		NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
-	{ NULL, NULL, NULL }
+		{ "ascii",              NULL,       "8bcccbcc18b95.b" },
+		{ "utf-8",              &utf_mode,  "8bcccbcc18b95.b126.bb" },
+		{ "iso8859",            NULL,       "8bcccbcc18b95.33b." },
+		{ "latin3",             NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
+		{ "arabic",             NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
+		{ "greek",              NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
+		{ "greek2005",          NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
+		{ "hebrew",             NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
+		{ "koi8-r",             NULL,       "8bcccbcc18b95.b." },
+		{ "KOI8-T",             NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
+		{ "georgianps",         NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
+		{ "tcvn",               NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
+		{ "TIS-620",            NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
+		{ "next",               NULL,       "8bcccbcc18b95.bb125.bb" },
+		{ "dos",                NULL,       "8bcccbcc12bc5b95.b." },
+		{ "windows-1251",       NULL,       "8bcccbcc12bc5b95.b24.b." },
+		{ "windows-1252",       NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
+		{ "windows-1255",       NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
+		{ "ebcdic",             NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
+		{ "IBM-1047",           NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
+		{ NULL, NULL, NULL }
 };
 
 /*
@@ -70,58 +70,58 @@ struct cs_alias {
 	char *name;
 	char *oname;
 } cs_aliases[] = {
-	{ "UTF-8",		"utf-8" },
-	{ "utf8",		"utf-8" },
-	{ "UTF8",		"utf-8" },
-	{ "ANSI_X3.4-1968",	"ascii" },
-	{ "US-ASCII",		"ascii" },
-	{ "latin1",		"iso8859" },
-	{ "ISO-8859-1",		"iso8859" },
-	{ "latin9",		"iso8859" },
-	{ "ISO-8859-15",	"iso8859" },
-	{ "latin2",		"iso8859" },
-	{ "ISO-8859-2",		"iso8859" },
-	{ "ISO-8859-3",		"latin3" },
-	{ "latin4",		"iso8859" },
-	{ "ISO-8859-4",		"iso8859" },
-	{ "cyrillic",		"iso8859" },
-	{ "ISO-8859-5",		"iso8859" },
-	{ "ISO-8859-6",		"arabic" },
-	{ "ISO-8859-7",		"greek" },
-	{ "IBM9005",		"greek2005" },
-	{ "ISO-8859-8",		"hebrew" },
-	{ "latin5",		"iso8859" },
-	{ "ISO-8859-9",		"iso8859" },
-	{ "latin6",		"iso8859" },
-	{ "ISO-8859-10",	"iso8859" },
-	{ "latin7",		"iso8859" },
-	{ "ISO-8859-13",	"iso8859" },
-	{ "latin8",		"iso8859" },
-	{ "ISO-8859-14",	"iso8859" },
-	{ "latin10",		"iso8859" },
-	{ "ISO-8859-16",	"iso8859" },
-	{ "IBM437",		"dos" },
-	{ "EBCDIC-US",		"ebcdic" },
-	{ "IBM1047",		"IBM-1047" },
-	{ "KOI8-R",		"koi8-r" },
-	{ "KOI8-U",		"koi8-r" },
-	{ "GEORGIAN-PS",	"georgianps" },
-	{ "TCVN5712-1", 	"tcvn" },
-	{ "NEXTSTEP",		"next" },
-	{ "windows",		"windows-1252" }, /* backward compatibility */
-	{ "CP1251",		"windows-1251" },
-	{ "CP1252",		"windows-1252" },
-	{ "CP1255",		"windows-1255" },
+	{ "UTF-8",              "utf-8" },
+	{ "utf8",               "utf-8" },
+	{ "UTF8",               "utf-8" },
+	{ "ANSI_X3.4-1968",     "ascii" },
+	{ "US-ASCII",           "ascii" },
+	{ "latin1",             "iso8859" },
+	{ "ISO-8859-1",         "iso8859" },
+	{ "latin9",             "iso8859" },
+	{ "ISO-8859-15",        "iso8859" },
+	{ "latin2",             "iso8859" },
+	{ "ISO-8859-2",         "iso8859" },
+	{ "ISO-8859-3",         "latin3" },
+	{ "latin4",             "iso8859" },
+	{ "ISO-8859-4",         "iso8859" },
+	{ "cyrillic",           "iso8859" },
+	{ "ISO-8859-5",         "iso8859" },
+	{ "ISO-8859-6",         "arabic" },
+	{ "ISO-8859-7",         "greek" },
+	{ "IBM9005",            "greek2005" },
+	{ "ISO-8859-8",         "hebrew" },
+	{ "latin5",             "iso8859" },
+	{ "ISO-8859-9",         "iso8859" },
+	{ "latin6",             "iso8859" },
+	{ "ISO-8859-10",        "iso8859" },
+	{ "latin7",             "iso8859" },
+	{ "ISO-8859-13",        "iso8859" },
+	{ "latin8",             "iso8859" },
+	{ "ISO-8859-14",        "iso8859" },
+	{ "latin10",            "iso8859" },
+	{ "ISO-8859-16",        "iso8859" },
+	{ "IBM437",             "dos" },
+	{ "EBCDIC-US",          "ebcdic" },
+	{ "IBM1047",            "IBM-1047" },
+	{ "KOI8-R",             "koi8-r" },
+	{ "KOI8-U",             "koi8-r" },
+	{ "GEORGIAN-PS",        "georgianps" },
+	{ "TCVN5712-1",         "tcvn" },
+	{ "NEXTSTEP",           "next" },
+	{ "windows",            "windows-1252" }, /* backward compatibility */
+	{ "CP1251",             "windows-1251" },
+	{ "CP1252",             "windows-1252" },
+	{ "CP1255",             "windows-1255" },
 	{ NULL, NULL }
 };
 
-#define	IS_BINARY_CHAR	01
-#define	IS_CONTROL_CHAR	02
+#define IS_BINARY_CHAR  01
+#define IS_CONTROL_CHAR 02
 
 static char chardef[256];
 static char *binfmt = NULL;
 static char *utfbinfmt = NULL;
-public int binattr = AT_STANDOUT;
+public int binattr = AT_STANDOUT|AT_COLOR_BIN;
 
 
 /*
@@ -134,9 +134,9 @@ public int binattr = AT_STANDOUT;
  * repetition of the letter.
  *
  * Each letter is one of:
- *	. normal character
- *	b binary character
- *	c control character
+ *      . normal character
+ *      b binary character
+ *      c control character
  */
 	static void
 ichardef(s)
@@ -457,16 +457,16 @@ prchar(c)
 		SNPRINTF1(buf, sizeof(buf), "^%c",
 		/*
 		 * This array roughly inverts CONTROL() #defined in less.h,
-	 	 * and should be kept in sync with CONTROL() and IBM-1047.
- 	 	 */
+		 * and should be kept in sync with CONTROL() and IBM-1047.
+		 */
 		"@ABC.I.?...KLMNO"
 		"PQRS.JH.XY.."
 		"\\]^_"
 		"......W[.....EFG"
 		"..V....D....TU.Z"[c]);
 #else
-  	else if (c < 128 && !control_char(c ^ 0100))
-  		SNPRINTF1(buf, sizeof(buf), "^%c", (int) (c ^ 0100));
+	else if (c < 128 && !control_char(c ^ 0100))
+		SNPRINTF1(buf, sizeof(buf), "^%c", (int) (c ^ 0100));
 #endif
 	else
 		SNPRINTF1(buf, sizeof(buf), binfmt, c);
@@ -484,7 +484,7 @@ prutfchar(ch)
 
 	if (ch == ESC)
 		strcpy(buf, "ESC");
-  	else if (ch < 128 && control_char(ch))
+	else if (ch < 128 && control_char(ch))
 	{
 		if (!control_char(ch ^ 0100))
 			SNPRINTF1(buf, sizeof(buf), "^%c", ((char) ch) ^ 0100);
@@ -732,9 +732,9 @@ step_char(pp, dir, limit)
  */
 
 #define DECLARE_RANGE_TABLE_START(name) \
-    static struct wchar_range name##_array[] = {
+	static struct wchar_range name##_array[] = {
 #define DECLARE_RANGE_TABLE_END(name) \
-    }; struct wchar_range_table name##_table = { name##_array, sizeof(name##_array)/sizeof(*name##_array) };
+	}; struct wchar_range_table name##_table = { name##_array, sizeof(name##_array)/sizeof(*name##_array) };
 
 DECLARE_RANGE_TABLE_START(compose)
 #include "compose.uni"
diff --git a/contrib/less/charset.h b/contrib/less/charset.h
index cc0c3af59e89..3e7ecf73db94 100644
--- a/contrib/less/charset.h
+++ b/contrib/less/charset.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
diff --git a/contrib/less/cmd.h b/contrib/less/cmd.h
index 95a2e5801717..c51f0bc5c4f3 100644
--- a/contrib/less/cmd.h
+++ b/contrib/less/cmd.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -31,7 +31,6 @@
 #define A_HELP                 19
 #define A_NEXT_FILE            20
 #define A_PERCENT              21
-#define A_PREFIX               22
 #define A_PREV_FILE            23
 #define A_QUIT                 24
 #define A_REPAINT              25
@@ -72,19 +71,19 @@
 #define A_CLRMARK              62
 #define A_SETMARKBOT           63
 #define A_X11MOUSE_IN          64
-#define A_X11MOUSE_IGNORE      65
 #define A_F_MOUSE              66
 #define A_B_MOUSE              67
 /* Note "X116" refers to extended (1006) X11 mouse reporting. */
 #define A_X116MOUSE_IN         68
-#define A_X116MOUSE_IGNORE     69
+#define A_CLR_SEARCH           70
 
+/* These values must not conflict with any A_* or EC_* value. */
 #define A_INVALID              100
 #define A_NOACTION             101
 #define A_UINVALID             102
 #define A_END_LIST             103
 #define A_SPECIAL_KEY          104
-
+#define A_PREFIX               105
 #define A_SKIP                 127
 
 #define A_EXTRA                0200
@@ -111,15 +110,16 @@
 #define EC_B_COMPLETE          18
 #define EC_LITERAL             19
 #define EC_ABORT               20
+#define EC_X11MOUSE            21
+#define EC_X116MOUSE           22
 
-#define EC_NOACTION            101
 #define EC_UINVALID            102
 
 /* Flags for editchar() */
-#define EC_PEEK                01
-#define EC_NOHISTORY           02
-#define EC_NOCOMPLETE          04
-#define EC_NORIGHTLEFT         010
+#define ECF_PEEK                01
+#define ECF_NOHISTORY           02
+#define ECF_NOCOMPLETE          04
+#define ECF_NORIGHTLEFT         010
 
 /* Environment variable stuff */
 #define EV_OK                  01
diff --git a/contrib/less/cmdbuf.c b/contrib/less/cmdbuf.c
index ed78ded00307..9cc1f3e94977 100644
--- a/contrib/less/cmdbuf.c
+++ b/contrib/less/cmdbuf.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -26,12 +26,12 @@ extern int no_hist_dups;
 extern int marks_modified;
 
 static char cmdbuf[CMDBUF_SIZE]; /* Buffer for holding a multi-char command */
-static int cmd_col;		/* Current column of the cursor */
-static int prompt_col;		/* Column of cursor just after prompt */
-static char *cp;		/* Pointer into cmdbuf */
-static int cmd_offset;		/* Index into cmdbuf of first displayed char */
-static int literal;		/* Next input char should not be interpreted */
-static int updown_match = -1;	/* Prefix length in up/down movement */
+static int cmd_col;              /* Current column of the cursor */
+static int prompt_col;           /* Column of cursor just after prompt */
+static char *cp;                 /* Pointer into cmdbuf */
+static int cmd_offset;           /* Index into cmdbuf of first displayed char */
+static int literal;              /* Next input char should not be interpreted */
+static int updown_match = -1;    /* Prefix length in up/down movement */
 
 #if TAB_COMPLETE_FILENAME
 static int cmd_complete LESSPARAMS((int action));
@@ -223,7 +223,7 @@ cmd_step_common(p, ch, len, pwidth, bswidth)
 		}
 	}
 	if (pwidth != NULL)
-		*pwidth	= width;
+		*pwidth = width;
 	if (bswidth != NULL)
 		*bswidth = width;
 	return (pr);
@@ -259,17 +259,42 @@ cmd_step_left(pp, pwidth, bswidth)
 	return cmd_step_common(*pp, ch, p - *pp, pwidth, bswidth);
 }
 
+/*
+ * Put the cursor at "home" (just after the prompt),
+ * and set cp to the corresponding char in cmdbuf.
+ */
+	static void
+cmd_home(VOID_PARAM)
+{
+	while (cmd_col > prompt_col)
+	{
+		int width, bswidth;
+
+		cmd_step_left(&cp, &width, &bswidth);
+		while (bswidth-- > 0)
+			putbs();
+		cmd_col -= width;
+	}
+
+	cp = &cmdbuf[cmd_offset];
+}
+
 /*
  * Repaint the line from cp onwards.
  * Then position the cursor just after the char old_cp (a pointer into cmdbuf).
  */
-	static void
+	public void
 cmd_repaint(old_cp)
 	constant char *old_cp;
 {
 	/*
 	 * Repaint the line from the current position.
 	 */
+	if (old_cp == NULL)
+	{
+		old_cp = cp;
+		cmd_home();
+	}
 	clear_eol();
 	while (*cp != '\0')
 	{
@@ -300,26 +325,6 @@ cmd_repaint(old_cp)
 		cmd_left();
 }
 
-/*
- * Put the cursor at "home" (just after the prompt),
- * and set cp to the corresponding char in cmdbuf.
- */
-	static void
-cmd_home(VOID_PARAM)
-{
-	while (cmd_col > prompt_col)
-	{
-		int width, bswidth;
-
-		cmd_step_left(&cp, &width, &bswidth);
-		while (bswidth-- > 0)
-			putbs();
-		cmd_col -= width;
-	}
-
-	cp = &cmdbuf[cmd_offset];
-}
-
 /*
  * Shift the cmdbuf display left a half-screen.
  */
@@ -826,9 +831,9 @@ cmd_accept(VOID_PARAM)
  * Try to perform a line-edit function on the command buffer,
  * using a specified char as a line-editing command.
  * Returns:
- *	CC_PASS	The char does not invoke a line edit function.
- *	CC_OK	Line edit function done.
- *	CC_QUIT	The char requests the current command to be aborted.
+ *      CC_PASS The char does not invoke a line edit function.
+ *      CC_OK   Line edit function done.
+ *      CC_QUIT The char requests the current command to be aborted.
  */
 	static int
 cmd_edit(c)
@@ -838,9 +843,9 @@ cmd_edit(c)
 	int flags;
 
 #if TAB_COMPLETE_FILENAME
-#define	not_in_completion()	in_completion = 0
+#define not_in_completion()     in_completion = 0
 #else
-#define	not_in_completion(VOID_PARAM)
+#define not_in_completion(VOID_PARAM)
 #endif
 	
 	/*
@@ -852,20 +857,22 @@ cmd_edit(c)
 		/*
 		 * No current history; don't accept history manipulation cmds.
 		 */
-		flags |= EC_NOHISTORY;
+		flags |= ECF_NOHISTORY;
 #endif
 #if TAB_COMPLETE_FILENAME
 	if (curr_mlist == ml_search)
 		/*
 		 * In a search command; don't accept file-completion cmds.
 		 */
-		flags |= EC_NOCOMPLETE;
+		flags |= ECF_NOCOMPLETE;
 #endif
 
 	action = editchar(c, flags);
 
 	switch (action)
 	{
+	case A_NOACTION:
+		return (CC_OK);
 	case EC_RIGHT:
 		not_in_completion();
 		return (cmd_right());
@@ -934,8 +941,6 @@ cmd_edit(c)
 	case EC_EXPAND:
 		return (cmd_complete(action));
 #endif
-	case EC_NOACTION:
-		return (CC_OK);
 	default:
 		not_in_completion();
 		return (CC_PASS);
@@ -1237,9 +1242,9 @@ fail:
  * Process a single character of a multi-character command, such as
  * a number, or the pattern of a search command.
  * Returns:
- *	CC_OK		The char was accepted.
- *	CC_QUIT		The char requests the command to be aborted.
- *	CC_ERROR	The char could not be accepted due to an error.
+ *      CC_OK           The char was accepted.
+ *      CC_QUIT         The char requests the command to be aborted.
+ *      CC_ERROR        The char could not be accepted due to an error.
  */
 	public int
 cmd_char(c)
diff --git a/contrib/less/command.c b/contrib/less/command.c
index 8e0ae4b34d67..ae59181c2827 100644
--- a/contrib/less/command.c
+++ b/contrib/less/command.c
@@ -1,6 +1,6 @@
 /* $FreeBSD$ */
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -57,21 +57,22 @@ extern void *ml_shell;
 extern char *editor;
 extern char *editproto;
 #endif
-extern int screen_trashed;	/* The screen has been overwritten */
+extern int screen_trashed;      /* The screen has been overwritten */
 extern int shift_count;
 extern int oldbot;
 extern int forw_prompt;
+extern int incr_search;
 #if MSDOS_COMPILER==WIN32C
 extern int utf_mode;
 #endif
 
 #if SHELL_ESCAPE
-static char *shellcmd = NULL;	/* For holding last shell command for "!!" */
+static char *shellcmd = NULL;   /* For holding last shell command for "!!" */
 #endif
-static int mca;			/* The multicharacter command (action) */
-static int search_type;		/* The previous type of search */
-static LINENUM number;		/* The number typed by the user */
-static long fraction;		/* The fractional part of the number */
+static int mca;                 /* The multicharacter command (action) */
+static int search_type;         /* The previous type of search */
+static LINENUM number;          /* The number typed by the user */
+static long fraction;           /* The fractional part of the number */
 static struct loption *curropt;
 static int opt_lower;
 static int optflag;
@@ -113,7 +114,6 @@ set_mca(action)
 	int action;
 {
 	mca = action;
-	deinit_mouse(); /* we don't want mouse events while entering a cmd */
 	clear_bot();
 	clear_cmd();
 }
@@ -127,7 +127,6 @@ clear_mca(VOID_PARAM)
 	if (mca == 0)
 		return;
 	mca = 0;
-	init_mouse();
 }
 
 /*
@@ -177,6 +176,8 @@ mca_search(VOID_PARAM)
 		cmd_putstr("Keep-pos ");
 	if (search_type & SRCH_NO_REGEX)
 		cmd_putstr("Regex-off ");
+	if (search_type & SRCH_WRAP)
+		cmd_putstr("Wrap ");
 
 #if HILITE_SEARCH
 	if (search_type & SRCH_FILTER)
@@ -520,9 +521,9 @@ mca_search_char(c)
 	/*
 	 * Certain characters as the first char of 
 	 * the pattern have special meaning:
-	 *	!  Toggle the NO_MATCH flag
-	 *	*  Toggle the PAST_EOF flag
-	 *	@  Toggle the FIRST_FILE flag
+	 *      !  Toggle the NO_MATCH flag
+	 *      *  Toggle the PAST_EOF flag
+	 *      @  Toggle the FIRST_FILE flag
 	 */
 	if (len_cmdbuf() > 0)
 		return (NO_MCA);
@@ -547,6 +548,10 @@ mca_search_char(c)
 		if (mca != A_FILTER)
 			flag = SRCH_NO_MOVE;
 		break;
+	case CONTROL('W'): /* WRAP around */
+		if (mca != A_FILTER)
+			flag = SRCH_WRAP;
+		break;
 	case CONTROL('R'): /* Don't use REGULAR EXPRESSIONS */
 		flag = SRCH_NO_REGEX;
 		break;
@@ -558,7 +563,8 @@ mca_search_char(c)
 
 	if (flag != 0)
 	{
-		search_type ^= flag;
+		/* Toggle flag, but keep PAST_EOF and WRAP mutually exclusive. */
+		search_type ^= flag | (search_type & (SRCH_PAST_EOF|SRCH_WRAP));
 		mca_search();
 		return (MCA_MORE);
 	}
@@ -596,9 +602,16 @@ mca_char(c)
 		 * Entering digits of a number.
 		 * Terminated by a non-digit.
 		 */
-		if (!((c >= '0' && c <= '9') || c == '.') && 
-		  editchar(c, EC_PEEK|EC_NOHISTORY|EC_NOCOMPLETE|EC_NORIGHTLEFT) == A_INVALID)
+		if ((c >= '0' && c <= '9') || c == '.')
+			break;
+		switch (editchar(c, ECF_PEEK|ECF_NOHISTORY|ECF_NOCOMPLETE|ECF_NORIGHTLEFT))
 		{
+		case A_NOACTION:
+			/*
+			 * Ignore this char and get another one.
+			 */
+			return (MCA_MORE);
+		case A_INVALID:
 			/*
 			 * Not part of the number.
 			 * End the number and treat this char 
@@ -651,15 +664,44 @@ mca_char(c)
 		 */
 		return (MCA_DONE);
 
-	if ((mca == A_F_BRACKET || mca == A_B_BRACKET) && len_cmdbuf() >= 2)
*** 9553 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 02:32:16 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 59C73646F19;
 Sun,  9 May 2021 02:32:16 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fd7W426dFz4W1T;
 Sun,  9 May 2021 02:32:16 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3B6A419B6;
 Sun,  9 May 2021 02:32:16 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1492WGxw028304;
 Sun, 9 May 2021 02:32:16 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1492WG4C028303;
 Sun, 9 May 2021 02:32:16 GMT (envelope-from git)
Date: Sun, 9 May 2021 02:32:16 GMT
Message-Id: <202105090232.1492WG4C028303@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Xin LI <delphij@FreeBSD.org>
Subject: git: c5c5683eb6c4 - stable/11 - less: upgrade to v581.2.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: delphij
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/11
X-Git-Reftype: branch
X-Git-Commit: c5c5683eb6c4e1d80e02e1e23e5c9bfc8f83c80b
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 02:32:16 -0000

The branch stable/11 has been updated by delphij:

URL: https://cgit.FreeBSD.org/src/commit/?id=c5c5683eb6c4e1d80e02e1e23e5c9bfc8f83c80b

commit c5c5683eb6c4e1d80e02e1e23e5c9bfc8f83c80b
Author:     Xin LI <delphij@FreeBSD.org>
AuthorDate: 2021-04-19 02:46:19 +0000
Commit:     Xin LI <delphij@FreeBSD.org>
CommitDate: 2021-05-09 02:32:08 +0000

    less: upgrade to v581.2.
    
    (cherry picked from commit 50d31dbc6e2bc3aa6007edb8cdecbcb84e85d6c0)
    
    less: upgrade to v581.
    
    (cherry picked from commit 2235c7feac959bcc9ddfd6a2bc6be32102b1f84c)
---
 contrib/less/INSTALL      |  10 +-
 contrib/less/NEWS         |  50 ++-
 contrib/less/README       |  38 +-
 contrib/less/brac.c       |   2 +-
 contrib/less/ch.c         |  54 ++-
 contrib/less/charset.c    | 154 ++++----
 contrib/less/charset.h    |   2 +-
 contrib/less/cmd.h        |  20 +-
 contrib/less/cmdbuf.c     |  87 ++---
 contrib/less/command.c    | 189 +++++++---
 contrib/less/cvt.c        |  12 +-
 contrib/less/decode.c     | 367 ++++++++++---------
 contrib/less/edit.c       |  33 +-
 contrib/less/filename.c   |  29 +-
 contrib/less/forwback.c   |  11 +-
 contrib/less/funcs.h      |  35 +-
 contrib/less/help.c       |  24 +-
 contrib/less/ifile.c      |  39 +-
 contrib/less/input.c      |  45 ++-
 contrib/less/jump.c       |   2 +-
 contrib/less/less.h       | 419 +++++++++++----------
 contrib/less/less.hlp     |  22 +-
 contrib/less/less.nro     | 204 +++++++++--
 contrib/less/lessecho.c   |  14 +-
 contrib/less/lessecho.nro |   8 +-
 contrib/less/lesskey.c    | 163 ++++-----
 contrib/less/lesskey.h    |  38 +-
 contrib/less/lesskey.nro  |  25 +-
 contrib/less/lglob.h      | 110 +++---
 contrib/less/line.c       | 905 ++++++++++++++++++++++++++--------------------
 contrib/less/linenum.c    |  31 +-
 contrib/less/lsystem.c    |  44 +--
 contrib/less/main.c       |  85 +++--
 contrib/less/mark.c       |  26 +-
 contrib/less/optfunc.c    | 309 ++++++++++++----
 contrib/less/option.c     |  25 +-
 contrib/less/option.h     |  62 ++--
 contrib/less/opttbl.c     | 154 +++++---
 contrib/less/os.c         |  94 ++++-
 contrib/less/output.c     | 612 ++++++++++++++++---------------
 contrib/less/pattern.c    |  11 +-
 contrib/less/pattern.h    |  18 +-
 contrib/less/pckeys.h     |  38 +-
 contrib/less/position.c   |  12 +-
 contrib/less/position.h   |  12 +-
 contrib/less/prompt.c     |  88 ++---
 contrib/less/regexp.h     |  14 +-
 contrib/less/screen.c     | 796 ++++++++++++++++++++++++++++------------
 contrib/less/scrsize.c    |   2 +-
 contrib/less/search.c     | 359 +++++++++++++-----
 contrib/less/signal.c     |  14 +-
 contrib/less/tags.c       |  77 ++--
 contrib/less/ttyin.c      |  51 ++-
 contrib/less/version.c    |  30 +-
 usr.bin/less/defines.h    |  13 +-
 55 files changed, 3782 insertions(+), 2306 deletions(-)

diff --git a/contrib/less/INSTALL b/contrib/less/INSTALL
index c2ab230e4470..78ae93246d88 100644
--- a/contrib/less/INSTALL
+++ b/contrib/less/INSTALL
@@ -1,6 +1,6 @@
-   This file describes how to build and install less using 
-the "configure" script.  This only works on Unix systems.  
-To install on other systems, read the README file.
+This file contains generic instructions on how to build and
+install software using autoconf. For specific instructions
+on how to build "less", see the README or README.VER file.
 
 
 Basic Installation
@@ -24,8 +24,8 @@ diffs or instructions to the address given in the `README' so they can
 be considered for the next release.  If at some point `config.cache'
 contains results you don't want to keep, you may remove or edit it.
 
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
+   The file `configure.ac' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.ac' if you want to change
 it or regenerate `configure' using a newer version of `autoconf'.
 
 The simplest way to compile this package is:
diff --git a/contrib/less/NEWS b/contrib/less/NEWS
index b0644fd2e0de..bc5afd655ddc 100644
--- a/contrib/less/NEWS
+++ b/contrib/less/NEWS
@@ -4,10 +4,56 @@
 ======================================================================
 
   For the latest news about less, see the "less" Web page:
-      http://www.greenwoodsoftware.com/less
+      https://greenwoodsoftware.com/less
   You can also download the latest version of less from there.
 
-  To report bugs, suggestions or comments, send email to bug-less@gnu.org
+  Report bugs, suggestions or comments at 
+  https://github.com/gwsw/less/issues.
+
+======================================================================
+
+	Major changes between "less" versions 563 and 581.2
+
+* Change ESC-u command to toggle, not disable, highlighting per man page.
+
+* Add ESC-U command. 
+
+* Add ctrl-W search modifier for wrapping search.
+
+* F command can be interrupted by ^X.
+
+* Support OSC 8 hyperlinks when -R is in effect.
+
+* g command with no number will ignore -j and put first line at top of screen.
+
+* Multiple + or -p command line options are handled better.
+
+* Add the --incsearch option.
+
+* Add the --line-num-width option.
+
+* Add the --status-col-width option.
+
+* Add the --use-color and --color options.
+
+* Display -w highlight even if highlighted line is empty.
+
+* If search result is in a long line, scroll to ensure it is visible.
+
+* Editing the same file under different names now creates only
+  one entry in the file list.
+
+* Make visual bell more visible on some terminals.
+
+* Ring end-of-file bell no more than once per second.
+
+* Build can use either Python or Perl for Makefile.aut operations.
+
+* Fix crash when using the @ search modifier.
+
+* Fix crash in the 's' command due to duplicate free.
+
+* Fix realpath crash on Darwin.
 
 ======================================================================
 
diff --git a/contrib/less/README b/contrib/less/README
index 81cb7e091296..2acbd00d762a 100644
--- a/contrib/less/README
+++ b/contrib/less/README
@@ -7,9 +7,9 @@
 **************************************************************************
 **************************************************************************
 
-                            Less, version 563
+                            Less, version 581.2
 
-    This is the distribution of less, version 563, released 13 Jun 2020.
+    This is the distribution of less, version 581.2, released 28 Apr 2021.
     This program is part of the GNU project (http://www.gnu.org).
 
     This program is free software.  You may redistribute it and/or
@@ -21,33 +21,29 @@
     or
     2. The Less License, in the file LICENSE.
 
-    Please report any problems to bug-less@gnu.org.
-    See http://www.greenwoodsoftware.com/less for the latest info.
+    Please report any problems at https://github.com/gwsw/less/issues.
+    See https://greenwoodsoftware.com/less for the latest info.
     Source repository is at https://github.com/gwsw/less.git.
 
 =========================================================================
 
-This is the distribution of "less", a paginator similar to "more" or "pg".
-
 The formatted manual page is in less.man.
 The manual page nroff source is in less.nro.
 Major changes made since the last posted version are in NEWS.
 
 =======================================================================
-PRE-INSTALLATION (when using git)
-
-If you are building from a clone of a git repository,
-type "make -f Makefile.aut".
-If you are building from a numbered release package (a tar or zip file 
-with a name like less-999.tar.gz or less-999.zip), you should skip this step. 
-
-=======================================================================
-INSTALLATION (Unix systems only):
+INSTALLATION (Unix & Linux systems only):
 
 1. Move the distributed source to its own directory and unpack it,
    if you have not already done so.  
 
-2. Type "sh configure".
+2. If you are building from a clone of a git repository,
+   type "make -f Makefile.aut".
+   If you are building from a numbered release package (a tar or 
+   zip file with a name like less-999.tar.gz or less-999.zip downloaded 
+   from greenwoodsoftware.com, not from github), you should skip this step. 
+
+3. Type "sh configure".
    This will generate a Makefile and a defines.h.
    Warning: if you have a GNU sed, make sure it is version 2.05 or later.
 
@@ -79,7 +75,7 @@ INSTALLATION (Unix systems only):
      commands, etc.
 
 
-3. It is a good idea to look over the generated Makefile and defines.h
+4. It is a good idea to look over the generated Makefile and defines.h
    and make sure they look ok.  If you know of any peculiarities of
    your system that configure might not have detected, you may fix the
    Makefile now.  Take particular notice of the list of "terminal" 
@@ -93,13 +89,13 @@ INSTALLATION (Unix systems only):
    to remove the descriptions of the features which you are removing.
    If you edit less.hlp, you should run "make -f Makefile.aut help.c".
 
-4. Type "make" and watch the fun.
+5. Type "make" and watch the fun.
 
-5. If the make succeeds, it will generate the programs "less",
+6. If the make succeeds, it will generate the programs "less",
    "lesskey" and "lessecho" in your current directory.  Test the 
    generated programs.
 
-6. When satisfied that it works, if you wish to install it
+7. When satisfied that it works, if you wish to install it
    in a public place, type "make install".
 
    The default install destinations are:
@@ -108,8 +104,6 @@ INSTALLATION (Unix systems only):
    If you want to install any of these files elsewhere, define
    bindir and/or mandir to the appropriate directories.
 
-If you have any problems building or running "less", suggestions, 
-complaints, etc., you may mail to bug-less@gnu.org.
 
 Note to hackers: comments noting possible improvements are enclosed
 in double curly brackets {{ like this }}.
diff --git a/contrib/less/brac.c b/contrib/less/brac.c
index db3a2951db08..53ada50aab56 100644
--- a/contrib/less/brac.c
+++ b/contrib/less/brac.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
diff --git a/contrib/less/ch.c b/contrib/less/ch.c
index 70fad1002dbf..bab0692f7437 100644
--- a/contrib/less/ch.c
+++ b/contrib/less/ch.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -41,7 +41,7 @@ struct bufnode {
 	struct bufnode *hnext, *hprev;
 };
 
-#define	LBUFSIZE	8192
+#define LBUFSIZE        8192
 struct buf {
 	struct bufnode node;
 	BLOCKNUM block;
@@ -54,7 +54,7 @@ struct buf {
  * The file state is maintained in a filestate structure.
  * A pointer to the filestate is kept in the ifile structure.
  */
-#define	BUFHASH_SIZE	1024
+#define BUFHASH_SIZE    1024
 struct filestate {
 	struct bufnode buflist;
 	struct bufnode hashtbl[BUFHASH_SIZE];
@@ -67,24 +67,24 @@ struct filestate {
 	POSITION fsize;
 };
 
-#define	ch_bufhead	thisfile->buflist.next
-#define	ch_buftail	thisfile->buflist.prev
-#define	ch_nbufs	thisfile->nbufs
-#define	ch_block	thisfile->block
-#define	ch_offset	thisfile->offset
-#define	ch_fpos		thisfile->fpos
-#define	ch_fsize	thisfile->fsize
-#define	ch_flags	thisfile->flags
-#define	ch_file		thisfile->file
+#define ch_bufhead      thisfile->buflist.next
+#define ch_buftail      thisfile->buflist.prev
+#define ch_nbufs        thisfile->nbufs
+#define ch_block        thisfile->block
+#define ch_offset       thisfile->offset
+#define ch_fpos         thisfile->fpos
+#define ch_fsize        thisfile->fsize
+#define ch_flags        thisfile->flags
+#define ch_file         thisfile->file
 
-#define	END_OF_CHAIN	(&thisfile->buflist)
-#define	END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
-#define BUFHASH(blk)	((blk) & (BUFHASH_SIZE-1))
+#define END_OF_CHAIN    (&thisfile->buflist)
+#define END_OF_HCHAIN(h) (&thisfile->hashtbl[h])
+#define BUFHASH(blk)    ((blk) & (BUFHASH_SIZE-1))
 
 /*
  * Macros to manipulate the list of buffers in thisfile->buflist.
  */
-#define	FOR_BUFS(bn) \
+#define FOR_BUFS(bn) \
 	for (bn = ch_bufhead;  bn != END_OF_CHAIN;  bn = bn->next)
 
 #define BUF_RM(bn) \
@@ -106,15 +106,15 @@ struct filestate {
 /*
  * Macros to manipulate the list of buffers in thisfile->hashtbl[n].
  */
-#define	FOR_BUFS_IN_CHAIN(h,bn) \
+#define FOR_BUFS_IN_CHAIN(h,bn) \
 	for (bn = thisfile->hashtbl[h].hnext;  \
 	     bn != END_OF_HCHAIN(h);  bn = bn->hnext)
 
-#define	BUF_HASH_RM(bn) \
+#define BUF_HASH_RM(bn) \
 	(bn)->hnext->hprev = (bn)->hprev; \
 	(bn)->hprev->hnext = (bn)->hnext;
 
-#define	BUF_HASH_INS(bn,h) \
+#define BUF_HASH_INS(bn,h) \
 	(bn)->hnext = thisfile->hashtbl[h].hnext; \
 	(bn)->hprev = END_OF_HCHAIN(h); \
 	thisfile->hashtbl[h].hnext->hprev = (bn); \
@@ -240,12 +240,12 @@ ch_get(VOID_PARAM)
 			return ('?');
 		if (lseek(ch_file, (off_t)pos, SEEK_SET) == BAD_LSEEK)
 		{
- 			error("seek error", NULL_PARG);
+			error("seek error", NULL_PARG);
 			clear_eol();
 			return (EOI);
- 		}
- 		ch_fpos = pos;
- 	}
+		}
+		ch_fpos = pos;
+	}
 
 	/*
 	 * Read the block.
@@ -311,13 +311,7 @@ ch_get(VOID_PARAM)
 				parg.p_string = wait_message();
 				ierror("%s", &parg);
 			}
-#if !MSDOS_COMPILER
-	 		sleep(1);
-#else
-#if MSDOS_COMPILER==WIN32C
-			Sleep(1000);
-#endif
-#endif
+			sleep_ms(2); /* Reduce system load */
 			slept = TRUE;
 
 #if HAVE_STAT_INO
diff --git a/contrib/less/charset.c b/contrib/less/charset.c
index 4897cbaf6adc..b37c8a29cbd9 100644
--- a/contrib/less/charset.c
+++ b/contrib/less/charset.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -40,27 +40,27 @@ struct charset {
 	int *p_flag;
 	char *desc;
 } charsets[] = {
-	{ "ascii",		NULL,       "8bcccbcc18b95.b" },
-	{ "utf-8",		&utf_mode,  "8bcccbcc18b95.b126.bb" },
-	{ "iso8859",		NULL,       "8bcccbcc18b95.33b." },
-	{ "latin3",		NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
-	{ "arabic",		NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
-	{ "greek",		NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
-	{ "greek2005",		NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
-	{ "hebrew",		NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
-	{ "koi8-r",		NULL,       "8bcccbcc18b95.b." },
-	{ "KOI8-T",		NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
-	{ "georgianps",		NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
-	{ "tcvn",		NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
-	{ "TIS-620",		NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
-	{ "next",		NULL,       "8bcccbcc18b95.bb125.bb" },
-	{ "dos",		NULL,       "8bcccbcc12bc5b95.b." },
-	{ "windows-1251",	NULL,       "8bcccbcc12bc5b95.b24.b." },
-	{ "windows-1252",	NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
-	{ "windows-1255",	NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
-	{ "ebcdic",		NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
-	{ "IBM-1047",		NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
-	{ NULL, NULL, NULL }
+		{ "ascii",              NULL,       "8bcccbcc18b95.b" },
+		{ "utf-8",              &utf_mode,  "8bcccbcc18b95.b126.bb" },
+		{ "iso8859",            NULL,       "8bcccbcc18b95.33b." },
+		{ "latin3",             NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
+		{ "arabic",             NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
+		{ "greek",              NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
+		{ "greek2005",          NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
+		{ "hebrew",             NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
+		{ "koi8-r",             NULL,       "8bcccbcc18b95.b." },
+		{ "KOI8-T",             NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
+		{ "georgianps",         NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
+		{ "tcvn",               NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
+		{ "TIS-620",            NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
+		{ "next",               NULL,       "8bcccbcc18b95.bb125.bb" },
+		{ "dos",                NULL,       "8bcccbcc12bc5b95.b." },
+		{ "windows-1251",       NULL,       "8bcccbcc12bc5b95.b24.b." },
+		{ "windows-1252",       NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
+		{ "windows-1255",       NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
+		{ "ebcdic",             NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
+		{ "IBM-1047",           NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
+		{ NULL, NULL, NULL }
 };
 
 /*
@@ -70,58 +70,58 @@ struct cs_alias {
 	char *name;
 	char *oname;
 } cs_aliases[] = {
-	{ "UTF-8",		"utf-8" },
-	{ "utf8",		"utf-8" },
-	{ "UTF8",		"utf-8" },
-	{ "ANSI_X3.4-1968",	"ascii" },
-	{ "US-ASCII",		"ascii" },
-	{ "latin1",		"iso8859" },
-	{ "ISO-8859-1",		"iso8859" },
-	{ "latin9",		"iso8859" },
-	{ "ISO-8859-15",	"iso8859" },
-	{ "latin2",		"iso8859" },
-	{ "ISO-8859-2",		"iso8859" },
-	{ "ISO-8859-3",		"latin3" },
-	{ "latin4",		"iso8859" },
-	{ "ISO-8859-4",		"iso8859" },
-	{ "cyrillic",		"iso8859" },
-	{ "ISO-8859-5",		"iso8859" },
-	{ "ISO-8859-6",		"arabic" },
-	{ "ISO-8859-7",		"greek" },
-	{ "IBM9005",		"greek2005" },
-	{ "ISO-8859-8",		"hebrew" },
-	{ "latin5",		"iso8859" },
-	{ "ISO-8859-9",		"iso8859" },
-	{ "latin6",		"iso8859" },
-	{ "ISO-8859-10",	"iso8859" },
-	{ "latin7",		"iso8859" },
-	{ "ISO-8859-13",	"iso8859" },
-	{ "latin8",		"iso8859" },
-	{ "ISO-8859-14",	"iso8859" },
-	{ "latin10",		"iso8859" },
-	{ "ISO-8859-16",	"iso8859" },
-	{ "IBM437",		"dos" },
-	{ "EBCDIC-US",		"ebcdic" },
-	{ "IBM1047",		"IBM-1047" },
-	{ "KOI8-R",		"koi8-r" },
-	{ "KOI8-U",		"koi8-r" },
-	{ "GEORGIAN-PS",	"georgianps" },
-	{ "TCVN5712-1", 	"tcvn" },
-	{ "NEXTSTEP",		"next" },
-	{ "windows",		"windows-1252" }, /* backward compatibility */
-	{ "CP1251",		"windows-1251" },
-	{ "CP1252",		"windows-1252" },
-	{ "CP1255",		"windows-1255" },
+	{ "UTF-8",              "utf-8" },
+	{ "utf8",               "utf-8" },
+	{ "UTF8",               "utf-8" },
+	{ "ANSI_X3.4-1968",     "ascii" },
+	{ "US-ASCII",           "ascii" },
+	{ "latin1",             "iso8859" },
+	{ "ISO-8859-1",         "iso8859" },
+	{ "latin9",             "iso8859" },
+	{ "ISO-8859-15",        "iso8859" },
+	{ "latin2",             "iso8859" },
+	{ "ISO-8859-2",         "iso8859" },
+	{ "ISO-8859-3",         "latin3" },
+	{ "latin4",             "iso8859" },
+	{ "ISO-8859-4",         "iso8859" },
+	{ "cyrillic",           "iso8859" },
+	{ "ISO-8859-5",         "iso8859" },
+	{ "ISO-8859-6",         "arabic" },
+	{ "ISO-8859-7",         "greek" },
+	{ "IBM9005",            "greek2005" },
+	{ "ISO-8859-8",         "hebrew" },
+	{ "latin5",             "iso8859" },
+	{ "ISO-8859-9",         "iso8859" },
+	{ "latin6",             "iso8859" },
+	{ "ISO-8859-10",        "iso8859" },
+	{ "latin7",             "iso8859" },
+	{ "ISO-8859-13",        "iso8859" },
+	{ "latin8",             "iso8859" },
+	{ "ISO-8859-14",        "iso8859" },
+	{ "latin10",            "iso8859" },
+	{ "ISO-8859-16",        "iso8859" },
+	{ "IBM437",             "dos" },
+	{ "EBCDIC-US",          "ebcdic" },
+	{ "IBM1047",            "IBM-1047" },
+	{ "KOI8-R",             "koi8-r" },
+	{ "KOI8-U",             "koi8-r" },
+	{ "GEORGIAN-PS",        "georgianps" },
+	{ "TCVN5712-1",         "tcvn" },
+	{ "NEXTSTEP",           "next" },
+	{ "windows",            "windows-1252" }, /* backward compatibility */
+	{ "CP1251",             "windows-1251" },
+	{ "CP1252",             "windows-1252" },
+	{ "CP1255",             "windows-1255" },
 	{ NULL, NULL }
 };
 
-#define	IS_BINARY_CHAR	01
-#define	IS_CONTROL_CHAR	02
+#define IS_BINARY_CHAR  01
+#define IS_CONTROL_CHAR 02
 
 static char chardef[256];
 static char *binfmt = NULL;
 static char *utfbinfmt = NULL;
-public int binattr = AT_STANDOUT;
+public int binattr = AT_STANDOUT|AT_COLOR_BIN;
 
 
 /*
@@ -134,9 +134,9 @@ public int binattr = AT_STANDOUT;
  * repetition of the letter.
  *
  * Each letter is one of:
- *	. normal character
- *	b binary character
- *	c control character
+ *      . normal character
+ *      b binary character
+ *      c control character
  */
 	static void
 ichardef(s)
@@ -457,16 +457,16 @@ prchar(c)
 		SNPRINTF1(buf, sizeof(buf), "^%c",
 		/*
 		 * This array roughly inverts CONTROL() #defined in less.h,
-	 	 * and should be kept in sync with CONTROL() and IBM-1047.
- 	 	 */
+		 * and should be kept in sync with CONTROL() and IBM-1047.
+		 */
 		"@ABC.I.?...KLMNO"
 		"PQRS.JH.XY.."
 		"\\]^_"
 		"......W[.....EFG"
 		"..V....D....TU.Z"[c]);
 #else
-  	else if (c < 128 && !control_char(c ^ 0100))
-  		SNPRINTF1(buf, sizeof(buf), "^%c", (int) (c ^ 0100));
+	else if (c < 128 && !control_char(c ^ 0100))
+		SNPRINTF1(buf, sizeof(buf), "^%c", (int) (c ^ 0100));
 #endif
 	else
 		SNPRINTF1(buf, sizeof(buf), binfmt, c);
@@ -484,7 +484,7 @@ prutfchar(ch)
 
 	if (ch == ESC)
 		strcpy(buf, "ESC");
-  	else if (ch < 128 && control_char(ch))
+	else if (ch < 128 && control_char(ch))
 	{
 		if (!control_char(ch ^ 0100))
 			SNPRINTF1(buf, sizeof(buf), "^%c", ((char) ch) ^ 0100);
@@ -732,9 +732,9 @@ step_char(pp, dir, limit)
  */
 
 #define DECLARE_RANGE_TABLE_START(name) \
-    static struct wchar_range name##_array[] = {
+	static struct wchar_range name##_array[] = {
 #define DECLARE_RANGE_TABLE_END(name) \
-    }; struct wchar_range_table name##_table = { name##_array, sizeof(name##_array)/sizeof(*name##_array) };
+	}; struct wchar_range_table name##_table = { name##_array, sizeof(name##_array)/sizeof(*name##_array) };
 
 DECLARE_RANGE_TABLE_START(compose)
 #include "compose.uni"
diff --git a/contrib/less/charset.h b/contrib/less/charset.h
index cc0c3af59e89..3e7ecf73db94 100644
--- a/contrib/less/charset.h
+++ b/contrib/less/charset.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
diff --git a/contrib/less/cmd.h b/contrib/less/cmd.h
index 95a2e5801717..c51f0bc5c4f3 100644
--- a/contrib/less/cmd.h
+++ b/contrib/less/cmd.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -31,7 +31,6 @@
 #define A_HELP                 19
 #define A_NEXT_FILE            20
 #define A_PERCENT              21
-#define A_PREFIX               22
 #define A_PREV_FILE            23
 #define A_QUIT                 24
 #define A_REPAINT              25
@@ -72,19 +71,19 @@
 #define A_CLRMARK              62
 #define A_SETMARKBOT           63
 #define A_X11MOUSE_IN          64
-#define A_X11MOUSE_IGNORE      65
 #define A_F_MOUSE              66
 #define A_B_MOUSE              67
 /* Note "X116" refers to extended (1006) X11 mouse reporting. */
 #define A_X116MOUSE_IN         68
-#define A_X116MOUSE_IGNORE     69
+#define A_CLR_SEARCH           70
 
+/* These values must not conflict with any A_* or EC_* value. */
 #define A_INVALID              100
 #define A_NOACTION             101
 #define A_UINVALID             102
 #define A_END_LIST             103
 #define A_SPECIAL_KEY          104
-
+#define A_PREFIX               105
 #define A_SKIP                 127
 
 #define A_EXTRA                0200
@@ -111,15 +110,16 @@
 #define EC_B_COMPLETE          18
 #define EC_LITERAL             19
 #define EC_ABORT               20
+#define EC_X11MOUSE            21
+#define EC_X116MOUSE           22
 
-#define EC_NOACTION            101
 #define EC_UINVALID            102
 
 /* Flags for editchar() */
-#define EC_PEEK                01
-#define EC_NOHISTORY           02
-#define EC_NOCOMPLETE          04
-#define EC_NORIGHTLEFT         010
+#define ECF_PEEK                01
+#define ECF_NOHISTORY           02
+#define ECF_NOCOMPLETE          04
+#define ECF_NORIGHTLEFT         010
 
 /* Environment variable stuff */
 #define EV_OK                  01
diff --git a/contrib/less/cmdbuf.c b/contrib/less/cmdbuf.c
index ed78ded00307..9cc1f3e94977 100644
--- a/contrib/less/cmdbuf.c
+++ b/contrib/less/cmdbuf.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -26,12 +26,12 @@ extern int no_hist_dups;
 extern int marks_modified;
 
 static char cmdbuf[CMDBUF_SIZE]; /* Buffer for holding a multi-char command */
-static int cmd_col;		/* Current column of the cursor */
-static int prompt_col;		/* Column of cursor just after prompt */
-static char *cp;		/* Pointer into cmdbuf */
-static int cmd_offset;		/* Index into cmdbuf of first displayed char */
-static int literal;		/* Next input char should not be interpreted */
-static int updown_match = -1;	/* Prefix length in up/down movement */
+static int cmd_col;              /* Current column of the cursor */
+static int prompt_col;           /* Column of cursor just after prompt */
+static char *cp;                 /* Pointer into cmdbuf */
+static int cmd_offset;           /* Index into cmdbuf of first displayed char */
+static int literal;              /* Next input char should not be interpreted */
+static int updown_match = -1;    /* Prefix length in up/down movement */
 
 #if TAB_COMPLETE_FILENAME
 static int cmd_complete LESSPARAMS((int action));
@@ -223,7 +223,7 @@ cmd_step_common(p, ch, len, pwidth, bswidth)
 		}
 	}
 	if (pwidth != NULL)
-		*pwidth	= width;
+		*pwidth = width;
 	if (bswidth != NULL)
 		*bswidth = width;
 	return (pr);
@@ -259,17 +259,42 @@ cmd_step_left(pp, pwidth, bswidth)
 	return cmd_step_common(*pp, ch, p - *pp, pwidth, bswidth);
 }
 
+/*
+ * Put the cursor at "home" (just after the prompt),
+ * and set cp to the corresponding char in cmdbuf.
+ */
+	static void
+cmd_home(VOID_PARAM)
+{
+	while (cmd_col > prompt_col)
+	{
+		int width, bswidth;
+
+		cmd_step_left(&cp, &width, &bswidth);
+		while (bswidth-- > 0)
+			putbs();
+		cmd_col -= width;
+	}
+
+	cp = &cmdbuf[cmd_offset];
+}
+
 /*
  * Repaint the line from cp onwards.
  * Then position the cursor just after the char old_cp (a pointer into cmdbuf).
  */
-	static void
+	public void
 cmd_repaint(old_cp)
 	constant char *old_cp;
 {
 	/*
 	 * Repaint the line from the current position.
 	 */
+	if (old_cp == NULL)
+	{
+		old_cp = cp;
+		cmd_home();
+	}
 	clear_eol();
 	while (*cp != '\0')
 	{
@@ -300,26 +325,6 @@ cmd_repaint(old_cp)
 		cmd_left();
 }
 
-/*
- * Put the cursor at "home" (just after the prompt),
- * and set cp to the corresponding char in cmdbuf.
- */
-	static void
-cmd_home(VOID_PARAM)
-{
-	while (cmd_col > prompt_col)
-	{
-		int width, bswidth;
-
-		cmd_step_left(&cp, &width, &bswidth);
-		while (bswidth-- > 0)
-			putbs();
-		cmd_col -= width;
-	}
-
-	cp = &cmdbuf[cmd_offset];
-}
-
 /*
  * Shift the cmdbuf display left a half-screen.
  */
@@ -826,9 +831,9 @@ cmd_accept(VOID_PARAM)
  * Try to perform a line-edit function on the command buffer,
  * using a specified char as a line-editing command.
  * Returns:
- *	CC_PASS	The char does not invoke a line edit function.
- *	CC_OK	Line edit function done.
- *	CC_QUIT	The char requests the current command to be aborted.
+ *      CC_PASS The char does not invoke a line edit function.
+ *      CC_OK   Line edit function done.
+ *      CC_QUIT The char requests the current command to be aborted.
  */
 	static int
 cmd_edit(c)
@@ -838,9 +843,9 @@ cmd_edit(c)
 	int flags;
 
 #if TAB_COMPLETE_FILENAME
-#define	not_in_completion()	in_completion = 0
+#define not_in_completion()     in_completion = 0
 #else
-#define	not_in_completion(VOID_PARAM)
+#define not_in_completion(VOID_PARAM)
 #endif
 	
 	/*
@@ -852,20 +857,22 @@ cmd_edit(c)
 		/*
 		 * No current history; don't accept history manipulation cmds.
 		 */
-		flags |= EC_NOHISTORY;
+		flags |= ECF_NOHISTORY;
 #endif
 #if TAB_COMPLETE_FILENAME
 	if (curr_mlist == ml_search)
 		/*
 		 * In a search command; don't accept file-completion cmds.
 		 */
-		flags |= EC_NOCOMPLETE;
+		flags |= ECF_NOCOMPLETE;
 #endif
 
 	action = editchar(c, flags);
 
 	switch (action)
 	{
+	case A_NOACTION:
+		return (CC_OK);
 	case EC_RIGHT:
 		not_in_completion();
 		return (cmd_right());
@@ -934,8 +941,6 @@ cmd_edit(c)
 	case EC_EXPAND:
 		return (cmd_complete(action));
 #endif
-	case EC_NOACTION:
-		return (CC_OK);
 	default:
 		not_in_completion();
 		return (CC_PASS);
@@ -1237,9 +1242,9 @@ fail:
  * Process a single character of a multi-character command, such as
  * a number, or the pattern of a search command.
  * Returns:
- *	CC_OK		The char was accepted.
- *	CC_QUIT		The char requests the command to be aborted.
- *	CC_ERROR	The char could not be accepted due to an error.
+ *      CC_OK           The char was accepted.
+ *      CC_QUIT         The char requests the command to be aborted.
+ *      CC_ERROR        The char could not be accepted due to an error.
  */
 	public int
 cmd_char(c)
diff --git a/contrib/less/command.c b/contrib/less/command.c
index 8e0ae4b34d67..ae59181c2827 100644
--- a/contrib/less/command.c
+++ b/contrib/less/command.c
@@ -1,6 +1,6 @@
 /* $FreeBSD$ */
 /*
- * Copyright (C) 1984-2020  Mark Nudelman
+ * Copyright (C) 1984-2021  Mark Nudelman
  *
  * You may distribute under the terms of either the GNU General Public
  * License or the Less License, as specified in the README file.
@@ -57,21 +57,22 @@ extern void *ml_shell;
 extern char *editor;
 extern char *editproto;
 #endif
-extern int screen_trashed;	/* The screen has been overwritten */
+extern int screen_trashed;      /* The screen has been overwritten */
 extern int shift_count;
 extern int oldbot;
 extern int forw_prompt;
+extern int incr_search;
 #if MSDOS_COMPILER==WIN32C
 extern int utf_mode;
 #endif
 
 #if SHELL_ESCAPE
-static char *shellcmd = NULL;	/* For holding last shell command for "!!" */
+static char *shellcmd = NULL;   /* For holding last shell command for "!!" */
 #endif
-static int mca;			/* The multicharacter command (action) */
-static int search_type;		/* The previous type of search */
-static LINENUM number;		/* The number typed by the user */
-static long fraction;		/* The fractional part of the number */
+static int mca;                 /* The multicharacter command (action) */
+static int search_type;         /* The previous type of search */
+static LINENUM number;          /* The number typed by the user */
+static long fraction;           /* The fractional part of the number */
 static struct loption *curropt;
 static int opt_lower;
 static int optflag;
@@ -113,7 +114,6 @@ set_mca(action)
 	int action;
 {
 	mca = action;
-	deinit_mouse(); /* we don't want mouse events while entering a cmd */
 	clear_bot();
 	clear_cmd();
 }
@@ -127,7 +127,6 @@ clear_mca(VOID_PARAM)
 	if (mca == 0)
 		return;
 	mca = 0;
-	init_mouse();
 }
 
 /*
@@ -177,6 +176,8 @@ mca_search(VOID_PARAM)
 		cmd_putstr("Keep-pos ");
 	if (search_type & SRCH_NO_REGEX)
 		cmd_putstr("Regex-off ");
+	if (search_type & SRCH_WRAP)
+		cmd_putstr("Wrap ");
 
 #if HILITE_SEARCH
 	if (search_type & SRCH_FILTER)
@@ -520,9 +521,9 @@ mca_search_char(c)
 	/*
 	 * Certain characters as the first char of 
 	 * the pattern have special meaning:
-	 *	!  Toggle the NO_MATCH flag
-	 *	*  Toggle the PAST_EOF flag
-	 *	@  Toggle the FIRST_FILE flag
+	 *      !  Toggle the NO_MATCH flag
+	 *      *  Toggle the PAST_EOF flag
+	 *      @  Toggle the FIRST_FILE flag
 	 */
 	if (len_cmdbuf() > 0)
 		return (NO_MCA);
@@ -547,6 +548,10 @@ mca_search_char(c)
 		if (mca != A_FILTER)
 			flag = SRCH_NO_MOVE;
 		break;
+	case CONTROL('W'): /* WRAP around */
+		if (mca != A_FILTER)
+			flag = SRCH_WRAP;
+		break;
 	case CONTROL('R'): /* Don't use REGULAR EXPRESSIONS */
 		flag = SRCH_NO_REGEX;
 		break;
@@ -558,7 +563,8 @@ mca_search_char(c)
 
 	if (flag != 0)
 	{
-		search_type ^= flag;
+		/* Toggle flag, but keep PAST_EOF and WRAP mutually exclusive. */
+		search_type ^= flag | (search_type & (SRCH_PAST_EOF|SRCH_WRAP));
 		mca_search();
 		return (MCA_MORE);
 	}
@@ -596,9 +602,16 @@ mca_char(c)
 		 * Entering digits of a number.
 		 * Terminated by a non-digit.
 		 */
-		if (!((c >= '0' && c <= '9') || c == '.') && 
-		  editchar(c, EC_PEEK|EC_NOHISTORY|EC_NOCOMPLETE|EC_NORIGHTLEFT) == A_INVALID)
+		if ((c >= '0' && c <= '9') || c == '.')
+			break;
+		switch (editchar(c, ECF_PEEK|ECF_NOHISTORY|ECF_NOCOMPLETE|ECF_NORIGHTLEFT))
 		{
+		case A_NOACTION:
+			/*
+			 * Ignore this char and get another one.
+			 */
+			return (MCA_MORE);
+		case A_INVALID:
 			/*
 			 * Not part of the number.
 			 * End the number and treat this char 
@@ -651,15 +664,44 @@ mca_char(c)
 		 */
 		return (MCA_DONE);
 
-	if ((mca == A_F_BRACKET || mca == A_B_BRACKET) && len_cmdbuf() >= 2)
*** 9553 LINES SKIPPED ***

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 02:58:47 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id ABF636471F0;
 Sun,  9 May 2021 02:58:47 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fd85g4Vnvz4X6n;
 Sun,  9 May 2021 02:58:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8D6181FA0;
 Sun,  9 May 2021 02:58:47 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1492wlfS054645;
 Sun, 9 May 2021 02:58:47 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1492wlK8054644;
 Sun, 9 May 2021 02:58:47 GMT (envelope-from git)
Date: Sun, 9 May 2021 02:58:47 GMT
Message-Id: <202105090258.1492wlK8054644@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Rick Macklem <rmacklem@FreeBSD.org>
Subject: git: 69aed9987e27 - stable/13 - nfscl: fix delegation recall when the
 file is not open
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: rmacklem
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 69aed9987e2790b24cfff6284e75fbad46172729
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 02:58:47 -0000

The branch stable/13 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=69aed9987e2790b24cfff6284e75fbad46172729

commit 69aed9987e2790b24cfff6284e75fbad46172729
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-04-25 19:52:48 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-05-09 02:55:16 +0000

    nfscl: fix delegation recall when the file is not open
    
    Without this patch, if a NFSv4 server recalled a
    delegation when the file is not open, the renew
    thread would block in the NFS VOP_INACTIVE()
    trying to acquire the client state lock that it
    already holds.
    
    This patch fixes the problem by delaying the
    vrele() call until after the client state
    lock is released.
    
    This bug has been in the NFSv4 client for
    a long time, but since it only affects
    delegation when recalled due to another
    client opening the file, it got missed
    during previous testing.
    
    Until you have this patch in your client,
    you should avoid the use of delegations.
    
    (cherry picked from commit 02695ea8909d818ceaa726f90f889889dfd39fac)
---
 sys/fs/nfsclient/nfs_clstate.c | 53 ++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index e310deff6cf9..6cff58331c97 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -156,7 +156,8 @@ static void nfscl_freedeleg(struct nfscldeleghead *, struct nfscldeleg *);
 static int nfscl_errmap(struct nfsrv_descript *, u_int32_t);
 static void nfscl_cleanup_common(struct nfsclclient *, u_int8_t *);
 static int nfscl_recalldeleg(struct nfsclclient *, struct nfsmount *,
-    struct nfscldeleg *, vnode_t, struct ucred *, NFSPROC_T *, int);
+    struct nfscldeleg *, vnode_t, struct ucred *, NFSPROC_T *, int,
+    vnode_t *);
 static void nfscl_freeopenowner(struct nfsclowner *, int);
 static void nfscl_cleandeleg(struct nfscldeleg *);
 static int nfscl_trydelegreturn(struct nfscldeleg *, struct ucred *,
@@ -2562,6 +2563,7 @@ nfscl_renewthread(struct nfsclclient *clp, NFSPROC_T *p)
 	struct nfsclds *dsp;
 	bool retok;
 	struct mount *mp;
+	vnode_t vp;
 
 	cred = newnfs_getcred();
 	NFSLOCKCLSTATE();
@@ -2683,7 +2685,7 @@ tryagain:
 				NFSUNLOCKCLSTATE();
 				newnfs_copycred(&dp->nfsdl_cred, cred);
 				ret = nfscl_recalldeleg(clp, clp->nfsc_nmp, dp,
-				    NULL, cred, p, 1);
+				    NULL, cred, p, 1, &vp);
 				if (!ret) {
 				    nfscl_cleandeleg(dp);
 				    TAILQ_REMOVE(&clp->nfsc_deleg, dp,
@@ -2694,6 +2696,22 @@ tryagain:
 				    nfsstatsv1.cldelegates--;
 				}
 				NFSLOCKCLSTATE();
+				/*
+				 * The nfsc_lock must be released before doing
+				 * vrele(), since it might call nfs_inactive().
+				 * For the unlikely case where the vnode failed
+				 * to be acquired by nfscl_recalldeleg(), a
+				 * VOP_RECLAIM() should be in progress and it
+				 * will return the delegation.
+				 */
+				nfsv4_unlock(&clp->nfsc_lock, 0);
+				igotlock = 0;
+				if (vp != NULL) {
+					NFSUNLOCKCLSTATE();
+					vrele(vp);
+					NFSLOCKCLSTATE();
+				}
+				goto tryagain;
 			}
 			dp = ndp;
 		}
@@ -3943,16 +3961,18 @@ nfscl_lockt(vnode_t vp, struct nfsclclient *clp, u_int64_t off,
 static int
 nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
     struct nfscldeleg *dp, vnode_t vp, struct ucred *cred, NFSPROC_T *p,
-    int called_from_renewthread)
+    int called_from_renewthread, vnode_t *vpp)
 {
 	struct nfsclowner *owp, *lowp, *nowp;
 	struct nfsclopen *op, *lop;
 	struct nfscllockowner *lp;
 	struct nfscllock *lckp;
 	struct nfsnode *np;
-	int error = 0, ret, gotvp = 0;
+	int error = 0, ret;
 
 	if (vp == NULL) {
+		KASSERT(vpp != NULL, ("nfscl_recalldeleg: vpp NULL"));
+		*vpp = NULL;
 		/*
 		 * First, get a vnode for the file. This is needed to do RPCs.
 		 */
@@ -3966,7 +3986,7 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 			return (0);
 		}
 		vp = NFSTOV(np);
-		gotvp = 1;
+		*vpp = vp;
 	} else {
 		np = VTONFS(vp);
 	}
@@ -3993,8 +4013,6 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 		 * return now, so that the dirty buffer will be flushed
 		 * later.
 		 */
-		if (gotvp != 0)
-			vrele(vp);
 		return (ret);
 	}
 
@@ -4018,11 +4036,8 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 					    owp, dp, cred, p);
 					if (ret == NFSERR_STALECLIENTID ||
 					    ret == NFSERR_STALEDONTRECOVER ||
-					    ret == NFSERR_BADSESSION) {
-						if (gotvp)
-							vrele(vp);
+					    ret == NFSERR_BADSESSION)
 						return (ret);
-					}
 					if (ret) {
 						nfscl_freeopen(lop, 1);
 						if (!error)
@@ -4050,11 +4065,8 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 					nfscl_freeopenowner(owp, 0);
 					if (ret == NFSERR_STALECLIENTID ||
 					    ret == NFSERR_STALEDONTRECOVER ||
-					    ret == NFSERR_BADSESSION) {
-						if (gotvp)
-							vrele(vp);
+					    ret == NFSERR_BADSESSION)
 						return (ret);
-					}
 					if (ret) {
 						nfscl_freeopen(lop, 1);
 						if (!error)
@@ -4075,17 +4087,12 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 			if (ret == NFSERR_STALESTATEID ||
 			    ret == NFSERR_STALEDONTRECOVER ||
 			    ret == NFSERR_STALECLIENTID ||
-			    ret == NFSERR_BADSESSION) {
-				if (gotvp)
-					vrele(vp);
+			    ret == NFSERR_BADSESSION)
 				return (ret);
-			}
 			if (ret && !error)
 				error = ret;
 		}
 	}
-	if (gotvp)
-		vrele(vp);
 	return (error);
 }
 
@@ -4497,7 +4504,7 @@ nfscl_removedeleg(vnode_t vp, NFSPROC_T *p, nfsv4stateid_t *stp)
 			NFSUNLOCKCLSTATE();
 			cred = newnfs_getcred();
 			newnfs_copycred(&dp->nfsdl_cred, cred);
-			(void) nfscl_recalldeleg(clp, nmp, dp, vp, cred, p, 0);
+			nfscl_recalldeleg(clp, nmp, dp, vp, cred, p, 0, NULL);
 			NFSFREECRED(cred);
 			triedrecall = 1;
 			NFSLOCKCLSTATE();
@@ -4596,7 +4603,7 @@ nfscl_renamedeleg(vnode_t fvp, nfsv4stateid_t *fstp, int *gotfdp, vnode_t tvp,
 			NFSUNLOCKCLSTATE();
 			cred = newnfs_getcred();
 			newnfs_copycred(&dp->nfsdl_cred, cred);
-			(void) nfscl_recalldeleg(clp, nmp, dp, fvp, cred, p, 0);
+			nfscl_recalldeleg(clp, nmp, dp, fvp, cred, p, 0, NULL);
 			NFSFREECRED(cred);
 			triedrecall = 1;
 			NFSLOCKCLSTATE();

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 03:04:04 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 99316647D9D;
 Sun,  9 May 2021 03:04:04 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4Fd8Cm3zrRz4XdF;
 Sun,  9 May 2021 03:04:04 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7B93F1C78;
 Sun,  9 May 2021 03:04:04 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149344Xd069143;
 Sun, 9 May 2021 03:04:04 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149344dX069142;
 Sun, 9 May 2021 03:04:04 GMT (envelope-from git)
Date: Sun, 9 May 2021 03:04:04 GMT
Message-Id: <202105090304.149344dX069142@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Rick Macklem <rmacklem@FreeBSD.org>
Subject: git: 9223cea0795f - stable/12 - nfscl: fix delegation recall when the
 file is not open
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: rmacklem
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 9223cea0795f1ef2a5bb856908acc78416bbc966
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 03:04:04 -0000

The branch stable/12 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=9223cea0795f1ef2a5bb856908acc78416bbc966

commit 9223cea0795f1ef2a5bb856908acc78416bbc966
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-04-25 19:52:48 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-05-09 03:00:38 +0000

    nfscl: fix delegation recall when the file is not open
    
    Without this patch, if a NFSv4 server recalled a
    delegation when the file is not open, the renew
    thread would block in the NFS VOP_INACTIVE()
    trying to acquire the client state lock that it
    already holds.
    
    This patch fixes the problem by delaying the
    vrele() call until after the client state
    lock is released.
    
    This bug has been in the NFSv4 client for
    a long time, but since it only affects
    delegation when recalled due to another
    client opening the file, it got missed
    during previous testing.
    
    Until you have this patch in your client,
    you should avoid the use of delegations.
    
    (cherry picked from commit 02695ea8909d818ceaa726f90f889889dfd39fac)
---
 sys/fs/nfsclient/nfs_clstate.c | 53 ++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index 0cade3e4178a..03c046c36ccc 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -152,7 +152,8 @@ static void nfscl_freedeleg(struct nfscldeleghead *, struct nfscldeleg *);
 static int nfscl_errmap(struct nfsrv_descript *, u_int32_t);
 static void nfscl_cleanup_common(struct nfsclclient *, u_int8_t *);
 static int nfscl_recalldeleg(struct nfsclclient *, struct nfsmount *,
-    struct nfscldeleg *, vnode_t, struct ucred *, NFSPROC_T *, int);
+    struct nfscldeleg *, vnode_t, struct ucred *, NFSPROC_T *, int,
+    vnode_t *);
 static void nfscl_freeopenowner(struct nfsclowner *, int);
 static void nfscl_cleandeleg(struct nfscldeleg *);
 static int nfscl_trydelegreturn(struct nfscldeleg *, struct ucred *,
@@ -2532,6 +2533,7 @@ nfscl_renewthread(struct nfsclclient *clp, NFSPROC_T *p)
 	struct nfsclrecalllayout *recallp;
 	struct nfsclds *dsp;
 	struct mount *mp;
+	vnode_t vp;
 
 	cred = newnfs_getcred();
 	NFSLOCKCLSTATE();
@@ -2651,7 +2653,7 @@ tryagain:
 				NFSUNLOCKCLSTATE();
 				newnfs_copycred(&dp->nfsdl_cred, cred);
 				ret = nfscl_recalldeleg(clp, clp->nfsc_nmp, dp,
-				    NULL, cred, p, 1);
+				    NULL, cred, p, 1, &vp);
 				if (!ret) {
 				    nfscl_cleandeleg(dp);
 				    TAILQ_REMOVE(&clp->nfsc_deleg, dp,
@@ -2662,6 +2664,22 @@ tryagain:
 				    nfsstatsv1.cldelegates--;
 				}
 				NFSLOCKCLSTATE();
+				/*
+				 * The nfsc_lock must be released before doing
+				 * vrele(), since it might call nfs_inactive().
+				 * For the unlikely case where the vnode failed
+				 * to be acquired by nfscl_recalldeleg(), a
+				 * VOP_RECLAIM() should be in progress and it
+				 * will return the delegation.
+				 */
+				nfsv4_unlock(&clp->nfsc_lock, 0);
+				igotlock = 0;
+				if (vp != NULL) {
+					NFSUNLOCKCLSTATE();
+					vrele(vp);
+					NFSLOCKCLSTATE();
+				}
+				goto tryagain;
 			}
 			dp = ndp;
 		}
@@ -3906,16 +3924,18 @@ nfscl_lockt(vnode_t vp, struct nfsclclient *clp, u_int64_t off,
 static int
 nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
     struct nfscldeleg *dp, vnode_t vp, struct ucred *cred, NFSPROC_T *p,
-    int called_from_renewthread)
+    int called_from_renewthread, vnode_t *vpp)
 {
 	struct nfsclowner *owp, *lowp, *nowp;
 	struct nfsclopen *op, *lop;
 	struct nfscllockowner *lp;
 	struct nfscllock *lckp;
 	struct nfsnode *np;
-	int error = 0, ret, gotvp = 0;
+	int error = 0, ret;
 
 	if (vp == NULL) {
+		KASSERT(vpp != NULL, ("nfscl_recalldeleg: vpp NULL"));
+		*vpp = NULL;
 		/*
 		 * First, get a vnode for the file. This is needed to do RPCs.
 		 */
@@ -3929,7 +3949,7 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 			return (0);
 		}
 		vp = NFSTOV(np);
-		gotvp = 1;
+		*vpp = vp;
 	} else {
 		np = VTONFS(vp);
 	}
@@ -3956,8 +3976,6 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 		 * return now, so that the dirty buffer will be flushed
 		 * later.
 		 */
-		if (gotvp != 0)
-			vrele(vp);
 		return (ret);
 	}
 
@@ -3981,11 +3999,8 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 					    owp, dp, cred, p);
 					if (ret == NFSERR_STALECLIENTID ||
 					    ret == NFSERR_STALEDONTRECOVER ||
-					    ret == NFSERR_BADSESSION) {
-						if (gotvp)
-							vrele(vp);
+					    ret == NFSERR_BADSESSION)
 						return (ret);
-					}
 					if (ret) {
 						nfscl_freeopen(lop, 1);
 						if (!error)
@@ -4013,11 +4028,8 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 					nfscl_freeopenowner(owp, 0);
 					if (ret == NFSERR_STALECLIENTID ||
 					    ret == NFSERR_STALEDONTRECOVER ||
-					    ret == NFSERR_BADSESSION) {
-						if (gotvp)
-							vrele(vp);
+					    ret == NFSERR_BADSESSION)
 						return (ret);
-					}
 					if (ret) {
 						nfscl_freeopen(lop, 1);
 						if (!error)
@@ -4038,17 +4050,12 @@ nfscl_recalldeleg(struct nfsclclient *clp, struct nfsmount *nmp,
 			if (ret == NFSERR_STALESTATEID ||
 			    ret == NFSERR_STALEDONTRECOVER ||
 			    ret == NFSERR_STALECLIENTID ||
-			    ret == NFSERR_BADSESSION) {
-				if (gotvp)
-					vrele(vp);
+			    ret == NFSERR_BADSESSION)
 				return (ret);
-			}
 			if (ret && !error)
 				error = ret;
 		}
 	}
-	if (gotvp)
-		vrele(vp);
 	return (error);
 }
 
@@ -4460,7 +4467,7 @@ nfscl_removedeleg(vnode_t vp, NFSPROC_T *p, nfsv4stateid_t *stp)
 			NFSUNLOCKCLSTATE();
 			cred = newnfs_getcred();
 			newnfs_copycred(&dp->nfsdl_cred, cred);
-			(void) nfscl_recalldeleg(clp, nmp, dp, vp, cred, p, 0);
+			nfscl_recalldeleg(clp, nmp, dp, vp, cred, p, 0, NULL);
 			NFSFREECRED(cred);
 			triedrecall = 1;
 			NFSLOCKCLSTATE();
@@ -4559,7 +4566,7 @@ nfscl_renamedeleg(vnode_t fvp, nfsv4stateid_t *fstp, int *gotfdp, vnode_t tvp,
 			NFSUNLOCKCLSTATE();
 			cred = newnfs_getcred();
 			newnfs_copycred(&dp->nfsdl_cred, cred);
-			(void) nfscl_recalldeleg(clp, nmp, dp, fvp, cred, p, 0);
+			nfscl_recalldeleg(clp, nmp, dp, fvp, cred, p, 0, NULL);
 			NFSFREECRED(cred);
 			triedrecall = 1;
 			NFSLOCKCLSTATE();

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 12:35:19 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0E05963681A;
 Sun,  9 May 2021 12:35:19 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdNtt71xRz3F54;
 Sun,  9 May 2021 12:35:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E392011EF8;
 Sun,  9 May 2021 12:35:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149CZI2V022750;
 Sun, 9 May 2021 12:35:18 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149CZIKn022749;
 Sun, 9 May 2021 12:35:18 GMT (envelope-from git)
Date: Sun, 9 May 2021 12:35:18 GMT
Message-Id: <202105091235.149CZIKn022749@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 80b22e631506 - stable/13 - sbin/ipfw: Fix null pointer deference
 when printing counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 80b22e631506a3d6d783fa42424502d32d1f417f
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 12:35:19 -0000

The branch stable/13 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=80b22e631506a3d6d783fa42424502d32d1f417f

commit 80b22e631506a3d6d783fa42424502d32d1f417f
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-04-30 14:12:47 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 12:33:28 +0000

    sbin/ipfw: Fix null pointer deference when printing counters
    
    ipfw -[tT] prints statistics of the last access. If the rule was never
    used, the counter might be not exist.  This happens unconditionally on
    inserting a new rule.  Avoid printing statistics in this case.
    
    PR:     255491
    Reported by:    Haisheng Zhouz
    Reviewed by:    ae
    Differential Revision:  https://reviews.freebsd.org/D30046
    
    (cherry picked from commit bf7cc0f9cb6603a6bdd6131c8d1939724ce6e62d)
---
 sbin/ipfw/ipfw2.c | 51 +++++++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 24 deletions(-)

diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index 19f7f331091d..c17fbbca7dfa 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -2174,32 +2174,35 @@ show_static_rule(struct cmdline_opts *co, struct format_opts *fo,
 	}
 	bprintf(bp, "%05u ", rule->rulenum);
 
-	/* Print counters if enabled */
-	if (fo->pcwidth > 0 || fo->bcwidth > 0) {
-		pr_u64(bp, &cntr->pcnt, fo->pcwidth);
-		pr_u64(bp, &cntr->bcnt, fo->bcwidth);
-	}
-
-	/* Print timestamp */
-	if (co->do_time == TIMESTAMP_NUMERIC)
-		bprintf(bp, "%10u ", cntr->timestamp);
-	else if (co->do_time == TIMESTAMP_STRING) {
-		char timestr[30];
-		time_t t = (time_t)0;
-
-		if (twidth == 0) {
-			strcpy(timestr, ctime(&t));
-			*strchr(timestr, '\n') = '\0';
-			twidth = strlen(timestr);
+	/* only if counters are available */
+	if (cntr != NULL) {
+		/* Print counters if enabled */
+		if (fo->pcwidth > 0 || fo->bcwidth > 0) {
+			pr_u64(bp, &cntr->pcnt, fo->pcwidth);
+			pr_u64(bp, &cntr->bcnt, fo->bcwidth);
 		}
-		if (cntr->timestamp > 0) {
-			t = _long_to_time(cntr->timestamp);
 
-			strcpy(timestr, ctime(&t));
-			*strchr(timestr, '\n') = '\0';
-			bprintf(bp, "%s ", timestr);
-		} else {
-			bprintf(bp, "%*s ", twidth, "");
+		/* Print timestamp */
+		if (co->do_time == TIMESTAMP_NUMERIC)
+			bprintf(bp, "%10u ", cntr->timestamp);
+		else if (co->do_time == TIMESTAMP_STRING) {
+			char timestr[30];
+			time_t t = (time_t)0;
+
+			if (twidth == 0) {
+				strcpy(timestr, ctime(&t));
+				*strchr(timestr, '\n') = '\0';
+				twidth = strlen(timestr);
+			}
+			if (cntr->timestamp > 0) {
+				t = _long_to_time(cntr->timestamp);
+
+				strcpy(timestr, ctime(&t));
+				*strchr(timestr, '\n') = '\0';
+				bprintf(bp, "%s ", timestr);
+			} else {
+				bprintf(bp, "%*s ", twidth, "");
+			}
 		}
 	}
 

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 12:51:03 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 52148636BC8;
 Sun,  9 May 2021 12:51:03 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdPF31wN1z3FYs;
 Sun,  9 May 2021 12:51:03 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 34FBF11DE8;
 Sun,  9 May 2021 12:51:03 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149Cp3UN045086;
 Sun, 9 May 2021 12:51:03 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149Cp3R3045085;
 Sun, 9 May 2021 12:51:03 GMT (envelope-from git)
Date: Sun, 9 May 2021 12:51:03 GMT
Message-Id: <202105091251.149Cp3R3045085@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: b1902474a7c5 - stable/12 - sbin/ipfw: Fix null pointer deference
 when printing counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: b1902474a7c51e025d734e8233f0e850291b92e7
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 12:51:03 -0000

The branch stable/12 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=b1902474a7c51e025d734e8233f0e850291b92e7

commit b1902474a7c51e025d734e8233f0e850291b92e7
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-05-09 12:48:47 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 12:48:47 +0000

    sbin/ipfw: Fix null pointer deference when printing counters
    
    ipfw -[tT] prints statistics of the last access. If the rule was never
    used, the counter might be not exist.  This happens unconditionally on
    inserting a new rule.  Avoid printing statistics in this case.
    
    PR:             255491
    Reported by:    Haisheng Zhouz
    Reviewed by:    ae
    Differential Revision:  https://reviews.freebsd.org/D30046
    
    (cherry picked from commit bf7cc0f9cb6603a6bdd6131c8d1939724ce6e62d)
---
 sbin/ipfw/ipfw2.c | 51 +++++++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 24 deletions(-)

diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index 30a4da92343f..efb29403b6c9 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -2174,32 +2174,35 @@ show_static_rule(struct cmdline_opts *co, struct format_opts *fo,
 	}
 	bprintf(bp, "%05u ", rule->rulenum);
 
-	/* Print counters if enabled */
-	if (fo->pcwidth > 0 || fo->bcwidth > 0) {
-		pr_u64(bp, &cntr->pcnt, fo->pcwidth);
-		pr_u64(bp, &cntr->bcnt, fo->bcwidth);
-	}
-
-	/* Print timestamp */
-	if (co->do_time == TIMESTAMP_NUMERIC)
-		bprintf(bp, "%10u ", cntr->timestamp);
-	else if (co->do_time == TIMESTAMP_STRING) {
-		char timestr[30];
-		time_t t = (time_t)0;
-
-		if (twidth == 0) {
-			strcpy(timestr, ctime(&t));
-			*strchr(timestr, '\n') = '\0';
-			twidth = strlen(timestr);
+	/* only if counters are available */
+	if (cntr != NULL) {
+		/* Print counters if enabled */
+		if (fo->pcwidth > 0 || fo->bcwidth > 0) {
+			pr_u64(bp, &cntr->pcnt, fo->pcwidth);
+			pr_u64(bp, &cntr->bcnt, fo->bcwidth);
 		}
-		if (cntr->timestamp > 0) {
-			t = _long_to_time(cntr->timestamp);
 
-			strcpy(timestr, ctime(&t));
-			*strchr(timestr, '\n') = '\0';
-			bprintf(bp, "%s ", timestr);
-		} else {
-			bprintf(bp, "%*s", twidth + 1, " ");
+		/* Print timestamp */
+		if (co->do_time == TIMESTAMP_NUMERIC)
+			bprintf(bp, "%10u ", cntr->timestamp);
+		else if (co->do_time == TIMESTAMP_STRING) {
+			char timestr[30];
+			time_t t = (time_t)0;
+
+			if (twidth == 0) {
+				strcpy(timestr, ctime(&t));
+				*strchr(timestr, '\n') = '\0';
+				twidth = strlen(timestr);
+			}
+			if (cntr->timestamp > 0) {
+				t = _long_to_time(cntr->timestamp);
+
+				strcpy(timestr, ctime(&t));
+				*strchr(timestr, '\n') = '\0';
+				bprintf(bp, "%s ", timestr);
+			} else {
+				bprintf(bp, "%*s", twidth + 1, " ");
+			}
 		}
 	}
 

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 12:58:41 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id A9B0D637084;
 Sun,  9 May 2021 12:58:41 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdPPs4PvHz3FVq;
 Sun,  9 May 2021 12:58:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7B58B12063;
 Sun,  9 May 2021 12:58:41 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149CwfJH048937;
 Sun, 9 May 2021 12:58:41 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149CwfB2048936;
 Sun, 9 May 2021 12:58:41 GMT (envelope-from git)
Date: Sun, 9 May 2021 12:58:41 GMT
Message-Id: <202105091258.149CwfB2048936@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 552885bde600 - stable/11 - ^sbin/ipfw: Fix null pointer
 deference when printing counters
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/11
X-Git-Reftype: branch
X-Git-Commit: 552885bde60021ed6f1db46a95f9fb2557cbe1b6
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 12:58:41 -0000

The branch stable/11 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=552885bde60021ed6f1db46a95f9fb2557cbe1b6

commit 552885bde60021ed6f1db46a95f9fb2557cbe1b6
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-05-09 12:56:40 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 12:56:40 +0000

    ^sbin/ipfw: Fix null pointer deference when printing counters
    
    ipfw -[tT] prints statistics of the last access. If the rule was never
    used, the counter might be not exist.  This happens unconditionally on
    inserting a new rule.  Avoid printing statistics in this case.
    
    PR:             255491
    Reported by:    Haisheng Zhouz
    Reviewed by:    ae
    Differential Revision:  https://reviews.freebsd.org/D30046
    
    (cherry picked from commit bf7cc0f9cb6603a6bdd6131c8d1939724ce6e62d)
---
 sbin/ipfw/ipfw2.c | 51 +++++++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 24 deletions(-)

diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index 700b64f9c2bb..f451f8bedcaf 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -2157,32 +2157,35 @@ show_static_rule(struct cmdline_opts *co, struct format_opts *fo,
 	}
 	bprintf(bp, "%05u ", rule->rulenum);
 
-	/* Print counters if enabled */
-	if (fo->pcwidth > 0 || fo->bcwidth > 0) {
-		pr_u64(bp, &cntr->pcnt, fo->pcwidth);
-		pr_u64(bp, &cntr->bcnt, fo->bcwidth);
-	}
-
-	/* Print timestamp */
-	if (co->do_time == TIMESTAMP_NUMERIC)
-		bprintf(bp, "%10u ", cntr->timestamp);
-	else if (co->do_time == TIMESTAMP_STRING) {
-		char timestr[30];
-		time_t t = (time_t)0;
-
-		if (twidth == 0) {
-			strcpy(timestr, ctime(&t));
-			*strchr(timestr, '\n') = '\0';
-			twidth = strlen(timestr);
+	/* only if counters are available */
+	if (cntr != NULL) {
+		/* Print counters if enabled */
+		if (fo->pcwidth > 0 || fo->bcwidth > 0) {
+			pr_u64(bp, &cntr->pcnt, fo->pcwidth);
+			pr_u64(bp, &cntr->bcnt, fo->bcwidth);
 		}
-		if (cntr->timestamp > 0) {
-			t = _long_to_time(cntr->timestamp);
 
-			strcpy(timestr, ctime(&t));
-			*strchr(timestr, '\n') = '\0';
-			bprintf(bp, "%s ", timestr);
-		} else {
-			bprintf(bp, "%*s", twidth, " ");
+		/* Print timestamp */
+		if (co->do_time == TIMESTAMP_NUMERIC)
+			bprintf(bp, "%10u ", cntr->timestamp);
+		else if (co->do_time == TIMESTAMP_STRING) {
+			char timestr[30];
+			time_t t = (time_t)0;
+
+			if (twidth == 0) {
+				strcpy(timestr, ctime(&t));
+				*strchr(timestr, '\n') = '\0';
+				twidth = strlen(timestr);
+			}
+			if (cntr->timestamp > 0) {
+				t = _long_to_time(cntr->timestamp);
+
+				strcpy(timestr, ctime(&t));
+				*strchr(timestr, '\n') = '\0';
+				bprintf(bp, "%s ", timestr);
+			} else {
+				bprintf(bp, "%*s", twidth, " ");
+			}
 		}
 	}
 

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:22:13 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id A252263745A;
 Sun,  9 May 2021 13:22:13 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdPx14GYQz3GdM;
 Sun,  9 May 2021 13:22:13 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8518C12839;
 Sun,  9 May 2021 13:22:13 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DMDfF088526;
 Sun, 9 May 2021 13:22:13 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DMDxO088525;
 Sun, 9 May 2021 13:22:13 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:22:13 GMT
Message-Id: <202105091322.149DMDxO088525@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 0d8ba15a0e9d - stable/11 - netgraph/ng_base: Allow larger
 BINARY2ASCII conversions
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/11
X-Git-Reftype: branch
X-Git-Commit: 0d8ba15a0e9dbb5928d0fd89011417b707f7a366
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:22:13 -0000

The branch stable/11 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=0d8ba15a0e9dbb5928d0fd89011417b707f7a366

commit 0d8ba15a0e9dbb5928d0fd89011417b707f7a366
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-02-07 21:07:34 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:20:48 +0000

    netgraph/ng_base: Allow larger BINARY2ASCII conversions
    
    Allocate the necessary memory for the conversion dynamically starting
    with a value which is sufficient for almost all normal cases.
    
    PR:             187835
    Reviewed by:    kp
    Differential Revision: https://reviews.freebsd.org/D23840
    
    (cherry picked from commit 45d75e3ac3fb5bf8230ca28dc09b48c6e5ed7a4f)
---
 sys/netgraph/ng_base.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index 15a78119eccb..065a539a7eec 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -2771,7 +2771,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 
 	case NGM_BINARY2ASCII:
 	    {
-		int bufSize = 20 * 1024;	/* XXX hard coded constant */
+		int bufSize = 1024;
 		const struct ng_parse_type *argstype;
 		const struct ng_cmdlist *c;
 		struct ng_mesg *binary, *ascii;
@@ -2785,7 +2785,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 			error = EINVAL;
 			break;
 		}
-
+retry_b2a:
 		/* Get a response message with lots of room */
 		NG_MKRESPONSE(resp, msg, sizeof(*ascii) + bufSize, M_NOWAIT);
 		if (resp == NULL) {
@@ -2827,9 +2827,13 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 		if (argstype == NULL) {
 			*ascii->data = '\0';
 		} else {
-			if ((error = ng_unparse(argstype,
-			    (u_char *)binary->data,
-			    ascii->data, bufSize)) != 0) {
+			error = ng_unparse(argstype, (u_char *)binary->data,
+			    ascii->data, bufSize);
+			if (error == ERANGE) {
+				NG_FREE_MSG(resp);
+				bufSize *= 2;
+				goto retry_b2a;
+			} else if (error) {
 				NG_FREE_MSG(resp);
 				break;
 			}

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:23:54 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5CF89637860;
 Sun,  9 May 2021 13:23:54 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdPyy2Bq8z3H3L;
 Sun,  9 May 2021 13:23:54 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3E6F7127E9;
 Sun,  9 May 2021 13:23:54 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DNsN2088747;
 Sun, 9 May 2021 13:23:54 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DNsGJ088746;
 Sun, 9 May 2021 13:23:54 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:23:54 GMT
Message-Id: <202105091323.149DNsGJ088746@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: e1caa707fee0 - stable/12 - netgraph/ng_base: Allow larger
 BINARY2ASCII conversions
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: e1caa707fee06d00a0e6ba0445d734e748721d77
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:23:54 -0000

The branch stable/12 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=e1caa707fee06d00a0e6ba0445d734e748721d77

commit e1caa707fee06d00a0e6ba0445d734e748721d77
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-02-07 21:07:34 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:23:19 +0000

    netgraph/ng_base: Allow larger BINARY2ASCII conversions
    
    Allocate the necessary memory for the conversion dynamically starting
    with a value which is sufficient for almost all normal cases.
    
    PR:             187835
    Reviewed by:    kp
    Differential Revision: https://reviews.freebsd.org/D23840
    
    (cherry picked from commit 45d75e3ac3fb5bf8230ca28dc09b48c6e5ed7a4f)
---
 sys/netgraph/ng_base.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index 271397f669be..4c6a2f606119 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -2771,7 +2771,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 
 	case NGM_BINARY2ASCII:
 	    {
-		int bufSize = 20 * 1024;	/* XXX hard coded constant */
+		int bufSize = 1024;
 		const struct ng_parse_type *argstype;
 		const struct ng_cmdlist *c;
 		struct ng_mesg *binary, *ascii;
@@ -2785,7 +2785,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 			error = EINVAL;
 			break;
 		}
-
+retry_b2a:
 		/* Get a response message with lots of room */
 		NG_MKRESPONSE(resp, msg, sizeof(*ascii) + bufSize, M_NOWAIT);
 		if (resp == NULL) {
@@ -2827,9 +2827,13 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 		if (argstype == NULL) {
 			*ascii->data = '\0';
 		} else {
-			if ((error = ng_unparse(argstype,
-			    (u_char *)binary->data,
-			    ascii->data, bufSize)) != 0) {
+			error = ng_unparse(argstype, (u_char *)binary->data,
+			    ascii->data, bufSize);
+			if (error == ERANGE) {
+				NG_FREE_MSG(resp);
+				bufSize *= 2;
+				goto retry_b2a;
+			} else if (error) {
 				NG_FREE_MSG(resp);
 				break;
 			}

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:25:35 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id B88FC637C1D;
 Sun,  9 May 2021 13:25:35 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdQ0v4vJjz3H46;
 Sun,  9 May 2021 13:25:35 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9A81412986;
 Sun,  9 May 2021 13:25:35 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DPZYu088980;
 Sun, 9 May 2021 13:25:35 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DPZ09088979;
 Sun, 9 May 2021 13:25:35 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:25:35 GMT
Message-Id: <202105091325.149DPZ09088979@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 2b3074de3353 - stable/13 - netgraph/ng_base: Allow larger
 BINARY2ASCII conversions
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/13
X-Git-Reftype: branch
X-Git-Commit: 2b3074de33533f2703707c9b1c5e50a98621fdd1
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:25:35 -0000

The branch stable/13 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=2b3074de33533f2703707c9b1c5e50a98621fdd1

commit 2b3074de33533f2703707c9b1c5e50a98621fdd1
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-02-07 21:07:34 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:25:05 +0000

    netgraph/ng_base: Allow larger BINARY2ASCII conversions
    
    Allocate the necessary memory for the conversion dynamically starting
    with a value which is sufficient for almost all normal cases.
    
    PR:             187835
    Reviewed by:    kp
    Differential Revision: https://reviews.freebsd.org/D23840
    
    (cherry picked from commit 45d75e3ac3fb5bf8230ca28dc09b48c6e5ed7a4f)
---
 sys/netgraph/ng_base.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index 6ab39421b255..63bc251f52f9 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -2771,7 +2771,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 
 	case NGM_BINARY2ASCII:
 	    {
-		int bufSize = 20 * 1024;	/* XXX hard coded constant */
+		int bufSize = 1024;
 		const struct ng_parse_type *argstype;
 		const struct ng_cmdlist *c;
 		struct ng_mesg *binary, *ascii;
@@ -2785,7 +2785,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 			error = EINVAL;
 			break;
 		}
-
+retry_b2a:
 		/* Get a response message with lots of room */
 		NG_MKRESPONSE(resp, msg, sizeof(*ascii) + bufSize, M_NOWAIT);
 		if (resp == NULL) {
@@ -2827,9 +2827,13 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
 		if (argstype == NULL) {
 			*ascii->data = '\0';
 		} else {
-			if ((error = ng_unparse(argstype,
-			    (u_char *)binary->data,
-			    ascii->data, bufSize)) != 0) {
+			error = ng_unparse(argstype, (u_char *)binary->data,
+			    ascii->data, bufSize);
+			if (error == ERANGE) {
+				NG_FREE_MSG(resp);
+				bufSize *= 2;
+				goto retry_b2a;
+			} else if (error) {
 				NG_FREE_MSG(resp);
 				break;
 			}

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:43:18 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3927A638712;
 Sun,  9 May 2021 13:43:18 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdQPL18lHz3J6l;
 Sun,  9 May 2021 13:43:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1A98C12BD1;
 Sun,  9 May 2021 13:43:18 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DhIVB014801;
 Sun, 9 May 2021 13:43:18 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DhHGq014800;
 Sun, 9 May 2021 13:43:17 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:43:17 GMT
Message-Id: <202105091343.149DhHGq014800@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 16ed32cc4b02 - stable/12 - netgraph/ng_source: If queue is full,
 don't enqueue
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 16ed32cc4b021e0a80635efe7cb617c9a538cff1
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:43:18 -0000

The branch stable/12 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=16ed32cc4b021e0a80635efe7cb617c9a538cff1

commit 16ed32cc4b021e0a80635efe7cb617c9a538cff1
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-01-23 17:54:47 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:42:39 +0000

    netgraph/ng_source: If queue is full, don't enqueue
    
    Submitted by: nc
    Reviewed by: donner, kp
    Differential Revision: https://reviews.freebsd.org/D23477
    
    (cherry picked from commit d7dd28bb09fa51b9958a5dc288d2aeef56a67491)
---
 sys/netgraph/ng_source.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/sys/netgraph/ng_source.c b/sys/netgraph/ng_source.c
index 401548da65d0..4bde62e5898a 100644
--- a/sys/netgraph/ng_source.c
+++ b/sys/netgraph/ng_source.c
@@ -284,7 +284,7 @@ ng_source_constructor(node_p node)
 
 	NG_NODE_SET_PRIVATE(node, sc);
 	sc->node = node;
-	sc->snd_queue.ifq_maxlen = 2048;	/* XXX not checked */
+	sc->snd_queue.ifq_maxlen = 2048;
 	ng_callout_init(&sc->intr_ch);
 
 	return (0);
@@ -567,8 +567,11 @@ ng_source_rcvdata(hook_p hook, item_p item)
 	}
 	KASSERT(hook == sc->input, ("%s: no hook!", __func__));
 
-	/* Enqueue packet. */
-	/* XXX should we check IF_QFULL() ? */
+	/* Enqueue packet if the queue isn't full. */
+	if (_IF_QFULL(&sc->snd_queue)) {
+		NG_FREE_M(m);
+		return (ENOBUFS);
+	}
 	_IF_ENQUEUE(&sc->snd_queue, m);
 	sc->queueOctets += m->m_pkthdr.len;
 	sc->last_packet = m;

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:43:19 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 65E0C6386AE;
 Sun,  9 May 2021 13:43:19 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdQPM2LqBz3J37;
 Sun,  9 May 2021 13:43:19 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3785612D6E;
 Sun,  9 May 2021 13:43:19 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DhJES014831;
 Sun, 9 May 2021 13:43:19 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DhJ3s014830;
 Sun, 9 May 2021 13:43:19 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:43:19 GMT
Message-Id: <202105091343.149DhJ3s014830@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 44483189cb49 - stable/12 - netgraph/ng_source: Switch queuing
 framework
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: 44483189cb499029bee5f5560f0bf654e0c14ad7
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:43:19 -0000

The branch stable/12 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=44483189cb499029bee5f5560f0bf654e0c14ad7

commit 44483189cb499029bee5f5560f0bf654e0c14ad7
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-01-29 11:03:17 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:42:49 +0000

    netgraph/ng_source: Switch queuing framework
    
    Change the queuing framework from ifq to mbufq.
    
    Reported by:    glebius
    Reviewed by:    glebius, kp
    Differential Revision: https://reviews.freebsd.org/D28407
    
    (cherry picked from commit ebc61c86b5567f2e5a3c5f452e86879b558b376b)
---
 sys/netgraph/ng_source.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/sys/netgraph/ng_source.c b/sys/netgraph/ng_source.c
index 4bde62e5898a..0eee9ceb25c5 100644
--- a/sys/netgraph/ng_source.c
+++ b/sys/netgraph/ng_source.c
@@ -85,7 +85,7 @@ struct privdata {
 	hook_p				input;
 	hook_p				output;
 	struct ng_source_stats		stats;
-	struct ifqueue			snd_queue;	/* packets to send */
+	struct mbufq			snd_queue;	/* packets to send */
 	struct mbuf			*last_packet;	/* last pkt in queue */
 	struct ifnet			*output_ifp;
 	struct callout			intr_ch;
@@ -284,7 +284,7 @@ ng_source_constructor(node_p node)
 
 	NG_NODE_SET_PRIVATE(node, sc);
 	sc->node = node;
-	sc->snd_queue.ifq_maxlen = 2048;
+	mbufq_init(&sc->snd_queue, 2048);
 	ng_callout_init(&sc->intr_ch);
 
 	return (0);
@@ -374,7 +374,7 @@ ng_source_rcvmsg(node_p node, item_p item, hook_p lasthook)
 					goto done;
 				}
 				sc->stats.queueOctets = sc->queueOctets;
-				sc->stats.queueFrames = sc->snd_queue.ifq_len;
+				sc->stats.queueFrames = mbufq_len(&sc->snd_queue);
 				if ((sc->node->nd_flags & NG_SOURCE_ACTIVE)
 				    && !timevalisset(&sc->stats.endTime)) {
 					getmicrotime(&sc->stats.elapsedTime);
@@ -568,11 +568,11 @@ ng_source_rcvdata(hook_p hook, item_p item)
 	KASSERT(hook == sc->input, ("%s: no hook!", __func__));
 
 	/* Enqueue packet if the queue isn't full. */
-	if (_IF_QFULL(&sc->snd_queue)) {
+	error = mbufq_enqueue(&sc->snd_queue, m);
+	if (error) {
 		NG_FREE_M(m);
-		return (ENOBUFS);
+		return (error);
 	}
-	_IF_ENQUEUE(&sc->snd_queue, m);
 	sc->queueOctets += m->m_pkthdr.len;
 	sc->last_packet = m;
 
@@ -671,7 +671,7 @@ ng_source_clr_data (sc_p sc)
 	struct mbuf *m;
 
 	for (;;) {
-		_IF_DEQUEUE(&sc->snd_queue, m);
+		m =  mbufq_dequeue(&sc->snd_queue);
 		if (m == NULL)
 			break;
 		NG_FREE_M(m);
@@ -744,7 +744,7 @@ ng_source_intr(node_p node, hook_p hook, void *arg1, int arg2)
 		ifq = (struct ifqueue *)&sc->output_ifp->if_snd;
 		packets = ifq->ifq_maxlen - ifq->ifq_len;
 	} else
-		packets = sc->snd_queue.ifq_len;
+		packets = mbufq_len(&sc->snd_queue);
 
 	if (sc->stats.maxPps != 0) {
 		struct timeval	now, elapsed;
@@ -788,7 +788,7 @@ ng_source_send(sc_p sc, int tosend, int *sent_p)
 
 	/* Go through the queue sending packets one by one. */
 	for (sent = 0; error == 0 && sent < tosend; ++sent) {
-		_IF_DEQUEUE(&sc->snd_queue, m);
+		m = mbufq_dequeue(&sc->snd_queue);
 		if (m == NULL)
 			break;
 
@@ -796,14 +796,20 @@ ng_source_send(sc_p sc, int tosend, int *sent_p)
 		error = ng_source_dup_mod(sc, m, &m2);
 		if (error) {
 			if (error == ENOBUFS)
-				_IF_PREPEND(&sc->snd_queue, m);
+				mbufq_prepend(&sc->snd_queue, m);
 			else
-				_IF_ENQUEUE(&sc->snd_queue, m);
+				(void)mbufq_enqueue(&sc->snd_queue, m);
 			break;
 		}
 
-		/* Re-enqueue the original packet for us. */
-		_IF_ENQUEUE(&sc->snd_queue, m);
+		/*
+		 * Re-enqueue the original packet for us.  The queue
+		 * has a free slot, because we dequeued the packet
+		 * above and this callout function runs under WRITER
+		 * lock.
+		 */
+		error = mbufq_enqueue(&sc->snd_queue, m);
+		KASSERT(error == 0, ("%s: re-enqueue packet failed", __func__));
 
 		sc->stats.outFrames++;
 		sc->stats.outOctets += m2->m_pkthdr.len;

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:46:14 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id E17A5638822;
 Sun,  9 May 2021 13:46:14 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdQSk635Rz3JB6;
 Sun,  9 May 2021 13:46:14 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C1A1112CB1;
 Sun,  9 May 2021 13:46:14 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DkEaA015310;
 Sun, 9 May 2021 13:46:14 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DkE6l015309;
 Sun, 9 May 2021 13:46:14 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:46:14 GMT
Message-Id: <202105091346.149DkE6l015309@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: 3da0d11afe08 - stable/11 - netgraph/ng_source: If queue is full,
 don't enqueue
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/11
X-Git-Reftype: branch
X-Git-Commit: 3da0d11afe0807ccbbb9f447e6c814dce654d71d
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:46:14 -0000

The branch stable/11 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=3da0d11afe0807ccbbb9f447e6c814dce654d71d

commit 3da0d11afe0807ccbbb9f447e6c814dce654d71d
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-01-23 17:54:47 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:45:07 +0000

    netgraph/ng_source: If queue is full, don't enqueue
    
    Submitted by: nc
    Reviewed by: donner, kp
    Differential Revision: https://reviews.freebsd.org/D23477
    
    (cherry picked from commit d7dd28bb09fa51b9958a5dc288d2aeef56a67491)
---
 sys/netgraph/ng_source.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/sys/netgraph/ng_source.c b/sys/netgraph/ng_source.c
index da8f42381ac3..8d1d05b5673f 100644
--- a/sys/netgraph/ng_source.c
+++ b/sys/netgraph/ng_source.c
@@ -284,7 +284,7 @@ ng_source_constructor(node_p node)
 
 	NG_NODE_SET_PRIVATE(node, sc);
 	sc->node = node;
-	sc->snd_queue.ifq_maxlen = 2048;	/* XXX not checked */
+	sc->snd_queue.ifq_maxlen = 2048;
 	ng_callout_init(&sc->intr_ch);
 
 	return (0);
@@ -567,8 +567,11 @@ ng_source_rcvdata(hook_p hook, item_p item)
 	}
 	KASSERT(hook == sc->input, ("%s: no hook!", __func__));
 
-	/* Enqueue packet. */
-	/* XXX should we check IF_QFULL() ? */
+	/* Enqueue packet if the queue isn't full. */
+	if (_IF_QFULL(&sc->snd_queue)) {
+		NG_FREE_M(m);
+		return (ENOBUFS);
+	}
 	_IF_ENQUEUE(&sc->snd_queue, m);
 	sc->queueOctets += m->m_pkthdr.len;
 	sc->last_packet = m;

From owner-dev-commits-src-branches@freebsd.org  Sun May  9 13:46:16 2021
Return-Path: <owner-dev-commits-src-branches@freebsd.org>
Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3CE666386D6;
 Sun,  9 May 2021 13:46:16 +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 "R3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 4FdQSm0jfNz3Hvw;
 Sun,  9 May 2021 13:46:16 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:5])
 (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 did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 06AC112BD2;
 Sun,  9 May 2021 13:46:16 +0000 (UTC) (envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
 by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 149DkFIs015331;
 Sun, 9 May 2021 13:46:15 GMT (envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
 by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 149DkFmI015330;
 Sun, 9 May 2021 13:46:15 GMT (envelope-from git)
Date: Sun, 9 May 2021 13:46:15 GMT
Message-Id: <202105091346.149DkFmI015330@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
 dev-commits-src-branches@FreeBSD.org
From: Lutz Donnerhacke <donner@FreeBSD.org>
Subject: git: bfb3c2b8b991 - stable/11 - netgraph/ng_source: Switch queuing
 framework
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: donner
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/11
X-Git-Reftype: branch
X-Git-Commit: bfb3c2b8b991eda618f22efbff2f046d572c2d3e
Auto-Submitted: auto-generated
X-BeenThere: dev-commits-src-branches@freebsd.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Commits to the stable branches of the FreeBSD src repository
 <dev-commits-src-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/dev-commits-src-branches/>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Help: <mailto:dev-commits-src-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/dev-commits-src-branches>, 
 <mailto:dev-commits-src-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 09 May 2021 13:46:16 -0000

The branch stable/11 has been updated by donner:

URL: https://cgit.FreeBSD.org/src/commit/?id=bfb3c2b8b991eda618f22efbff2f046d572c2d3e

commit bfb3c2b8b991eda618f22efbff2f046d572c2d3e
Author:     Lutz Donnerhacke <donner@FreeBSD.org>
AuthorDate: 2021-01-29 11:03:17 +0000
Commit:     Lutz Donnerhacke <donner@FreeBSD.org>
CommitDate: 2021-05-09 13:45:28 +0000

    netgraph/ng_source: Switch queuing framework
    
    Change the queuing framework from ifq to mbufq.
    
    Reported by:    glebius
    Reviewed by:    glebius, kp
    Differential Revision: https://reviews.freebsd.org/D28407
    
    (cherry picked from commit ebc61c86b5567f2e5a3c5f452e86879b558b376b)
---
 sys/netgraph/ng_source.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/sys/netgraph/ng_source.c b/sys/netgraph/ng_source.c
index 8d1d05b5673f..b7415f8e4bb8 100644
--- a/sys/netgraph/ng_source.c
+++ b/sys/netgraph/ng_source.c
@@ -85,7 +85,7 @@ struct privdata {
 	hook_p				input;
 	hook_p				output;
 	struct ng_source_stats		stats;
-	struct ifqueue			snd_queue;	/* packets to send */
+	struct mbufq			snd_queue;	/* packets to send */
 	struct mbuf			*last_packet;	/* last pkt in queue */
 	struct ifnet			*output_ifp;
 	struct callout			intr_ch;
@@ -284,7 +284,7 @@ ng_source_constructor(node_p node)
 
 	NG_NODE_SET_PRIVATE(node, sc);
 	sc->node = node;
-	sc->snd_queue.ifq_maxlen = 2048;
+	mbufq_init(&sc->snd_queue, 2048);
 	ng_callout_init(&sc->intr_ch);
 
 	return (0);
@@ -374,7 +374,7 @@ ng_source_rcvmsg(node_p node, item_p item, hook_p lasthook)
 					goto done;
 				}
 				sc->stats.queueOctets = sc->queueOctets;
-				sc->stats.queueFrames = sc->snd_queue.ifq_len;
+				sc->stats.queueFrames = mbufq_len(&sc->snd_queue);
 				if ((sc->node->nd_flags & NG_SOURCE_ACTIVE)
 				    && !timevalisset(&sc->stats.endTime)) {
 					getmicrotime(&sc->stats.elapsedTime);
@@ -568,11 +568,11 @@ ng_source_rcvdata(hook_p hook, item_p item)
 	KASSERT(hook == sc->input, ("%s: no hook!", __func__));
 
 	/* Enqueue packet if the queue isn't full. */
-	if (_IF_QFULL(&sc->snd_queue)) {
+	error = mbufq_enqueue(&sc->snd_queue, m);
+	if (error) {
 		NG_FREE_M(m);
-		return (ENOBUFS);
+		return (error);
 	}
-	_IF_ENQUEUE(&sc->snd_queue, m);
 	sc->queueOctets += m->m_pkthdr.len;
 	sc->last_packet = m;
 
@@ -671,7 +671,7 @@ ng_source_clr_data (sc_p sc)
 	struct mbuf *m;
 
 	for (;;) {
-		_IF_DEQUEUE(&sc->snd_queue, m);
+		m =  mbufq_dequeue(&sc->snd_queue);
 		if (m == NULL)
 			break;
 		NG_FREE_M(m);
@@ -744,7 +744,7 @@ ng_source_intr(node_p node, hook_p hook, void *arg1, int arg2)
 		ifq = (struct ifqueue *)&sc->output_ifp->if_snd;
 		packets = ifq->ifq_maxlen - ifq->ifq_len;
 	} else
-		packets = sc->snd_queue.ifq_len;
+		packets = mbufq_len(&sc->snd_queue);
 
 	if (sc->stats.maxPps != 0) {
 		struct timeval	now, elapsed;
@@ -788,7 +788,7 @@ ng_source_send(sc_p sc, int tosend, int *sent_p)
 
 	/* Go through the queue sending packets one by one. */
 	for (sent = 0; error == 0 && sent < tosend; ++sent) {
-		_IF_DEQUEUE(&sc->snd_queue, m);
+		m = mbufq_dequeue(&sc->snd_queue);
 		if (m == NULL)
 			break;
 
@@ -796,14 +796,20 @@ ng_source_send(sc_p sc, int tosend, int *sent_p)
 		error = ng_source_dup_mod(sc, m, &m2);
 		if (error) {
 			if (error == ENOBUFS)
-				_IF_PREPEND(&sc->snd_queue, m);
+				mbufq_prepend(&sc->snd_queue, m);
 			else
-				_IF_ENQUEUE(&sc->snd_queue, m);
+				(void)mbufq_enqueue(&sc->snd_queue, m);
 			break;
 		}
 
-		/* Re-enqueue the original packet for us. */
-		_IF_ENQUEUE(&sc->snd_queue, m);
+		/*
+		 * Re-enqueue the original packet for us.  The queue
+		 * has a free slot, because we dequeued the packet
+		 * above and this callout function runs under WRITER
+		 * lock.
+		 */
+		error = mbufq_enqueue(&sc->snd_queue, m);
+		KASSERT(error == 0, ("%s: re-enqueue packet failed", __func__));
 
 		sc->stats.outFrames++;
 		sc->stats.outOctets += m2->m_pkthdr.len;