git: 8d83b10345da - main - New version of jng (9.1)

From: Devin Teske <dteske_at_FreeBSD.org>
Date: Thu, 20 Aug 2026 04:41:37 UTC
The branch main has been updated by dteske:

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

commit 8d83b10345da101e4a24a38c90d99a0df0f48b3b
Author:     Devin Teske <dteske@FreeBSD.org>
AuthorDate: 2026-08-20 04:39:23 +0000
Commit:     Devin Teske <dteske@FreeBSD.org>
CommitDate: 2026-08-20 04:39:34 +0000

    New version of jng (9.1)
    
    Update examples and comments to return eifaces in exec.prestop
    with ifconfig -vnet (before jng shutdown in poststop).
    
    Reported by:    jlduran
    PR:             268397
    MFC after:      1 week
    Reviewed by:    kfv, jlduran
    Differential Revision:  https://reviews.freebsd.org/D58939
---
 share/examples/jails/jail.xxx.conf   |  3 ++-
 share/examples/jails/jng             | 18 ++++++++++++------
 share/examples/jails/rc.conf.jails   |  2 ++
 share/examples/jails/rcjail.xxx.conf |  3 ++-
 4 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/share/examples/jails/jail.xxx.conf b/share/examples/jails/jail.xxx.conf
index 8ada4aa0dd9d..a007ba51c87d 100644
--- a/share/examples/jails/jail.xxx.conf
+++ b/share/examples/jails/jail.xxx.conf
@@ -8,12 +8,13 @@ xxx {
 	exec.jail_user = "root";
 
 	#
-	# NB: Below 4-lines required
+	# NB: Below lines required
 	#
 	vnet;
 	# netgraph
 	vnet.interface = "ng0_xxx";		# vnet interface(s)
 	exec.prestart += "jng bridge xxx em0";	# bridge interface(s)
+	exec.prestop += "ifconfig ng0_xxx -vnet xxx";	# return ifnet(s)
 	exec.poststop += "jng shutdown xxx";	# destroy interface(s)
 	# if_bridge
 	#vnet.interface = "e0b_xxx";		# vnet interface(s)
diff --git a/share/examples/jails/jng b/share/examples/jails/jng
index 82f1dd7b5e94..0d997588369a 100755
--- a/share/examples/jails/jng
+++ b/share/examples/jails/jng
@@ -7,14 +7,14 @@
 ############################################################ IDENT(1)
 #
 # $Title: netgraph(4) management script for vnet jails $
-# $Version: 9.0 $
+# $Version: 9.1 $
 #
 ############################################################ INFORMATION
 #
 # Use this tool with jail.conf(5) (or rc.conf(5) ``legacy'' configuration) to
 # manage `vnet' interfaces for jails. Designed to automate the creation of vnet
-# interface(s) during jail `prestart' and destroy said interface(s) during jail
-# `poststop'.
+# interface(s) during jail `prestart', return them to the host during jail
+# `prestop', and destroy said interface(s) during jail `poststop'.
 #
 # In jail.conf(5) format:
 #
@@ -37,11 +37,15 @@
 # 	exec.jail_user = "root";
 # 
 # 	#
-# 	# NB: Below 2-lines required
+# 	# NB: Below lines required
 # 	# NB: The number of arguments after `jng bridge xxx' should match
 # 	#     the number of ngN_xxx arguments in vnet.interface value.
+# 	# NB: Return each ngN_xxx to the host in prestop so the kernel does
+# 	#     not move it during jail removal (BPF race). Destroy in poststop.
 # 	#
 # 	exec.prestart += "jng bridge xxx em0 em1 ...";
+# 	exec.prestop += "ifconfig ng0_xxx -vnet xxx";
+# 	exec.prestop += "ifconfig ng1_xxx -vnet xxx";
 # 	exec.poststop += "jng shutdown xxx";
 # 
 # 	# Standard recipe
@@ -84,7 +88,9 @@
 # jail_xxx_rootdir="/vm/xxx"			# root directory
 # jail_xxx_vnet_interfaces="ng0_xxx ng1xxx ..."	# vnet interface(s)
 # jail_xxx_exec_prestart0="jng bridge xxx em0 em1 ..."	# bridge interface(s)
-# jail_xxx_exec_poststop0="jng shutdown xxx"	# destroy interface(s)
+# jail_xxx_exec_prestop0="ifconfig ng0_xxx -vnet xxx"	# return ifnet(s)
+# jail_xxx_exec_prestop1="ifconfig ng1_xxx -vnet xxx"
+# jail_xxx_exec_poststop0="jng shutdown xxx"		# destroy interface(s)
 # #jail_xxx_mount_enable="YES"			# mount /etc/fstab.xxx
 # #jail_xxx_devfs_ruleset="11"			# rule to unhide bpf for DHCP
 #
@@ -132,7 +138,7 @@ NG_BRIDGE_MAX_STALENESS=4294967295
 
 ############################################################ GLOBALS
 
-VERSION='$Version: 9.0 $'
+VERSION='$Version: 9.1 $'
 
 pgm="${0##*/}" # Program basename
 
diff --git a/share/examples/jails/rc.conf.jails b/share/examples/jails/rc.conf.jails
index b1e0d6187b4e..872ab66d7fc2 100644
--- a/share/examples/jails/rc.conf.jails
+++ b/share/examples/jails/rc.conf.jails
@@ -35,6 +35,7 @@ jail_devfs_enable="YES"		# mount devfs
 #jail_{name}_rootdir="/vm/{name}"		# root directory
 #jail_{name}_vnet_interfaces="ng0_{name}"	# vnet interface(s)
 #jail_{name}_exec_prestart0="jng bridge {name} em0"	# bridge interface(s)
+#jail_{name}_exec_prestop0="ifconfig ng0_{name} -vnet {name}" # return ifnet(s)
 #jail_{name}_exec_poststop0="jng shutdown {name}"	# destroy interface(s)
 # Optional (default off)
 #jail_{name}_devfs_ruleset="11"			# rule to unhide bpf for DHCP
@@ -61,6 +62,7 @@ jail_XXX_rootdir="/vm/XXX"			# root directory
 # netgraph
 jail_XXX_vnet_interface="ng0_XXX"		# vnet interface(s)
 jail_XXX_exec_prestart0="jng bridge XXX em0"	# bridge interface(s)
+jail_XXX_exec_prestop0="ifconfig ng0_XXX -vnet XXX"	# return ifnet(s)
 jail_XXX_exec_poststop0="jng shutdown XXX"	# destroy interface(s)
 # if_bridge
 #jail_XXX_vnet_interface="e0b_XXX"		# vnet interface(s)
diff --git a/share/examples/jails/rcjail.xxx.conf b/share/examples/jails/rcjail.xxx.conf
index 8757219a97f3..0ca271ddf9b6 100644
--- a/share/examples/jails/rcjail.xxx.conf
+++ b/share/examples/jails/rcjail.xxx.conf
@@ -3,11 +3,12 @@ jail_XXX_hostname="XXX.YYY"			# hostname
 jail_XXX_rootdir="/vm/XXX"			# root directory
 
 #
-# NB: Below 3 lines required
+# NB: Below lines required
 #
 # netgraph
 jail_XXX_vnet_interface="ng0_XXX"		# vnet interface(s)
 jail_XXX_exec_prestart0="jng bridge XXX em0"	# bridge interface(s)
+jail_XXX_exec_prestop0="ifconfig ng0_XXX -vnet XXX"	# return ifnet(s)
 jail_XXX_exec_poststop0="jng shutdown XXX"	# destroy interface(s)
 # if_bridge
 #jail_XXX_vnet_interface="e0b_XXX"		# vnet interface(s)