MPLS 6PE Configuration Templates
This document describes how to create MPLS 6PE configuration templates for network devices supported by netlab.
MPLS 6PE (IPv6 over MPLS) is a sub-feature of the MPLS module. It enables IPv6 transport over an MPLS backbone using IPv4 BGP sessions with label distribution, avoiding the need for a separate IPv6 control plane.
Enabling 6PE Support on a Device
To enable 6PE support on a device, add the boolean mpls.6pe feature flag to the device YAML file (netsim/devices/<device>.yml):
mpls:
6pe: true
The 6PE configuration template should be stored in the netsim/ansible/templates/mpls/ directory (name <platform>.6pe.j2) or within the netsim/ansible/templates/mpls/<platform> directory (name: 6pe.j2).
Template Variables
The following variables are available in 6PE configuration templates:
Node-Level Variables
Variable |
Type |
Description |
|---|---|---|
|
list |
Session types for 6PE (ibgp, ebgp) |
|
int |
BGP AS number |
|
list |
BGP neighbors |
BGP Neighbor Attributes
The MPLS module sets the 6pe attribute on BGP neighbors when the 6PE address family should be activated:
Attribute |
Description |
|---|---|
|
Boolean flag indicating 6PE should be enabled for this neighbor |
|
IPv4 address of the neighbor (used as transport for 6PE) |
Notes:
6PE uses IPv4 BGP sessions to transport IPv6 routes with MPLS labels
The neighbor must have an IPv4 session (
ipv4attribute) configuredIf both ends of a BGP session use 6PE, the IPv6 session is not needed and is removed automatically
Template Examples
Cisco IOS
!
router bgp {{ bgp.as }}
address-family ipv6
!
{% for n in bgp.neighbors if n.ipv4 is defined and n['6pe']|default(False) %}
neighbor {{ n.ipv4 }} activate
neighbor {{ n.ipv4 }} send-label
{% endfor %}
Key points:
Enable IPv6 address family within BGP
Activate 6PE for neighbors that have the
6peattribute setUse
send-labelto enable MPLS label distribution for IPv6 routes
Arista EOS
!
router bgp {{ bgp.as }}
address-family ipv6
!
{% for n in bgp.neighbors if n.ipv4 is defined and n['6pe']|default(False) }}
neighbor {{ n.ipv4 }} activate 6pe
{% endfor %}
!
! EOS requires 'ipv6 enable' on internal PE interfaces
{% for l in interfaces|default([]) if l.type != 'stub' and l.neighbors is defined and not (l.ipv6|default(False)) }}
interf {{ l.ifname }}
ipv6 enable
{% endfor %}
Key points:
Activate 6PE address family using the
activate 6pesyntaxEnable IPv6 on PE interfaces that don’t already have IPv6 configured
Constraints
The 6PE feature has the following constraints:
Requires IPv4 address family in the BGP process
Cannot be used together with IPv6 BGP Labeled Unicast (
mpls.bgp.ipv6)Requires LDP or BGP-LU for IPv4 next hop label distribution
Testing
Use the tests in the tests/integration/mpls directory when adding 6PE support to a new platform.