Allow configuring ipsets with dedicated config sections:

    config ipset
        list name 'ss_rules_dst_forward'
        list name 'ss_rules6_dst_forward'
        list domain 't.me'
        list domain 'telegram.org'

instead of current, rather inconvenient syntax:

    config dnsmasq
        ...
        list ipset 
'/t.me/telegram.org/ss_rules_dst_forward,ss_rules6_dst_forward'

Current syntax will still continue to work though.

With this change, a LuCI GUI for DNS ipsets should be easy to implement.

Signed-off-by: Aleksandr Mezin <mezin.alexan...@gmail.com>
---
 .../services/dnsmasq/files/dnsmasq.init       | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/package/network/services/dnsmasq/files/dnsmasq.init 
b/package/network/services/dnsmasq/files/dnsmasq.init
index 0fa3074f92..fff8f8f793 100644
--- a/package/network/services/dnsmasq/files/dnsmasq.init
+++ b/package/network/services/dnsmasq/files/dnsmasq.init
@@ -769,6 +769,29 @@ dhcp_relay_add() {
        fi
 }
 
+dnsmasq_ipset_add() {
+       local cfg="$1"
+       local ipsets domains
+
+       add_ipset() {
+               ipsets="${ipsets:+$ipsets,}$1"
+       }
+
+       add_domain() {
+               # leading '/' is expected
+               domains="$domains/$1"
+       }
+
+       config_list_foreach "$cfg" "name" add_ipset
+       config_list_foreach "$cfg" "domain" add_domain
+
+       if [ -z "$ipsets" ] || [ -z "$domains" ]; then
+               return 0
+       fi
+
+       xappend "--ipset=$domains/$ipsets"
+}
+
 dnsmasq_start()
 {
        local cfg="$1"
@@ -1056,6 +1079,10 @@ dnsmasq_start()
        config_foreach filter_dnsmasq cname dhcp_cname_add "$cfg"
        echo >> $CONFIGFILE_TMP
 
+       echo >> $CONFIGFILE_TMP
+       config_foreach filter_dnsmasq ipset dnsmasq_ipset_add "$cfg"
+       echo >> $CONFIGFILE_TMP
+
        echo >> $CONFIGFILE_TMP
        mv -f $CONFIGFILE_TMP $CONFIGFILE
        mv -f $HOSTFILE_TMP $HOSTFILE
-- 
2.29.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to