xref: /openbsd-src/regress/usr.sbin/bgpd/integrationtests/addpath.sh (revision 815e5984d77f050740eb121d0024d95eda1e2aa5)
1*815e5984Sclaudio#!/bin/ksh
2*815e5984Sclaudio#	$OpenBSD: addpath.sh,v 1.1 2025/01/14 13:15:18 claudio Exp $
3*815e5984Sclaudio
4*815e5984Sclaudioset -e
5*815e5984Sclaudio
6*815e5984SclaudioBGPD=$1
7*815e5984SclaudioBGPDCONFIGDIR=$2
8*815e5984SclaudioRDOMAIN1=$3
9*815e5984SclaudioRDOMAIN2=$4
10*815e5984SclaudioPAIR1=$5
11*815e5984SclaudioPAIR2=$6
12*815e5984Sclaudio
13*815e5984SclaudioRDOMAINS="${RDOMAIN1} ${RDOMAIN2}"
14*815e5984SclaudioPAIRS="${PAIR1} ${PAIR2}"
15*815e5984SclaudioPAIR1IP=192.0.2.2
16*815e5984SclaudioPAIR2IP=192.0.2.11
17*815e5984SclaudioPAIR2IP2=192.0.2.21
18*815e5984SclaudioPAIR2IP3=192.0.2.31
19*815e5984SclaudioPAIR2IP4=192.0.2.41
20*815e5984SclaudioPAIR2IP5=192.0.2.51
21*815e5984Sclaudio
22*815e5984Sclaudioerror_notify() {
23*815e5984Sclaudio	echo cleanup
24*815e5984Sclaudio	pkill -T ${RDOMAIN1} bgpd || true
25*815e5984Sclaudio	pkill -T ${RDOMAIN2} bgpd || true
26*815e5984Sclaudio	sleep 1
27*815e5984Sclaudio	ifconfig ${PAIR2} destroy || true
28*815e5984Sclaudio	ifconfig ${PAIR1} destroy || true
29*815e5984Sclaudio	route -qn -T ${RDOMAIN1} flush || true
30*815e5984Sclaudio	route -qn -T ${RDOMAIN2} flush || true
31*815e5984Sclaudio	ifconfig lo${RDOMAIN1} destroy || true
32*815e5984Sclaudio	ifconfig lo${RDOMAIN2} destroy || true
33*815e5984Sclaudio	if [ $1 -ne 0 ]; then
34*815e5984Sclaudio		echo FAILED
35*815e5984Sclaudio		exit 1
36*815e5984Sclaudio	else
37*815e5984Sclaudio		echo SUCCESS
38*815e5984Sclaudio	fi
39*815e5984Sclaudio}
40*815e5984Sclaudio
41*815e5984Sclaudioif [ "$(id -u)" -ne 0 ]; then
42*815e5984Sclaudio	echo need root privileges >&2
43*815e5984Sclaudio	exit 1
44*815e5984Sclaudiofi
45*815e5984Sclaudio
46*815e5984Sclaudio. "${BGPDCONFIGDIR}/util.sh"
47*815e5984Sclaudio
48*815e5984Sclaudiotrap 'error_notify $?' EXIT
49*815e5984Sclaudio
50*815e5984Sclaudioecho check if rdomains are busy
51*815e5984Sclaudiofor n in ${RDOMAINS}; do
52*815e5984Sclaudio	if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then
53*815e5984Sclaudio		echo routing domain ${n} is already used >&2
54*815e5984Sclaudio		exit 1
55*815e5984Sclaudio	fi
56*815e5984Sclaudiodone
57*815e5984Sclaudio
58*815e5984Sclaudioecho check if interfaces are busy
59*815e5984Sclaudiofor n in ${PAIRS}; do
60*815e5984Sclaudio	/sbin/ifconfig "${n}" >/dev/null 2>&1 && \
61*815e5984Sclaudio	    ( echo interface ${n} is already used >&2; exit 1 )
62*815e5984Sclaudiodone
63*815e5984Sclaudio
64*815e5984Sclaudioset -x
65*815e5984Sclaudio
66*815e5984Sclaudioecho setup
67*815e5984Sclaudioifconfig ${PAIR1} rdomain ${RDOMAIN1} ${PAIR1IP}/24 up
68*815e5984Sclaudioifconfig ${PAIR2} rdomain ${RDOMAIN2} ${PAIR2IP}/24 up
69*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP2}/32
70*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP3}/32
71*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP4}/32
72*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP5}/32
73*815e5984Sclaudioifconfig ${PAIR1} patch ${PAIR2}
74*815e5984Sclaudioifconfig lo${RDOMAIN1} inet 127.0.0.1/8
75*815e5984Sclaudioifconfig lo${RDOMAIN2} inet 127.0.0.1/8
76*815e5984Sclaudio
77*815e5984Sclaudioecho run bgpds
78*815e5984Sclaudioroute -T ${RDOMAIN1} exec ${BGPD} \
79*815e5984Sclaudio	-v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain1.conf
80*815e5984Sclaudiosleep 2
81*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \
82*815e5984Sclaudio	-v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_1.conf
83*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \
84*815e5984Sclaudio	-v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_2.conf
85*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \
86*815e5984Sclaudio	-v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_3.conf
87*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \
88*815e5984Sclaudio	-v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_4.conf
89*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \
90*815e5984Sclaudio	-v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_5.conf
91*815e5984Sclaudio
92*815e5984Sclaudiosleep 7
93*815e5984Sclaudio
94*815e5984Sclaudioroute -T ${RDOMAIN1} exec bgpctl show
95*815e5984Sclaudioroute -T ${RDOMAIN2} exec bgpctl show rib | tee addpath.rdomain2.out
96*815e5984Sclaudio
97*815e5984Sclaudiodiff -u ${BGPDCONFIGDIR}/addpath.rdomain2.ok addpath.rdomain2.out
98*815e5984Sclaudioecho OK
99*815e5984Sclaudio
100*815e5984Sclaudioexit 0
101