#!/bin/sh -e
#   _________ _____ ___
#  / ___/ __ `/ __ `__ \
# (__  ) /_/ / / / / / /
#/____/\__,_/_/ /_/ /_/ 
# sam - secondary address manager
# for use with Network Manager in dispatcher.d

# expected arguments
INTERFACE=$1
OPERATION=$2

# secondary addresses
ADDR1="192.168.101.50/24"

# only assign sam-addresses to one interface, keep track of it with STATEFILE
STATEFILE=/var/tmp/sam-state

if [ -z "$INTERFACE" ]; then
    logger "sam - $0: called with no interface"
    exit 1;
fi

# statefile exists
if [ -e "$STATEFILE" ]; then
	# get contents
	DEV=$(cat "$STATEFILE") 
	if [ "$DEV" = "$INTERFACE" ]; then
		case "$OPERATION" in
			up|vpn-up)
				logger "sam - error: if UP on sam'd dev"
				;;
			down|vpn-down)
				logger "sam - if DOWN, removing addresses"
				ip addr del $ADDR1 dev $INTERFACE || true
				rm -f $STATEFILE
				;;
			hostname|dhcp4-change|dhcp6-change)
				logger "sam - did nothing"
				;;
			*)
				logger "sam - $0: called with unknown action $2"
				exit 1
				;;
		esac
	else
		logger "sam - if UP, another dev already sam'd"
	fi
# statefile doesn't exist
else 
	case "$OPERATION" in
		up|vpn-up)
			logger "sam - if UP, adding addresses"
			ip addr add $ADDR1 dev $INTERFACE
			echo "$INTERFACE" > "$STATEFILE"
			;;
		down|vpn-down)
			logger "sam - if DOWN of non-sam'd dev, nothing to do"
			;;
		hostname|dhcp4-change|dhcp6-change)
			logger "sam - did nothing"
			;;
		*)
			logger "sam - $0: called with unknown action $3"
			exit 1
			;;
	esac
fi
