forked from freifunk-franken/firmware
Add fff-gre package
This package adds gateway.d scripts which create peering interfaces using grev6. Signed-off-by: Fabian Bläse <fabian@blaese.de>
This commit is contained in:
parent
e3954fddf5
commit
6e5c1e82fc
|
@ -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))
|
|
@ -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
|
||||
}
|
|
@ -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 \
|
||||
|
|
Loading…
Reference in New Issue