1#!/bin/ksh 2# $OpenBSD: maxprefixout.sh,v 1.1 2020/01/26 00:54:47 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 17 18error_notify() { 19 echo cleanup 20 pkill -T ${RDOMAIN1} bgpd || true 21 pkill -T ${RDOMAIN2} bgpd || true 22 sleep 1 23 ifconfig ${PAIR2} destroy || true 24 ifconfig ${PAIR1} destroy || true 25 route -qn -T ${RDOMAIN1} flush || true 26 route -qn -T ${RDOMAIN2} flush || true 27 ifconfig lo${RDOMAIN1} destroy || true 28 ifconfig lo${RDOMAIN2} destroy || true 29 if [ $1 -ne 0 ]; then 30 echo FAILED 31 exit 1 32 else 33 echo SUCCESS 34 fi 35} 36 37if [ "$(id -u)" -ne 0 ]; then 38 echo need root privileges >&2 39 exit 1 40fi 41 42trap 'error_notify $?' EXIT 43 44echo check if rdomains are busy 45for n in ${RDOMAINS}; do 46 if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then 47 echo routing domain ${n} is already used >&2 48 exit 1 49 fi 50done 51 52echo check if interfaces are busy 53for n in ${PAIRS}; do 54 /sbin/ifconfig "${n}" >/dev/null 2>&1 && \ 55 ( echo interface ${n} is already used >&2; exit 1 ) 56done 57 58set -x 59 60echo setup 61ifconfig ${PAIR1} rdomain ${RDOMAIN1} ${PAIR1IP}/30 up 62ifconfig ${PAIR2} rdomain ${RDOMAIN2} ${PAIR2IP}/30 up 63ifconfig ${PAIR1} patch ${PAIR2} 64ifconfig lo${RDOMAIN1} inet 127.0.0.1/8 65ifconfig lo${RDOMAIN2} inet 127.0.0.1/8 66 67echo run bgpds 68route -T ${RDOMAIN1} exec ${BGPD} \ 69 -v -f ${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain1.conf 70route -T ${RDOMAIN2} exec ${BGPD} \ 71 -v -f ${BGPDCONFIGDIR}/bgpd.maxprefixout.rdomain2.conf 72 73sleep 3 74 75echo test1: add two networks 76route -T ${RDOMAIN1} exec bgpctl network add 10.12.58.0/24 77route -T ${RDOMAIN1} exec bgpctl network add 10.12.59.0/24 78sleep 1 79route -T ${RDOMAIN1} exec bgpctl show nei | \ 80 awk '/^ Prefixes/ { if ($2 == "2") { print "ok"; ok=1; exit 0; } } 81 END { if (ok != 1) { print "bad bgpctl output"; exit 2; } }' 82 83echo test1: add another network 84route -T ${RDOMAIN1} exec bgpctl network add 10.12.60.0/24 85sleep 1 86route -T ${RDOMAIN1} exec bgpctl show nei | \ 87 grep '^ Last error sent: Cease, sent max-prefix exceeded' 88