xref: /openbsd-src/regress/usr.sbin/bgpd/integrationtests/maxattr.sh (revision 03bc5c0e77472ce6d0aefa9ee1ab2898900c44f9)
1#!/bin/ksh
2#	$OpenBSD: maxattr.sh,v 1.5 2024/12/09 10:53:54 claudio Exp $
3
4set -e
5
6BGPD=$1
7BGPDCONFIGDIR=$2
8RDOMAIN1=$3
9RDOMAIN2=$4
10PAIR1=$5
11PAIR2=$6
12
13RDOMAINS="${RDOMAIN1} ${RDOMAIN2}"
14PAIRS="${PAIR1} ${PAIR2}"
15PAIR1IP=10.12.57.1
16PAIR2IP=10.12.57.2
17PAIR2IP_2=10.12.57.3
18PAIR2IP_3=10.12.57.4
19PAIR1IP6=2001:db8:57::1
20PAIR2IP6=2001:db8:57::2
21PAIR2IP6_2=2001:db8:57::3
22PAIR2IP6_3=2001:db8:57::4
23
24error_notify() {
25	echo cleanup
26	pkill -T ${RDOMAIN1} bgpd || true
27	pkill -T ${RDOMAIN2} bgpd || true
28	sleep 1
29	ifconfig ${PAIR2} destroy || true
30	ifconfig ${PAIR1} destroy || true
31	route -qn -T ${RDOMAIN1} flush || true
32	route -qn -T ${RDOMAIN2} flush || true
33	ifconfig lo${RDOMAIN1} destroy || true
34	ifconfig lo${RDOMAIN2} destroy || true
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} rdomain ${RDOMAIN1} ${PAIR1IP}/29 up
68ifconfig ${PAIR2} rdomain ${RDOMAIN2} ${PAIR2IP}/29 up
69ifconfig ${PAIR1} inet6 ${PAIR1IP6}/64
70ifconfig ${PAIR2} inet6 ${PAIR2IP6}/64
71ifconfig ${PAIR2} alias ${PAIR2IP_2}/32
72ifconfig ${PAIR2} alias ${PAIR2IP_3}/32
73ifconfig ${PAIR2} inet6 ${PAIR2IP6_2}/128
74ifconfig ${PAIR2} inet6 ${PAIR2IP6_3}/128
75ifconfig ${PAIR1} patch ${PAIR2}
76ifconfig lo${RDOMAIN1} inet 127.0.0.1/8
77ifconfig lo${RDOMAIN2} inet 127.0.0.1/8
78
79echo run bgpds
80route -T ${RDOMAIN1} exec ${BGPD} \
81	-v -f ${BGPDCONFIGDIR}/bgpd.maxattr.rdomain1.conf
82sleep 2
83route -T ${RDOMAIN2} exec ${BGPD} \
84	-v -f ${BGPDCONFIGDIR}/bgpd.maxattr.rdomain2_1.conf
85route -T ${RDOMAIN2} exec ${BGPD} \
86	-v -f ${BGPDCONFIGDIR}/bgpd.maxattr.rdomain2_2.conf
87route -T ${RDOMAIN2} exec ${BGPD} \
88	-v -f ${BGPDCONFIGDIR}/bgpd.maxattr.rdomain2_3.conf
89sleep 1
90
91echo inject initial prefixes
92route -T ${RDOMAIN2} exec bgpctl network add 10.12.60.0/24
93route -T ${RDOMAIN2} exec bgpctl network add 10.12.61.0/24 community 0:1
94route -T ${RDOMAIN2} exec bgpctl network add 10.12.62.0/24 community 0:1
95route -T ${RDOMAIN2} exec bgpctl network add 10.12.63.0/24 community 0:1
96route -T ${RDOMAIN2} exec bgpctl network add 10.12.64.0/24 community 0:1
97route -T ${RDOMAIN2} exec bgpctl network add 10.12.65.0/24 community 0:1
98route -T ${RDOMAIN2} exec bgpctl network add 10.12.66.0/24 community 0:1
99route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:60::/48
100route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:61::/48 community 0:2
101route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:62::/48 community 0:2
102route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:63::/48 community 0:2
103route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:64::/48 community 0:2
104route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:65::/48 community 0:2
105route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:66::/48 community 0:2
106
107sleep 4
108echo test1: check propagation
109route -T ${RDOMAIN1} exec bgpctl show rib out | tee maxattr.test1.out
110echo "regular peer" >> maxattr.test1.out
111route -T ${RDOMAIN2} exec bgpctl -s /var/run/bgpd.sock.12_2 show rib | tee -a maxattr.test1.out
112echo "extended message peer" >> maxattr.test1.out
113route -T ${RDOMAIN2} exec bgpctl -s /var/run/bgpd.sock.12_3 show rib | tee -a maxattr.test1.out
114
115echo update prefixes
116route -T ${RDOMAIN2} exec bgpctl network add 10.12.62.0/24 community 0:1 community 42:1
117route -T ${RDOMAIN2} exec bgpctl network add 10.12.63.0/24 community 0:1 community 42:2
118route -T ${RDOMAIN2} exec bgpctl network add 10.12.64.0/24 community 0:1 community 42:3
119route -T ${RDOMAIN2} exec bgpctl network add 10.12.65.0/24 community 0:1 community 42:4
120route -T ${RDOMAIN2} exec bgpctl network add 10.12.66.0/24 community 0:1 community 42:5
121route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:62::/48 community 0:2 community 42:1
122route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:63::/48 community 0:2 community 42:2
123route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:64::/48 community 0:2 community 42:3
124route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:65::/48 community 0:2 community 42:4
125route -T ${RDOMAIN2} exec bgpctl network add 2001:db8:66::/48 community 0:2 community 42:5
126
127sleep 2
128echo test2: check propagation
129route -T ${RDOMAIN1} exec bgpctl show rib out | tee maxattr.test2.out
130echo "regular peer" >> maxattr.test2.out
131route -T ${RDOMAIN2} exec bgpctl -s /var/run/bgpd.sock.12_2 show rib | tee -a maxattr.test2.out
132echo "extended message peer" >> maxattr.test2.out
133route -T ${RDOMAIN2} exec bgpctl -s /var/run/bgpd.sock.12_3 show rib | tee -a maxattr.test2.out
134
135echo check results
136diff -u ${BGPDCONFIGDIR}/maxattr.test1.ok maxattr.test1.out
137diff -u ${BGPDCONFIGDIR}/maxattr.test2.ok maxattr.test2.out
138echo OK
139
140exit 0
141