1#!/bin/ksh 2# $OpenBSD: md5.sh,v 1.6 2023/02/15 14:19:08 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.md5.rdomain1.conf 70sleep 1 71route -T ${RDOMAIN2} exec ${BGPD} \ 72 -v -f ${BGPDCONFIGDIR}/bgpd.md5.rdomain2.conf 73 74sleep 1 75route -T ${RDOMAIN1} exec bgpctl nei RDOMAIN2 up 76sleep 1 77 78echo test1 79route -T ${RDOMAIN1} exec bgpctl sh sum | \ 80 awk '{ if ($1 ~ /^RDOMAIN2/) { f=1; print $7; 81 if ($7 == "0") { print "ok"; exit 0; } 82 else { print "no session"; exit 1; } 83 }} END { if (f != 1) { print "bad bgpctl output"; exit 2; }}' 84 85echo test2 86route -T ${RDOMAIN2} exec bgpctl sh sum | \ 87 awk '{ if ($1 ~ /^RDOMAIN1/) { f=1; print $7; 88 if ($7 == "0") { print "ok"; exit 0; } 89 else { print "no session"; exit 1; } 90 }} END { if (f != 1) { print "bad bgpctl output"; exit 2; }}' 91 92echo resetting sessions 93route -T ${RDOMAIN1} exec bgpctl neigh RDOMAIN2 clear 94#route -T ${RDOMAIN2} exec bgpctl neigh RDOMAIN1 clear 95sleep 10 96#tail -25 /var/log/daemon 97 98echo test3 99route -T ${RDOMAIN1} exec bgpctl sh sum | \ 100 awk '{ if ($1 ~ /^RDOMAIN2/) { f=1; print $7; 101 if ($7 == "0") { print "ok"; exit 0; } 102 else { print "no session"; exit 1; } 103 }} END { if (f != 1) { print "bad bgpctl output"; exit 2; }}' 104 105echo test4 106route -T ${RDOMAIN2} exec bgpctl sh sum | \ 107 awk '{ if ($1 ~ /^RDOMAIN1/) { f=1; print $7; 108 if ($7 == "0") { print "ok"; exit 0; } 109 else { print "no session"; exit 1; } 110 }} END { if (f != 1) { print "bad bgpctl output"; exit 2; }}' 111 112exit 0 113