diff --git a/src/packages/fff/fff-gre/Makefile b/src/packages/fff/fff-gre/Makefile new file mode 100644 index 00000000..8a46cb29 --- /dev/null +++ b/src/packages/fff/fff-gre/Makefile @@ -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 + +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 +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)) diff --git a/src/packages/fff/fff-gre/files/etc/gateway.d/50-gre b/src/packages/fff/fff-gre/files/etc/gateway.d/50-gre new file mode 100644 index 00000000..9a290d19 --- /dev/null +++ b/src/packages/fff/fff-gre/files/etc/gateway.d/50-gre @@ -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")" + + # 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; } + + # add babel interface + babel_add_interface "$prefixname" "$prefixname" 'tunnel' "$rxcost" || { echo "ERROR: Could not add babeld interface for gre6eer $name"; exit 1; } + } + + config_load gateway + config_foreach add_gre6peer gre6peer +} + +commit() { + uci commit network + uci commit babeld +} + +revert() { + uci revert network + uci revert babeld +} diff --git a/src/packages/fff/fff-layer3/Makefile b/src/packages/fff/fff-layer3/Makefile index ce3d2002..06eb7abf 100644 --- a/src/packages/fff/fff-layer3/Makefile +++ b/src/packages/fff/fff-layer3/Makefile @@ -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 \