Johannes Kimmel
f6c1e4da52
vxlan support in 19.07.5 is very limited. This set of patches adds - more flexible source ip selection - control over most options - multiple remote endpoint configuration List of patches backported: - 5222aadbf3 vxlan: remove mandatory peeraddr - 65e9de3c33 vxlan: add capability for multiple fdb entries - 036221ce5a vxlan: add extra config options - ad3044c424 vxlan: fix rsc config option - 3f5619f259 vxlan: allow for dynamic source ip selection (FS#3426) - a3c033e2af netifd: vxlan: handle srcport range - 226566b967 netifd: vxlan: refactor mapping of boolean attrs - 11223f5550 netifd: vxlan: add most missing boolean options - 55a7b6b7f2 netifd: vxlan: add aging and maxaddress options Signed-off-by: Johannes Kimmel <fff@bareminimum.eu> Reviewed-by: Robert Langhammer <rlanghammer@web.de> Tested-by: Robert Langhammer <rlanghammer@web.de> Reviewed-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> [refresh patches and remove some bloat] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
102 lines
3.2 KiB
Diff
102 lines
3.2 KiB
Diff
From: Johannes Kimmel <fff@bareminimum.eu>
|
|
Date: Tue, 15 Dec 2020 00:31:52 +0100
|
|
Subject: vxlan: allow for dynamic source ip selection (FS#3426)
|
|
|
|
By setting 'auto', the zero address or the empty string as source
|
|
address (option ipaddr, option ip6addr), vxlan will choose one
|
|
dynamically. This helps in setups where a wan ip or prefix changes.
|
|
|
|
This corresponse to setting up an vxlan tunnel with:
|
|
|
|
proto vxlan6:
|
|
# ip link add vx0 type vxlan id ID local :: ...
|
|
proto vxlan:
|
|
# ip link add vx0 type vxlan id ID local 0.0.0.0 ...
|
|
|
|
While it is possible to not specify a source ip at all, the kernel will
|
|
default to setting up a ipv4 tunnel. The kernel will take any hint from
|
|
source and peer ips to figure out, what tunnel type to use. To make sure
|
|
we setup an ipv6 tunnel for proto vxlan6, this workaround is needed.
|
|
|
|
This will not change the behaviour of currently working configurations.
|
|
However this will allow former broken configurations, namely those not
|
|
specifying both a source address and tunnel interface, to setup a
|
|
tunnel interface. Previously those configurations weren't reporting an
|
|
error and were stueck in a setup loop like in Bug FS#3426.
|
|
|
|
This change lifts the currently very strict behaviour and should fix the
|
|
following bug:
|
|
|
|
Fixes: FS#3426
|
|
Ref: https://bugs.openwrt.org/index.php?do=details&task_id=3426
|
|
|
|
Signed-off-by: Johannes Kimmel <fff@bareminimum.eu>
|
|
(cherry picked from commit 3f5619f259de42af4404e0e36d11df4adcef9f5e)
|
|
|
|
diff --git a/package/network/config/vxlan/Makefile b/package/network/config/vxlan/Makefile
|
|
index 0b4d6713f9e1cfcad9f4c94272f8dc9192b7f3b4..97972d6d85bddc56d1575088d3966ae6899f06da 100644
|
|
--- a/package/network/config/vxlan/Makefile
|
|
+++ b/package/network/config/vxlan/Makefile
|
|
@@ -1,7 +1,7 @@
|
|
include $(TOPDIR)/rules.mk
|
|
|
|
PKG_NAME:=vxlan
|
|
-PKG_RELEASE:=6
|
|
+PKG_RELEASE:=7
|
|
PKG_LICENSE:=GPL-2.0
|
|
|
|
include $(INCLUDE_DIR)/package.mk
|
|
diff --git a/package/network/config/vxlan/files/vxlan.sh b/package/network/config/vxlan/files/vxlan.sh
|
|
index 5c1c484c47f7fb48f1cb705b200d589df77a60f6..a087c4a3ce2ca42a6b8d43b2254d0ea7379c0936 100755
|
|
--- a/package/network/config/vxlan/files/vxlan.sh
|
|
+++ b/package/network/config/vxlan/files/vxlan.sh
|
|
@@ -114,18 +114,11 @@ proto_vxlan_setup() {
|
|
|
|
( proto_add_host_dependency "$cfg" '' "$tunlink" )
|
|
|
|
- [ -z "$ipaddr" ] && {
|
|
- local wanif="$tunlink"
|
|
- if [ -z "$wanif" ] && ! network_find_wan wanif; then
|
|
- proto_notify_error "$cfg" "NO_WAN_LINK"
|
|
- exit
|
|
- fi
|
|
-
|
|
- if ! network_get_ipaddr ipaddr "$wanif"; then
|
|
- proto_notify_error "$cfg" "NO_WAN_LINK"
|
|
- exit
|
|
- fi
|
|
- }
|
|
+ case "$ipaddr" in
|
|
+ "auto"|"")
|
|
+ ipaddr="0.0.0.0"
|
|
+ ;;
|
|
+ esac
|
|
|
|
vxlan_generic_setup "$cfg" 'vxlan' "$ipaddr" "$peeraddr"
|
|
}
|
|
@@ -138,18 +131,12 @@ proto_vxlan6_setup() {
|
|
|
|
( proto_add_host_dependency "$cfg" '' "$tunlink" )
|
|
|
|
- [ -z "$ip6addr" ] && {
|
|
- local wanif="$tunlink"
|
|
- if [ -z "$wanif" ] && ! network_find_wan6 wanif; then
|
|
- proto_notify_error "$cfg" "NO_WAN_LINK"
|
|
- exit
|
|
- fi
|
|
-
|
|
- if ! network_get_ipaddr6 ip6addr "$wanif"; then
|
|
- proto_notify_error "$cfg" "NO_WAN_LINK"
|
|
- exit
|
|
- fi
|
|
- }
|
|
+ case "$ip6addr" in
|
|
+ "auto"|"")
|
|
+ # ensure tunnel via ipv6
|
|
+ ip6addr="::"
|
|
+ ;;
|
|
+ esac
|
|
|
|
vxlan_generic_setup "$cfg" 'vxlan6' "$ip6addr" "$peer6addr"
|
|
}
|