#!/bin/sh
# 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

[ -n "$VERBOSE" ] && set -x

# Figure out address familiy
FAMILY="-4"

case "$IF_TUNNEL_MODE" in
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"
case "${IF_TUNNEL_MODE}" in
*gretap)
	OBJECT="link"
	TYPE_KW="type"

	# Strip possible "ip6" from tunnel mode
	TUNNEL_MODE="gretap"
	;;

*)
	# Store tunnel type/mode separaltely and unset input variable to exclude it
	# from PARAMS below
	TUNNEL_MODE="$IF_TUNNEL_MODE"
	unset IF_TUNNEL_MODE
	;;
esac


# Mangle residual IF_TUNNEL_* params into single string
PARAMS=$(set | sed -E '
	s/^IF_TUNNEL_([A-Z0-9_]+)=(.+)/\1\n\2/
	ta
	d
	:a
	h
	y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
	P
	g
	s/.*\n//
	')

[ "$PARAMS" ] || exit 0

case "$PHASE" in
create)
	${MOCK} eval ip $FAMILY $OBJECT add $IFACE $TYPE_KW $TUNNEL_MODE $PARAMS
	;;
destroy)
	${MOCK} ip $FAMILY $OBJECT del $IFACE
	;;
depend)
	echo "$IF_TUNNEL_DEV"
	;;
esac