add copyright headers to base-files scripts and config files
[openwrt.git] / package / base-files / default / etc / hotplug.d / net / 10-net
1 #!/bin/sh
2 # Copyright (C) 2006 OpenWrt.org
3
4 find_name()
5 {
6         for ifname in lan wan wifi ${ifnames}; do
7                 IFTYPE="${ifname}"
8                 eval "IFPROTO=\"\${${IFTYPE}_proto}\""
9                 eval "IFACE=\"\${${IFTYPE}_ifname}\""
10                 case "$IFPROTO" in
11                         ""|none);;
12                         static|dhcp)
13                                 [ "${IFACE}" = "$INTERFACE" ] && return 0
14                                 [ "${IFACE%%[0-9]*}" = "br" ] && {
15                                         eval "ifs=\"\${${IFTYPE}_ifnames}\""
16                                         for part in $ifs; do
17                                                 [ "$part" = "$INTERFACE" ] && return 0
18                                         done
19                                 }
20                         ;;
21                         pppoa)
22                                 [ "$INTERFACE" = "atm0" \
23                                   -a -x /sbin/ifup.${IFPROTO} ] && return 0
24                         ;;
25                         *)
26                                 eval "device=\"\${${IFTYPE}_device}\""
27                                 [ "$device" = "$INTERFACE" \
28                                   -a -x /sbin/ifup.${IFPROTO} ] && return 0
29                         ;;
30                 esac
31         done
32         IFACE=""
33         IFTYPE=""
34         IFPROTO=""
35         return 255
36 }
37
38 do_ifup() {
39         if="$3"
40         eval "if_proto=\"\${${2}_proto}\""
41         
42         pidfile=/var/run/${if}.pid
43         [ -f $pidfile ] && $DEBUG kill $(cat $pidfile)
44
45         case "$1" in
46                 static)
47                         eval "ip=\"\${${2}_ipaddr}\""
48                         eval "ip6=\"\${${2}_ip6addr}\""
49                         eval "netmask=\"\${${2}_netmask}\""
50                         eval "gateway=\"\${${2}_gateway}\""
51                         eval "dns=\"\${${2}_dns}\""
52                         eval "static_route=\"\${${2}_static_route}\""
53         
54                         $DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
55                         [ -n "$ip6" ] && $DEBUG ifconfig $if add $ip6
56
57                         [ -n "$static_route" ] && {
58                                 for route in $static_route; do
59                                         if [ "$(echo $route | cut -d \/ -f2)" != "32" ];
60                                         then
61                                                 route add -net $(echo $route | cut -d \/ -f1) netmask $(echo $route | cut -d \/ -f1) dev $if
62                                         else
63                                                 route add -host $(echo $route | cut -d \/ -f1) dev $if
64                                         fi
65                                 done
66                         }
67
68                         ${gateway:+$DEBUG route add default gw $gateway}
69         
70                         [ -f /tmp/resolv.conf ] || {
71                                 debug "# --- creating /tmp/resolv.conf ---"
72                                 for ns in $dns; do
73                                         echo "nameserver $ns" >> /tmp/resolv.conf
74                                 done
75                         }
76                         
77                         env -i ACTION="ifup" INTERFACE="${2}" PROTO=static /sbin/hotplug "iface" &
78                 ;;
79                 dhcp)
80                         eval "ip=\"\${${2}_ipaddr}\""
81                         eval "netmask=\"\${${2}_netmask}\""
82                         eval "hostname=\"\${${2}_hostname}\""
83                         
84                         $DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
85         
86                         args="-i $if ${ip:+-r $ip} -b -p $pidfile"
87                         hostname="${hostname%%.*}"
88                         args="$args${hostname:+ -H $hostname}"
89                         [ "$if_proto" = "pptp" ] && args="$args -n -q" || args="$args -R &"
90                         ${DEBUG:-eval} "udhcpc $args"
91                         # hotplug events are handled by /usr/share/udhcpc/default.script
92                 ;;
93                 *)
94                         if [ -x "/sbin/ifup.$1" ]; then
95                                 ( $DEBUG . /sbin/ifup.$1 ${2} $3 )
96                         fi
97                 ;;
98         esac
99 }
100
101 do_register()
102 {
103         [ -z "$IFTYPE" -o -z "$IFPROTO" ] && {
104                 find_name || {
105                         case "${INTERFACE%%[0-9]*}" in
106                                 wds) 
107                                         for ifname in lan wifi; do
108                                                 eval "if=\"\${${ifname}_ifname}\""
109                                                 [ -z "$IFPROTO" ] && [ "$if" = "br0" ] && {
110                                                         eval "IFPROTO=\"\${${2}_proto}\""
111                                                         IFTYPE="${tmp}"
112                                                 }
113                                         done
114                                         [ -z "$IFPROTO" ] && return 0
115                                 ;;
116                                 atm)
117                                         for tmp in lan wan wifi ${ifnames}; do
118                                                 eval "if_proto=\"\${${2}_proto}\""
119                                                 [ "$if_proto" = "pppoa" ] && {
120                                                         do_ifup "pppoa" "$tmp" "$INTERFACE"
121                                                         return 0
122                                                 }
123                                         done
124                                 ;;
125                                 *)
126                                         return 0
127                                 ;;
128                         esac
129                 }
130         }
131
132         case "${INTERFACE%%[0-9]*}" in 
133                 ppp|atm);;
134                 *)
135                         eval "mac=\"\${${IFTYPE}_hwaddr}\""
136                         ${mac:+$DEBUG ifconfig $INTERFACE down hw ether $mac}
137                 ;;
138         esac
139
140         eval "if=\"\${${IFTYPE}_ifname}\""
141         if [ "${if%%[0-9]}" = "br" ]; then
142                 if_valid "$INTERFACE" && {
143                         ifconfig "$if" 2>&- >&- || {
144                                 eval "stp=\"\${${IFTYPE}_stp}\""
145                                 $DEBUG brctl addbr "$if"
146                                 $DEBUG brctl setfd "$if" 0
147                                 $DEBUG brctl stp "$if" "${stp:-0}"
148                         }
149
150                         if [ "$INTERFACE" != "$if" ]; then
151                                 $DEBUG ifconfig "$INTERFACE" 0.0.0.0 up
152                                 $DEBUG brctl addif "$if" "$INTERFACE"
153                                 $DEBUG ifconfig "$INTERFACE" allmulti
154                         else
155                                 do_ifup "$IFPROTO" "$IFTYPE" "$if"
156                         fi
157                 }
158         else 
159                 [ "${INTERFACE%%[0-9]*}" = "ppp" ] || do_ifup "$IFPROTO" "$IFTYPE" "$if"
160         fi
161 }
162
163 do_unregister() {
164         [ -z "$IFTYPE" -o -z "$IFPROTO" ] && {
165                 find_name || return 0
166         }
167         
168         [ "${IFACE%%[0-9]*}" = "br" ] && {
169                 if [ "$INTERFACE" != "$IFACE" ]; then
170                         brctl delif "$IFACE" "$INTERFACE" 2>&- >&-
171                 else
172                         brctl delbr "$IFACE" 2>&- >&-
173                 fi
174         }
175         
176         case "$IFPROTO" in
177                 pppoe|pppoa|pptp) 
178                         killall pppd 2>&- >&-
179                 ;;
180                 dhcp)
181                         [ -f /var/run/${INTERFACE}.pid ] && kill "$(cat /var/run/${INTERFACE}.pid)" 2>&- >&-
182                 ;;
183         esac
184
185         [ "${INTERFACE%%[0-9]*}" = "atm" ] || ifconfig "$INTERFACE" 0.0.0.0 down 2>&-
186 }
187
188 case "$ACTION" in
189         add|register) do_register;;
190         remove|unregister) do_unregister;;
191 esac