Simple BGP Example

We want to create a three-router BGP network:

  • PE1 and PE2 are in AS 65000

  • E1 is in AS 65001

All devices run BGP and OSPF (we need OSPF within AS 65000 to propagate loopback interfaces):

module: [ bgp,ospf ]

Default BGP AS number is 65000. Default OSPF area is 0.0.0.0. Default device type is Cisco IOSv:

bgp:
  as: 65000 
ospf:
  area: 0.0.0.0
defaults:
  device: iosv

PE1 and PE2 are in the default BGP AS and default OSPF area:

nodes:
  pe1:
  pe2:

E1 is an Arista EOS device in BGP AS 65001:

nodes:
  e1:
    device: eos
    bgp:
      as: 65001 

There are links between PE1 and PE2, and between PE2 and E1. The link between PE2 and E1 will be automatically tagged as external. OSPF in area 0 will be configured on the pe1-pe2 link.

links:
- pe1-pe2
- pe2-e1

Resulting Data Structures

This is the BGP-related part of transformed node data on PE1. It’s extremely easy to generate BGP configuration out of it:

- bgp:
    as: 65000
    neighbors:
    - as: 65000
      ipv4: 10.0.0.2
      name: pe1
      type: ibgp
    - as: 65001
      ipv4: 10.1.0.5
      name: e1
      type: ebgp
    next_hop_self: true

Interface information on PE1 includes the link role (external) which the OSPF configuration module uses to determine whether to include an interface in the OSPF process.

  links:
  - ifindex: 1
    ifname: GigabitEthernet0/1
    ipv4: 10.1.0.2/30
    linkindex: 1
    name: pe2 -> pe1
    neighbors:
      pe1:
        ifname: GigabitEthernet0/1
        ipv4: 10.1.0.1/30
    remote_id: 2
    remote_ifindex: 1
    type: p2p
  - ifindex: 2
    ifname: GigabitEthernet0/2
    ipv4: 10.1.0.6/30
    linkindex: 2
    name: pe2 -> e1
    neighbors:
      e1:
        ifname: Ethernet1
        ipv4: 10.1.0.5/30
    remote_id: 1
    remote_ifindex: 1
    role: external
    type: p2p

Resulting Device Configurations

The above topology generates the following device configurations

PE1 (Cisco IOS)

interface Loopback0
 ip address 10.0.0.2 255.255.255.255
 ip ospf 1 area 0.0.0.0
!
interface GigabitEthernet0/1
 description pe1 -> pe2
 ip address 10.1.0.1 255.255.255.252
 ip ospf network point-to-point
 ip ospf 1 area 0.0.0.0
!
router ospf 1
!
router bgp 65000
 bgp log-neighbor-changes
 neighbor 10.0.0.3 remote-as 65000
 neighbor 10.0.0.3 description pe2
 neighbor 10.0.0.3 update-source Loopback0
 !
 address-family ipv4
  network 10.0.0.2 mask 255.255.255.255
  neighbor 10.0.0.3 activate
  neighbor 10.0.0.3 next-hop-self
 exit-address-family

PE2 (Cisco IOS)

interface Loopback0
 ip address 10.0.0.3 255.255.255.255
 ip ospf 1 area 0.0.0.0
!
interface GigabitEthernet0/1
 description pe2 -> pe1
 ip address 10.1.0.2 255.255.255.252
 ip ospf network point-to-point
 ip ospf 1 area 0.0.0.0
!
interface GigabitEthernet0/2
 description pe2 -> e1 [external]
 ip address 10.1.0.6 255.255.255.252
!
router ospf 1
!
router bgp 65000
 bgp log-neighbor-changes
 neighbor 10.0.0.2 remote-as 65000
 neighbor 10.0.0.2 description pe1
 neighbor 10.0.0.2 update-source Loopback0
 neighbor 10.1.0.5 remote-as 65001
 neighbor 10.1.0.5 description e1
 !
 address-family ipv4
  network 10.0.0.3 mask 255.255.255.255
  network 10.1.0.0 mask 255.255.255.252
  neighbor 10.0.0.2 activate
  neighbor 10.0.0.2 next-hop-self
  neighbor 10.1.0.5 activate
 exit-address-family

E1 (Arista EOS)

interface Ethernet1
   description e1 -> pe2 [external]
   ip address 10.1.0.5/30
!
interface Loopback0
   ip address 10.0.0.1/32
   ip ospf area 0.0.0.0
!
router bgp 65001
   neighbor 10.1.0.6 remote-as 65000
   neighbor 10.1.0.6 description pe2
   !
   address-family ipv4
      neighbor 10.1.0.6 activate
      network 10.0.0.1/32
!
router ospf 1
   interface unnumbered hello mask tx 0.0.0.0

Complete network topology

module: [ bgp,ospf ]

bgp:
  as: 65000
ospf:
  area: 0.0.0.0
defaults:
  device: iosv

nodes:
  pe1:
  pe2:
  e1:
    device: eos
    bgp:
      as: 65001
links:
- pe1-pe2
- pe2-e1