123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/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/quagga
- CHOWNSTR=quagga:quagga
- 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
|