BGP labeled unicast

The BGP labeled unicast address-family helps in establishing an MPLS path between BGP peers. A given prefix entering the network will be assigned a label that will be exchanged with remote entry. That MPLS path can then be used to create other services like L3VPN services.

The chapter discusses eBGP and iBGP use cases. It also clarifies how to connect IPv6 networks to an MPLS IPv4 based backbone, by using the 6pe solution depicted in RFC 4798. Each use case will be based on unique examples.

functionality.

EBGP connection

EBGP between two devices

The following example illustrates a border router directly connected to an external BGP peer. A label is allocated and is exchanged along with the shared prefix.

../../../../_images/labeledebgp_simple.svg

eBGP topology with two peers

rt1

rt1 running config# vrf main
rt1 running vrf main# interface loopback loop1
rt1 running physical loop1# ipv4 address 172.16.1.1/32
rt1 running physical loop1# .. ..
rt1 running vrf main# interface physical eth1
rt1 running physical eth1#! port pci-b0s5
rt1 running physical eth1# ipv4 address 192.168.1.1/24
rt1 running physical eth1# .. ..
rt1 running vrf main# routing bgp
rt1 running bgp#! as 65500
rt1 running bgp# neighbor 192.168.1.2 remote-as 65501
rt1 running bgp# neighbor 192.168.1.2 address-family ipv4-unicast enabled false
rt1 running bgp# neighbor 192.168.1.2 address-family ipv4-labeled-unicast enabled true
rt1 running bgp# address-family ipv4-unicast network 172.16.1.1/32
rt1 running bgp# .. .. ..
rt1 running bgp# ebgp-requires-policy false
rt1 running bgp#

rt2

rt2 running config# vrf main
rt2 running vrf main# interface loopback loop1
rt2 running physical loop1# ipv4 address 172.16.2.2/32
rt2 running physical loop1# .. ..
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s5
rt2 running physical eth1# ipv4 address 192.168.1.2/24
rt2 running physical eth1# .. ..
rt2 running vrf main# routing bgp
rt2 running bgp#! as 65501
rt2 running bgp# neighbor 192.168.1.1 remote-as 65500
rt2 running bgp# neighbor 192.168.1.1 address-family ipv4-unicast enabled false
rt2 running bgp# neighbor 192.168.1.1 address-family ipv4-labeled-unicast enabled true
rt2 running bgp# address-family ipv4-unicast network 172.16.2.2/32
rt2 running bgp# .. .. ..
rt2 running bgp# ebgp-requires-policy false
rt2 running bgp#

Consequently, an LSP is established between both devices. This peering is often used between operators. Actually, each operator has its constraints, and configuring an IGP between two operators may not be possible.

The show bgp ipv4 labeled-unicast prefix command shows the received label from the 192.168.1.2 peer, which is the 3 value (the implicit-null value). .. rubric:: rt1

 rt1> show bgp ipv4 labeled-unicast prefix 172.16.2.2/32
 BGP routing table entry for 172.16.2.32/32, version 2
 Local label: 16
 Paths: (1 available, best #1, table default, vrf (null))
   Advertised to non peer-group peers:
   192.168.1.2
   65501
     192.168.1.2 from 192.168.1.2 (192.168.1.2)
       Origin IGP, metric 0, valid, external, best (First path received)
       Remote label: 3
       Last update: Fri Jan 20 16:31:05 2023

Note

The implicit-null label is part of the special purpose labels defined by a value ranging betwen 0 and 15. The implicit-null value has no meaning from the dataplane perspective, as the outgoing IP packets following the route are sent non encapsulated. However, this value is exchanged in the control plane messages, and is generally used to reach IP addresses that are either directly connected or routable in the next router.

The show ipv4-routes command shows the labeled route used to reach the 172.16.2.0/24.

rt1

 rt1> show ipv4-routes to 172.16.2.2/32
 Routing entry for 172.16.2.2/32
   Known via "bgp", distance 20, metric 0, best
   Last update 00:05:01 ago
   * 192.168.1.2, via eth1, label implicit-null, weight 1
     AS-Path: 65501

The show mpls fec command shows the FEC entry created by BGP when installing the labeled route. The forwarding Equivalent Class entry helps in keeping the relationship between a given prefix and incoming traffic entering the device that receives this prefix. A local label associated to the prefix is locally allocated by BGP.

rt1

 rt1> show mpls fec
 172.16.2.2/32
   Label: 16
   Client list: bgp(fd 29)

The below figure illustrates the case where the FEC entry created by the rt1 device creates an MPLS entry. This entry is used by MPLS packets coming with the label 16. Because the nexthop and the MPLS label are changed when the rt1 device re-advertises the update from the rt2 device, a possible peer located on the left of the rt1 device may receive that update, and may send packets encapsulated with the 16 value.

../../../../_images/labeledebgp_fec.svg

eBGP description of FEC usage

The FEC entry created on the rt1 device will help in switching those packets to the nexthop associated to the 172.16.2.2/32 prefix. The MPLS entry could be created since the labeled BGP route to reach the 172.16.2.2/32 prefix could be installed, and the nexthop has been resolved.

rt1

 rt1> show mpls table
  Inbound Label  Type  Nexthop      Outbound Label
  --------------------------------------------------
  16             BGP   192.168.1.2  implicit-null

EBGP across multiple devices

A chain of connected eBGP peerings can be created to establish an LSP along the path between all the eBGP devices. The following drawing extends the above topology with two extra devices.

../../../../_images/labeledebgp_multi.svg

eBGP topology with multiple peers

The configuration of the rt2, rt3 and rt4 devices is given below.

rt2

rt2 running config# vrf main
rt2 running vrf main# interface loopback loop1
rt2 running physical loop1# ipv4 address 172.16.2.2/32
rt2 running physical loop1# .. ..
rt2 running config# vrf main
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s5
rt2 running physical eth1# ipv4 address 192.168.1.2/24
rt2 running physical eth1# .. ..
rt2 running vrf main# interface physical eth2
rt2 running physical eth2#! port pci-b0s6
rt2 running physical eth2# ipv4 address 192.168.2.2/24
rt2 running physical eth2# .. ..
rt2 running vrf main# routing bgp
rt2 running bgp#! as 65501
rt2 running bgp# neighbor 192.168.1.1 remote-as 65500
rt2 running bgp# neighbor 192.168.1.1 address-family ipv4-unicast enabled false
rt2 running bgp# neighbor 192.168.1.1 address-family ipv4-labeled-unicast enabled true
rt2 running bgp# address-family ipv4-unicast network 172.16.2.2/32
rt2 running bgp# .. .. ..
rt2 running bgp# neighbor 192.168.2.3 remote-as 65502
rt2 running bgp# neighbor 192.168.2.3 address-family ipv4-unicast enabled false
rt2 running bgp# neighbor 192.168.2.3 address-family ipv4-labeled-unicast enabled true
rt2 running bgp# ebgp-requires-policy false
rt2 running bgp#

rt3

rt3 running config# vrf main
rt3 running vrf main# interface loopback loop1
rt3 running physical loop1# ipv4 address 172.16.3.3/32
rt3 running physical loop1# .. ..
rt3 running vrf main# interface physical eth1
rt3 running physical eth1#! port pci-b0s5
rt3 running physical eth1# ipv4 address 192.168.2.3/24
rt3 running physical eth1# .. ..
rt3 running vrf main# interface physical eth2
rt3 running physical eth1#! port pci-b0s6
rt3 running physical eth1# ipv4 address 192.168.3.3/24
rt3 running physical eth1# .. ..
rt3 running vrf main# routing bgp
rt3 running bgp#! as 65502
rt3 running bgp# neighbor 192.168.2.2 remote-as 65501
rt3 running bgp# neighbor 192.168.2.2 address-family ipv4-unicast enabled false
rt3 running bgp# neighbor 192.168.2.2 address-family ipv4-labeled-unicast enabled true
rt3 running bgp# neighbor 192.168.3.4 remote-as 65503
rt3 running bgp# neighbor 192.168.3.4 address-family ipv4-unicast enabled false
rt3 running bgp# neighbor 192.168.3.4 address-family ipv4-labeled-unicast enabled true
rt3 running bgp# address-family ipv4-unicast network 172.16.3.3/32
rt3 running bgp# .. .. ..
rt3 running bgp# ebgp-requires-policy false
rt3 running bgp#

rt4

rt4 running config# vrf main
rt4 running vrf main# interface loopback loop1
rt4 running physical loop1# ipv4 address 172.16.4.4/32
rt4 running physical loop1# .. ..
rt4 running vrf main# interface physical eth1
rt4 running physical eth1#! port pci-b0s5
rt4 running physical eth1# ipv4 address 192.168.3.4/24
rt4 running physical eth1# .. ..
rt4 running vrf main# routing bgp
rt4 running bgp#! as 65503
rt4 running bgp# neighbor 192.168.3.3 remote-as 65502
rt4 running bgp# neighbor 192.168.3.3 address-family ipv4-unicast enabled false
rt4 running bgp# neighbor 192.168.3.3 address-family ipv4-labeled-unicast enabled true
rt4 running bgp# address-family ipv4-unicast network 172.16.4.4/32
rt4 running bgp# .. .. ..
rt4 running bgp# ebgp-requires-policy false
rt4 running bgp#

The 172.16.4.4/32 prefix from rt4 is being allocated by the implicit-null label, and is sent to the 192.168.3.3 peer.

rt4

 rt4> show bgp ipv4 labeled-unicast prefix 172.16.4.4/32
 BGP routing table entry for 172.16.4.4/32, version 1
 Local label: 3
 Paths: (1 available, best #1, table default, vrf (null))
   Advertised to non peer-group peers:
   192.168.3.3
   Local
     0.0.0.0 from 0.0.0.0 (172.16.4.4)
       Origin IGP, metric 0, weight 32768, valid, sourced, local, best (First path received)
       Last update: Mon Jan 23 09:04:57 2023

The rt3 device receives the prefix, and allocates the 18 label for that prefix, which will be sent to the remote rt2 device instead of the initial implicit-null label.

rt3

 rt3> show bgp ipv4 labeled-unicast prefix 172.16.4.4/32
 BGP routing table entry for 172.16.4.4/32, version 4
 Local label: 18
 Paths: (1 available, best #1, table default, vrf (null))
   Advertised to non peer-group peers:
   192.168.2.2 192.168.3.4
   65503
     192.168.3.4 from 192.168.3.4 (172.16.4.4)
       Origin IGP, metric 0, valid, external, best (First path received)
       Remote label: 3
       Last update: Mon Jan 23 09:04:58 2023

Also, the rt3 device installs an MPLS entry so that incoming MPLS traffic with the 18 label value will be popped and headed to the 192.168.3.4 ip address.

rt3

 rt3> show mpls table 18
 Local label: 18 (installed)
  type: BGP remote label: 3 distance: 20
   via 192.168.3.4 dev eth2 (installed)

The rt2 device will receive the 172.16.4.4/32 prefix with the 18 label value allocated by the rt3 neighbor. Similarly, the 18 label is locally allocated, and an MPLS entry is created to as to pop and switch incoming packets with the 18 label value to the 192.168.3.3 IP address.

rt2

 rt2> show bgp ipv4 labeled-unicast prefix 172.16.4.4/32
 BGP routing table entry for 172.16.4.4/32, version 4
 Local label: 18
 Paths: (1 available, best #1, table default, vrf (null))
   Advertised to non peer-group peers:
   192.168.1.1 192.168.2.3
   65502 65503
     192.168.2.3 from 192.168.2.3 (172.16.3.3)
       Origin IGP, valid, external, best (First path received)
       Remote label: 18
       Last update: Mon Jan 23 09:04:59 2023

 rt2> show mpls table 18
 Local label: 18 (installed)
  type: BGP remote label: 18 distance: 20
   via 192.168.2.3 dev eth2 (installed)

The rt1 device receives the incoming BGP update, and performs the same operations. The IP route installed to reach the 172.16.4.4/32 prefix will be appended with the 18 label value, and will be sent to the 192.168.1.2 ip address.

rt1

 rt1> show ipv4-routes to 172.16.4.4
 Routing entry for 172.16.4.4/32
   Known via "bgp", distance 20, metric 0, best
   Last update 00:15:49 ago
   * 192.168.1.2, via eth1, label 18, weight 1
     AS-Path: 65501 65502 65503

An LSP path has been forged to send traffic from the rt1 device to the rt4 by appending the 18 label value. Then, switch operations are performed on the next devices to head traffic directly to the rt4 device.

L3VPN service over EBGP

Labeled eBGP helps in conveying L3VPN traffic, originating from the vrf1 L3VRF. Actually, L3VPN uses MPLS labels to encapsulate VPN traffic, and needs an MPLS backbone to convey it; the labels from the labeled-unicast address-family are used to forge an MPLS layer that can be used as an MPLS backbone. The below configuration creates an eBGP peering between two devices. The loopback source and destination IP addresses are exchanged by the labeled-unicast address-family, and are used to establish the VPNv4 session.

See also

More information about L3VPN configuration: BGP L3VPN

rt1

rt1 running config# vrf main
rt1 running vrf main# interface loopback loop1
rt1 running physical loop1# ipv4 address 172.16.1.1/32
rt1 running physical loop1# .. ..
rt1 running vrf main# interface physical eth1
rt1 running physical eth1#! port pci-b0s5
rt1 running physical eth1# ipv4 address 192.168.1.1/24
rt1 running physical eth1# .. ..
rt1 running vrf main# routing bgp
rt1 running bgp#! as 65500
rt1 running bgp# neighbor 192.168.1.2 remote-as 65501
rt1 running bgp# neighbor 192.168.1.2 address-family ipv4-unicast enabled false
rt1 running bgp# neighbor 192.168.1.2 address-family ipv4-labeled-unicast enabled true
rt1 running bgp# address-family ipv4-unicast network 172.16.1.1/32
rt1 running bgp# .. .. ..
rt1 running bgp# neighbor 172.16.2.2 remote-as 65501
rt1 running bgp# neighbor 172.16.2.2 ebgp-multihop 2
rt1 running bgp# neighbor 172.16.2.2 update-source loop1
rt1 running bgp# neighbor 172.16.2.2 address-family ipv4-unicast enabled false
rt1 running bgp# neighbor 172.16.2.2 address-family ipv4-vpn enabled true
rt1 running bgp# ebgp-requires-policy false
rt1 running bgp# / vrf main l3vrf vrf1
rt1 running l3vrf vrf1#! table-id 10
rt1 running l3vrf vrf1# interface physical eth2
rt1 running physical eth2#! ipv4 address 172.16.10.1/24
rt1 running physical eth2#! port pci-b0s6
rt1 running physical eth2# .. ..
rt1 running l3vrf vrf1# routing bgp
rt1 running bgp# address-family ipv4-unicast
rt1 running ipv4-unicast# l3vpn export route-distinguisher 65500:1
rt1 running ipv4-unicast# l3vpn export route-target 11:22
rt1 running ipv4-unicast# l3vpn import route-target 11:22
rt1 running ipv4-unicast# l3vpn import vpn true
rt1 running ipv4-unicast# l3vpn export vpn true
rt1 running ipv4-unicast# l3vpn export label 300
rt1 running ipv4-unicast# redistribute connected
rt1 running ipv4-unicast#

rt2

rt2 running config# vrf main
rt2 running vrf main# interface loopback loop1
rt2 running physical loop1# ipv4 address 172.16.2.2/32
rt2 running physical loop1# .. ..
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s5
rt2 running physical eth1# ipv4 address 192.168.1.2/24
rt2 running physical eth1# .. ..
rt2 running vrf main# routing bgp
rt2 running bgp#! as 65501
rt2 running bgp# neighbor 192.168.1.1 remote-as 65500
rt2 running bgp# neighbor 192.168.1.1 address-family ipv4-unicast enabled false
rt2 running bgp# neighbor 192.168.1.1 address-family ipv4-labeled-unicast enabled true
rt2 running bgp# address-family ipv4-unicast network 172.16.2.2/32
rt2 running bgp# .. .. ..
rt2 running bgp# ebgp-requires-policy false
rt2 running bgp# neighbor 172.16.1.1 remote-as 65500
rt2 running bgp# neighbor 172.16.1.1 ebgp-multihop 2
rt2 running bgp# neighbor 172.16.1.1 update-source loop1
rt2 running bgp# neighbor 172.16.1.1 address-family ipv4-unicast enabled false
rt2 running bgp# neighbor 172.16.1.1 address-family ipv4-vpn enabled true
rt2 running bgp# / vrf main l3vrf vrf1
rt2 running l3vrf vrf1#! table-id 10
rt2 running l3vrf vrf1# interface physical eth2
rt2 running physical eth2#! ipv4 address 172.16.20.2/24
rt2 running physical eth2#! port pci-b0s6
rt2 running physical eth2# .. ..
rt2 running l3vrf vrf1# routing bgp
rt2 running bgp# address-family ipv4-unicast
rt2 running ipv4-unicast# l3vpn export route-distinguisher 65501:1
rt2 running ipv4-unicast# l3vpn export route-target 11:22
rt2 running ipv4-unicast# l3vpn import route-target 11:22
rt2 running ipv4-unicast# l3vpn import vpn true
rt2 running ipv4-unicast# l3vpn export vpn true
rt2 running ipv4-unicast# l3vpn export label 600
rt2 running ipv4-unicast# redistribute connected
rt2 running ipv4-unicast#

After peering, the rt1 device receives BGP update from the 172.16.20.0/24 network with the 600 label.

 rt1> show bgp ipv4 vpn prefix 172.16.20.0/24
 BGP routing table entry for 65501:1:172.16.20.0/24, version 5
 not allocated
 Paths: (1 available, best #1)
   Advertised to non peer-group peers:
   172.16.2.2
   65501
     172.16.2.2 from 172.16.2.2 (192.168.1.2)
       Origin incomplete, metric 0, valid, external, best (First path received)
       Extended Community: RT:11:22
       Remote label: 600
       Last update: Fri Jan 20 17:20:59 2023

The L3VPN route is installed, because there was a labeled route between the rt1. That labeled route was the labeled-unicast route coming from the rt2 device and using the implicit-null label. The L3VPN route appended that labeled route to its own VPN label. (the implicit-null/600 label stack indicates that VPN packets will be sent out encapsulated with the 600 value).

 rt1> show ipv4-routes l3vrf vrf1
 Codes: K - kernel route, C - connected, S - static, R - RIP,
        O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
        T - Table, A - Babel, D - SHARP, F - PBR, f - OpenFabric,
        > - selected route, * - FIB route, q - queued, r - rejected, b - backup
        t - trapped, o - offload failure

 VRF vrf1:
 K>* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 00:49:44
 C>* 172.16.10.0/24 is directly connected, eth2, 00:49:44
 B>  172.16.20.0/24 [20/0] via 172.16.2.2 (vrf default) (recursive), label 600, weight 1, 00:13:08
   *                         via 192.168.1.2, eth1 (vrf default), label implicit-null/600, weight 1, 00:13:08

eBGP can be used on multi-hop constraints, where the L3VPN networks are not directly connected. In that case, a chain of eBGP connections can be used to establish an LSP along the path between all the eBGP devices.

See also

  • RFC 4364 section 10.c using the eBGP redistribution of labeled IPv4 routes.

IBGP connection

Labeled iBGP peering can be also configured to connect two remote networks. In that case, iBGP is configured as a route reflector: labeled iBGP routes reflect labeled routes to the remote network.

IBGP between two devices

The following configuration illustrates a basic iBGP peering between two devices. To simplify BGP peering between the two loopback addresses of the two nodes, a static route has been used instead of an IGP.

../../../../_images/labeledibgp_simple.svg

iBGP topology with two peers

rt1

rt1 running config# vrf main
rt1 running vrf main# routing static ipv4-route 172.16.1.2/32 next-hop 192.168.1.2
rt1 running vrf main# interface loopback loop1
rt1 running physical loop1# ipv4 address 172.16.1.1/32
rt1 running physical loop1# .. ..
rt1 running vrf main# interface physical eth1
rt1 running physical eth1#! port pci-b0s5
rt1 running physical eth1# ipv4 address 192.168.1.1/24
rt1 running physical eth1# .. ..
rt1 running vrf main# routing bgp
rt1 running bgp#! as 65500
rt1 running bgp# neighbor 172.16.1.2 remote-as 65500
rt1 running bgp# neighbor 172.16.1.2 update-source loop1
rt1 running bgp# neighbor 172.16.1.2 address-family ipv4-unicast enabled false
rt1 running bgp# neighbor 172.16.1.2 address-family ipv4-labeled-unicast
rt1 running ipv4-labeled-unicast# enabled true
rt1 running ipv4-labeled-unicast# route-reflector-client true
rt1 running ipv4-labeled-unicast# nexthop-self force true
rt1 running ipv4-labeled-unicast# .. ..
rt1 running bgp# address-family ipv4-unicast network 172.16.1.1/32
rt1 running network 172.16.1.1/32# .. .. ..
rt1 running bgp#

rt2

rt2 running config# vrf main
rt1 running vrf main# routing static ipv4-route 172.16.1.1/32 next-hop 192.168.1.1
rt2 running vrf main# interface loopback loop1
rt2 running physical loop1# ipv4 address 172.16.1.2/32
rt2 running physical loop1# .. ..
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s5
rt2 running physical eth1# ipv4 address 192.168.1.2/24
rt2 running physical eth1# .. ..
rt2 running vrf main# routing bgp
rt2 running bgp#! as 65500
rt2 running bgp# neighbor 172.16.1.1 remote-as 65500
rt2 running bgp# neighbor 172.16.1.1 update-source loop1
rt2 running bgp# neighbor 172.16.1.1 address-family ipv4-unicast enabled false
rt2 running bgp# neighbor 172.16.1.1 address-family ipv4-labeled-unicast
rt2 running ipv4-labeled-unicast# enabled true
rt2 running ipv4-labeled-unicast# route-reflector-client true
rt2 running ipv4-labeled-unicast# nexthop-self force true
rt2 running ipv4-labeled-unicast# .. .. ..
rt2 running bgp# address-family ipv4-unicast network 172.16.1.2/32
rt2 running network 172.16.1.2/32# .. .. ..
rt2 running bgp#

Note

For simplifications, some static routes have been configured to replace an IGP that is usually requested.

The BGP route learned on the rt2 node can be propagated to other iBGP peerings connected behind the rt2 device. The 18 label value computed by rt2 will be used by the BGP node consecutive to the rt2 to send traffic to the 172.16.1.1 address.

rt2

rt2> show bgp ipv4 labeled-unicast prefix 172.16.1.1/32
BGP routing table entry for 172.16.1.1/32, version 4
Local label: 18
Paths: (1 available, best #1, table default, vrf (null))
  Advertised to non peer-group peers:
  192.168.1.1 192.168.2.3
  65502 65503
    192.168.2.3 from 192.168.2.3 (172.16.3.3)
      Origin IGP, valid, external, best (First path received)
      Remote label: 3
      Last update: Mon Feb 23 09:08:59 2023

IBGP across multiple devices

Labeled iBGP peering is used for inter-area routing to establish a unique LSP across multiple domains. For instance, an operator network can be split up between access, aggregation, and core network. Each domain uses its own IGP because the operator wants to maintain those domains isolated. Only a few addresses are shared between the various domains.

The labeled iBGP peering sits on top of those IGPs and creates BGP peering between the nodes located at the border of each domain.

../../../../_images/labeledibgp_multi.svg

iBGP topology with multiple peers

For instance, on the below configuration, the rt3 device shares its loopback address between the two domains connected to it. This sharing permits BGP to propagate prefixes from rt4 to the rt1 device and vice-versa.

rt1

rt1 running config# vrf main
rt1 running vrf main# interface loopback loop1
rt1 running physical loop1# ipv4 address 172.16.1.1/32
rt1 running physical loop1# .. ..
rt1 running vrf main# interface physical eth1
rt1 running physical eth1#! port pci-b0s5
rt1 running physical eth1# ipv4 address 192.168.1.1/24
rt1 running physical eth1# .. ..
rt1 running vrf main# routing mpls fec resolve-via-network true
rt1 running vrf main# routing bgp
rt1 running bgp#! as 65500
rt1 running bgp# address-family ipv4-unicast
rt1 running ipv4-unicast# network 172.16.1.1/32
rt1 running network 172.16.1.1/32# .. .. ..
rt1 running bgp# neighbor 172.16.1.3 remote-as 65500
rt1 running bgp# neighbor 172.16.1.3 update-source loop1
rt1 running bgp# neighbor 172.16.1.3 address-family ipv4-unicast enabled false
rt1 running bgp# neighbor 172.16.1.3 address-family ipv4-labeled-unicast
rt1 running ipv4-labeled-unicast# enabled true
rt1 running ipv4-labeled-unicast# route-reflector-client true
rt1 running ipv4-labeled-unicast# nexthop-self force true
rt1 running ipv4-labeled-unicast# .. .. ..
rt1 running bgp# neighbor 172.16.1.4 remote-as 65500
rt1 running bgp# neighbor 172.16.1.4 update-source loop1
rt1 running bgp# neighbor 172.16.1.4 address-family ipv4-unicast enabled true
rt1 running bgp# .. ospf
rt1 running ospf# router-id 172.16.1.1
rt1 running ospf# network 172.16.1.1/32 area 0
rt1 running ospf# network 192.168.1.0/24 area 0
rt1 running ospf# passive-interface loop1
rt1 running ospf# .. mpls ldp
rt1 running ldp# router-id 172.16.1.1
rt1 running ldp# address-family ipv4
rt1 running address-family ipv4# discovery transport-address 172.16.1.1
rt1 running transport-address 172.16.1.1# interface eth1
rt1 running interface eth1#

rt2

rt2 running config# vrf main
rt2 running vrf main# interface loopback loop1
rt2 running physical loop1# ipv4 address 172.16.1.2/32
rt2 running physical loop1# .. ..
rt2 running vrf main# interface physical eth0
rt2 running physical eth0#! port pci-b0s5
rt2 running physical eth0# ipv4 address 192.168.1.2/24
rt2 running physical eth0# .. ..
rt2 running vrf main# interface physical eth1
rt2 running physical eth1#! port pci-b0s6
rt2 running physical eth1# ipv4 address 192.168.2.2/24
rt2 running physical eth1# .. ..
rt2 running vrf main# routing ospf
rt2 running ospf# router-id 172.16.1.2
rt2 running ospf# network 172.16.1.2/32 area 0
rt2 running ospf# network 192.168.1.0/24 area 0
rt2 running ospf# network 192.168.2.0/24 area 0
rt2 running ospf# passive-interface loop1
rt2 running ospf# .. mpls ldp
rt2 running ldp# router-id 172.16.1.2
rt2 running ldp# address-family ipv4
rt2 running address-family ipv4# discovery transport-address 172.16.1.2
rt2 running transport-address 172.16.1.2# interface eth0
rt2 running interface eth0# ..
rt2 running transport-address 172.16.1.2# interface eth1
rt2 running interface eth1# ..

rt3

rt3 running config# vrf main
rt3 running vrf main# interface loopback loop1
rt3 running physical loop1# ipv4 address 172.16.1.3/32
rt3 running physical loop1# .. ..
rt3 running vrf main# interface physical eth0
rt3 running physical eth0#! port pci-b0s5
rt3 running physical eth0# ipv4 address 192.168.2.3/24
rt3 running physical eth0# .. ..
rt3 running vrf main# interface physical eth1
rt3 running physical eth1#! port pci-b0s6
rt3 running physical eth1# ipv4 address 192.168.3.3/24
rt3 running physical eth1# .. ..
rt3 running vrf main# routing mpls fec resolve-via-network true
rt3 running vrf main# routing bgp
rt3 running bgp#! as 65500
rt3 running bgp# neighbor 172.16.1.1 remote-as 65500
rt3 running bgp# neighbor 172.16.1.1 update-source loop1
rt3 running bgp# neighbor 172.16.1.1 address-family ipv4-unicast enabled false
rt3 running bgp# neighbor 172.16.1.1 address-family ipv4-labeled-unicast
rt3 running ipv4-labeled-unicast# enabled true
rt3 running ipv4-labeled-unicast# route-reflector-client true
rt3 running ipv4-labeled-unicast# nexthop-self force true
rt3 running ipv4-labeled-unicast# .. .. ..
rt3 running bgp# neighbor 172.16.1.4 remote-as 65500
rt3 running bgp# neighbor 172.16.1.4 update-source loop1
rt3 running bgp# neighbor 172.16.1.4 address-family ipv4-unicast enabled false
rt3 running bgp# neighbor 172.16.1.4 address-family ipv4-labeled-unicast
rt3 running ipv4-labeled-unicast# enabled true
rt3 running ipv4-labeled-unicast# route-reflector-client true
rt3 running ipv4-labeled-unicast# nexthop-self force true
rt3 running ipv4-labeled-unicast# .. .. ..
rt3 running bgp# .. ospf
rt3 running ospf# router-id 172.16.1.3
rt3 running ospf# network 172.16.1.3/32 area 0
rt3 running ospf# network 192.168.2.0/24 area 0
rt3 running ospf# passive-interface loop1
rt3 running ospf# .. mpls ldp
rt3 running ldp# router-id 172.16.1.3
rt3 running ldp# address-family ipv4
rt3 running address-family ipv4# discovery transport-address 172.16.1.3
rt3 running transport-address 172.16.1.3# interface eth0
rt3 running interface eth1# / vrf main routing isis instance 1
rt3 running instance 1# area-address 49.0123.6452.1973.00
rt3 running instance 1# is-type level-1
rt3 running instance 1# segment-routing enabled true
rt3 running instance 1# segment-routing label-blocks
rt3 running label-blocks# srgb lower-bound 18000
rt3 running label-blocks# srgb upper-bound 19000
rt3 running label-blocks# .. ..
rt3 running instance 1# segment-routing prefix-sid-map 172.16.1.3/32
rt3 running prefix-sid-map 172.16.1.3/32# sid-value 33
rt3 running prefix-sid-map 172.16.1.3/32# last-hop-behavior no-php
rt3 running prefix-sid-map 172.16.1.3/32# .. .. .. ..
rt3 running instance 1# .. ..
rt3 running routing# interface loop1
rt3 running interface loop1# isis area-tag 1
rt3 running interface loop1#! isis ipv4-routing true
rt3 running interface loop1# isis passive true
rt3 running interface loop1# ..
rt3 running routing# interface eth1
rt3 running interface eth1# isis ipv4-routing true
rt3 running interface eth1#! isis area-tag 1
rt3 running interface eth1#

rt4

rt4 running config# vrf main
rt4 running vrf main# interface loopback loop1
rt4 running physical loop1# ipv4 address 172.16.1.4/32
rt4 running physical loop1# .. ..
rt4 running vrf main# interface physical eth1
rt4 running physical eth1#! port pci-b0s5
rt4 running physical eth1# ipv4 address 192.168.3.4/24
rt4 running physical eth1# .. ..
rt4 running vrf main# routing mpls fec resolve-via-network true
rt4 running vrf main# routing bgp
rt4 running bgp#! as 65500
rt4 running bgp# address-family ipv4-unicast
rt4 running ipv4-unicast# network 172.16.1.4/32
rt4 running network 172.16.1.4/32# .. .. ..
rt4 running bgp# neighbor 172.16.1.3 remote-as 65500
rt4 running bgp# neighbor 172.16.1.3 update-source loop1
rt4 running bgp# neighbor 172.16.1.3 address-family ipv4-unicast enabled false
rt4 running bgp# neighbor 172.16.1.3 address-family ipv4-labeled-unicast
rt4 running ipv4-labeled-unicast# enabled true
rt4 running ipv4-labeled-unicast# route-reflector-client true
rt4 running ipv4-labeled-unicast# nexthop-self force true
rt4 running ipv4-labeled-unicast# .. .. ..
rt4 running bgp# neighbor 172.16.1.1 remote-as 65500
rt4 running bgp# neighbor 172.16.1.1 update-source loop1
rt4 running bgp# neighbor 172.16.1.1 update-source loop1
rt4 running bgp# neighbor 172.16.1.1 address-family ipv4-unicast enabled true
rt4 running bgp# .. isis instance 1
rt4 running instance 1# area-address 49.0123.6452.1974.00
rt4 running instance 1# is-type level-1
rt4 running instance 1# segment-routing enabled true
rt4 running instance 1# segment-routing label-blocks
rt4 running label-blocks# srgb lower-bound 18000
rt4 running label-blocks# srgb upper-bound 19000
rt4 running label-blocks# .. ..
rt4 running instance 1# segment-routing prefix-sid-map 172.16.1.4/32
rt4 running prefix-sid-map 172.16.1.4/32# sid-value 44
rt4 running prefix-sid-map 172.16.1.4/32# last-hop-behavior no-php
rt4 running prefix-sid-map 172.16.1.4/32# .. .. .. ..
rt4 running routing# interface loop1
rt4 running interface loop1# isis area-tag 1
rt4 running interface loop1#! isis ipv4-routing true
rt4 running interface loop1# isis passive true
rt4 running interface loop1# ..
rt4 running routing# interface eth1
rt4 running interface eth1# isis ipv4-routing true
rt4 running interface eth1#! isis area-tag 1
rt4 running interface eth1#

On the rt1 device, the labeled route to the 172.16.1.4/32 prefix is learned from the rt4 device, via the rt3 device.

rt1

rt1> show bgp ipv4 prefix 172.16.1.4/32
BGP routing table entry for 172.16.1.4/32, version 5
Local label: 144
Paths: (1 available, best #1, table default, vrf (null))
  Advertised to non peer-group peers:
  172.16.1.3
  Local
    172.16.1.3 (metric 20) from 172.16.1.3 (172.16.1.4)
      Origin IGP, metric 0, localpref 100, valid, internal, best (First path received)
      Originator: 172.16.1.4, Cluster list: 172.16.1.3
      Remote label: 144
      Last update: Wed Mar  8 11:28:00 2023

rt1 will resolve the path to the 172.16.1.4/32 prefix by appending the 144 label value with the 16 label value used in the first OSPF domain.

rt1

rt1> show ipv4-routes to 172.16.1.4
Routing entry for 172.16.1.4/32
  Known via "bgp", distance 200, metric 0, best
  Last update 00:50:21 ago
    172.16.1.3 (recursive), label 144, weight 1
  *   192.168.1.2, via eth1, label 16/144, weight 1
    AS-Path:

On the rt2 device, the 16 label value is popped from packets from rt1 heading to the rt4 device. The remaining MPLS packet has the 144 label value which will be replaced on the rt3 device by using the following switching entry:

rt3

rt3> show mpls table 144
Local label: 144
 type: SR (IS-IS) remote label: 18044 distance: 150
  via 192.168.3.4 dev eth1

The 144 label value is generated by BGP to re-advertise the 172.16.1.4/32 prefix to the rt1 device. BGP created a FEC entry to handle return traffic from the rt1 to the rt4 device.

rt3

rt3> vsr# show mpls fec
172.16.1.1/32
  Label: 145
  Client list: bgp(fd 30)
172.16.1.4/32
  Label: 144
  Client list: bgp(fd 30)

Without the mpls fec resolve-via-network true command, the MPLS entry would have not been created, as by default, a BGP route has to be selected to resolve that FEC entry. The below dump shows that the BGP route heading to the 172.16.1.4/32 IP address has not been selected, and the IS-IS route has been selected instead.

rt3

rt3> show ipv4-routes
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

B   172.16.1.1/32 [200/0] via 172.16.1.1 inactive, label implicit-null, weight 1, 01:17:06
O>* 172.16.1.1/32 [110/20] via 192.168.2.2, eth0, label 17, weight 1, 01:27:49
O>* 172.16.1.2/32 [110/10] via 192.168.2.2, eth0, label implicit-null, weight 1, 01:30:08
O   172.16.1.3/32 [110/0] is directly connected, loop1, weight 1, 01:56:51
C>* 172.16.1.3/32 is directly connected, loop1, 01:56:53
B   172.16.1.4/32 [200/0] via 172.16.1.4 inactive, label implicit-null, weight 1, 01:17:39
I>* 172.16.1.4/32 [115/20] via 192.168.3.4, eth1, label 18044, weight 1, 01:23:55
O>* 192.168.1.0/24 [110/20] via 192.168.2.2, eth0, label implicit-null, weight 1, 01:30:08
O   192.168.2.0/24 [110/10] is directly connected, eth0, weight 1, 01:32:08
C>* 192.168.2.0/24 is directly connected, eth0, 01:32:08
C>* 192.168.3.0/24 is directly connected, eth1, 01:32:04
I   192.168.3.4/32 [115/20] via 192.168.3.4, eth1 inactive, weight 1, 01:23:55

Note

The fec resolve-via-network command can be also used for eBGP peerings, but its usage is limited, as an eBGP priority has a default distance set to 20 whereas an IGP like IS-IS has a default distance value set to 115.

See also

Connecting IPv6 islands over IPv4 MPLS using IPv6 PEs (6pe)

6pe stands for IPv6 Provider Edge router, and defines an approach where the PEs are able to convey IPv6 traffic over an MPLS IPv4 based network. The ISPs may use that solution to extend their network with IPv6 addresses on the CPEs devices, without having to change their core network configuration.

See also

  • RFC 4798: Connecting IPv6 Islands over IPv4 MPLS Using IPv6 Provider Edge Routers

IPv4 mapped IPv6 addresses

This approach requires using IPv4 mapped IPv6 addresses. The address representation is based on an IPv4 address, which is mapped into the IPv6 address scope.

../../../../_images/ipv4_mapped_ipv6_address.svg

IPv4 mapped IPv6 address representation

This addressing scheme is used to convey IPv6 traffic over interfaces that are only IPv4 capable. In the 6pe case, when forwarding IPv6 traffic to the connected IPv4 mapped IPv6 address, the link resolution will be done on the corresponding IPv4 address.

The 6pe approach

From the control plane perspective, the BGP labeled unicast address-family is used to exchange IPv6 prefixes along with a label value. The next hop exchanged is a forged IPv4 mapped IPv6 address bound to the IPv4 address of the BGP speaker. From the data plane perspective, the ingress PE uses the IPv4 part of the received next hop, to figure out where to forward IPv6 traffic to.

The following example illustrates two PEs devices connected to an MPLS IPv4 based network. The rt1 and rt4 devices are dual stack based, and are able to convey IPv6 traffic over the existing IPv4 network.

../../../../_images/labeledibgp_6pe.svg

iBGP setup connecting two IPv6 islands over an IPv4 MPLS backbone

The rt1 and rt4 devices advertise IPv6 prefixes along with the IPv6 explicit-null label value. To transmit an IPv4 mapped IPv6 address in the BGP update, the loop1 interfaces of both BGP speakers must only be configured with the original IPv4 address of the BGP instances.

Note

Because the IPv6 traffic must be MPLS encapsulated through all the LSP, the BGP label value can not be implicit-null. That would imply that some IPv6 traffic might have to be processed on the penultimate router of the backbone. It is the reason why the IPv6 explicit-null label value is used.

rt1

rt1 running config# vrf main interface physical eth1
rt1 running physical eth1#! ipv4 address 192.168.0.1/24
rt1 running physical eth1#! ipv6 address ::ffff:192.168.0.1/120
rt1 running physical eth1#! port pci-b0s4
rt1 running physical eth1# ..
rt1 running interface# physical eth2
rt1 running physical eth2#! port pci-b0s5
rt1 running physical eth2# ipv6 address fd00:100::1/64
rt1 running physical eth2# ..
rt1 running interface# loopback loop1
rt1 running loopback loop1# ipv4 address 198.51.100.1/32
rt1 running loopback loop1# .. .. routing interface loop1
rt1 running interface loop1# isis area-tag 1
rt1 running interface loop1#! isis ipv4-routing true
rt1 running interface loop1#! .. interface eth1
rt1 running interface eth1#! isis area-tag 1
rt1 running interface eth1#! isis ipv4-routing true
rt1 running interface eth1#! .. bgp
rt1 running bgp#! as 65500
rt1 running bgp#! router-id 198.51.100.1
rt1 running bgp#! address-family ipv6-unicast network fd00:100::/64
rt1 running network fd00:100::/64#! .. .. ..
rt1 running bgp#! neighbor 198.51.100.4
rt1 running neighbor 198.51.100.4#! remote-as 65500
rt1 running neighbor 198.51.100.4#! update-source loop1
rt1 running neighbor 198.51.100.4#! address-family ipv4-unicast enabled false
rt1 running neighbor 198.51.100.4#! address-family ipv6-labeled-unicast enabled true
rt1 running neighbor 198.51.100.4#! address-family ipv6-labeled-unicast label explicit-null
rt1 running neighbor 198.51.100.4#! .. .. isis instance 1
rt1 running instance 1# is-type level-2
rt1 running instance 1# area-address 49.0000.0007.e901.1111.00
rt1 running instance 1# traffic-engineering ipv4-router-address 198.51.100.1
rt1 running instance 1# segment-routing
rt1 running segment-routing# enabled true
rt1 running segment-routing# label-blocks srgb lower-bound 1000 upper-bound 2000
rt1 running segment-routing# label-blocks srlb lower-bound 31000 upper-bound 31999
rt1 running segment-routing# msd node-msd 8
rt1 running segment-routing# prefix-sid-map 198.51.100.1/32 sid-value 11
rt1 running segment-routing#

rt2

rt2 running config# vrf main interface physical eth1
rt2 running physical eth1#! ipv4 address 192.168.1.2/24
rt2 running physical eth1#! port pci-b0s4
rt2 running physical eth1# ..
rt2 running interface# physical eth2
rt2 running physical eth2#! port pci-b0s5
rt2 running physical eth2# ipv4 address 192.168.0.2/24
rt2 running physical eth2# ..
rt2 running interface# loopback loop1
rt2 running loopback loop1# ipv4 address 198.51.100.2/32
rt2 running loopback loop1# .. .. routing interface loop1
rt2 running interface loop1# isis area-tag 1
rt2 running interface loop1#! isis ipv4-routing true
rt2 running interface loop1#! .. interface eth1
rt2 running interface eth1#! isis area-tag 1
rt2 running interface eth1#! isis ipv4-routing true
rt2 running interface eth1#! .. interface eth2
rt2 running interface eth2#! isis area-tag 1
rt2 running interface eth2#! isis ipv4-routing true
rt2 running interface eth2#! .. isis instance 1
rt2 running instance 1# is-type level-2
rt2 running instance 1# area-address 49.0000.0007.e901.2222.00
rt2 running instance 1# traffic-engineering ipv4-router-address 198.51.100.2
rt2 running instance 1# segment-routing
rt2 running segment-routing# enabled true
rt2 running segment-routing# label-blocks srgb lower-bound 1000 upper-bound 2000
rt2 running segment-routing# label-blocks srlb lower-bound 30000 upper-bound 30999
rt2 running segment-routing# msd node-msd 8
rt2 running segment-routing# prefix-sid-map 198.51.100.2/32 sid-value 22
rt2 running segment-routing#

rt3

rt3 running config# vrf main interface physical eth1
rt3 running physical eth1#! ipv4 address 192.168.1.3/24
rt3 running physical eth1#! port pci-b0s4
rt3 running physical eth1# ..
rt3 running interface# physical eth2
rt3 running physical eth2#! port pci-b0s5
rt3 running physical eth2# ipv4 address 192.168.2.3/24
rt3 running physical eth2# ..
rt3 running interface# loopback loop1
rt3 running loopback loop1# ipv4 address 198.51.100.3/32
rt3 running loopback loop1# .. .. routing interface loop1
rt3 running interface loop1# isis area-tag 1
rt3 running interface loop1#! isis ipv4-routing true
rt3 running interface loop1#! .. interface eth1
rt3 running interface eth1#! isis area-tag 1
rt3 running interface eth1#! isis ipv4-routing true
rt3 running interface eth1#! .. interface eth2
rt3 running interface eth2#! isis area-tag 1
rt3 running interface eth2#! isis ipv4-routing true
rt3 running interface eth2#! .. isis instance 1
rt3 running instance 1# is-type level-2
rt3 running instance 1# area-address 49.0000.0007.e901.3333.00
rt3 running instance 1# traffic-engineering ipv4-router-address 198.51.100.3
rt3 running instance 1# segment-routing
rt3 running segment-routing# enabled true
rt3 running segment-routing# label-blocks srgb lower-bound 1000 upper-bound 2000
rt3 running segment-routing# label-blocks srlb lower-bound 32000 upper-bound 32999
rt3 running segment-routing# msd node-msd 8
rt3 running segment-routing# prefix-sid-map 198.51.100.3/32 sid-value 33
rt3 running segment-routing#

rt4

rt4 running config# vrf main interface physical eth1
rt4 running physical eth1#! ipv4 address 192.168.2.4/24
rt4 running physical eth1#! ipv6 address ::ffff:192.168.2.4/120
rt4 running physical eth1#! port pci-b0s4
rt4 running physical eth1# ..
rt4 running interface# physical eth2
rt4 running physical eth2#! port pci-b0s5
rt4 running physical eth2# ipv6 address fd00:200::4/64
rt4 running physical eth2# ..
rt4 running interface# loopback loop1
rt4 running loopback loop1# ipv4 address 198.51.100.4/32
rt4 running loopback loop1# .. .. routing interface loop1
rt4 running interface loop1# isis area-tag 1
rt4 running interface loop1#! isis ipv4-routing true
rt4 running interface loop1#! .. interface eth1
rt4 running interface eth1#! isis area-tag 1
rt4 running interface eth1#! isis ipv4-routing true
rt4 running interface eth1#! .. bgp
rt4 running bgp#! as 65500
rt4 running bgp#! router-id 198.51.100.4
rt4 running bgp#! address-family ipv6-unicast network fd00:200::/64
rt4 running network fd00:200::/64#! .. .. ..
rt4 running bgp#! neighbor 198.51.100.1
rt4 running neighbor 198.51.100.1#! remote-as 65500
rt4 running neighbor 198.51.100.1#! update-source loop1
rt4 running neighbor 198.51.100.1#! address-family ipv4-unicast enabled false
rt4 running neighbor 198.51.100.1#! address-family ipv6-labeled-unicast enabled true
rt4 running neighbor 198.51.100.1#! address-family ipv6-labeled-unicast label explicit-null
rt4 running neighbor 198.51.100.1#! .. .. isis instance 1
rt4 running instance 1# is-type level-2
rt4 running instance 1# area-address 49.0000.0007.e901.4444.00
rt4 running instance 1# traffic-engineering ipv4-router-address 198.51.100.4
rt4 running instance 1# segment-routing
rt4 running segment-routing# enabled true
rt4 running segment-routing# label-blocks srgb lower-bound 1000 upper-bound 2000
rt4 running segment-routing# label-blocks srlb lower-bound 33000 upper-bound 33999
rt4 running segment-routing# msd node-msd 8
rt4 running segment-routing# prefix-sid-map 198.51.100.4/32 sid-value 44
rt4 running segment-routing#

The rt1 device receives the IPv6 prefix from rt4 with the ::ffff:c633:6404 next hop. This is an IPv4 mapped IPv6 address whose IPv4 address is 198.51.100.4.

rt1

rt1> show bgp ipv6
BGP table version is 2, local router ID is 198.51.100.1, vrf id 0
Default local pref 100, local AS 65500
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network          Next Hop            Metric LocPrf Weight Path
*> fd00:100::/64    ::                       0         32768 i
*>ifd00:200::/64    ::ffff:c633:6404
                                             0    100      0 i

The rt1 device is able to resolve the next hop reachility over the ipv4 network by using the 198.51.100.4 address. The resulting recursive route uses the 192.168.0.2 next hop IP address. Because rt1 has an ipv4 mapped IPv6 address derived from the 192.168.0.0/24 network, the associated BGP IPv6 network can be resolved using a recursive route with the ::ffff:c0a8:2 IPv6 address.

rt1

rt1> show ipv4-routes to 198.51.100.4
Routing entry for 198.51.100.4/32
  Known via "isis", distance 115, metric 40, best
  Last update 00:44:48 ago
  * 192.168.0.2, via eth1, label 1044, weight 1

rt1> show bgp nexthop
[..]
 ::ffff:c633:6404 valid [IGP metric 0], #paths 1
  gate ::ffff:c0a8:2, if eth1
  Last update: Wed Jun 21 13:06:09 2023

The resulting IPv6 route is a labeled IPv6 route whose recursive route uses the ::ffff:c0a8:2 next hop IPv6 address. An intermediate route marked 6 is created, and reuses the same label value as the matching labeled IPv4 route.

rt1

rt1> show ipv6-routes
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       A - Babel, D - SHARP, F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

C>* ::ffff:c0a8:0/120 is directly connected, eth1, 00:41:01
6>* ::ffff:c633:6404/128 [1/0] via ::ffff:c0a8:2, eth1, label 1044, weight 1, 00:40:28
C>* fd00:100::/64 is directly connected, eth2, 00:41:02
B>  fd00:200::/64 [200/0] via ::ffff:c633:6404 (recursive), label IPv6 Explicit Null, weight 1, 00:40:28
  *                         via ::ffff:c0a8:2, eth1, label 1044/IPv6 Explicit Null, weight 1, 00:40:28