dnsmasq: enable pxe-prompt, pxe-service config options
[openwrt.git] / package / network / services / dnsmasq / files / dnsmasq.init
index b5fb58c..a0197ef 100644 (file)
@@ -13,6 +13,8 @@ ADD_LOCAL_DOMAIN=1
 ADD_LOCAL_HOSTNAME=1
 
 CONFIGFILE="/var/etc/dnsmasq.conf"
+HOSTFILE="/tmp/hosts/dhcp"
+TRUSTANCHORSFILE="/usr/share/dnsmasq/trust-anchors.conf"
 
 xappend() {
        local value="$1"
@@ -83,6 +85,10 @@ append_address() {
        xappend "--address=$1"
 }
 
+append_ipset() {
+       xappend "--ipset=$1"
+}
+
 append_interface() {
        local ifname=$(uci_get_state network "$1" ifname "$1")
        xappend "--interface=$ifname"
@@ -101,6 +107,10 @@ append_bogusnxdomain() {
        xappend "--bogus-nxdomain=$1"
 }
 
+append_pxe_service() {
+       xappend "--pxe-service=$1"
+}
+
 dnsmasq() {
        local cfg="$1"
        append_bool "$cfg" authoritative "--dhcp-authoritative"
@@ -121,6 +131,8 @@ dnsmasq() {
        append_bool "$cfg" nonwildcard "--bind-interfaces"
        append_bool "$cfg" fqdn "--dhcp-fqdn"
        append_bool "$cfg" proxydnssec "--proxy-dnssec"
+       append_bool "$cfg" localservice "--local-service"
+       append_bool "$cfg" quietdhcp "--quiet-dhcp"
 
        append_parm "$cfg" dhcpscript "--dhcp-script"
        append_parm "$cfg" cachesize "--cache-size"
@@ -133,6 +145,7 @@ dnsmasq() {
        append_parm "$cfg" "local" "--server"
        config_list_foreach "$cfg" "server" append_server
        config_list_foreach "$cfg" "address" append_address
+       config_list_foreach "$cfg" "ipset" append_ipset
        config_list_foreach "$cfg" "interface" append_interface
        config_list_foreach "$cfg" "notinterface" append_notinterface
        config_list_foreach "$cfg" "addnhosts" append_addnhosts
@@ -142,7 +155,8 @@ dnsmasq() {
        append_parm "$cfg" "tftp_root" "--tftp-root"
        append_parm "$cfg" "dhcp_boot" "--dhcp-boot"
        append_parm "$cfg" "local_ttl" "--local-ttl"
-
+       append_parm "$cfg" "pxe_prompt" "--pxe-prompt"
+       config_list_foreach "$cfg" "pxe_service" append_pxe_service
        config_get DOMAIN "$cfg" domain
 
        config_get_bool ADD_LOCAL_DOMAIN "$cfg" add_local_domain 1
@@ -185,6 +199,13 @@ dnsmasq() {
                config_list_foreach "$cfg" rebind_domain append_rebind_domain
        }
 
+       config_get_bool dnssec "$cfg" dnssec 0
+       [ "$dnssec" -gt 0 ] && {
+               xappend "--conf-file=$TRUSTANCHORSFILE"
+               xappend "--dnssec"
+               append_bool "$cfg" dnsseccheckunsigned "--dnssec-check-unsigned"
+       }
+
        dhcp_option_add "$cfg" "" 0
 
        xappend "--dhcp-broadcast=tag:needs-broadcast"
@@ -284,15 +305,22 @@ dhcp_host_add() {
        config_get ip "$cfg" ip
        [ -n "$ip" -o -n "$name" ] || return 0
 
+       config_get_bool dns "$cfg" dns 0
+       [ "$dns" = "1" -a -n "$ip" -a -n "$name" ] && {
+               echo "$ip $name${DOMAIN:+.$DOMAIN}" >> $HOSTFILE
+       }
+
        config_get mac "$cfg" mac
-       [ -z "$mac" ] && {
+       if [ -n "$mac" ]; then
+               # --dhcp-host=00:20:e0:3b:13:af,192.168.0.199,lap
+               macs=""
+               for m in $mac; do append macs "$m" ","; done
+       else
+               # --dhcp-host=lap,192.168.0.199
                [ -n "$name" ] || return 0
-               mac="$name"
+               macs="$name"
                name=""
-       }
-
-       macs=""
-       for m in $mac; do append macs "$m" ","; done
+       fi
 
        config_get tag "$cfg" tag
 
@@ -341,12 +369,11 @@ dhcp_boot_add() {
        [ -n "$filename" ] || return 0
 
        config_get servername "$cfg" servername
-       [ -n "$servername" ] || return 0
-
        config_get serveraddress "$cfg" serveraddress
-       [ -n "$serveraddress" ] || return 0
 
-       xappend "--dhcp-boot=${networkid:+net:$networkid,}$filename,$servername,$serveraddress"
+       [ -n "$serveraddress" -a ! -n "$servername" ] && return 0
+
+       xappend "--dhcp-boot=${networkid:+net:$networkid,}${filename}${servername:+,$servername}${serveraddress:+,$serveraddress}"
 
        config_get_bool force "$cfg" force 0
 
@@ -359,6 +386,9 @@ dhcp_add() {
        config_get net "$cfg" interface
        [ -n "$net" ] || return 0
 
+       config_get dhcpv4 "$cfg" dhcpv4
+       [ "$dhcpv4" != "disabled" ] || return 0
+
        config_get networkid "$cfg" networkid
        [ -n "$networkid" ] || networkid="$net"
 
@@ -424,13 +454,10 @@ dhcp_domain_add() {
        [ -n "$ip" ] || return 0
 
        for name in $names; do
-               [ "${name%.*}" == "$name" ] && \
-                       name="$name${DOMAIN:+.$DOMAIN}"
-
-               record="${record:+$record/}$name"
+               record="${record:+$record }$name"
        done
 
-       xappend "--address=/$record/$ip"
+       echo "$ip $record" >> $HOSTFILE
 }
 
 dhcp_srv_add() {
@@ -522,12 +549,14 @@ start_service() {
        procd_open_instance
        procd_set_param command $PROG -C $CONFIGFILE -k
        procd_set_param file $CONFIGFILE
+       procd_set_param respawn
        procd_close_instance
 
        # before we can call xappend
        mkdir -p $(dirname $CONFIGFILE)
 
        echo "# auto-generated config file from /etc/config/dhcp" > $CONFIGFILE
+       echo "# auto-generated config file from /etc/config/dhcp" > $HOSTFILE
 
        # if we did this last, we could override auto-generated config
        [ -f /etc/dnsmasq.conf ] && {
@@ -553,7 +582,7 @@ start_service() {
        local lanaddr
        [ $ADD_LOCAL_HOSTNAME -eq 1 ] && network_get_ipaddr lanaddr "lan" && {
                local hostname="$(uci_get system @system[0] hostname OpenWrt)"
-               dhcp_hostrecord_add "" "${hostname%.$DOMAIN}${DOMAIN:+.$DOMAIN ${hostname%.$DOMAIN}}" "$lanaddr"
+               dhcp_domain_add "" "$hostname" "$lanaddr"
        }
 
        echo >> $CONFIGFILE