1#!/bin/ksh 2# $OpenBSD: ixp.sh,v 1.3 2024/10/28 12:11:05 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=192.0.2.2 16PAIR2IP=192.0.2.11 17PAIR2IP2=192.0.2.21 18PAIR2IP3=192.0.2.31 19PAIR2IP4=192.0.2.41 20 21error_notify() { 22 echo cleanup 23 pkill -T ${RDOMAIN1} bgpd || true 24 pkill -T ${RDOMAIN2} bgpd || true 25 sleep 1 26 ifconfig ${PAIR2} destroy || true 27 ifconfig ${PAIR1} destroy || true 28 route -qn -T ${RDOMAIN1} flush || true 29 route -qn -T ${RDOMAIN2} flush || true 30 ifconfig lo${RDOMAIN1} destroy || true 31 ifconfig lo${RDOMAIN2} destroy || true 32 if [ $1 -ne 0 ]; then 33 echo FAILED 34 exit 1 35 else 36 echo SUCCESS 37 fi 38} 39 40if [ "$(id -u)" -ne 0 ]; then 41 echo need root privileges >&2 42 exit 1 43fi 44 45. "${BGPDCONFIGDIR}/util.sh" 46 47trap 'error_notify $?' EXIT 48 49echo check if rdomains are busy 50for n in ${RDOMAINS}; do 51 if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then 52 echo routing domain ${n} is already used >&2 53 exit 1 54 fi 55done 56 57echo check if interfaces are busy 58for n in ${PAIRS}; do 59 /sbin/ifconfig "${n}" >/dev/null 2>&1 && \ 60 ( echo interface ${n} is already used >&2; exit 1 ) 61done 62 63set -x 64 65echo setup 66ifconfig ${PAIR1} rdomain ${RDOMAIN1} ${PAIR1IP}/24 up 67ifconfig ${PAIR2} rdomain ${RDOMAIN2} ${PAIR2IP}/24 up 68ifconfig ${PAIR2} alias ${PAIR2IP2}/32 69ifconfig ${PAIR2} alias ${PAIR2IP3}/32 70ifconfig ${PAIR2} alias ${PAIR2IP4}/32 71ifconfig ${PAIR1} patch ${PAIR2} 72ifconfig lo${RDOMAIN1} inet 127.0.0.1/8 73ifconfig lo${RDOMAIN2} inet 127.0.0.1/8 74 75echo run bgpds 76route -T ${RDOMAIN1} exec ${BGPD} \ 77 -v -f ${BGPDCONFIGDIR}/bgpd.ixp.rdomain1.conf 78sleep 2 79route -T ${RDOMAIN2} exec ${BGPD} \ 80 -v -f ${BGPDCONFIGDIR}/bgpd.ixp.rdomain2_1.conf 81route -T ${RDOMAIN2} exec ${BGPD} \ 82 -v -f ${BGPDCONFIGDIR}/bgpd.ixp.rdomain2_2.conf 83route -T ${RDOMAIN2} exec ${BGPD} \ 84 -v -f ${BGPDCONFIGDIR}/bgpd.ixp.rdomain2_3.conf 85route -T ${RDOMAIN2} exec ${BGPD} \ 86 -v -f ${BGPDCONFIGDIR}/bgpd.ixp.rdomain2_4.conf 87 88wait_until "route -T ${RDOMAIN1} exec bgpctl show rib detail | ! cmp /dev/null -" 89route -T ${RDOMAIN1} exec bgpctl show rib detail | grep -v 'Last update:' | \ 90 tee ixp.rdomain1.out 91diff -u ${BGPDCONFIGDIR}/ixp.rdomain1.ok ixp.rdomain1.out 92echo OK 93 94wait_until "route -T ${RDOMAIN2} exec bgpctl show rib detail | ! cmp /dev/null -" 95route -T ${RDOMAIN2} exec bgpctl show rib detail | grep -v 'Last update:' | \ 96 tee ixp.rdomain2.out 97diff -u ${BGPDCONFIGDIR}/ixp.rdomain2.ok ixp.rdomain2.out 98echo OK 99 100exit 0 101