summaryrefslogtreecommitdiffstats
path: root/tools/multiple-bgpd.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:16:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:16:35 +0000
commite2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch)
treef0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /tools/multiple-bgpd.sh
parentInitial commit. (diff)
downloadfrr-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.sh84
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