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