Workaround automatic re-loading of network drivers
John Baldwin
jhb at freebsd.org
Mon May 3 20:20:51 UTC 2010
On Monday 03 May 2010 3:27:18 pm John Baldwin wrote:
> 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.
I've noticed since sending this that the calls to ifn_stop when destroying
child interfaces are now superfluous in this patch since they are now moved
to after the destroy (devd will kick them off after the destroy runs), so
I've now removed them entirely.
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,7 @@
if ! ifexists $child; then
continue
fi
- if autoif $child; then
- ifn_stop $child
- fi
- ifconfig $child destroy && cfg=0
+ ifconfig -n $child destroy && cfg=0
done
child_vlans=`get_if_var $ifn vlans_IF`
@@ -1014,10 +1011,7 @@
if ! ifexists $child; then
continue
fi
- if autoif $child; then
- ifn_stop $child
- fi
- ifconfig $child destroy && cfg=0
+ ifconfig -n $child destroy && cfg=0
done
return ${cfg}
--
John Baldwin
More information about the freebsd-net
mailing list