WIP: Add fff-gre package #112

Closed
fbl wants to merge 1 commits from fbl/firmware:gre into master
3 changed files with 158 additions and 3 deletions

View File

@ -0,0 +1,43 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-gre
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/fff-gre
Review

PKG_VERSION, PKG_BUILD_DIR, Build/Prepare und Build/Configure kann weg.

PKG_VERSION, PKG_BUILD_DIR, Build/Prepare und Build/Configure kann weg.
include $(INCLUDE_DIR)/package.mk
define Package/fff-gre
SECTION:=base
CATEGORY:=Freifunk
TITLE:=Freifunk-Franken gre
URL:=https://www.freifunk-franken.de
DEPENDS:=+gre \
+@PACKAGE_grev4 \
+@PACKAGE_grev6 \
+fff-network
Review

Maybe use the newer style (with tab indent only):

	DEPENDS:= \
		+gre \
		+@PACKAGE_grev4 \
		+@PACKAGE_grev6 \
		+fff-network
Maybe use the newer style (with tab indent only): ``` DEPENDS:= \ +gre \ +@PACKAGE_grev4 \ +@PACKAGE_grev6 \ +fff-network ```
endef
define Package/fff-gre/description
This is the Freifunk Franken Firmware gre package.
This package provides configuration scripts for gre tunnels.
endef
define Build/Prepare
echo "all: " > $(PKG_BUILD_DIR)/Makefile
endef
define Build/Configure
# nothing
endef
define Build/Compile
# nothing
endef
define Package/fff-gre/install
$(CP) ./files/* $(1)/
endef
$(eval $(call BuildPackage,fff-gre))

View File

@ -0,0 +1,114 @@
. /lib/functions.sh
. /lib/functions/fff/network
. /lib/functions/fff/babel
#load board specific properties
BOARD="$(uci get board.model.name)"
. /etc/network.$BOARD
configure() {
# remove peers missing in gateway config
remove_gre6peer() {
local name="$1"
# check prefix
if [ "$name" = "${name#gre_}" ]; then
return
fi
if ! uci -q get gateway.${name#gre_} > /dev/null; then
# remove interfaces
uci -q del network.$name
uci -q del network.${name}_ip
# remove iif-rules
babel_delete_iifrules "$name"
# remove babel interface
babel_delete_interface "$name"
fi
}
config_load babeld
config_foreach remove_gre6peer interface
# add new peers
add_gre6peer() {
local name="$1"
local prefixname="gre_$name"
local ip6addr
local peer6addr
local mtu
# ensure name length
if [ ${#name} -gt 5 ]; then
echo "ERROR: name $name is too long!"
exit 1
fi
# get rxcost
if rxcost=$(uci -q get gateway.$name.rxcost); then
rxcost="$rxcost"
else
rxcost=16384
fi
# get addresses properties
if ! ip6addr=$(uci -q get gateway.$name.ip6addr); then
echo "ERROR: No ip6addr set for gre6peer $name!"
exit 1
fi
if ! peer6addr=$(uci -q get gateway.$name.peer6addr); then
echo "ERROR: No peer6addr set for gre6peer $name!"
exit 1
fi
mtu=$(uci -q get gateway.$name.mtu)
# add interface
uci set network.$prefixname=interface
uci set network.$prefixname.proto=grev6
uci set network.$prefixname.nohostroute='1'
uci set network.$prefixname.tunlink='wan'
uci set network.$prefixname.mtu="${mtu:-1448}"
uci set network.$prefixname.ip6addr="$ip6addr"
uci set network.$prefixname.peer6addr="$peer6addr"
# remove old addresses
uci -q del network.${prefixname}_ip.ip6addr
uci -q del network.${prefixname}_ip.ipaddr
# logical interface for adding ips
uci set network.${prefixname}_ip=interface
uci set network.${prefixname}_ip.proto=static
uci set network.${prefixname}_ip.ifname="@$prefixname"
# add link local address
uci add_list network.${prefixname}_ip.ip6addr="$(ipEUIAssemble "fe80::/64" "$ROUTERMAC")"
Review

Two comments:

  1. owipcalc needs to be used here
  2. Reading the ROUTERMAC from the config is quite complicated here. We not just use either 'uci get network.client.macaddress' or 'cat /sys/class/net/br-client/address', which would make us fully independent of how we store that config here. (Ich werde da demnächst mal einen Patch schicken, um das auch bei babel/wg zu ändern.)
Two comments: 1. owipcalc needs to be used here 2. Reading the ROUTERMAC from the config is quite complicated here. We not just use either 'uci get network.client.macaddress' or 'cat /sys/class/net/br-client/address', which would make us fully independent of how we store that config here. (Ich werde da demnächst mal einen Patch schicken, um das auch bei babel/wg zu ändern.)
# peer_ip
babel_add_peeraddr "network.${prefixname}_ip.ipaddr"
babel_add_peer6addr "network.${prefixname}_ip.ip6addr"
# add iif-rules
babel_add_iifrules "$prefixname" || { echo "ERROR: Could not add iif-rules for gre6eer $name"; exit 1; }
Review

Multiline wäre schöner:

babel_add_iifrules "$prefixname" || {
	echo "ERROR: Could not add iif-rules for gre6eer $name";
    exit 1;
    }
Multiline wäre schöner: ``` babel_add_iifrules "$prefixname" || { echo "ERROR: Could not add iif-rules for gre6eer $name"; exit 1; } ```
# add babel interface
babel_add_interface "$prefixname" "$prefixname" 'tunnel' "$rxcost" || { echo "ERROR: Could not add babeld interface for gre6eer $name"; exit 1; }
Review

Selber Kommentar, außerdem ist die zeile so eh zu lang.

Die Anführungszeichen bei 'tunnel' können auch weg.

Selber Kommentar, außerdem ist die zeile so eh zu lang. Die Anführungszeichen bei 'tunnel' können auch weg.
}
config_load gateway
config_foreach add_gre6peer gre6peer
}
commit() {
uci commit network
uci commit babeld
}
revert() {
uci revert network
uci revert babeld
}

View File

@ -14,6 +14,7 @@ define Package/fff-layer3
+fff-babeld \
+fff-boardname \
+fff-dhcp \
+fff-gre \
+fff-layer3-config \
+fff-network \
+fff-ra \
@ -25,9 +26,6 @@ define Package/fff-layer3
+kmod-ebtables-ipv4 \
+kmod-ebtables-ipv6 \
+kmod-sched-cake \
+gre \
+@PACKAGE_grev4 \
+@PACKAGE_grev6 \
+iperf3 \
+ip-full \
+iptables-mod-filter \