1#!/bin/ksh
2#	$OpenBSD: network_statement.sh,v 1.5 2021/12/03 06:44:46 anton Exp $
3set -e
4
5OSPF6D=$1
6OSPF6DCONFIGDIR=$2
7OBJDIR=$3
8RDOMAIN1=$4
9RDOMAIN2=$5
10PAIR1=$6
11PAIR2=$7
12
13RDOMAINS="${RDOMAIN1} ${RDOMAIN2}"
14PAIRS="${PAIR1} ${PAIR2}"
15PAIR1IP=2001:db8::${RDOMAIN1}
16PAIR2IP=2001:db8::${RDOMAIN2}
17PAIR1PREFIX=2001:db8:${RDOMAIN1}::
18PAIR2PREFIX=2001:db8:${RDOMAIN2}::
19PAIR2PREFIX2=2001:db8:${RDOMAIN2}:${RDOMAIN2}::
20
21error_notify() {
22	echo cleanup
23	pkill -T ${RDOMAIN1} ospf6d || true
24	pkill -T ${RDOMAIN2} ospf6d || true
25	sleep 1
26	ifconfig ${PAIR2} destroy || true
27	ifconfig ${PAIR1} destroy || true
28	ifconfig vether${RDOMAIN1} destroy || true
29	ifconfig vether${RDOMAIN2} destroy || true
30	route -qn -T ${RDOMAIN1} flush || true
31	route -qn -T ${RDOMAIN2} flush || true
32	ifconfig lo${RDOMAIN1} destroy || true
33	ifconfig lo${RDOMAIN2} destroy || true
34	rm ${OBJDIR}/ospf6d.1.conf ${OBJDIR}/ospf6d.2.conf
35	if [ $1 -ne 0 ]; then
36		echo FAILED
37		exit 1
38	else
39		echo SUCCESS
40	fi
41}
42
43if [ "$(id -u)" -ne 0 ]; then
44	echo need root privileges >&2
45	exit 1
46fi
47
48trap 'error_notify $?' EXIT
49
50echo check if rdomains are busy
51for n in ${RDOMAINS}; do
52	if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then
53		echo routing domain ${n} is already used >&2
54		exit 1
55	fi
56done
57
58echo check if interfaces are busy
59for n in ${PAIRS}; do
60	/sbin/ifconfig "${n}" >/dev/null 2>&1 && \
61	    ( echo interface ${n} is already used >&2; exit 1 )
62done
63
64set -x
65
66echo setup
67ifconfig ${PAIR1} inet6 rdomain ${RDOMAIN1} ${PAIR1IP}/64 up
68ifconfig ${PAIR2} inet6 rdomain ${RDOMAIN2} ${PAIR2IP}/64 up
69ifconfig ${PAIR1} patch ${PAIR2}
70ifconfig lo${RDOMAIN1} inet6 2001:db8:aaaa::${RDOMAIN1}/128
71ifconfig lo${RDOMAIN2} inet6 2001:db8:aaaa::${RDOMAIN2}/128
72ifconfig vether${RDOMAIN1} inet6 rdomain ${RDOMAIN1} ${PAIR1PREFIX}/64 up
73ifconfig vether${RDOMAIN2} inet6 rdomain ${RDOMAIN2} ${PAIR2PREFIX}/64 up
74ifconfig vether${RDOMAIN2} inet6 rdomain ${RDOMAIN2} ${PAIR2PREFIX2}/64 up
75sed "s/{RDOMAIN1}/${RDOMAIN1}/g;s/{PAIR1}/${PAIR1}/g" \
76    ${OSPF6DCONFIGDIR}/ospf6d.network_statement.rdomain1.conf \
77    > ${OBJDIR}/ospf6d.1.conf
78chmod 0600 ${OBJDIR}/ospf6d.1.conf
79sed "s/{RDOMAIN2}/${RDOMAIN2}/g;s/{PAIR2}/${PAIR2}/g" \
80    ${OSPF6DCONFIGDIR}/ospf6d.network_statement.rdomain2.conf \
81    > ${OBJDIR}/ospf6d.2.conf
82chmod 0600 ${OBJDIR}/ospf6d.2.conf
83
84echo add routes
85route -T ${RDOMAIN2} add -inet6 default ${PAIR2PREFIX}1
86route -T ${RDOMAIN2} add 2001:db8:ffff::/126 ${PAIR2PREFIX}2
87route -T ${RDOMAIN2} add 2001:db8:fffe::/64 ${PAIR2PREFIX}3 -label toOSPF
88
89echo start ospf6d
90route -T ${RDOMAIN1} exec ${OSPF6D} \
91    -v -f ${OBJDIR}/ospf6d.1.conf
92route -T ${RDOMAIN2} exec ${OSPF6D} \
93    -v -f ${OBJDIR}/ospf6d.2.conf
94
95sleep 50
96
97echo tests
98route -T ${RDOMAIN1} exec ospf6ctl sh fib
99route -T ${RDOMAIN1} exec ospf6ctl sh rib
100route -T ${RDOMAIN1} exec ospf6ctl sh rib | \
101    grep "2001:db8:aaaa::${RDOMAIN2}/128"
102route -T ${RDOMAIN1} exec ospf6ctl sh rib | \
103    grep ${PAIR2PREFIX}/64
104route -T ${RDOMAIN1} exec ospf6ctl sh rib | \
105    grep ${PAIR2PREFIX2}/64
106route -T ${RDOMAIN1} exec ospf6ctl sh rib | \
107    grep "2001:db8:ffff::/126"
108route -T ${RDOMAIN1} exec ospf6ctl sh rib | \
109    grep "::/0"
110route -T ${RDOMAIN1} exec ospf6ctl sh rib | \
111    grep "2001:db8:fffe::/64"
112
113exit 0
114