#!/bin/sh /etc/rc.common # Copyright (C) 2013 OpenWrt.org START=61 USE_PROCD=1 find_nameserver() { . /lib/functions/network.sh local tmp if network_find_wan tmp && network_get_dnsserver tmp "$tmp"; then echo "${tmp%% *}" return 0 fi return 1 } start_instance() { local cfg="$1" local ipset ipset6 port dns config_get ipset "$cfg" ipset config_get ipset6 "$cfg" ipset6 [ -n "$ipset$ipset6" ] || { echo "No ipset specified for instance $cfg" >&2 return 1 } config_get dns "$cfg" dns "$DEFNS" [ -n "$dns" ] || { echo "No DNS server specified for instance $cfg" >&2 return 1 } config_get port "$cfg" port $((PORT++)) procd_open_instance procd_set_param command /usr/sbin/ipset-dns "$ipset" "$ipset6" "$port" "$dns" procd_set_param env NO_DAEMONIZE=1 procd_set_param respawn procd_close_instance } service_triggers() { procd_add_reload_trigger "ipset-dns" } start_service() { PORT=53001 DEFNS="$(find_nameserver)" config_load ipset-dns config_foreach start_instance ipset-dns }