diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
commit | e2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch) | |
tree | f0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /tools/multiple-bgpd.sh | |
parent | Initial commit. (diff) | |
download | frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.tar.xz frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.zip |
Adding upstream version 9.1.upstream/9.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tools/multiple-bgpd.sh')
-rw-r--r-- | tools/multiple-bgpd.sh | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tools/multiple-bgpd.sh b/tools/multiple-bgpd.sh new file mode 100644 index 0000000..6dee1ba --- /dev/null +++ b/tools/multiple-bgpd.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# Public domain, not copyrighted.. + +NUM=5 +VTYBASE=2610 +ASBASE=64560 +BGPD=/path/to/bgpd +PREFIX=192.168.145. +#PREFIX=3ffe:123:456:: +ADDRPLEN=32 +CONFBASE=/tmp +PIDBASE=/var/run/frr +CHOWNSTR=frr:frr + +for H in `seq 1 ${NUM}` ; do + CONF="${CONFBASE}"/bgpd${H}.conf + ADDR=${PREFIX}${H} + + if [ ! -e "$CONF" ] ; then + # This sets up a ring of bgpd peerings + NEXT=$(( ($H % ${NUM}) + 1 )) + PREV=$(( (($H + $NUM - 2) % ${NUM}) + 1 )) + NEXTADDR="${PREFIX}${NEXT}" + NEXTAS=$((${ASBASE} + $NEXT)) + PREVADDR="${PREFIX}${PREV}" + PREVAS=$((${ASBASE} + $PREV)) + ASN=$((64560+${H})) + + # Edit config to suit. + cat > "$CONF" <<- EOF + password whatever + service advanced-vty + ! + router bgp ${ASN} + bgp router-id ${ADDR} + network 10.${H}.1.0/24 pathlimit 1 + network 10.${H}.2.0/24 pathlimit 2 + network 10.${H}.3.0/24 pathlimit 3 + neighbor default peer-group + neighbor default update-source ${ADDR} + neighbor default capability orf prefix-list both + neighbor default soft-reconfiguration inbound + neighbor default route-map test out + neighbor ${NEXTADDR} remote-as ${NEXTAS} + neighbor ${NEXTADDR} peer-group default + neighbor ${PREVADDR} remote-as ${PREVAS} + neighbor ${PREVADDR} peer-group default + ! + address-family ipv6 + network 3ffe:${H}::/48 + network 3ffe:${H}:1::/48 pathlimit 1 + network 3ffe:${H}:2::/48 pathlimit 3 + network 3ffe:${H}:3::/48 pathlimit 3 + neighbor default activate + neighbor default capability orf prefix-list both + neighbor default default-originate + neighbor default route-map test out + neighbor ${NEXTADDR} peer-group default + neighbor ${PREVADDR} peer-group default + exit-address-family + ! + ! bgpd still has problems with extcommunity rt/soo + route-map test permit 10 + set extcommunity rt ${ASN}:1 + set extcommunity soo ${ASN}:2 + set community ${ASN}:1 + line vty + ! + end + EOF + chown ${CHOWNSTR} "$CONF" + fi + # You may want to automatically add configure a local address + # on a loop interface. + # + # Solaris: ifconfig vni${H} plumb ${ADDR}/${ADDRPLEN} up + # Linux: ip address add ${ADDR}/${ADDRPLEN} dev lo 2> /dev/null + ${BGPD} -i "${PIDBASE}"/bgpd${H}.pid \ + -l ${ADDR} \ + -f "${CONF}" \ + -P $((${VTYBASE}+${H})) \ + -d +done |