From: Paul Fertser Date: Thu, 23 Sep 2021 07:28:45 +0000 (+0300) Subject: dnsmasq: add match_tag for --dhcp-host X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fstaging%2Fthess.git;a=commitdiff_plain;h=8a6b1a8d29cbd62f005ba20998ca9c8048ff49fc dnsmasq: add match_tag for --dhcp-host A set of tags can be specified for --dhcp-host option to restrict the assignment to the requests which match all the tags. Example usage: config vendorclass option networkid 'udhcp' option vendorclass 'udhcp' config host option mac '*:*:*:*:*:*' list match_tag 'switch.10' list match_tag 'udhcp' option ip '192.168.25.10' Signed-off-by: Paul Fertser --- diff --git a/package/network/services/dnsmasq/files/dnsmasq.init b/package/network/services/dnsmasq/files/dnsmasq.init old mode 100644 new mode 100755 index d32c6cc1a0..1e53f8f2c1 --- a/package/network/services/dnsmasq/files/dnsmasq.init +++ b/package/network/services/dnsmasq/files/dnsmasq.init @@ -332,7 +332,7 @@ dhcp_match_add() { dhcp_host_add() { local cfg="$1" - local hosttag nametime addrs duids macs tags + local hosttag nametime addrs duids macs tags mtags config_get_bool force "$cfg" force 0 @@ -357,6 +357,11 @@ dhcp_host_add() { config_get duid "$cfg" duid config_get tag "$cfg" tag + add_tag() { + mtags="${mtags}tag:$1," + } + config_list_foreach "$cfg" match_tag add_tag + if [ -n "$mac" ]; then # --dhcp-host=00:20:e0:3b:13:af,192.168.0.199,lap # many MAC are possible to track a laptop ON/OFF dock @@ -394,9 +399,9 @@ dhcp_host_add() { if [ $DNSMASQ_DHCP_VER -eq 6 ]; then addrs="${ip:+,$ip}${hostid:+,[::$hostid]}" - xappend "--dhcp-host=$macs${duids:+,$duids}$hosttag$addrs$nametime" + xappend "--dhcp-host=$mtags$macs${duids:+,$duids}$hosttag$addrs$nametime" else - xappend "--dhcp-host=$macs$hosttag${ip:+,$ip}$nametime" + xappend "--dhcp-host=$mtags$macs$hosttag${ip:+,$ip}$nametime" fi }