[RFC] Add package fff-vxlan-node

Submitted by Robert Langhammer on Aug. 6, 2020, 11:33 p.m.

Details

Message ID 20200806233348.4518-1-rlanghammer@web.de
State New
Headers show

Commit Message

Robert Langhammer Aug. 6, 2020, 11:33 p.m.
This package adds vxlan support to the node variant and configures the vxlan-vpn tunnels to the gateways.

A vpn section has to be added to the hoodfile for every peer (GW) supporting vxlan:

{
    "version": 1,
    "network": {
        "ula_prefix": "fd43:5602:29bd:16:\/64"
    },
    "vpn": [
        {
            "name": "rl-fff1-vx",
            "protocol": "vxlan",
            "vid": "7",
            "address": "rl-fff1.fff.community"
        },
        {
            "name": "fff-gw-mc",
            "protocol": "fastd",
...

For testing the hoods schweinfurt, hassfurt, coburg, ebern and geo can be used. "address" is the same for all hoods: rl-fff1.fff.community. The respective hood-id is used as vid.

This patch depends on "[RFC,v2] vxlan: netifd and vxlan package patches" and "Make vpn select modular.patch"

Happy testing!

Signed-off-by: Robert Langhammer <rlanghammer@web.de>
---
 src/packages/fff/fff-node/Makefile            |  3 +-
 src/packages/fff/fff-vxlan-node/Makefile      | 39 +++++++++++++++++++
 .../files/etc/uci-defaults/55-vxlan           | 15 +++++++
 .../files/etc/vpn-select.d/vxlan              | 26 +++++++++++++
 4 files changed, 82 insertions(+), 1 deletion(-)
 create mode 100644 src/packages/fff/fff-vxlan-node/Makefile
 create mode 100644 src/packages/fff/fff-vxlan-node/files/etc/uci-defaults/55-vxlan
 create mode 100644 src/packages/fff/fff-vxlan-node/files/etc/vpn-select.d/vxlan

--
2.20.1

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-node/Makefile b/src/packages/fff/fff-node/Makefile
index 0292725..8b31202 100644
--- a/src/packages/fff/fff-node/Makefile
+++ b/src/packages/fff/fff-node/Makefile
@@ -1,7 +1,7 @@ 
 include $(TOPDIR)/rules.mk

 PKG_NAME:=fff-node
-PKG_RELEASE:=2
+PKG_RELEASE:=3

 PKG_BUILD_DIR:=$(BUILD_DIR)/fff-node

@@ -14,6 +14,7 @@  define Package/fff-node
 	URL:=https://www.freifunk-franken.de
 	DEPENDS:=+fff-batman-adv \
 	         +fff-fastd \
+	         +fff-vxlan-node \
 	         +fff-firewall \
 	         +fff-hoods \
 	         +fff-uradvd
diff --git a/src/packages/fff/fff-vxlan-node/Makefile b/src/packages/fff/fff-vxlan-node/Makefile
new file mode 100644
index 0000000..233badd
--- /dev/null
+++ b/src/packages/fff/fff-vxlan-node/Makefile
@@ -0,0 +1,39 @@ 
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fff-vxlan-node
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/$(PKG_NAME)
+	SECTION:=base
+	CATEGORY:=Freifunk
+	TITLE:=Freifunk-Franken vxlan-node configuration
+	URL:=http://www.freifunk-franken.de
+	DEPENDS:=+vxlan
+endef
+
+define Package/$(PKG_NAME)/description
+	This is the vxlan for the Freifunk Franken node-Firmware
+	It is used to configure vxlan.
+endef
+
+define Build/Prepare
+	echo "all: " > $(PKG_BUILD_DIR)/Makefile
+endef
+
+define Build/Configure
+	# nothing
+endef
+
+define Build/Compile
+	# nothing
+endef
+
+define Package/$(PKG_NAME)/install
+	$(CP) ./files/* $(1)/
+endef
+
+$(eval $(call BuildPackage,$(PKG_NAME)))
diff --git a/src/packages/fff/fff-vxlan-node/files/etc/uci-defaults/55-vxlan b/src/packages/fff/fff-vxlan-node/files/etc/uci-defaults/55-vxlan
new file mode 100644
index 0000000..2e6ab69
--- /dev/null
+++ b/src/packages/fff/fff-vxlan-node/files/etc/uci-defaults/55-vxlan
@@ -0,0 +1,15 @@ 
+uci batch <<EOF
+ set network.vx0=interface
+ set network.vx0.proto=vxlan6
+ set network.vx0.ip6addr=auto
+ set network.vx0.port=8472
+ set network.vx0.srcport=8472
+ set network.vx0.mtu=1422
+ set network.vx0.disabled=1
+
+ set network.vxbat=interface
+ set network.vxbat.master=bat0
+ set network.vxbat.proto=batadv_hardif
+ set network.vxbat.ifname=vx0
+EOF
+
diff --git a/src/packages/fff/fff-vxlan-node/files/etc/vpn-select.d/vxlan b/src/packages/fff/fff-vxlan-node/files/etc/vpn-select.d/vxlan
new file mode 100644
index 0000000..0850c56
--- /dev/null
+++ b/src/packages/fff/fff-vxlan-node/files/etc/vpn-select.d/vxlan
@@ -0,0 +1,26 @@ 
+protocol=vxlan
+
+vxlan_clear() {
+	uci set network.vx0.disabled="1"
+	while uci delete network.@vxlan_peer[0]; do :; done
+}
+
+vxlan_addpeer() {
+	json_get_var vid vid
+	json_get_var address address
+	address="$( ping6 -w1 -c1 "$address" | awk -F '[()]' '{print $2; exit}' )"
+	[ -z $address ] && return
+	uci set network.vx0.vid="$vid"
+	uci set network.vx0.peer6addr="$address"
+	uci set network.vx0.disabled="0"
+
+	uci add network vxlan_peer
+	uci set network.@vxlan_peer[-1].vxlan="vx0"
+	uci set network.@vxlan_peer[-1].dst="$address"
+}
+
+vxlan_start_stop() {
+	uci commit network
+	reload_config
+}
+

Comments

Robert Langhammer Aug. 7, 2020, 12:29 a.m.
Hier http://rl-fff1.fff.community/fff-bin/vxlan-test/ liegen ein paar
fertige Images zum testen.

/etc/hoodfile muss noch angelegt werden.

Viele Grüße
Robert

Am 07.08.20 um 01:33 schrieb Robert Langhammer:
> This package adds vxlan support to the node variant and configures the vxlan-vpn tunnels to the gateways.
>
> A vpn section has to be added to the hoodfile for every peer (GW) supporting vxlan:
>
> {
>     "version": 1,
>     "network": {
>         "ula_prefix": "fd43:5602:29bd:16:\/64"
>     },
>     "vpn": [
>         {
>             "name": "rl-fff1-vx",
>             "protocol": "vxlan",
>             "vid": "7",
>             "address": "rl-fff1.fff.community"
>         },
>         {
>             "name": "fff-gw-mc",
>             "protocol": "fastd",
Adrian Schmutzler Aug. 8, 2020, 12:02 a.m.
Hallo,

nur zwei Einzelkommentare:

> +vxlan_clear() {
> +	uci set network.vx0.disabled="1"
> +	while uci delete network.@vxlan_peer[0]; do :; done }

Gefühlt und für die Konsistenz wäre mir hier ein config_foreach lieber, auch wenn man dann ne Funktion braucht.

> +
> +vxlan_addpeer() {
> +	json_get_var vid vid
> +	json_get_var address address
> +	address="$( ping6 -w1 -c1 "$address" | awk -F '[()]' '{print $2; exit}' )"
> +	[ -z $address ] && return
> +	uci set network.vx0.vid="$vid"
> +	uci set network.vx0.peer6addr="$address"
> +	uci set network.vx0.disabled="0"
> +
> +	uci add network vxlan_peer
> +	uci set network.@vxlan_peer[-1].vxlan="vx0"
> +	uci set network.@vxlan_peer[-1].dst="$address"
> +}
> +
> +vxlan_start_stop() {
> +	uci commit network
> +	reload_config

Hier bin ich mir etwas unschlüssig, ob man mitten "in" configurehood noch ein reload_config machen muss/möchte, oder ob man das vll. besser einmal am Schluss macht. Ordentlicher ist es natürlich so, aber dann haben wir irgendwann vier reload_config während einem configurehood run ...

Grüße

Adrian

> +}
> +
> --
> 2.20.1
Robert Langhammer Aug. 8, 2020, noon
Hi, s. inline

Am 08.08.20 um 02:02 schrieb Adrian Schmutzler:
> Hallo,
>
> nur zwei Einzelkommentare:
>
>> +vxlan_clear() {
>> +	uci set network.vx0.disabled="1"
>> +	while uci delete network.@vxlan_peer[0]; do :; done }
> Gefühlt und für die Konsistenz wäre mir hier ein config_foreach lieber, auch wenn man dann ne Funktion braucht.
Ich bin ein Fan von kleinen Einzeilern und möglichst viel shell-builtin
wenn möglich. Darum so.
>
>> +
>> +vxlan_addpeer() {
>> +	json_get_var vid vid
>> +	json_get_var address address
>> +	address="$( ping6 -w1 -c1 "$address" | awk -F '[()]' '{print $2; exit}' )"
>> +	[ -z $address ] && return
>> +	uci set network.vx0.vid="$vid"
>> +	uci set network.vx0.peer6addr="$address"
>> +	uci set network.vx0.disabled="0"
>> +
>> +	uci add network vxlan_peer
>> +	uci set network.@vxlan_peer[-1].vxlan="vx0"
>> +	uci set network.@vxlan_peer[-1].dst="$address"
>> +}
>> +
>> +vxlan_start_stop() {
>> +	uci commit network
>> +	reload_config
> Hier bin ich mir etwas unschlüssig, ob man mitten "in" configurehood noch ein reload_config machen muss/möchte, oder ob man das vll. besser einmal am Schluss macht. Ordentlicher ist es natürlich so, aber dann haben wir irgendwann vier reload_config während einem configurehood run ...

Ich finde es muss hier hin. Sonst bekommen wir eine kaum sichtbare
Abhängigkeit zu configurehood. Und müssen darauf hoffen, dass da nochmal
ein reload_config läuft.

Viele Grüße
Robert

>
> Grüße
>
> Adrian
>
>> +}
>> +
>> --
>> 2.20.1
Christian Dresel Aug. 8, 2020, 7:17 p.m.
On 08.08.20 14:00, Robert Langhammer wrote:

>>> +
>>> +vxlan_start_stop() {
>>> +	uci commit network
>>> +	reload_config
>> Hier bin ich mir etwas unschlüssig, ob man mitten "in" configurehood noch ein reload_config machen muss/möchte, oder ob man das vll. besser einmal am Schluss macht. Ordentlicher ist es natürlich so, aber dann haben wir irgendwann vier reload_config während einem configurehood run ...
> 
> Ich finde es muss hier hin. Sonst bekommen wir eine kaum sichtbare
> Abhängigkeit zu configurehood. Und müssen darauf hoffen, dass da nochmal
> ein reload_config läuft.

glaube das haben wir schon mal irgendwo diskutiert (war das bei layer 3
in configuregateway?) ich weiß nur nicht mehr zu welchem Schluss wir
damals kamen ;) Vielleicht will jemand mal die alten Mails durchstöbern
(ich meine das war sogar auf irgendeinen Patch von mir, wo das
diskutiert wurde)

Ich pers. fände es wohl auch besser, wenn es da bleibt.

Gruß

Christian
Adrian Schmutzler Aug. 8, 2020, 7:25 p.m.
Hallo Christian,

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of Christian Dresel
> Sent: Samstag, 8. August 2020 21:17
> To: Robert Langhammer <rlanghammer@web.de>; franken-
> dev@freifunk.net
> Subject: Re: [RFC PATCH] Add package fff-vxlan-node
> 
> 
> 
> On 08.08.20 14:00, Robert Langhammer wrote:
> 
> >>> +
> >>> +vxlan_start_stop() {
> >>> +	uci commit network
> >>> +	reload_config
> >> Hier bin ich mir etwas unschlüssig, ob man mitten "in" configurehood noch
> ein reload_config machen muss/möchte, oder ob man das vll. besser einmal
> am Schluss macht. Ordentlicher ist es natürlich so, aber dann haben wir
> irgendwann vier reload_config während einem configurehood run ...
> >
> > Ich finde es muss hier hin. Sonst bekommen wir eine kaum sichtbare
> > Abhängigkeit zu configurehood. Und müssen darauf hoffen, dass da
> > nochmal ein reload_config läuft.
> 
> glaube das haben wir schon mal irgendwo diskutiert (war das bei layer 3 in
> configuregateway?) ich weiß nur nicht mehr zu welchem Schluss wir damals
> kamen ;) Vielleicht will jemand mal die alten Mails durchstöbern (ich meine
> das war sogar auf irgendeinen Patch von mir, wo das diskutiert wurde)

wir hatten schon mal "uci commit" bei den uci-defaults Skripten, das ist ein ähnliches Problem.

Mit reload_config bin ich mir nicht so sicher; aber ich wollte auch primär die Diskussion anstoßen ...

Grüße

Adrian

> 
> Ich pers. fände es wohl auch besser, wenn es da bleibt.
> 
> Gruß
> 
> Christian
Christian Dresel Aug. 8, 2020, 7:34 p.m.
hi Adrian

On 08.08.20 21:25, Adrian Schmutzler wrote:
> Hallo Christian,
> 
>> -----Original Message-----
>> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
>> Of Christian Dresel
>> Sent: Samstag, 8. August 2020 21:17
>> To: Robert Langhammer <rlanghammer@web.de>; franken-
>> dev@freifunk.net
>> Subject: Re: [RFC PATCH] Add package fff-vxlan-node
>>
>>
>>
>> On 08.08.20 14:00, Robert Langhammer wrote:
>>
>>>>> +
>>>>> +vxlan_start_stop() {
>>>>> +	uci commit network
>>>>> +	reload_config
>>>> Hier bin ich mir etwas unschlüssig, ob man mitten "in" configurehood noch
>> ein reload_config machen muss/möchte, oder ob man das vll. besser einmal
>> am Schluss macht. Ordentlicher ist es natürlich so, aber dann haben wir
>> irgendwann vier reload_config während einem configurehood run ...
>>>
>>> Ich finde es muss hier hin. Sonst bekommen wir eine kaum sichtbare
>>> Abhängigkeit zu configurehood. Und müssen darauf hoffen, dass da
>>> nochmal ein reload_config läuft.
>>
>> glaube das haben wir schon mal irgendwo diskutiert (war das bei layer 3 in
>> configuregateway?) ich weiß nur nicht mehr zu welchem Schluss wir damals
>> kamen ;) Vielleicht will jemand mal die alten Mails durchstöbern (ich meine
>> das war sogar auf irgendeinen Patch von mir, wo das diskutiert wurde)
> 
> wir hatten schon mal "uci commit" bei den uci-defaults Skripten, das ist ein ähnliches Problem.

stimmt könnte bei meinen fastd Key Geschichten (WebUI anzeigen und Key
behalten) gewesen sein. Ich finde jetzt auf die schnelle aber die
Diskussion auch nicht :(

Gruß

Christian

> 
> Mit reload_config bin ich mir nicht so sicher; aber ich wollte auch primär die Diskussion anstoßen ...
> 
> Grüße
> 
> Adrian
> 
>>
>> Ich pers. fände es wohl auch besser, wenn es da bleibt.
>>
>> Gruß
>>
>> Christian
Johannes Kimmel Aug. 11, 2020, 1:58 a.m.
Hi,

gerade entdeckt:

> +vxlan_addpeer() {
> +	json_get_var vid vid
> +	json_get_var address address
> +	address="$( ping6 -w1 -c1 "$address" | awk -F '[()]' '{print $2; exit}' )"
> +	[ -z $address ] && return
> +	uci set network.vx0.vid="$vid"

Es sollte nicht mehr noetig sein peer6addr zu setzen, da ip6addr=auto 
gesetzt ist. Das loesst schon die Mehrdeutigkeit auf.

> +	uci set network.vx0.peer6addr="$address"
> +	uci set network.vx0.disabled="0"
> +
> +	uci add network vxlan_peer
> +	uci set network.@vxlan_peer[-1].vxlan="vx0"
> +	uci set network.@vxlan_peer[-1].dst="$address"
> +}

Gruesse