From 493208b00b78463641fc179798b84a61c7c2ad72 Mon Sep 17 00:00:00 2001 From: Johannes Kimmel Date: Tue, 19 Jan 2021 09:07:29 +0100 Subject: [PATCH] layer3: move from fixed address to fixed hostname Add "local.fff.community" hostname that resolves to the local router. All possible addresses are made available to provide multiple fallbacks: - client ipv4 and ipv6 addresses - peer_ip and peer_ip6 addresses - fdff::1/64 on first boot and after factory reset The moment any ipv6 network is configured, all occurrences of the fixed fdff::/64 network are removed. Fixes #76 Signed-off-by: Johannes Kimmel --- src/packages/fff/fff-dhcp/Makefile | 2 +- .../fff/fff-dhcp/files/etc/layer3.d/35-dns | 45 +++++++++++++++++++ .../files/etc/uci-defaults/90-fff-dhcp | 5 +++ src/packages/fff/fff-layer3-config/Makefile | 2 +- .../files/etc/layer3.d/30-network-client | 8 +--- 5 files changed, 54 insertions(+), 8 deletions(-) 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