summaryrefslogtreecommitdiff
path: root/package/base-files/files/usr/share/udhcpc/default.script
blob: 84c729783885785fb2ded256e91b0c6b7dda22ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/sh
[ -z "$1" ] && echo "Error: should be run by udhcpc" && exit 1
. /etc/functions.sh
include /lib/network

RESOLV_CONF="/tmp/resolv.conf.auto"

hotplug_event() {
	scan_interfaces
	for ifc in $interfaces; do
		config_get ifname $ifc ifname
		[ "$ifname" = "$interface" ] || continue

		config_get proto $ifc proto
		[ "$proto" = "dhcp" ] || continue
		[ ifup = "$1" ] && {
			config_get userdns "$ifc" dns
			[ -n "$userdns" ] && {
				for i in $userdns; do
					echo "custom dns $i"
					echo "nameserver $i" >> "${RESOLV_CONF}.tmp"
				done
				dns="$userdns"
			}
			uci_set_state network "$ifc" ipaddr "$ip"
			uci_set_state network "$ifc" netmask "${subnet:-255.255.255.0}"
			uci_set_state network "$ifc" dnsdomain "$domain"
			uci_set_state network "$ifc" dns "$dns"
			uci_set_state network "$ifc" gateway "$router"
		}
		
		env -i ACTION="$1" INTERFACE="$ifc" DEVICE="$ifname" PROTO=dhcp /sbin/hotplug-call iface
	done
}

case "$1" in
	deconfig)
		ifconfig $interface 0.0.0.0
		hotplug_event ifdown
	;;
	renew|bound)
		ifconfig $interface $ip \
		netmask ${subnet:-255.255.255.0} \
		broadcast ${broadcast:-+}

		[ -n "$router" ] && {
			for i in $router ; do
				echo "adding router $i"
				route add default gw $i dev $interface
				valid="$valid|$i"

			done

			echo "deleting old routes"
			$(route -n | awk '/^0.0.0.0\W{9}('$valid')\W/ {next} /^0.0.0.0/ {print "route del -net "$1" gw "$2";"}')
		}

		[ -n "$dns" ] && \
			echo -n > "${RESOLV_CONF}.tmp"
		
		[ -n "$dns" ] && {
			[ -s "${RESOLV_CONF}.tmp" ] || {
				for i in $dns ; do
					echo "adding dns $i"
					echo "nameserver $i" >> "${RESOLV_CONF}.tmp"
				done
			}

			${domain:+echo search $domain} >> "${RESOLV_CONF}.tmp"

			mv "${RESOLV_CONF}.tmp" "$RESOLV_CONF"
		}

		if [ "$1" = "renew" ]; then
			hotplug_event update
		else
			hotplug_event ifup
		fi

		# user rules
		[ -f /etc/udhcpc.user ] && . /etc/udhcpc.user
	;;
esac

exit 0