[openwrt/openwrt] vxlan: allow for dynamic source ip selection (FS#3426)

LEDE Commits lede-commits at lists.infradead.org
Thu Dec 31 05:53:31 EST 2020


dedeckeh pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/3f5619f259de42af4404e0e36d11df4adcef9f5e

commit 3f5619f259de42af4404e0e36d11df4adcef9f5e
Author: Johannes Kimmel <fff at bareminimum.eu>
AuthorDate: Tue Dec 15 00:31:52 2020 +0100

    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 at bareminimum.eu>
---
 package/network/config/vxlan/Makefile       |  2 +-
 package/network/config/vxlan/files/vxlan.sh | 35 +++++++++--------------------
 2 files changed, 12 insertions(+), 25 deletions(-)

diff --git a/package/network/config/vxlan/Makefile b/package/network/config/vxlan/Makefile
index 0b4d6713f9..97972d6d85 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 5c1c484c47..a087c4a3ce 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"
 }



More information about the lede-commits mailing list