1#!/bin/ksh 2# $OpenBSD: lladdr.sh,v 1.2 2023/10/16 12:49:15 claudio Exp $ 3 4set -e 5 6BGPD=$1 7BGPDCONFIGDIR=$2 8RDOMAIN1=$3 9RDOMAIN2=$4 10PAIR1=$5 11PAIR2=$6 12GIF1=gif${RDOMAIN1} 13GIF2=gif${RDOMAIN2} 14 15RDOMAINS="${RDOMAIN1} ${RDOMAIN2}" 16IFACES="${PAIR1} ${PAIR2} ${GIF1} ${GIF2}" 17PAIR1IP6=fe80::c0fe:1 18PAIR2IP6=fe80::c0fe:2 19GIF1IP6=fe80::beef:1 20GIF2IP6=fe80::beef:2 21 22error_notify() { 23 set -x 24 echo cleanup 25 pfctl -q -t bgpd_integ_test -T kill 26 pkill -T ${RDOMAIN1} bgpd || true 27 pkill -T ${RDOMAIN2} bgpd || true 28 sleep 1 29 ifconfig ${GIF1} destroy || true 30 ifconfig ${GIF2} destroy || true 31 ifconfig ${PAIR1} destroy || true 32 ifconfig ${PAIR2} destroy || true 33 route -qn -T ${RDOMAIN1} flush || true 34 route -qn -T ${RDOMAIN2} flush || true 35 ifconfig lo${RDOMAIN1} destroy || true 36 ifconfig lo${RDOMAIN2} destroy || true 37 if [ $1 -ne 0 ]; then 38 echo FAILED 39 exit 1 40 else 41 echo SUCCESS 42 fi 43} 44 45if [ "$(id -u)" -ne 0 ]; then 46 echo need root privileges >&2 47 exit 1 48fi 49 50trap 'error_notify $?' EXIT 51 52echo check if rdomains are busy 53for n in ${RDOMAINS}; do 54 if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then 55 echo routing domain ${n} is already used >&2 56 exit 1 57 fi 58done 59 60echo check if interfaces are busy 61for n in ${IFACES}; do 62 /sbin/ifconfig "${n}" >/dev/null 2>&1 && \ 63 ( echo interface ${n} is already used >&2; exit 1 ) 64done 65 66set -x 67 68echo setup 69ifconfig ${PAIR1} rdomain ${RDOMAIN1} up 70ifconfig ${PAIR2} rdomain ${RDOMAIN2} up 71ifconfig ${PAIR1} inet6 ${PAIR1IP6}/64 72ifconfig ${PAIR2} inet6 ${PAIR2IP6}/64 73ifconfig ${PAIR1} patch ${PAIR2} 74ifconfig ${GIF1} rdomain ${RDOMAIN1} tunneldomain ${RDOMAIN1} 75ifconfig ${GIF2} rdomain ${RDOMAIN2} tunneldomain ${RDOMAIN2} 76ifconfig ${GIF1} tunnel ${PAIR1IP6}%${PAIR1} ${PAIR2IP6}%${PAIR1} 77ifconfig ${GIF2} tunnel ${PAIR2IP6}%${PAIR2} ${PAIR1IP6}%${PAIR2} 78ifconfig ${GIF1} inet6 ${GIF1IP6}/128 ${GIF2IP6} 79ifconfig ${GIF2} inet6 ${GIF2IP6}/128 ${GIF1IP6} 80 81echo run bgpds 82route -T ${RDOMAIN1} exec ${BGPD} \ 83 -v -f ${BGPDCONFIGDIR}/bgpd.lladdr.rdomain1.conf 84route -T ${RDOMAIN2} exec ${BGPD} \ 85 -v -f ${BGPDCONFIGDIR}/bgpd.lladdr.rdomain2.conf 86 87sleep 1 88 89route -T12 exec bgpctl nei RDOMAIN1 up 90route -T12 exec bgpctl nei RDOMAIN1_2 up 91 92sleep 2 93 94route -T11 exec bgpctl show rib | tee lladdr.rdomain1.out 95route -T11 exec bgpctl show fib | grep -v 'link#' | tee -a lladdr.rdomain1.out 96route -T11 get 2001:db8:2::/48 | grep -v "if address" | tee -a lladdr.rdomain1.out 97route -T11 get 2001:db8:12::/48 | grep -v "if address" | tee -a lladdr.rdomain1.out 98 99route -T12 exec bgpctl show rib | tee lladdr.rdomain2.out 100route -T12 exec bgpctl show fib | grep -v 'link#' | tee -a lladdr.rdomain2.out 101route -T12 get 2001:db8:1::/48 | grep -v "if address" | tee -a lladdr.rdomain2.out 102route -T12 get 2001:db8:11::/48 | grep -v "if address" | tee -a lladdr.rdomain2.out 103 104sleep .2 105diff -u ${BGPDCONFIGDIR}/lladdr.rdomain1.ok lladdr.rdomain1.out 106diff -u ${BGPDCONFIGDIR}/lladdr.rdomain2.ok lladdr.rdomain2.out 107echo OK 108 109exit 0 110