]> TLD Linux GIT Repositories - rc-scripts.git/blob - lib/ifdown
73df49060c9d023dd6f36bea0be1db6e2280f57f
[rc-scripts.git] / lib / ifdown
1 #!/bin/sh
2 #
3 #
4 PATH=/sbin:/usr/sbin:/bin:/usr/bin
5
6 . /etc/sysconfig/network
7 . /etc/rc.d/init.d/functions
8 . /lib/rc-scripts/functions.network
9
10 # Will be removed in the future
11 if is_yes "$NETWORKING" ; then
12         if [ -z "$IPV4_NETWORKING" ] ; then
13                 echo "NETWORKING is set to YES, but IPV4_NETWORKING is empty!"
14                 echo "Please upgrade your config"
15                 echo "Assuming you want IPv4 networking"
16                 IPV4_NETWORKING=yes
17         fi
18 fi
19
20 DEV=$1
21
22 [ -z "$DEV" ] && {
23         nls "Usage: %s <device name>" "ifdown" >&2
24         exit 1
25 }
26
27 if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ] ; then
28         CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV"
29 else
30         CONFIG="$DEV"
31 fi
32
33 if [ "$(id -u)" != "0" ]; then
34         if [ -x /sbin/usernetctl ]; then
35                 exec /sbin/usernetctl $CONFIG down
36         fi
37         echo "Users cannot control this device." >&2
38         exit 1
39 fi
40
41 source_config
42
43 # set all major variables
44 setup_ip_param
45
46 OTHERSCRIPT="/lib/rc-scripts/ifdown-${DEVICETYPE}"
47
48 # shutdown tleds software
49 if [ "$TLEDS_DEV" = "$DEVICE" -a -x /usr/bin/tleds ]; then
50         /usr/bin/tleds -qk "$DEVICE"
51 fi
52
53 if [ -x $OTHERSCRIPT ]; then
54         if [ "$HANDLING" = "0" ]; then
55                 exec $OTHERSCRIPT $CONFIG $2
56         elif [ "$HANDLING" = "1" ]; then
57                 $OTHERSCRIPT $CONFIG $2
58         fi
59 fi
60
61 if is_yes "$ENABLE_6TO4"; then
62         tun6to4=tun6to4_$DEVICE 
63         /sbin/ip -6 route flush dev $tun6to4 2>/dev/null
64         if [ $? = 0 ]; then   # the tunnel has been set up in ifup
65                 /sbin/ip link set dev $tun6to4 down
66                 /sbin/ip tunnel del $tun6to4
67         fi
68 fi
69
70 if [ -n "$BOOTPROTO" -a "$BOOTPROTO" != "none" -a "$BOOTPROTO" != "static" ]; then
71         if is_yes "$IPV4_NETWORKING"; then
72                 set_dhcpclient
73
74                 case ${DHCP_CLIENT##*/} in
75                   pump)
76                         $DHCP_CLIENT -r -i ${DEVICE}
77                         RESULT=$?
78                         ;;
79                   dhcpcd)
80                         $DHCP_CLIENT -k ${DEVICE}
81                         RESULT=$?
82                         sleep 1
83                         ;;
84                   dhcpxd)
85                         $DHCP_CLIENT -k ${DEVICE}
86                         RESULT=$?
87                         ;;
88                   dhclient)
89                         if [ -f "/var/run/dhclient.$DEVICE.pid" ] ; then
90                                 $DHCP_CLIENT -r -pf /var/run/dhclient.$DEVICE.pid -lf /var/lib/dhclient/dhclient.$DEVICE.leases 2>/dev/null
91                                 RESULT=$?
92                         elif [ -f /var/run/dhclient.pid ]; then
93                                 # may be left by older rc-scripts
94                                 PID=$(cat /var/run/dhclient.pid)
95                                 if kill -0 $PID 2>/dev/null; then
96                                         kill $PID
97                                         RESULT=$?
98                                 fi
99                         fi
100                         ;;
101                   avahi-autoipd)
102                         $DHCP_CLIENT -k ${DEVICE}
103                         RESULT=$?
104                         ;;
105                 esac
106         fi
107 fi
108
109 if is_yes "${WLAN_WPA}"; then
110         killproc --pidfile "wpa_supplicant-${DEVICE}.pid" wpa_supplicant > /dev/null 2>&1
111         rm -f "/var/run/wpa_supplicant-${DEVICE}.pid"
112 fi
113
114 # Check to make sure the device is actually up
115 check_device_down && exit 0
116
117 if [ -n "${SUBDEVICE}" ]; then
118         ip addr del ${IP4ADDR} label ${SUBDEVICE} dev ${DEVICE}
119 else
120         LC_ALL=C ip addr flush dev ${DEVICE} 2>&1 | grep -v "Nothing to flush"
121
122     if is_yes "$SLAVE"; then
123         ip link set ${DEVICE} nomaster
124     fi
125
126         ip link set ${DEVICE} down
127 fi
128
129 if [ "$HANDLING" = "4" ]; then
130         exit 0
131 fi
132
133 if [ -n "$RESULT" ] ; then
134         if [ "$RESULT" -ne "0" ]; then
135                 exit $RESULT
136         fi
137 fi
138
139 exec /lib/rc-scripts/ifdown-post $CONFIG