diff --git a/src/packages/fff/fff-dhcp/Makefile b/src/packages/fff/fff-dhcp/Makefile index cb968948..d1507625 100644 --- a/src/packages/fff/fff-dhcp/Makefile +++ b/src/packages/fff/fff-dhcp/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-dhcp -PKG_RELEASE:=5 +PKG_RELEASE:=6 include $(INCLUDE_DIR)/package.mk diff --git a/src/packages/fff/fff-dhcp/files/etc/layer3.d/35-dns b/src/packages/fff/fff-dhcp/files/etc/layer3.d/35-dns index ad9f1cdc..424201e9 100644 --- a/src/packages/fff/fff-dhcp/files/etc/layer3.d/35-dns +++ b/src/packages/fff/fff-dhcp/files/etc/layer3.d/35-dns @@ -1,3 +1,6 @@ +# load uci functions +. /lib/functions.sh + configure() { ## dns uci -q del dhcp.@dnsmasq[0].server @@ -10,6 +13,48 @@ configure() { else echo "WARNING: No DNS servers set!" fi + + # remove all domain autogenerated entries + remove_domains() { + local name="$1" + + case $(uci -q get dhcp."$name".addedbyautoconfig) in + /etc/layer3.d/35-dns | /etc/uci-defaults/90-fff-dhcp) + uci -q del dhcp."$name" ;; + esac + } + config_load dhcp + config_foreach remove_domains domain + + local dnsips + local have_dns=false + + # gather all ips belonging to the router + dnsips=$( + uci -q batch <<- EOF | cut -d / -f1 | sort -u + get network.client.ip6addr + get network.client.ipaddr + get gateway.@gateway[0].peer_ip + get gateway.@gateway[0].peer_ip6 + EOF + ) + + for ip in $dnsips; do + ip=$(echo "$ip" | cut -d / -f1) + case "$ip" in + fe80*) continue ;; + esac + + have_dns=true + uci -q add dhcp domain > /dev/null + uci -q set dhcp.@domain[-1].ip="$ip" + uci -q set dhcp.@domain[-1].name="local.fff.community" + uci -q set dhcp.@domain[-1].addedbyautoconfig="/etc/layer3.d/35-dns" + done + + if ! $have_dns; then + echo "WARNING: No valid device ip available for local DNS." + fi } apply() { diff --git a/src/packages/fff/fff-dhcp/files/etc/uci-defaults/90-fff-dhcp b/src/packages/fff/fff-dhcp/files/etc/uci-defaults/90-fff-dhcp index 5b59aafd..0718ba3e 100644 --- a/src/packages/fff/fff-dhcp/files/etc/uci-defaults/90-fff-dhcp +++ b/src/packages/fff/fff-dhcp/files/etc/uci-defaults/90-fff-dhcp @@ -27,6 +27,11 @@ uci batch >/dev/null < /dev/null; then - uci del_list network.client.ip6addr="$ip" - fi - done #set new ip6addr if ip6addr=$(uci -q get gateway.@client[0].ip6addr); then + #remove old ip6addr + uci delete network.client.ip6addr for ip in $ip6addr; do uci add_list network.client.ip6addr=$ip done