forked from freifunk-franken/firmware
treewide: replace IP string manipulation by owipcalc tool
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 <freifunk@adrianschmutzler.de> Reviewed-by: Fabian Bläse <fabian@blaese.de>
This commit is contained in:
parent
f8b93325f2
commit
0092713196
|
@ -1,7 +1,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=fff-hoods
|
PKG_NAME:=fff-hoods
|
||||||
PKG_RELEASE:=17
|
PKG_RELEASE:=18
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ define Package/$(PKG_NAME)
|
||||||
+fff-web-hood \
|
+fff-web-hood \
|
||||||
+fff-wireless \
|
+fff-wireless \
|
||||||
+jshn \
|
+jshn \
|
||||||
|
+owipcalc \
|
||||||
+@BUSYBOX_CONFIG_WGET \
|
+@BUSYBOX_CONFIG_WGET \
|
||||||
+@BUSYBOX_CONFIG_FEATURE_WGET_TIMEOUT
|
+@BUSYBOX_CONFIG_FEATURE_WGET_TIMEOUT
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -189,12 +189,13 @@ if [ -s "$hoodfiletmp" ]; then
|
||||||
json_get_var prefix ula_prefix
|
json_get_var prefix ula_prefix
|
||||||
# Set $prefix::MAC as IP
|
# Set $prefix::MAC as IP
|
||||||
if [ -n "$prefix" ] ; then
|
if [ -n "$prefix" ] ; then
|
||||||
prefix="$(echo "$prefix" | sed -e 's,\\,,')"
|
# remove escape character
|
||||||
mac="$(cat "/sys/class/net/br-client/address")"
|
prefix=$(echo "$prefix" | sed -e 's,\\,,')
|
||||||
addr="$(ipMacAssemble "$prefix" "$mac")"
|
# create proper prefix
|
||||||
addr="$(ipTidyColon "$addr")"
|
prefix=$(echo "$prefix" | sed -e 's,/,:/,')
|
||||||
addr_eui="$(ipEUIAssemble "$prefix" "$mac")"
|
mac=$(cat "/sys/class/net/br-client/address")
|
||||||
addr_eui="$(ipTidyColon "$addr_eui")"
|
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
|
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
|
ip -6 addr del "$ip" dev br-client
|
||||||
done
|
done
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=fff-network
|
PKG_NAME:=fff-network
|
||||||
PKG_RELEASE:=27
|
PKG_RELEASE:=28
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
@ -12,7 +12,10 @@ define Package/$(PKG_NAME)
|
||||||
CATEGORY:=Freifunk
|
CATEGORY:=Freifunk
|
||||||
TITLE:=Freifunk-Franken network configuration
|
TITLE:=Freifunk-Franken network configuration
|
||||||
URL:=http://www.freifunk-franken.de
|
URL:=http://www.freifunk-franken.de
|
||||||
DEPENDS:=+fff-boardname +fff-firewall
|
DEPENDS:= \
|
||||||
|
+owipcalc \
|
||||||
|
+fff-boardname \
|
||||||
|
+fff-firewall
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/$(PKG_NAME)/description
|
define Package/$(PKG_NAME)/description
|
||||||
|
|
|
@ -29,62 +29,6 @@ ipEUISuffix() {
|
||||||
return 0
|
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() {
|
macFlipLocalBit() {
|
||||||
# Returns given MAC-address with locally administered bit flipped
|
# Returns given MAC-address with locally administered bit flipped
|
||||||
#
|
#
|
||||||
|
|
|
@ -195,9 +195,9 @@ else
|
||||||
ip -6 addr del $ip dev br-client
|
ip -6 addr del $ip dev br-client
|
||||||
done
|
done
|
||||||
|
|
||||||
prefix="fdff:0::/64"
|
prefix="fdff::/64"
|
||||||
# Set $prefix::MAC as IP
|
# Set $prefix::MAC as IP
|
||||||
addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
|
addr=$(owipcalc "$prefix" add "::$(ipMacSuffix "$ROUTERMAC")")
|
||||||
ip -6 addr add $addr dev br-client
|
ip -6 addr add $addr dev br-client
|
||||||
|
|
||||||
uci -q del network.globals
|
uci -q del network.globals
|
||||||
|
@ -207,12 +207,12 @@ else
|
||||||
uci -q set network.client.proto=static
|
uci -q set network.client.proto=static
|
||||||
|
|
||||||
# Set $prefix::1 as IP
|
# Set $prefix::1 as IP
|
||||||
addr="$(ipAssemble "$prefix" "1")"
|
addr=$(owipcalc "$prefix" add ::1)
|
||||||
ip -6 addr add $addr dev br-client
|
ip -6 addr add $addr dev br-client
|
||||||
uci -q add_list network.client.ip6addr=$addr
|
uci -q add_list network.client.ip6addr=$addr
|
||||||
|
|
||||||
# Set $prefix::link-local as IP
|
# Set $prefix::link-local as IP
|
||||||
addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
|
addr=$(owipcalc "$prefix" add "::$(ipEUISuffix "$ROUTERMAC")")
|
||||||
ip -6 addr add $addr dev br-client
|
ip -6 addr add $addr dev br-client
|
||||||
uci -q add_list network.client.ip6addr=$addr
|
uci -q add_list network.client.ip6addr=$addr
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=fff-wireguard
|
PKG_NAME:=fff-wireguard
|
||||||
PKG_RELEASE:=4
|
PKG_RELEASE:=5
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/fff-wireguard
|
PKG_BUILD_DIR:=$(BUILD_DIR)/fff-wireguard
|
||||||
|
|
||||||
|
@ -12,9 +12,11 @@ define Package/fff-wireguard
|
||||||
CATEGORY:=Freifunk
|
CATEGORY:=Freifunk
|
||||||
TITLE:=Freifunk-Franken wireguard
|
TITLE:=Freifunk-Franken wireguard
|
||||||
URL:=https://www.freifunk-franken.de
|
URL:=https://www.freifunk-franken.de
|
||||||
DEPENDS:=+wireguard \
|
DEPENDS:= \
|
||||||
+fff-network \
|
+owipcalc \
|
||||||
+fff-babeld
|
+wireguard \
|
||||||
|
+fff-babeld \
|
||||||
|
+fff-network
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/fff-wireguard/description
|
define Package/fff-wireguard/description
|
||||||
|
|
|
@ -116,7 +116,7 @@ configure() {
|
||||||
uci -q del network.$prefixname.addresses
|
uci -q del network.$prefixname.addresses
|
||||||
|
|
||||||
# add link local address
|
# 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
|
# add peer_ip
|
||||||
babel_add_peeraddr "network.$prefixname.addresses"
|
babel_add_peeraddr "network.$prefixname.addresses"
|
||||||
|
|
Loading…
Reference in New Issue