master
Raw Download raw file
 1#!/bin/sh -e
 2#   _________ _____ ___
 3#  / ___/ __ `/ __ `__ \
 4# (__  ) /_/ / / / / / /
 5#/____/\__,_/_/ /_/ /_/ 
 6# sam - secondary address manager
 7# for use with Network Manager in dispatcher.d
 8
 9# expected arguments
10INTERFACE=$1
11OPERATION=$2
12
13# secondary addresses
14ADDR1="192.168.101.50/24"
15
16# only assign sam-addresses to one interface, keep track of it with STATEFILE
17STATEFILE=/var/tmp/sam-state
18
19if [ -z "$INTERFACE" ]; then
20    logger "sam - $0: called with no interface"
21    exit 1;
22fi
23
24# statefile exists
25if [ -e "$STATEFILE" ]; then
26	# get contents
27	DEV=$(cat "$STATEFILE") 
28	if [ "$DEV" = "$INTERFACE" ]; then
29		case "$OPERATION" in
30			up|vpn-up)
31				logger "sam - error: if UP on sam'd dev"
32				;;
33			down|vpn-down)
34				logger "sam - if DOWN, removing addresses"
35				ip addr del $ADDR1 dev $INTERFACE || true
36				rm -f $STATEFILE
37				;;
38			hostname|dhcp4-change|dhcp6-change)
39				logger "sam - did nothing"
40				;;
41			*)
42				logger "sam - $0: called with unknown action $2"
43				exit 1
44				;;
45		esac
46	else
47		logger "sam - if UP, another dev already sam'd"
48	fi
49# statefile doesn't exist
50else 
51	case "$OPERATION" in
52		up|vpn-up)
53			logger "sam - if UP, adding addresses"
54			ip addr add $ADDR1 dev $INTERFACE
55			echo "$INTERFACE" > "$STATEFILE"
56			;;
57		down|vpn-down)
58			logger "sam - if DOWN of non-sam'd dev, nothing to do"
59			;;
60		hostname|dhcp4-change|dhcp6-change)
61			logger "sam - did nothing"
62			;;
63		*)
64			logger "sam - $0: called with unknown action $3"
65			exit 1
66			;;
67	esac
68fi