Workaround automatic re-loading of network drivers

John Baldwin jhb at freebsd.org
Mon May 3 19:27:21 UTC 2010


While testing some changes with vlans and the new vlan_<if> syntax in rc.conf 
I've noticed the following behavior:

	ifconfig foo0.100 destroy

Will actually try to kldload the 'foo' driver.  This can prove very non-
intuitive.  In general I think we shouldn't try to kldload anything when 
destroying an interface period.  What I've done locally is to pass '-n' to 
ifconfig when destroying an interface.

We should possibly fix some other bugs however.  For example, ifmaybeload() in 
ifconfig should probably stop at the first non-digit it finds (e.g. ".") 
rather than trimming from the first digit on.  Also, perhaps 'ifconfig <foo> 
destroy' should imply -n without requiring it to be explicit.

I also moved the ifconfig destroy of wlan and vlan devices up before running 
ifn_stop to prevent running 'ifconfig <foo> down' which would also reload the 
driver due to the first bug in ifconfig.

Index: network.subr
===================================================================
--- network.subr	(revision 207329)
+++ network.subr	(working copy)
@@ -915,7 +915,7 @@
 	_list=
 
 	for ifn in ${cloned_interfaces}; do
-		ifconfig ${ifn} destroy
+		ifconfig -n ${ifn} destroy
 		if [ $? -eq 0 ]; then
 			_list="${_list}${_prefix}${ifn}"
 			[ -z "$_prefix" ] && _prefix=' '
@@ -1000,10 +1000,10 @@
 		if ! ifexists $child; then
 			continue
 		fi
+		ifconfig -n $child destroy && cfg=0
 		if autoif $child; then
 			ifn_stop $child
 		fi
-		ifconfig $child destroy && cfg=0
 	done
 
 	child_vlans=`get_if_var $ifn vlans_IF`
@@ -1014,10 +1014,10 @@
 		if ! ifexists $child; then
 			continue
 		fi
+		ifconfig -n $child destroy && cfg=0
 		if autoif $child; then
 			ifn_stop $child
 		fi
-		ifconfig $child destroy && cfg=0
 	done
 
 	return ${cfg}


-- 
John Baldwin


More information about the freebsd-net mailing list