From 009271319603cee68daa6a3f04d6ac947bdee28c Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Wed, 13 Jan 2021 21:12:54 +0100 Subject: [PATCH] treewide: replace IP string manipulation by owipcalc tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owipcalc tool provides an "add" algorithm which can be used to concateneted IPv6 addresses from prefix and suffix. Since it's available upstream and our string manipulation is ugly, let's replace our IP concatenation with that tool. The package consists of a single .c file with about 1000 lines resulting in about 4 kB for the ipk package. This patch does _not_ introduce any conceptual changes yet. Thus, the "wrong" IPv6 prefix from KeyXchange will be expected in the same format, it is just healed for the new code for now. The change allows to get rid of some bloat, i.e. some quite trivial custom functions on the way. This also drops the ipTidyColon() function, as owipcalc seems to return the collapsed version by default. Signed-off-by: Adrian Schmutzler Reviewed-by: Fabian Bläse --- src/packages/fff/fff-hoods/Makefile | 3 +- .../fff-hoods/files/usr/sbin/configurehood | 13 +++-- src/packages/fff/fff-network/Makefile | 7 ++- .../files/lib/functions/fff/network | 56 ------------------- .../files/usr/sbin/configurenetwork | 8 +-- src/packages/fff/fff-wireguard/Makefile | 10 ++-- .../files/etc/layer3.d/50-wireguard | 2 +- 7 files changed, 25 insertions(+), 74 deletions(-) diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile index c17d807d..88527909 100644 --- a/src/packages/fff/fff-hoods/Makefile +++ b/src/packages/fff/fff-hoods/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-hoods -PKG_RELEASE:=17 +PKG_RELEASE:=18 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -22,6 +22,7 @@ define Package/$(PKG_NAME) +fff-web-hood \ +fff-wireless \ +jshn \ + +owipcalc \ +@BUSYBOX_CONFIG_WGET \ +@BUSYBOX_CONFIG_FEATURE_WGET_TIMEOUT endef diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood index 1e6745f0..e25db2ee 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -189,12 +189,13 @@ if [ -s "$hoodfiletmp" ]; then json_get_var prefix ula_prefix # Set $prefix::MAC as IP if [ -n "$prefix" ] ; then - prefix="$(echo "$prefix" | sed -e 's,\\,,')" - mac="$(cat "/sys/class/net/br-client/address")" - addr="$(ipMacAssemble "$prefix" "$mac")" - addr="$(ipTidyColon "$addr")" - addr_eui="$(ipEUIAssemble "$prefix" "$mac")" - addr_eui="$(ipTidyColon "$addr_eui")" + # remove escape character + prefix=$(echo "$prefix" | sed -e 's,\\,,') + # create proper prefix + prefix=$(echo "$prefix" | sed -e 's,/,:/,') + mac=$(cat "/sys/class/net/br-client/address") + addr=$(owipcalc "$prefix" add "::$(ipMacSuffix "$mac")") + addr_eui=$(owipcalc "$prefix" add "::$(ipEUISuffix "$mac")") for ip in $(ip -6 addr show dev br-client | grep inet6 | grep -v -e " $addr" -e " $addr_eui" -e " fe80::" -e " fdff::" | cut -f6 -d " "); do ip -6 addr del "$ip" dev br-client done diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile index 0122a9ab..dc1a70d8 100644 --- a/src/packages/fff/fff-network/Makefile +++ b/src/packages/fff/fff-network/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-network -PKG_RELEASE:=27 +PKG_RELEASE:=28 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -12,7 +12,10 @@ define Package/$(PKG_NAME) CATEGORY:=Freifunk TITLE:=Freifunk-Franken network configuration URL:=http://www.freifunk-franken.de - DEPENDS:=+fff-boardname +fff-firewall + DEPENDS:= \ + +owipcalc \ + +fff-boardname \ + +fff-firewall endef define Package/$(PKG_NAME)/description diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/network b/src/packages/fff/fff-network/files/lib/functions/fff/network index 06a6a84d..e17426a8 100644 --- a/src/packages/fff/fff-network/files/lib/functions/fff/network +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network @@ -29,62 +29,6 @@ ipEUISuffix() { return 0 } -ipAssemble() { - # Concatenates a prefix (1st argument) and a suffix (2nd argument) to a merged IPv6 address - # (The prefix has to bear the subnet: fdff::/64) - # (The prefix must only contain the higher 64 bits (correct: 0:0:0:0: or 0:: - wrong: 0:0:0:0::) - - [ $# -ne "2" ] && return 1 - - local prefix=$1 - local suffix=$2 - - echo "$prefix" | sed -e 's,/,'$suffix'/,' - return 0 -} - -ipMacAssemble() { - # Concatenates a prefix (1st argument) and a MAC-based suffix (MAC address as 2nd argument) to a merged IPv6 address - # (Details on prefix: Check ipAssemble(), details on suffix: Check ipMacSuffix()) - - [ $# -ne "2" ] && return 1 - - local prefix=$1 - local mac=$2 - - suffix="$(ipMacSuffix "$mac")" - ipAssemble "$prefix" "$suffix" - return 0 -} - -ipEUIAssemble() { - # Concatenates a prefix (1st argument) and an EUI-based suffix (MAC address as 2nd argument) to a merged IPv6 address - # (Details on prefix: Check ipAssemble(), details on suffix: Check ipEUISuffix()) - - [ $# -ne "2" ] && return 1 - - local prefix=$1 - local mac=$2 - - suffix="$(ipEUISuffix "$mac")" - ipAssemble "$prefix" "$suffix" - return 0 -} - -ipTidyColon() { - # Collapses zeros to :: to yield short but valid IPv6 addresses - # - # Argument: IPv6 address to be shortened - - [ $# -ne "1" ] && return 1 - - local addr=$1 - - echo "$addr" | grep -q "::" || addr="$(echo "$addr" | sed -e 's,:[0:]*:,::,')" - echo "$addr" - return 0 -} - macFlipLocalBit() { # Returns given MAC-address with locally administered bit flipped # diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork index d683e7da..c8a8ecc7 100755 --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork @@ -195,9 +195,9 @@ else ip -6 addr del $ip dev br-client done - prefix="fdff:0::/64" + prefix="fdff::/64" # Set $prefix::MAC as IP - addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" + addr=$(owipcalc "$prefix" add "::$(ipMacSuffix "$ROUTERMAC")") ip -6 addr add $addr dev br-client uci -q del network.globals @@ -207,12 +207,12 @@ else uci -q set network.client.proto=static # Set $prefix::1 as IP - addr="$(ipAssemble "$prefix" "1")" + addr=$(owipcalc "$prefix" add ::1) ip -6 addr add $addr dev br-client uci -q add_list network.client.ip6addr=$addr # Set $prefix::link-local as IP - addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" + addr=$(owipcalc "$prefix" add "::$(ipEUISuffix "$ROUTERMAC")") ip -6 addr add $addr dev br-client uci -q add_list network.client.ip6addr=$addr diff --git a/src/packages/fff/fff-wireguard/Makefile b/src/packages/fff/fff-wireguard/Makefile index 01c9acd6..5914fe95 100644 --- a/src/packages/fff/fff-wireguard/Makefile +++ b/src/packages/fff/fff-wireguard/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-wireguard -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_BUILD_DIR:=$(BUILD_DIR)/fff-wireguard @@ -12,9 +12,11 @@ define Package/fff-wireguard CATEGORY:=Freifunk TITLE:=Freifunk-Franken wireguard URL:=https://www.freifunk-franken.de - DEPENDS:=+wireguard \ - +fff-network \ - +fff-babeld + DEPENDS:= \ + +owipcalc \ + +wireguard \ + +fff-babeld \ + +fff-network endef define Package/fff-wireguard/description diff --git a/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard b/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard index d95d522f..7f7d38c8 100644 --- a/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard +++ b/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard @@ -116,7 +116,7 @@ configure() { uci -q del network.$prefixname.addresses # add link local address - uci add_list network.$prefixname.addresses="$(ipEUIAssemble "fe80::/64" "$ROUTERMAC")" + uci add_list network.$prefixname.addresses="$(owipcalc "fe80::/64" add "::$(ipEUISuffix "$ROUTERMAC")")" # add peer_ip babel_add_peeraddr "network.$prefixname.addresses"