mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-29 21:14:28 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| # Copyright (C) 2006 OpenWrt.org
 | |
| 
 | |
| . /etc/functions.sh
 | |
| [ $# = 0 ] && { echo "  $0 <group>"; exit; }
 | |
| [ "x$1" = "x-a" ] && {
 | |
| 	config_cb() {
 | |
| 		[ interface != "$1" -o -z "$2" ] || eval "$0 $2"
 | |
| 	}
 | |
| 	config_load network
 | |
| 	exit
 | |
| }
 | |
| 
 | |
| config_load /var/state/network
 | |
| 
 | |
| # remove the interface's network state
 | |
| FILE=/var/state/network.$$
 | |
| grep -v "^config_set '$1' " /var/state/network > "$FILE"
 | |
| mv "$FILE" /var/state/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
 | |
| [ "static" = "$proto" ] && {
 | |
| 	env -i ACTION="ifdown" INTERFACE="$cfg" DEVICE="$iface" PROTO=static /sbin/hotplug-call "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
 | |
| 
 | |
| # kill active ppp daemon and other processes
 | |
| config_get ifname "$cfg" ifname
 | |
| pids="$(head -n1 -q /var/run/${ifname}.pid /var/run/ppp-${cfg}.pid 2>/dev/null)"
 | |
| for pid in $pids; do 
 | |
| 	[ -d "/proc/$pid" ] && {
 | |
| 		kill $pid
 | |
| 		[ -d "/proc/$pid" ] && {
 | |
| 			sleep 1
 | |
| 			kill -9 $pid 2>/dev/null >/dev/null
 | |
| 		}
 | |
| 	}
 | |
| done
 | |
| rm -f /var/run/${ifname}.pid /var/run/ppp-${cfg}.pid
 | |
| 
 | |
| config_get ifname "$cfg" ifname
 | |
| config_get device "$cfg" device
 | |
| 
 | |
| [ ."$device" != ."$ifname" ] || device=
 | |
| for dev in $ifname $device; do
 | |
| 	ifconfig "$dev" 0.0.0.0 down >/dev/null 2>/dev/null
 | |
| done
 | |
| 
 | |
| config_get iftype "$cfg" type
 | |
| [ "bridge" = "$iftype" ] && brctl delbr "$ifname" >/dev/null 2>/dev/null
 | |
| 
 |