packages: sort network related packages into package/network/
[openwrt/svn-archive/archive.git] / package / network / config / netifd / files / lib / netifd / proto / dhcp.sh
diff --git a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
new file mode 100755 (executable)
index 0000000..9182d58
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. ../netifd-proto.sh
+init_proto "$@"
+
+proto_dhcp_init_config() {
+       proto_config_add_string "ipaddr"
+       proto_config_add_string "netmask"
+       proto_config_add_string "hostname"
+       proto_config_add_string "clientid"
+       proto_config_add_string "vendorid"
+       proto_config_add_boolean "broadcast"
+       proto_config_add_string "reqopts"
+}
+
+proto_dhcp_setup() {
+       local config="$1"
+       local iface="$2"
+
+       local ipaddr hostname clientid vendorid broadcast reqopts
+       json_get_vars ipaddr hostname clientid vendorid broadcast reqopts
+
+       local opt dhcpopts
+       for opt in $reqopts; do
+               append dhcpopts "-O $opt"
+       done
+
+       [ "$broadcast" = 1 ] && broadcast="-O broadcast" || broadcast=
+
+       proto_export "INTERFACE=$config"
+       proto_run_command "$config" udhcpc \
+               -p /var/run/udhcpc-$iface.pid \
+               -s /lib/netifd/dhcp.script \
+               -f -t 0 -i "$iface" \
+               ${ipaddr:+-r $ipaddr} \
+               ${hostname:+-H $hostname} \
+               ${clientid:+-x 0x3d:${clientid//:/}} \
+               ${vendorid:+-V $vendorid} \
+               $broadcast $dhcpopts
+}
+
+proto_dhcp_teardown() {
+       local interface="$1"
+       proto_kill_command "$interface"
+}
+
+add_protocol dhcp
+