summaryrefslogtreecommitdiff
path: root/sh/udhcpc-hook.sh.in
blob: 0744a04cef50ad3e3aa1bcfee39bb7390f8462d7 (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!@SHELL@
# busybox udhcp setup script

PATH=/bin:/usr/bin:/sbin:/usr/sbin

peer_var()
{
	[ -n "$1" ] && [ "$1" != "yes" ]
}

update_dns()
{
	peer_var "${PEER_DNS}" && return
	[ -z "${domain}" ] && [ -z "${dns}" ] && return

	conf="# Generated by udhcpc for ${interface}\n"
	[ -n "${domain}" ] && conf="${conf}domain ${domain}\n"
	for i in ${dns} ; do
		conf="${conf}nameserver ${i}\n"
	done
	if [ -x /sbin/resolvconf ] ; then
		printf "${conf}" | resolvconf -a ${interface}
	else
		printf "${conf}" > /etc/resolv.conf
		chmod 644 /etc/resolv.conf
	fi
}

update_ntp()
{
	peer_var "${PEER_NTP}" && return
	[ -z "${ntpsrv}" ] && return

	conf="# Generated by udhcpc for interface ${interface}\n"
	conf="${conf}restrict default noquery notrust nomodify\n"
	conf="${conf}restrict 127.0.0.1\n"
	for i in ${ntpsrv} ; do
		conf="${conf}restrict ${i} nomodify notrap noquery\n"
		conf="${conf}server ${i}\n"
	done
	conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
	conf="${conf}logfile /var/log/ntp.log\n"
	printf "${conf}" > /etc/ntp.conf
	chmod 644 /etc/ntp.conf
}

update_hostname()
{
	peer_var "${PEER_HOSTNAME}" && return
	[ -z "${hostname}" ] && return

	myhost="$(hostname)"
	[ -z "${myhost}" ] || [ "${myhost}" = "(none)" ] && hostname "${hostname}"
}

update_interface()
{
	[ -n "${broadcast}" ] && broadcast="broadcast ${broadcast}"
	[ -n "${subnet}" ] && netmask="netmask ${subnet}"
	[ -n "${mtu}" ] && mtu="mtu ${mtu}"
	ifconfig "${interface}" ${ip} ${broadcast} ${netmask} ${mtu}
}

update_routes()
{
	peer_var "${PEER_ROUTERS}" && return

	if [ -n "${router}" ] ; then
		metric=
		[ -n "${IF_METRIC}" ] && metric="metric ${IF_METRIC}"
		for i in ${router} ; do
			route add default gw "${i}" ${metric} dev "${interface}"
		done
	fi
}

deconfig()
{
	ifconfig "${interface}" 0.0.0.0

	if ! peer_var "${PEER_ROUTERS}" ; then
		while route del default dev "${interface}" >/dev/null 2>&1; do
			:
		done
	fi

	if ! peer_var "${PEER_DNS}" ; then
		[ -x /sbin/resolvconf ] && resolvconf -d "${interface}"
	fi
}

if [ -r "/var/run/udhcpc-${interface}.conf" ]; then
	. "/var/run/udhcpc-${interface}.conf"
fi

case "$1" in
	bound|renew)
		update_hostname
		update_interface
		update_routes
		update_dns
		update_ntp
		;;
	deconfig|leasefail)
		deconfig
		;;
	nak)
		echo "nak: ${message}"
		;;
	*)
		echo "unknown option $1" >&2
		echo "Usage: $0 {bound|deconfig|leasefail|nak|renew}" >&2
		exit 1
		;;
esac

exit 0