package/dnsmasq: permit dhcp_option in global dnsmasq config section
[openwrt/staging/chunkeey.git] / package / dnsmasq / files / dnsmasq.init
index b5ca5ca1766a16ad514d75e3b8adc7f563941004..a1334d05fcf16fc71c118fde22fedc8ce529662e 100644 (file)
@@ -143,6 +143,8 @@ dnsmasq() {
                config_list_foreach "$cfg" rebind_domain append_rebind_domain
        }
 
+       dhcp_option_add "$cfg" "" 0
+
        echo >> $CONFIGFILE
 }
 
@@ -157,7 +159,9 @@ dhcp_subscrid_add() {
 
        xappend "--dhcp-subscrid=$networkid,$subscriberid"
 
-       dhcp_option_add "$cfg" "$networkid"
+       config_get_bool force "$cfg" force 0
+
+       dhcp_option_add "$cfg" "$networkid" "$force"
 }
 
 dhcp_remoteid_add() {
@@ -171,7 +175,9 @@ dhcp_remoteid_add() {
 
        xappend "--dhcp-remoteid=$networkid,$remoteid"
 
-       dhcp_option_add "$cfg" "$networkid"
+       config_get_bool force "$cfg" force 0
+
+       dhcp_option_add "$cfg" "$networkid" "$force"
 }
 
 dhcp_circuitid_add() {
@@ -185,7 +191,9 @@ dhcp_circuitid_add() {
 
        xappend "--dhcp-circuitid=$networkid,$circuitid"
 
-       dhcp_option_add "$cfg" "$networkid"
+       config_get_bool force "$cfg" force 0
+
+       dhcp_option_add "$cfg" "$networkid" "$force"
 }
 
 dhcp_userclass_add() {
@@ -199,7 +207,9 @@ dhcp_userclass_add() {
 
        xappend "--dhcp-userclass=$networkid,$userclass"
 
-       dhcp_option_add "$cfg" "$networkid"
+       config_get_bool force "$cfg" force 0
+
+       dhcp_option_add "$cfg" "$networkid" "$force"
 }
 
 dhcp_vendorclass_add() {
@@ -213,25 +223,47 @@ dhcp_vendorclass_add() {
 
        xappend "--dhcp-vendorclass=$networkid,$vendorclass"
 
-       dhcp_option_add "$cfg" "$networkid"
+       config_get_bool force "$cfg" force 0
+
+       dhcp_option_add "$cfg" "$networkid" "$force"
 }
 
 dhcp_host_add() {
        local cfg="$1"
 
+       config_get_bool force "$cfg" force 0
+
        config_get networkid "$cfg" networkid
-       [ -n "$networkid" ] && dhcp_option_add "$cfg" "$networkid"
+       [ -n "$networkid" ] && dhcp_option_add "$cfg" "$networkid" "$force"
 
        config_get name "$cfg" name
        config_get ip "$cfg" ip
-       [ -n "$ip" ] || [ -n "$name" ] || return 0
+       [ -n "$ip" -o -n "$name" ] || return 0
 
        macs=""
        config_get mac "$cfg" mac
        for m in $mac; do append macs "$m" ","; done
        [ -n "$macs" ] || return 0
 
-       xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${ip:+,$ip}${name:+,$name}"
+       config_get tag "$cfg" tag
+
+       xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${tag:+,set:$tag}${ip:+,$ip}${name:+,$name}"
+}
+
+dhcp_tag_add() {
+       local cfg="$1"
+
+       tag="$cfg"
+
+       [ -n "$tag" ] || return 0
+
+       config_get_bool force "$cfg" force 0
+       [ "$force" = "0" ] && force=
+
+       config_get option "$cfg" dhcp_option
+       for o in $option; do
+               xappend "--dhcp-option${force:+-force}=tag:$tag,$o"
+       done
 }
 
 dhcp_mac_add() {
@@ -264,7 +296,9 @@ dhcp_boot_add() {
 
        xappend "--dhcp-boot=${networkid:+net:$networkid,}$filename,$servername,$serveraddress"
 
-       dhcp_option_add "$cfg" "$networkid"
+       config_get_bool force "$cfg" force 0
+
+       dhcp_option_add "$cfg" "$networkid" "$force"
 }
 
 
@@ -324,10 +358,13 @@ dhcp_add() {
 dhcp_option_add() {
        local cfg="$1"
        local networkid="$2"
+       local force="$3"
+
+       [ "$force" = "0" ] && force=
 
        config_get dhcp_option "$cfg" dhcp_option
        for o in $dhcp_option; do
-               xappend "--dhcp-option=$networkid","$o"
+               xappend "--dhcp-option${force:+-force}=${networkid:+$networkid,}$o"
        done
 
 }
@@ -394,7 +431,7 @@ dhcp_mx_add() {
 
        local service="$domain,$relay,$pref"
 
-       append args "--mx-host=$service"
+       xappend "--mx-host=$service"
 }
 
 dhcp_cname_add() {
@@ -435,6 +472,7 @@ start() {
        echo >> $CONFIGFILE
        config_foreach dhcp_boot_add boot
        config_foreach dhcp_mac_add mac
+       config_foreach dhcp_tag_add tag
        config_foreach dhcp_vendorclass_add vendorclass
        config_foreach dhcp_userclass_add userclass
        config_foreach dhcp_circuitid_add circuitid