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