From 2cec4ed05c8c7328407fa1aaa8319e09d388b2d2 Mon Sep 17 00:00:00 2001 From: Maximilian Wilhelm Date: Thu, 18 Mar 2021 20:20:01 +0100 Subject: [PATCH] tunnel executor: Make sure mode/type is 1st parameter Closes #143 Signed-off-by: Maximilian Wilhelm --- executor-scripts/linux/tunnel | 27 +++++++++++++++++++++------ tests/linux/tunnel_test | 26 ++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/executor-scripts/linux/tunnel b/executor-scripts/linux/tunnel index 71c16bd..10fa1e3 100755 --- a/executor-scripts/linux/tunnel +++ b/executor-scripts/linux/tunnel @@ -2,23 +2,38 @@ # Based on alpine's tunnel configuration script. # Copyright (c) 2017 Kaarle Ritvanen # Copyright (c) 2020 Ariadne Conill (extended for ifupdown-ng) +# Copyright (c) 2021 Maximilian Wilhelm (make sure mode/type is 1st parameter) [ -z "$IF_TUNNEL_LOCAL" ] && exit 1 [ -z "$IF_TUNNEL_REMOTE" ] && exit 1 [ -z "$IF_TUNNEL_MODE" ] && exit 1 -COMMAND="tunnel" +[ -n "$VERBOSE" ] && set -x + +# Figure out address familiy FAMILY="-4" case "$IF_TUNNEL_MODE" in -gretap) - COMMAND="link" - ;; vti6|ipip6|ip6*) FAMILY="-6" ;; esac +# Figure out object type - gretap tunnels have to create using ip link +# and therefor require 'type' keyword instead of 'mode' +OBJECT="tunnel" +TYPE_KW="mode" +if [ "${IF_TUNNEL_MODE}" = "gretap" ]; then + OBJECT="link" + TYPE_KW="type" +fi + +# Store tunnel type/mode separaltely and unset input variable to exclude it +# from PARAMS below +TUNNEL_MODE="$IF_TUNNEL_MODE" +unset IF_TUNNEL_MODE + +# Mangle residual IF_TUNNEL_* params into single string PARAMS=$(set | sed -E ' s/^IF_TUNNEL_([A-Z0-9_]+)=(.+)/\1\n\2/ ta @@ -35,10 +50,10 @@ PARAMS=$(set | sed -E ' case "$PHASE" in create) - ${MOCK} eval ip $FAMILY $COMMAND add $IFACE $PARAMS + ${MOCK} eval ip $FAMILY $OBJECT add $IFACE $TYPE_KW $TUNNEL_MODE $PARAMS ;; destroy) - ${MOCK} ip $FAMILY $COMMAND del $IFACE + ${MOCK} ip $FAMILY $OBJECT del $IFACE ;; depend) echo "$IF_TUNNEL_DEV" diff --git a/tests/linux/tunnel_test b/tests/linux/tunnel_test index de86105..8c37928 100755 --- a/tests/linux/tunnel_test +++ b/tests/linux/tunnel_test @@ -5,7 +5,9 @@ EXECUTOR="$(atf_get_srcdir)/../../executor-scripts/linux/tunnel" tests_init \ tunnel_bringup \ - tunnel_teardown + tunnel_teardown \ + gretap_up \ + gretap_down tunnel_bringup_body() { export MOCK=echo IFACE=tun0 PHASE=create IF_TUNNEL_MODE=gre \ @@ -13,7 +15,7 @@ tunnel_bringup_body() { IF_TUNNEL_TTL=255 atf_check -s exit:0 \ -o match:"ip -4 tunnel add tun0" \ - -o match:"mode 'gre'" \ + -o match:"mode gre" \ -o match:"ttl '255'" \ -o match:"local '1.2.3.4'" \ -o match:"remote '5.6.7.8'" \ @@ -28,3 +30,23 @@ tunnel_teardown_body() { -o match:"ip -4 tunnel del tun0" \ ${EXECUTOR} } + + +gretap_up_body() { + export MOCK=echo IFACE=foo PHASE=create IF_TUNNEL_MODE=gretap \ + IF_TUNNEL_LOCAL=1.2.3.4 IF_TUNNEL_REMOTE=5.6.7.8 + atf_check -s exit:0 \ + -o match:"ip -4 link add foo" \ + -o match:"type gretap" \ + -o match:"local '1.2.3.4'" \ + -o match:"remote '5.6.7.8'" \ + ${EXECUTOR} +} + +gretap_down_body() { + export MOCK=echo IFACE=foo PHASE=destroy IF_TUNNEL_MODE=gretap \ + IF_TUNNEL_LOCAL=1.2.3.4 IF_TUNNEL_REMOTE=5.6.7.8 + atf_check -s exit:0 \ + -o match:"ip -4 link del foo" \ + ${EXECUTOR} +}