blob: f6edae922ad365b0c31d972e9c66ba75d9a243ef [file] [log] [blame]
Paul Jakma3a02d1f2007-11-01 14:29:11 +00001#!/bin/bash
2
3# Public domain, not copyrighted..
4
Paul Jakmaa6efbab2015-12-01 16:09:08 +00005NUM=8
Paul Jakma3a02d1f2007-11-01 14:29:11 +00006VTYBASE=2610
7ASBASE=64560
8BGPD=/path/to/bgpd
Paul Jakmaf04b0e62008-07-21 18:43:04 +00009PREFIX=192.168.145.
10#PREFIX=3ffe:123:456::
11ADDRPLEN=32
Paul Jakma0e7c1242008-06-01 14:26:48 +000012CONFBASE=/tmp
13PIDBASE=/var/run/quagga
Paul Jakmace9c3cc2008-06-12 18:53:09 +000014CHOWNSTR=quagga:quagga
Paul Jakma3a02d1f2007-11-01 14:29:11 +000015
16for H in `seq 1 ${NUM}` ; do
Paul Jakma0e7c1242008-06-01 14:26:48 +000017 CONF="${CONFBASE}"/bgpd${H}.conf
Paul Jakmaf04b0e62008-07-21 18:43:04 +000018 ADDR=${PREFIX}${H}
Paul Jakma3a02d1f2007-11-01 14:29:11 +000019
20 if [ ! -e "$CONF" ] ; then
21 # This sets up a ring of bgpd peerings
22 NEXT=$(( ($H % ${NUM}) + 1 ))
Paul Jakma50e7a382012-01-09 13:54:33 +000023 PREV=$(( (($H + $NUM - 2) % ${NUM}) + 1 ))
Paul Jakmaa6efbab2015-12-01 16:09:08 +000024 NEXT2=$(( (($H+1) % ${NUM}) + 1 ))
25 PREV2=$(( (($H + $NUM - 3) % ${NUM}) + 1 ))
Paul Jakmaf04b0e62008-07-21 18:43:04 +000026 NEXTADDR="${PREFIX}${NEXT}"
Paul Jakma3a02d1f2007-11-01 14:29:11 +000027 NEXTAS=$((${ASBASE} + $NEXT))
Paul Jakmaf04b0e62008-07-21 18:43:04 +000028 PREVADDR="${PREFIX}${PREV}"
Paul Jakma3a02d1f2007-11-01 14:29:11 +000029 PREVAS=$((${ASBASE} + $PREV))
Paul Jakmaa6efbab2015-12-01 16:09:08 +000030 NEXT2ADDR="${PREFIX}${NEXT2}"
31 NEXT2AS=$((${ASBASE} + $NEXT2))
32 PREV2ADDR="${PREFIX}${PREV2}"
33 PREV2AS=$((${ASBASE} + $PREV2))
Paul Jakmac112af22010-11-27 11:49:09 +000034 ASN=$((64560+${H}))
Paul Jakma3a02d1f2007-11-01 14:29:11 +000035
36 # Edit config to suit.
37 cat > "$CONF" <<- EOF
38 password whatever
39 service advanced-vty
40 !
Paul Jakmac112af22010-11-27 11:49:09 +000041 router bgp ${ASN}
Paul Jakma3a02d1f2007-11-01 14:29:11 +000042 bgp router-id ${ADDR}
Paul Jakmaa6efbab2015-12-01 16:09:08 +000043 maximum-paths 32
44 bgp bestpath as-path multipath-relax
Paul Jakma3a02d1f2007-11-01 14:29:11 +000045 network 10.${H}.1.0/24 pathlimit 1
46 network 10.${H}.2.0/24 pathlimit 2
47 network 10.${H}.3.0/24 pathlimit 3
Paul Jakmaa6efbab2015-12-01 16:09:08 +000048 network 10.${H}.0.0/24
Paul Jakma3a02d1f2007-11-01 14:29:11 +000049 neighbor default peer-group
50 neighbor default update-source ${ADDR}
51 neighbor default capability orf prefix-list both
52 neighbor default soft-reconfiguration inbound
Paul Jakmac112af22010-11-27 11:49:09 +000053 neighbor default route-map test out
Paul Jakma3a02d1f2007-11-01 14:29:11 +000054 neighbor ${NEXTADDR} remote-as ${NEXTAS}
55 neighbor ${NEXTADDR} peer-group default
56 neighbor ${PREVADDR} remote-as ${PREVAS}
57 neighbor ${PREVADDR} peer-group default
Paul Jakmaa6efbab2015-12-01 16:09:08 +000058 neighbor ${NEXT2ADDR} remote-as ${NEXT2AS}
59 neighbor ${NEXT2ADDR} peer-group default
60 neighbor ${PREV2ADDR} remote-as ${PREV2AS}
61 neighbor ${PREV2ADDR} peer-group default
Paul Jakmace9c3cc2008-06-12 18:53:09 +000062 !
63 address-family ipv6
Paul Jakmaf04b0e62008-07-21 18:43:04 +000064 network 3ffe:${H}::/48
65 network 3ffe:${H}:1::/48 pathlimit 1
66 network 3ffe:${H}:2::/48 pathlimit 3
67 network 3ffe:${H}:3::/48 pathlimit 3
Paul Jakmace9c3cc2008-06-12 18:53:09 +000068 neighbor default activate
69 neighbor default capability orf prefix-list both
70 neighbor default default-originate
Paul Jakmac112af22010-11-27 11:49:09 +000071 neighbor default route-map test out
Paul Jakmace9c3cc2008-06-12 18:53:09 +000072 neighbor ${NEXTADDR} peer-group default
73 neighbor ${PREVADDR} peer-group default
Paul Jakmaa6efbab2015-12-01 16:09:08 +000074 neighbor ${NEXT2ADDR} peer-group default
75 neighbor ${PREV2ADDR} peer-group default
Paul Jakmace9c3cc2008-06-12 18:53:09 +000076 exit-address-family
77 !
Paul Jakma50e7a382012-01-09 13:54:33 +000078 ! bgpd still has problems with extcommunity rt/soo
Paul Jakmac112af22010-11-27 11:49:09 +000079 route-map test permit 10
80 set extcommunity rt ${ASN}:1
81 set extcommunity soo ${ASN}:2
82 set community ${ASN}:1
Paul Jakmaa6efbab2015-12-01 16:09:08 +000083 !
Paul Jakmace9c3cc2008-06-12 18:53:09 +000084 line vty
Paul Jakmaa6efbab2015-12-01 16:09:08 +000085 exec-timeout 0 0
Paul Jakmace9c3cc2008-06-12 18:53:09 +000086 !
87 end
Paul Jakma3a02d1f2007-11-01 14:29:11 +000088 EOF
Paul Jakmace9c3cc2008-06-12 18:53:09 +000089 chown ${CHOWNSTR} "$CONF"
Paul Jakma3a02d1f2007-11-01 14:29:11 +000090 fi
91 # You may want to automatically add configure a local address
92 # on a loop interface.
93 #
Paul Jakmaf04b0e62008-07-21 18:43:04 +000094 # Solaris: ifconfig vni${H} plumb ${ADDR}/${ADDRPLEN} up
95 # Linux: ip address add ${ADDR}/${ADDRPLEN} dev lo 2> /dev/null
Paul Jakma0e7c1242008-06-01 14:26:48 +000096 ${BGPD} -i "${PIDBASE}"/bgpd${H}.pid \
Paul Jakma3a02d1f2007-11-01 14:29:11 +000097 -l ${ADDR} \
Paul Jakma0e7c1242008-06-01 14:26:48 +000098 -f "${CONF}" \
Paul Jakma3a02d1f2007-11-01 14:29:11 +000099 -P $((${VTYBASE}+${H})) \
100 -d
101done