Created
May 25, 2016 14:39
-
-
Save zehome/5a23328c8085cfaa9a9480eebf84e08f to your computer and use it in GitHub Desktop.
mlvpn updown.sh for linux without tunnel ip address required
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# up/down script for MLVPN. | |
# | |
# MLVPN calls this script with at least 2 arguments: | |
# $1 : interface name | |
# $2 : "command" | |
# command can be: | |
# - "tuntap_up" | |
# - "tuntap_down" | |
# - "rtun_up" $3 : tunnel name | |
# - "rtun_down" $3 : tunnel name | |
# tuntap_up is called when at least one tunnel is up | |
# tuntap_down is called when at every tunnel is down | |
# rtun_up is called when successfully connected | |
# rtun_down is called when disconnected | |
# Environment variables are set by mlvpn, reflecting | |
# settings in mlvpn.conf | |
# IP4= | |
# IP6= | |
# IP4_GATEWAY= | |
# IP6_GATEWAY= | |
# IP4_ROUTES= | |
# IP6_ROUTES= | |
# MTU= | |
# DEVICE= | |
DEVICE="$1" | |
STATUS="$2" | |
LOG=/tmp/mlvpn_${DEVICE}.log | |
[ -z "$STATUS" ] || [ -z "$DEVICE" ] || [ -z "$MTU" ] && exit 1 | |
unamestr=$(uname) | |
link_up() | |
{ | |
if [ "$unamestr" = "Linux" ]; then | |
ip link set dev $DEVICE mtu $MTU up | |
if [ ! -z "$IP4" ]; then | |
ip -4 addr add $IP4 dev $DEVICE | |
fi | |
if [ ! -z "$IP6" ]; then | |
ip -6 addr add $IP6 dev $DEVICE | |
fi | |
else | |
ifconfig $DEVICE mtu $MTU up | |
if [ ! -z "$IP4" ] && [ ! -z "$IP4_GATEWAY" ]; then | |
ifconfig $DEVICE inet $IP4 $IP4_GATEWAY mtu $MTU up | |
fi | |
if [ ! -z "$IP6" ] && [ ! -z "$IP6_GATEWAY" ]; then | |
ifconfig $DEVICE inet $IP6 $IP6_GATEWAY mtu $MTU up | |
fi | |
fi | |
} | |
link_down() | |
{ | |
if [ "$unamestr" = "Linux" ]; then | |
ip link set dev $DEVICE down | |
else | |
ifconfig $DEVICE down | |
fi | |
} | |
route_add() | |
{ | |
family=$1 | |
route=$2 | |
if [ "$unamestr" = "Linux" ]; then | |
if [ "$family" = "4" ]; then | |
if [ "$IP4_GATEWAY "]; then | |
via="via $IP4_GATEWAY" | |
fi | |
ip -4 route add $route $via dev $DEVICE | |
elif [ "$family" = "6" ]; then | |
if [ "$IP6_GATEWAY "]; then | |
via="via $IP6_GATEWAY" | |
fi | |
ip -6 route add $route $via dev $DEVICE | |
fi | |
else | |
if [ "$family" = "4" ]; then | |
if [ "$IP4_GATEWAY" ]; then | |
route add -inet $route $IP4_GATEWAY | |
else | |
route add -inet $route -link -iface $DEVICE | |
fi | |
elif [ "$family" = "6" ]; then | |
if [ "$IP6_GATEWAY" ]; then | |
route add -inet6 $route $IP6_GATEWAY | |
else | |
route add -inet6 $route -link -iface $DEVICE | |
fi | |
fi | |
fi | |
} | |
( | |
TIMESTAMP=$(date "+%Y-%m-%dT%H:%M:%S") | |
ECHO="echo ${TIMESTAMP} " | |
[ "$MTU" -gt 1452 ] && (echo "MTU set too high."; exit 1) | |
[ "$MTU" -lt 100 ] && (echo "MTU set too low."; exit 1) | |
case "$STATUS" in | |
"tuntap_up") | |
$ECHO "$DEVICE up" | |
link_up | |
for r in $IP4_ROUTES; do | |
route_add 4 $r | |
done | |
for r in $IP6_ROUTES; do | |
route_add 6 $r | |
done | |
;; | |
"tuntap_down") | |
$ECHO "$DEVICE down" | |
link_down | |
;; | |
"rtun_up") | |
$ECHO "tunnel [$3] is up" | |
;; | |
"rtun_down") | |
$ECHO "tunnel [$3] is down" | |
;; | |
esac | |
) >> $LOG 2>&1 | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment