Commit | Line | Data |
---|---|---|
a62f8e8a MW |
1 | #! /bin/sh |
2 | ### | |
3 | ### TrIPE interface initialization script | |
4 | ### suitable for Linux; other operating systems probably want something | |
5 | ### similar | |
6 | ||
7 | ###----- Licensing notica --------------------------------------------------- | |
8 | ### | |
9 | ### Redistribution, modification and use of this file is permitted without | |
10 | ### limitation. | |
11 | ### | |
12 | ### This file is distributed in the hope that it will be useful, | |
13 | ### but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
15 | ||
16 | set -e | |
17 | ||
18 | : ${bindir=@bindir@} | |
19 | : ${tripectl=$bindir/tripectl} | |
20 | PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir | |
21 | export PATH TRIPEDIR | |
22 | ||
23 | ###-------------------------------------------------------------------------- | |
24 | ### Collect arguments. | |
25 | ||
26 | ## Collect the simple arguments. | |
27 | if [ $# -lt 3 ]; then | |
28 | echo >&2 "usage: $0 PEER IFNAME ADDR..."; exit 1 | |
29 | fi | |
30 | peer=$1 ifname=$2 family=$3; shift 3 | |
31 | ||
32 | ## Parse the address family. | |
33 | case "$family,$#" in | |
34 | INET,1) addr=$1 port=4070 ;; | |
35 | INET,2) addr=$1 port=$2 ;; | |
36 | INET,*) echo >&2 "$0: bad INET address"; exit 1 ;; | |
37 | *) echo >&2 "$0: unknown address family $family"; exit 1 ;; | |
38 | esac | |
39 | ||
40 | ###-------------------------------------------------------------------------- | |
41 | ### Set the interface name. | |
42 | ||
43 | case "${P_IFNAME+set}" in | |
44 | set) | |
45 | ip link set "$ifname" name "$P_IFNAME" | |
46 | ifname=$P_IFNAME | |
47 | $tripectl setifname "$peer" "$ifname" | |
48 | ;; | |
49 | esac | |
50 | ||
51 | ###-------------------------------------------------------------------------- | |
52 | ### Configure the point-to-point link. | |
53 | ||
54 | ifup=no | |
55 | case "${P_LADDR+set},${P_RADDR+set}" in | |
56 | set,set) | |
57 | case "${P_MTU+set}" in | |
58 | set) mtu=$P_MTU;; | |
59 | *) | |
60 | pathmtu=$(pathmtu "$addr") | |
61 | mtu=$(expr "$pathmtu" - 33 - $A_CIPHER_BLKSZ - $A_MAC_TAGSZ) | |
62 | ;; | |
63 | esac | |
64 | ifconfig "$ifname" "$P_LADDR" pointopoint "$P_RADDR" up mtu "$mtu" | |
65 | ifup=yes | |
66 | ;; | |
67 | esac | |
68 | ||
69 | ###-------------------------------------------------------------------------- | |
70 | ### Set up routing. | |
71 | ||
72 | case "$ifup,${P_NETS+set}" in | |
73 | yes,set) | |
74 | for net in $P_NETS; do | |
75 | route add -net $net gw "$P_RADDR" dev "$ifname" metric 2 | |
76 | done | |
77 | ;; | |
78 | esac | |
79 | ||
80 | ###-------------------------------------------------------------------------- | |
81 | ### Maybe invoke a follow-on script. | |
82 | ||
83 | case "${P_IFUPEXTRA+set}" in | |
84 | set) | |
85 | eval "$P_IFUPEXTRA" | |
86 | ;; | |
87 | esac | |
88 | ||
89 | ###-------------------------------------------------------------------------- | |
90 | ### Issue a notification that we've won. | |
91 | ||
92 | $tripectl notify tripe-ifup configured "$peer" | |
93 | ||
94 | ###----- That's all, folks -------------------------------------------------- |