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