#!/bin/sh
#
#	$Id: tnlup,v 1.19 2000/07/28 15:03:10 zagrodzki Exp $
#
# Author: Arkadiusz Mikiewicz <misiek@pld.org.pl>
#

DEV=$1

[ -z "$DEV" ] && {
    echo "usage: tnlup <device name>" >&2
    exit 1
}

. /etc/sysconfig/network
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network-scripts/.functions

TNLCONFIGS="`ls /etc/sysconfig/interfaces/tnlcfg-*|egrep -v '~$'`"
TNLCONFIGS="`egrep -L '^#!' $TNLCONFIGS`"
CONFIG="`egrep -l "^DEVICE=[\"\']*$DEV[\"\']*\$" $TNLCONFIGS`"

if [ -z "$CONFIG" ]; then
    CONFIG="$DEV"
fi

if false; then
[ -f "/etc/sysconfig/interfaces/$CONFIG" ] || CONFIG=tnlcfg-$CONFIG
[ -f "/etc/sysconfig/interfaces/$CONFIG" ] || {
    echo "usage: tnlup <device name>" >&2
    exit 1
}
fi

source_config

if [ "foo$2" = "fooboot" ] && is_no "${ONBOOT}"; then
        exit
fi

is_no "${IPV6_TUNNELCONFIG}" && [ "${MODE}" = "sit" ] && exit 0
is_no "${IPX}" && [ "${MODE}" = "ipxip" ] && exit 0
is_no "${IPX}" && [ "${MODE}" = "ipipx" ] && exit 0

if [ "${MODE}" = "gre" -a "`ls -R /lib/modules/\`uname -r\`/ | grep ip_gre.o`" != "" ]; then
	modprobe -s -k ip_gre
elif [ "${MODE}" = "ipip" -a "`ls -R /lib/modules/\`uname -r\`/ | grep ipip.o`" != "" ]; then
	modprobe -s -k ipip
fi

[ -z "${LOCALADDR}" ] && LOCALADDR=any
[ -z "${REMOTEADDR}" ] && REMOTEADDR=any
[ -n "${TTL}" ] && TTL="ttl ${TTL}"
[ -n "${TOS}" ] && TOS="tos ${TOS}"
[ -n "${BIND_DEV}" ] && BIND_DEV="dev ${BIND_DEV}"

if is_yes "${SEQ}"; then
	SEQ=seq
else
	is_yes "${ISEQ}" && SEQ=iseq
	is_yes "${OSEQ}" && SEQ="${SEQ} oseq"
fi

if is_yes "${CSUM}"; then
	CSUM=csum
else
        is_yes "${ICSUM}" && CSUM=icsum
        is_yes "${ICSUM}" && CSUM="${SEQ} ocsum"
fi

is_yes "${ISEQ}" && ISEQ=iseq
is_yes "${ISEQ}" && ISEQ=iseq
is_yes "${ISEQ}" && ISEQ=iseq
is_yes "${ISEQ}" && ISEQ=iseq

[ "${TTL}" != "0" -a "${TTL}" != "inherit" ] && PMTUDISC=yes

if is_yes "${PMTUDISC}"; then
	PMTUDISC=pmtudisc
elif is_no "${PMTUDISC}"; then
	PMTUDISC=nopmtudisc
fi

if [ -n "${KEY}" ]; then
IKEY=""
OKEY=""
fi

if [ "${MODE}" = "ipip" -o "${MODE}" = "sit" ]; then
	
	ip tunnel add ${DEVICE} mode ${MODE} local ${LOCALADDR} remote ${REMOTEADDR} ${TTL} ${TOS} ${PMTUDISC} ${BIND_DEV}

elif [ "${MODE}" = "gre" ]; then

	ip tunnel add ${DEVICE} mode ${MODE} local ${LOCALADDR} remote ${REMOTEADDR} ${TTL} ${TOS} ${PMTUDISC} ${BIND_DEV} ${CSUM} ${ISEQ} ${KEY} ${IKEY} ${OKEY}

elif [ "${MODE}" = "ipxip" -o "${MODE}" = "ipipx" ]; then

echo "obsuga ipxip jeszcze nie zrobiona"

fi
