1*815e5984Sclaudio#!/bin/ksh 2*815e5984Sclaudio# $OpenBSD: addpath.sh,v 1.1 2025/01/14 13:15:18 claudio Exp $ 3*815e5984Sclaudio 4*815e5984Sclaudioset -e 5*815e5984Sclaudio 6*815e5984SclaudioBGPD=$1 7*815e5984SclaudioBGPDCONFIGDIR=$2 8*815e5984SclaudioRDOMAIN1=$3 9*815e5984SclaudioRDOMAIN2=$4 10*815e5984SclaudioPAIR1=$5 11*815e5984SclaudioPAIR2=$6 12*815e5984Sclaudio 13*815e5984SclaudioRDOMAINS="${RDOMAIN1} ${RDOMAIN2}" 14*815e5984SclaudioPAIRS="${PAIR1} ${PAIR2}" 15*815e5984SclaudioPAIR1IP=192.0.2.2 16*815e5984SclaudioPAIR2IP=192.0.2.11 17*815e5984SclaudioPAIR2IP2=192.0.2.21 18*815e5984SclaudioPAIR2IP3=192.0.2.31 19*815e5984SclaudioPAIR2IP4=192.0.2.41 20*815e5984SclaudioPAIR2IP5=192.0.2.51 21*815e5984Sclaudio 22*815e5984Sclaudioerror_notify() { 23*815e5984Sclaudio echo cleanup 24*815e5984Sclaudio pkill -T ${RDOMAIN1} bgpd || true 25*815e5984Sclaudio pkill -T ${RDOMAIN2} bgpd || true 26*815e5984Sclaudio sleep 1 27*815e5984Sclaudio ifconfig ${PAIR2} destroy || true 28*815e5984Sclaudio ifconfig ${PAIR1} destroy || true 29*815e5984Sclaudio route -qn -T ${RDOMAIN1} flush || true 30*815e5984Sclaudio route -qn -T ${RDOMAIN2} flush || true 31*815e5984Sclaudio ifconfig lo${RDOMAIN1} destroy || true 32*815e5984Sclaudio ifconfig lo${RDOMAIN2} destroy || true 33*815e5984Sclaudio if [ $1 -ne 0 ]; then 34*815e5984Sclaudio echo FAILED 35*815e5984Sclaudio exit 1 36*815e5984Sclaudio else 37*815e5984Sclaudio echo SUCCESS 38*815e5984Sclaudio fi 39*815e5984Sclaudio} 40*815e5984Sclaudio 41*815e5984Sclaudioif [ "$(id -u)" -ne 0 ]; then 42*815e5984Sclaudio echo need root privileges >&2 43*815e5984Sclaudio exit 1 44*815e5984Sclaudiofi 45*815e5984Sclaudio 46*815e5984Sclaudio. "${BGPDCONFIGDIR}/util.sh" 47*815e5984Sclaudio 48*815e5984Sclaudiotrap 'error_notify $?' EXIT 49*815e5984Sclaudio 50*815e5984Sclaudioecho check if rdomains are busy 51*815e5984Sclaudiofor n in ${RDOMAINS}; do 52*815e5984Sclaudio if /sbin/ifconfig | grep -v "^lo${n}:" | grep " rdomain ${n} "; then 53*815e5984Sclaudio echo routing domain ${n} is already used >&2 54*815e5984Sclaudio exit 1 55*815e5984Sclaudio fi 56*815e5984Sclaudiodone 57*815e5984Sclaudio 58*815e5984Sclaudioecho check if interfaces are busy 59*815e5984Sclaudiofor n in ${PAIRS}; do 60*815e5984Sclaudio /sbin/ifconfig "${n}" >/dev/null 2>&1 && \ 61*815e5984Sclaudio ( echo interface ${n} is already used >&2; exit 1 ) 62*815e5984Sclaudiodone 63*815e5984Sclaudio 64*815e5984Sclaudioset -x 65*815e5984Sclaudio 66*815e5984Sclaudioecho setup 67*815e5984Sclaudioifconfig ${PAIR1} rdomain ${RDOMAIN1} ${PAIR1IP}/24 up 68*815e5984Sclaudioifconfig ${PAIR2} rdomain ${RDOMAIN2} ${PAIR2IP}/24 up 69*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP2}/32 70*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP3}/32 71*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP4}/32 72*815e5984Sclaudioifconfig ${PAIR2} alias ${PAIR2IP5}/32 73*815e5984Sclaudioifconfig ${PAIR1} patch ${PAIR2} 74*815e5984Sclaudioifconfig lo${RDOMAIN1} inet 127.0.0.1/8 75*815e5984Sclaudioifconfig lo${RDOMAIN2} inet 127.0.0.1/8 76*815e5984Sclaudio 77*815e5984Sclaudioecho run bgpds 78*815e5984Sclaudioroute -T ${RDOMAIN1} exec ${BGPD} \ 79*815e5984Sclaudio -v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain1.conf 80*815e5984Sclaudiosleep 2 81*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \ 82*815e5984Sclaudio -v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_1.conf 83*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \ 84*815e5984Sclaudio -v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_2.conf 85*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \ 86*815e5984Sclaudio -v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_3.conf 87*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \ 88*815e5984Sclaudio -v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_4.conf 89*815e5984Sclaudioroute -T ${RDOMAIN2} exec ${BGPD} \ 90*815e5984Sclaudio -v -f ${BGPDCONFIGDIR}/bgpd.addpath.rdomain2_5.conf 91*815e5984Sclaudio 92*815e5984Sclaudiosleep 7 93*815e5984Sclaudio 94*815e5984Sclaudioroute -T ${RDOMAIN1} exec bgpctl show 95*815e5984Sclaudioroute -T ${RDOMAIN2} exec bgpctl show rib | tee addpath.rdomain2.out 96*815e5984Sclaudio 97*815e5984Sclaudiodiff -u ${BGPDCONFIGDIR}/addpath.rdomain2.ok addpath.rdomain2.out 98*815e5984Sclaudioecho OK 99*815e5984Sclaudio 100*815e5984Sclaudioexit 0 101