1#!/bin/ksh 2# $OpenBSD: ovs.sh,v 1.3 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 17PAIR2STATIC=10.12.58.0/24 18PAIR2CONNIP=10.12.59.1 19PAIR2CONNPREF=24 20PAIR2CONN=10.12.59.0/24 21PAIR2RTABLE=10.12.60.0/24 22PAIR2PRIORITY=10.12.61.0/24 23PAIR2VALID=10.12.62.0/24 24PAIR2INVALIDAS=10.12.63.0/24 25PAIR2NOTFOUND=10.12.64.0/24 26 27 28error_notify() { 29 echo cleanup 30 pkill -T ${RDOMAIN1} bgpd || true 31 pkill -T ${RDOMAIN2} bgpd || true 32 sleep 1 33 ifconfig ${PAIR2} destroy || true 34 ifconfig ${PAIR1} destroy || true 35 route -qn -T ${RDOMAIN1} flush || true 36 route -qn -T ${RDOMAIN2} flush || true 37 ifconfig lo${RDOMAIN1} destroy || true 38 ifconfig lo${RDOMAIN2} destroy || true 39 if [ $1 -ne 0 ]; then 40 echo FAILED 41 exit 1 42 else 43 echo SUCCESS 44 fi 45} 46 47if [ "$(id -u)" -ne 0 ]; then 48 echo need root privileges >&2 49 exit 1 50fi 51 52trap 'error_notify $?' EXIT 53 54echo check if rdomains are busy 55for n in ${RDOMAINS}; do 56 if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then 57 echo routing domain ${n} is already used >&2 58 exit 1 59 fi 60done 61 62echo check if interfaces are busy 63for n in ${PAIRS}; do 64 /sbin/ifconfig "${n}" >/dev/null 2>&1 && \ 65 ( echo interface ${n} is already used >&2; exit 1 ) 66done 67 68set -x 69 70echo setup 71ifconfig ${PAIR1} rdomain ${RDOMAIN1} ${PAIR1IP}/30 up 72ifconfig ${PAIR2} rdomain ${RDOMAIN2} ${PAIR2IP}/30 up 73ifconfig ${PAIR1} patch ${PAIR2} 74ifconfig lo${RDOMAIN1} inet 127.0.0.1/8 75ifconfig lo${RDOMAIN2} inet 127.0.0.1/8 76 77echo add routes 78route -T ${RDOMAIN2} add ${PAIR2STATIC} ${PAIR1IP} 79ifconfig ${PAIR2} alias ${PAIR2CONNIP}/${PAIR2CONNPREF} 80route -T ${RDOMAIN2} add -label PAIR2RTABLE ${PAIR2RTABLE} \ 81 ${PAIR1IP} 82route -T ${RDOMAIN2} add -priority 55 ${PAIR2PRIORITY} \ 83 ${PAIR1IP} 84route -T ${RDOMAIN1} exec ${BGPD} \ 85 -v -f ${BGPDCONFIGDIR}/bgpd.ovs.rdomain1.conf 86route -T ${RDOMAIN2} exec ${BGPD} \ 87 -v -f ${BGPDCONFIGDIR}/bgpd.ovs.rdomain2.conf 88 89sleep 2 90 91echo test 1 92route -T ${RDOMAIN1} exec bgpctl sh rib ovs valid | \ 93 grep ${PAIR2VALID} 94route -T ${RDOMAIN1} exec bgpctl sh rib ovs invalid | \ 95 grep ${PAIR2INVALIDAS} 96route -T ${RDOMAIN1} exec bgpctl sh rib ovs not-found | \ 97 grep ${PAIR2NOTFOUND} 98 99echo reload config 100route -T ${RDOMAIN1} exec bgpctl reload 101sleep 2 102 103echo test 2 104route -T ${RDOMAIN1} exec bgpctl sh rib ovs valid | \ 105 grep ${PAIR2VALID} 106route -T ${RDOMAIN1} exec bgpctl sh rib ovs invalid | \ 107 grep ${PAIR2INVALIDAS} 108route -T ${RDOMAIN1} exec bgpctl sh rib ovs not-found | \ 109 grep ${PAIR2NOTFOUND} 110 111exit 0 112