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