mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-10-31 23:29:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/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
 | 
