#!/bin/bash set -e LOCAL_IP=${EXABGP_LOCAL_IP:-10.40.40.202} LOCAL_AS=${EXABGP_LOCAL_AS:-65100} API_PORT=${EXABGP_API_PORT:-5050} # Peer list — ";"-separated entries of "ip:peer_as:description". # Default reproduces the original single-lab (AS 65020) config. EXABGP_PEERS=${EXABGP_PEERS:-10.100.0.100:65020:CML-R9K-CORE-01;10.100.0.200:65020:CML-R9K-CORE-02} echo "================================================================" echo " ExaBGP Route Injector" echo " Local: ${LOCAL_IP} AS${LOCAL_AS}" echo " API: http://0.0.0.0:${API_PORT}" echo " Peers:" IFS=';' read -ra PEER_ENTRIES <<< "$EXABGP_PEERS" for entry in "${PEER_ENTRIES[@]}"; do [ -z "$entry" ] && continue IFS=':' read -r p_ip p_as p_desc <<< "$entry" echo " - ${p_ip} AS${p_as} (${p_desc})" done echo "================================================================" # Generate ExaBGP 5.x env file — ExaBGP looks here based on pip install prefix mkdir -p /usr/local/etc/exabgp exabgp env > /usr/local/etc/exabgp/exabgp.env sed -i 's/drop = true/drop = false/' /usr/local/etc/exabgp/exabgp.env sed -i 's/cli = true/cli = false/' /usr/local/etc/exabgp/exabgp.env sed -i "s/destination = 'stdout'/destination = 'stderr'/" /usr/local/etc/exabgp/exabgp.env # Generate exabgp.conf — one neighbor block per peer-list entry cat > /tmp/exabgp.conf << EOF process api { run /usr/local/bin/python3 /exabgp/api/server.py; encoder text; } EOF for entry in "${PEER_ENTRIES[@]}"; do [ -z "$entry" ] && continue IFS=':' read -r p_ip p_as p_desc <<< "$entry" cat >> /tmp/exabgp.conf << EOF neighbor ${p_ip} { router-id ${LOCAL_IP}; local-address ${LOCAL_IP}; local-as ${LOCAL_AS}; peer-as ${p_as}; description "${p_desc}"; hold-time 90; family { ipv4 unicast; } api { processes [ api ]; neighbor-changes; } } EOF done exec exabgp server /tmp/exabgp.conf