updated on Thu Jan 26 16:09:46 UTC 2012
[aur-mirror.git] / network-ip / network-ip
blob6045484a10dfc20a313c7ad63961ac30df8d4943
1 #!/bin/bash
3 . /etc/rc.conf
4 . /etc/rc.d/functions
6 # wireless settings
7 [ -f /etc/conf.d/wireless ] && . /etc/conf.d/wireless
8 # ethernet bonding settings
9 [ -f /etc/conf.d/bonding ] && . /etc/conf.d/bonding
10 # bridge settings
11 [ -f /etc/conf.d/bridges ] && . /etc/conf.d/bridges
12 # dhcpcd settings
13 [ -f /etc/conf.d/dhcpcd ] && . /etc/conf.d/dhcpcd
15 ifup()
17 if [ "$1" = "" ]; then
18 echo "usage: $0 ifup <interface_name>"
19 return 1
22 wi_up $1 || return 1
24 eval ifcfg="\$${1}"
25 if [ "$ifcfg" = "dhcp" ]; then
26 # remove the .pid file if it exists
27 /bin/rm -f /var/run/dhcpcd-${1}.pid >/dev/null 2>&1
28 /bin/rm -f /var/run/dhcpcd-${1}.cache >/dev/null 2>&1
29 /sbin/dhcpcd $DHCPCD_ARGS ${1}
30 else
31 /usr/sbin/ip $ifcfg
33 if grep -q " ${1}:" <<< `/usr/sbin/ip a`; then
34 /usr/sbin/ip link set $1 up
39 return $?
42 wi_up()
44 eval iwcfg="\$wlan_${1}"
45 [ "$iwcfg" = "" ] && return 0
47 /usr/sbin/iwconfig $iwcfg
48 [[ -z "$WIRELESS_TIMEOUT" ]] && WIRELESS_TIMEOUT=2
49 sleep $WIRELESS_TIMEOUT
51 bssid=`iwgetid $1 -ra`
52 if [[ "$bssid" = "00:00:00:00:00:00" ]]; then
53 printhl "Could not associate $1 - try increasing WIRELESS_TIMEOUT and check network is WEP or has no security"
54 return 1
56 return 0
59 ifdown()
61 if [ "$1" = "" ]; then
62 echo "usage: $0 ifdown <interface_name>"
63 return 1
65 eval ifcfg="\$${1}"
66 if [ "$ifcfg" = "dhcp" ]; then
67 if [ -f /var/run/dhcpcd-${1}.pid ]; then
68 /bin/kill $(cat /var/run/dhcpcd-${1}.pid)
70 else
71 if grep -q " ${1}:" <<< `/usr/sbin/ip a`; then
72 /usr/sbin/ip addr flush $1
75 # Always bring the interface itself down
76 if grep -q " ${1}:" <<< `/usr/sbin/ip a`; then
77 /usr/sbin/ip link set $1 down
79 return $?
82 iflist()
84 for ifline in ${INTERFACES[@]}; do
85 if [ "$ifline" = "${ifline#!}" ]; then
86 printf " $ifline:\t"
87 else
88 printf "$ifline:\t"
90 eval real_ifline=\$${ifline#!}
91 echo $real_ifline
92 done
95 rtup()
97 if [ "$1" = "" ]; then
98 echo "usage: $0 rtup <route_name>"
99 return 1
101 eval routecfg="\$${1}"
102 /usr/sbin/ip route add $routecfg
103 return $?
106 rtdown()
108 if [ "$1" = "" ]; then
109 echo "usage: $0 rtdown <route_name>"
110 return 1
112 eval routecfg="\$${1}"
114 /usr/sbin/ip route del $routecfg
115 return $?
118 rtlist()
120 for rtline in ${ROUTES[@]}; do
121 if [ "$rtline" = "${rtline#!}" ]; then
122 printf " $rtline:\t"
123 else
124 printf "$rtline:\t"
126 eval real_rtline=\$${rtline#!}
127 echo $real_rtline
128 done
131 bond_up()
133 for ifline in ${BOND_INTERFACES[@]}; do
134 if [ "$ifline" = "${ifline#!}" ]; then
135 eval bondcfg="\$bond_${ifline}"
136 if [ -n "${bondcfg}" ]; then
137 /sbin/ifenslave $ifline $bondcfg || error=1
140 done
143 bond_down()
145 for ifline in ${BOND_INTERFACES[@]}; do
146 if [ "$ifline" = "${ifline#!}" ]; then
147 eval bondcfg="\$bond_${ifline}"
148 /sbin/ifenslave -d $ifline $bondcfg || error=1
150 done
153 bridge_up()
155 for br in ${BRIDGE_INTERFACES[@]}; do
156 if [ "$br" = "${br#!}" ]; then
157 # if the bridge already exists, remove it
158 if [ "$(/sbin/ifconfig $br 2>/dev/null)" ]; then
159 /usr/sbin/ip link set $br down
160 /usr/sbin/brctl delbr $br
162 /usr/sbin/brctl addbr $br
163 eval brifs="\$bridge_${br}"
164 for brif in $brifs; do
165 if [ "$brif" = "${brif#!}" ]; then
166 for ifline in ${BOND_INTERFACES[@]}; do
167 if [ "$brif" = "$ifline" ] && [ "$ifline" = "${ifline#!}" ]; then
168 ifup $ifline
169 eval bondcfg="\$bond_${ifline}"
170 /sbin/ifenslave $ifline $bondcfg || error=1
171 unset bond_${ifline}
173 done
175 /usr/sbin/brctl addif $br $brif || error=1
177 done
179 /usr/sbin/brctl setfd $br 1
180 /usr/sbin/brctl stp $br off
181 /usr/sbin/brctl sethello $br 1
183 done
186 bridge_down()
188 for br in ${BRIDGE_INTERFACES[@]}; do
189 if [ "$br" = "${br#!}" ]; then
190 /usr/sbin/brctl delbr $br
192 done
196 case "$1" in
197 start)
198 if ! ck_daemon network; then
199 echo "Network is already running. Try 'network restart'"
200 exit
203 stat_busy "Starting Network with IP"
204 error=0
205 # bring up bridge interfaces
206 bridge_up
207 # bring up ethernet interfaces
208 for ifline in ${INTERFACES[@]}; do
209 if [ "$ifline" = "${ifline#!}" ]; then
210 ifup $ifline || error=1
212 done
213 # bring up bond interfaces
214 bond_up
215 # bring up routes
216 for rtline in "${ROUTES[@]}"; do
217 if [ "$rtline" = "${rtline#!}" ]; then
218 rtup $rtline || error=1
220 done
221 if [ $error -eq 0 ]; then
222 add_daemon network-ip
223 stat_done
224 else
225 stat_fail
228 stop)
229 #if ck_daemon network; then
230 # echo "Network is not running. Try 'network start'"
231 # exit
234 stat_busy "Stopping Network with IP"
235 rm_daemon network-ip
236 error=0
237 for rtline in "${ROUTES[@]}"; do
238 if [ "$rtline" = "${rtline#!}" ]; then
239 rtdown $rtline || error=1
241 done
242 # bring down bond interfaces
243 bond_down
244 for ifline in ${INTERFACES[@]}; do
245 if [ "$ifline" = "${ifline#!}" ]; then
246 ifdown $ifline || error=1
248 done
249 # bring down bridge interfaces
250 bridge_down
251 if [ $error -eq 0 ]; then
252 stat_done
253 else
254 stat_fail
257 restart)
258 $0 stop
259 /bin/sleep 2
260 $0 start
262 ifup|ifdown|iflist|rtup|rtdown|rtlist)
263 $1 $2
266 echo "usage: $0 {start|stop|restart}"
267 echo " $0 {ifup|ifdown|iflist|rtup|rtdown|rtlist}"
268 esac
270 # vim: set ts=2 noet: