master
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