1#!/bin/sh /etc/rc.common
2
3setup_hostname() # $1: apmode/brmode/extmode/factory
4{
5	local hostname
6
7	case "$1" in
8	apmode) hostname=$($CONFIG get ap_netbiosname)
9		;;
10	brmode)	hostname=$($CONFIG get bridge_netbiosname)
11		;;
12	*) hostname="$($CONFIG get netbiosname)" ;;
13	esac
14	[ -z "$hostname" ] && hostname="$($CONFIG get Device_name)"
15
16	echo "$hostname" > /proc/sys/kernel/hostname
17}
18
19setup_interface_static() # $1: apmode/brmode/extmode/factory
20{
21	case "$1" in
22	apmode)
23		ifconfig br0 $($CONFIG get ap_ipaddr) netmask $($CONFIG get ap_netmask)
24		route add default gw $($CONFIG get ap_gateway)
25		echo "nameserver $($CONFIG get ap_ether_dns1)" > /tmp/resolv.conf
26		echo "nameserver $($CONFIG get ap_ether_dns2)" >> /tmp/resolv.conf
27		;;
28	brmode)
29		ifconfig br0 $($CONFIG get bridge_ipaddr) netmask $($CONFIG get bridge_netmask)
30		route add default gw $($CONFIG get bridge_gateway)
31		echo "nameserver $($CONFIG get bridge_ether_dns1)" > /tmp/resolv.conf
32		echo "nameserver $($CONFIG get bridge_ether_dns2)" >> /tmp/resolv.conf
33		;;
34	extmode)
35		ifconfig br0 $($CONFIG get extender_ipaddr) netmask $($CONFIG get extender_netmask)
36		route add default gw $($CONFIG get extender_gateway)
37		echo "nameserver $($CONFIG get extender_ether_dns1)" > /tmp/resolv.conf
38		echo "nameserver $($CONFIG get extender_ether_dns2)" >> /tmp/resolv.conf
39		;;
40	factory)
41		ifconfig br0 $($CONFIG get lan_ipaddr) netmask $($CONFIG get lan_netmask)
42		;;
43	esac
44	/sbin/ledcontrol -n wan -c green -s on
45}
46
47setup_interface_dhcp() # $1: apmode/brmode/extmode
48{
49	hostname=$(cat /proc/sys/kernel/hostname)
50	
51	# hostapd always need a lan ip to up.
52	[ "$1" = "apmode" ] && ifconfig br0 $($CONFIG get lan_ipaddr)
53
54	/sbin/udhcpc -a -b -i br0 -h "$hostname" -r $($CONFIG get ap_dhcp_ipaddr) &
55
56	case "$1" in
57	apmode) echo "ap mode start udhcp" ;; 
58	brmode) /etc/init.d/net-br-dhcpc-helper & ;;
59	extmode) sleep 10
60		/etc/init.d/net-br-dhcpc-helper & ;;
61	esac
62}
63
64setup_interface() # $1: apmode/brmode/extmode/factory
65{
66	local dhcp=1
67
68	case "$1" in
69	apmode) [ "$($CONFIG get ap_ether_ip_assign)" = "0" ] && dhcp=0 ;;
70	brmode) [ "$($CONFIG get bridge_ether_ip_assign)" = "0" ] && dhcp=0 ;;
71	extmode) [ "$($CONFIG get extender_ether_ip_assign)" = "0" ] && dhcp=0 ;;
72	factory) dhcp=0 ;;
73	esac
74
75	[ "$dhcp" = "1" ] && setup_interface_dhcp $1 || setup_interface_static $1
76}
77
78start0() # $1: boot/start
79{
80	local opmode=$($CONFIG get i_opmode)
81
82	# Stop Traffic Meter
83	/sbin/cmd_traffic_meter stop
84	/usr/bin/killall tfm_led
85
86	setup_hostname $opmode
87
88	ifconfig ethlan up
89	ifconfig ethwan up
90	ifconfig br0 up
91
92	/etc/init.d/wlan-common start &
93
94	# Pull low PHY 9 seconds then pull high PHY to let wired client re-obtain IP address
95	echo -n '911111' > /proc/switch_phy && sleep 10
96	setup_interface $opmode 
97
98	/sbin/cmd_ebtables start
99	/etc/init.d/net-scan $1      # daemon for getting attached devices
100	/etc/init.d/lltd $1          # Link Layer Topology Discovery Daemon
101	/etc/init.d/telnet $1        # telnet daemon for Router Debugging Mode ...
102	/usr/sbin/update_smb
103	/sbin/cmddlna ip_restart &   # dlan daemon
104	/etc/init.d/upnp $1
105	if [ "$opmode" = "apmode" ]; then
106 	    /usr/sbin/brctl stp br0 1
107	fi
108}
109
110start()
111{
112	start0 start
113	/etc/init.d/ntpclient start
114	/etc/init.d/cron start
115	/etc/init.d/dnsmasq start
116}
117
118stop()
119{
120	# wan service
121	/etc/init.d/dnsmasq stop
122	/etc/init.d/cron stop
123	/etc/init.d/ntpclient stop
124
125	# lan service
126#	/etc/init.d/samba stop
127	/etc/init.d/upnp stop
128	/etc/init.d/telnet stop
129	/etc/init.d/lltd stop
130	/etc/init.d/net-scan stop
131	/sbin/cmd_ebtables stop
132	if [ "$($CONFIG get i_opmode)" = "apmode" ]; then
133 	    /usr/sbin/brctl stp br0 0
134	fi
135
136	/sbin/ledcontrol -n wan -c amber -s on
137	killall net-br-dhcpc-helper
138	killall zcip
139	killall -SIGUSR2 udhcpc; killall udhcpc; killall udhcpc; sleep 1
140
141	ifconfig br0 down
142	ifconfig ethwan down
143	ifconfig ethlan down
144}
145
146restart()
147{
148	stop
149	start
150}
151
152boot()
153{
154	/sbin/ledcontrol -n wan -c amber -s on
155	start0 boot
156}
157