WIP: Add fff-gre package #112
|
@ -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
|
||||
adschm
commented
Maybe use the newer style (with tab indent only):
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))
|
|
@ -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")"
|
||||
adschm
commented
Two comments:
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; }
|
||||
adschm
commented
Multiline wäre schöner:
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; }
|
||||
adschm
commented
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
|
||||
}
|
|
@ -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
PKG_VERSION, PKG_BUILD_DIR, Build/Prepare und Build/Configure kann weg.