]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC r344794:
authorKristof Provost <kp@FreeBSD.org>
Tue, 19 Mar 2019 00:27:45 +0000 (00:27 +0000)
committerKristof Provost <kp@FreeBSD.org>
Tue, 19 Mar 2019 00:27:45 +0000 (00:27 +0000)
commitf393bdaf214ae26d06d7287d62773a0deb0379fc
tree93d92e873dc82235134cc49156f96de21a5c6963
parentc78d4f14e1f844fd22d8b3ce6e317a2491f3d090
MFC r344794:

tun: VIMAGE fix for if_tun cloner

The if_tun cloner is not virtualised, but if_clone_attach() does use a
virtualised list of cloners.
The result is that we can't find the if_tun cloner when we try to remove
a renamed tun interface. Virtualise the cloner, and move the final
cleanup into a sysuninit so that we're sure this happens after all of
the vnet_sysuninits

Note that we need unit numbers to be system-unique (rather than unique
per vnet, as is done by if_clone_simple()). The unit number is used to
create the corresponding /dev/tunX device node, and this node must match
with the interface.
Switch to if_clone_advanced() so that we have control over the unit
numbers.

Reproduction scenario:
jail -c -n foo persist vnet
jexec test ifconfig tun create
jexec test ifconfig tun0 name wg0
jexec test ifconfig wg0 destroy

PR: 235704
Reviewed by: bz, hrs, hselasky
Differential Revision: https://reviews.freebsd.org/D19248
sys/net/if_tun.c