-. /etc/network.overrides
-[ "$FAILSAFE" != "true" -a -e /etc/config/network ] && . /etc/config/network
+include /lib/network
+scan_interfaces
+
+cfg=$1
+debug "### ifdown $cfg ###"
+
+config_get proto "$cfg" proto
+[ -z "$proto" ] && { echo "interface not found."; exit; }
+
+config_get iface "$cfg" device
+[ "$proto" = "static" ] && {
+ env -i ACTION="ifdown" INTERFACE="$config" DEVICE="$iface" PROTO=static /sbin/hotplug "iface" &
+}
+
+# call interface stop handler
+( type "stop_interface_$proto" ) >/dev/null 2>/dev/null && eval "stop_interface_$proto '$cfg'"
+
+# make sure all locks are removed
+for lock in "/var/lock/dhcp-$iface" "/var/lock/ppp-$iface"; do
+ [ -f "$lock" ] && {
+ lock -u "$lock"
+ sleep 1
+ }
+done