====== SRv6 Global VRF (RFC 9252) with FRRouting & Containerlab ======
===== Introduction & Summary =====
This document outlines the deployment of a pure **Segment Routing over IPv6 (SRv6)** fabric using FRRouting (FRR 10.6+) and Linux.
Unlike traditional deployments that rely on L3VPNs (VRFs) to carry customer traffic, this architecture implements **RFC 9252 (BGP Based L3 Service over SRv6)** directly in the **Global Routing Table (Default VRF)**. It supports both Global IPv4 and Global IPv6 over an SRv6 core.
**Key Achievements of this Lab:**
* No VRFs required on the PE routers.
* BGP dynamically allocates SRv6 SIDs (End.DT4 and End.DT6) for global connected/redistributed routes.
* IS-IS is used as the IPv6 underlay.
* Custom MTU handling to accommodate SRv6 encapsulation overhead without impacting standard 1500-byte client MTUs.
===== Key Findings & Important Workarounds =====
Implementing Global SRv6 (RFC 9252) natively in Linux/FRR without VRFs exposes a conflict between FRRouting's dynamic SID allocation and the Linux kernel's security model. Below are the critical "gotchas" discovered:
==== 1. The Kernel Decapsulation Conflict (End.DT4 vs Table 254) ====
When doing global IPv4 over SRv6, BGP assigns the ''End.DT4'' behavior to the IPv4 prefix. However, the Linux Kernel's ''seg6local'' engine strictly expects ''End.DT4'' (IPv4 decapsulation) to point to an explicit VRF table. When FRR attempts to install this instruction into the global routing table (''table 254''), the kernel throws an ''EINVAL'' error, and FRR marks the SRv6 instruction as Rejected (''B>r'').
* **The Fix:** Bypass the kernel's SRv6 engine entirely using native Linux local routing.
* By routing the entire SRv6 Locator block to the ''local'' routing table, the native Linux IPv6 stack will intercept the packets. It sees the Next Header is IPv4 (4), automatically strips the outer IPv6 SRv6 header, and routes the inner IPv4 payload natively, completely bypassing the ''End.DT4'' kernel restriction.
* Add this to the startup script of every PE router:
ip -6 route add local 2001:db8:b::/48 dev lo
==== 2. BGP Encapsulation Relax ====
Standard BGP ''ipv4 unicast'' and ''ipv6 unicast'' address families silently drop SRv6 Prefix-SID attributes (Attribute 40) because they are typically reserved for L3VPNs.
* **The Fix:** Explicitly tell BGP to attach and accept SRv6 SIDs on global routes using the ''relax'' keyword on PEs and Route Reflectors:
neighbor RR encapsulation-srv6-relax
==== 3. MTU and SRv6 Overhead ====
SRv6 adds exactly **64 bytes of overhead** (40 bytes for the outer IPv6 header + 24 bytes for the Segment Routing Header containing 1 SID).
* **The Fix:** To allow clients to send standard 1500-byte payloads without fragmentation, the core links (between P and PE routers) must have their MTU increased to at least **1564 bytes**.
----
===== Containerlab Topology =====
name: srv6-1060
mgmt:
network: clab-mgmt-net
ipv4-subnet: 172.99.20.0/24
ipv6-subnet: ""
topology:
nodes:
rr1:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- rr1/daemons:/etc/frr/daemons
- rr1/frr.conf:/etc/frr/frr.conf
- rr1/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
rr2:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- rr2/daemons:/etc/frr/daemons
- rr2/frr.conf:/etc/frr/frr.conf
- rr2/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
p1:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- p1/daemons:/etc/frr/daemons
- p1/frr.conf:/etc/frr/frr.conf
- p1/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth3.seg6_enabled=1
p2:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- p2/daemons:/etc/frr/daemons
- p2/frr.conf:/etc/frr/frr.conf
- p2/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth3.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth4.seg6_enabled=1
p3:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- p3/daemons:/etc/frr/daemons
- p3/frr.conf:/etc/frr/frr.conf
- p3/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth3.seg6_enabled=1
p4:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- p4/daemons:/etc/frr/daemons
- p4/frr.conf:/etc/frr/frr.conf
- p4/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth3.seg6_enabled=1
p5:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- p5/daemons:/etc/frr/daemons
- p5/frr.conf:/etc/frr/frr.conf
- p5/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth3.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth4.seg6_enabled=1
p6:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- p6/daemons:/etc/frr/daemons
- p6/frr.conf:/etc/frr/frr.conf
- p6/vtysh.conf:/etc/frr/vtysh.conf
exec:
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth3.seg6_enabled=1
pe1:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- pe1/daemons:/etc/frr/daemons
- pe1/frr.conf:/etc/frr/frr.conf
- pe1/vtysh.conf:/etc/frr/vtysh.conf
exec:
- sleep 4
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv4.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- ip -6 route add local 2001:db8:b::/48 dev lo
pe4:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- pe4/daemons:/etc/frr/daemons
- pe4/frr.conf:/etc/frr/frr.conf
- pe4/vtysh.conf:/etc/frr/vtysh.conf
exec:
- sleep 4
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv4.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- ip -6 route add local 2001:db8:e::/48 dev lo
pe3:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- pe3/daemons:/etc/frr/daemons
- pe3/frr.conf:/etc/frr/frr.conf
- pe3/vtysh.conf:/etc/frr/vtysh.conf
exec:
- sleep 4
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv4.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- ip -6 route add local 2001:db8:d::/48 dev lo
pe6:
kind: linux
image: quay.io/frrouting/frr:10.6.1
cmd: bash -c "ip link add sr0 type dummy; ip link set sr0 up; /usr/lib/frr/frrinit.sh start && tail -f /dev/null"
sysctls:
net.ipv4.ip_forward: 1
net.ipv4.conf.all.forwarding: 1
net.ipv6.conf.all.forwarding: 1
net.ipv6.conf.default.forwarding: 1
net.ipv6.seg6_flowlabel: 1
net.ipv6.conf.default.seg6_enabled: 1
net.ipv6.conf.all.seg6_enabled: 1
net.vrf.strict_mode: 0
net.ipv6.conf.all.accept_source_route: 1
binds:
- pe6/daemons:/etc/frr/daemons
- pe6/frr.conf:/etc/frr/frr.conf
- pe6/vtysh.conf:/etc/frr/vtysh.conf
exec:
- sleep 4
- ip link add dummy0 type dummy
- ip link set dummy0 up
- ip link add sr0 type dummy
- ip link set sr0 up
- sysctl -w net.ipv4.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.forwarding=1
- sysctl -w net.ipv6.conf.sr0.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth1.seg6_enabled=1
- sysctl -w net.ipv6.conf.eth2.seg6_enabled=1
- ip -6 route add local 2001:db8:10::/48 dev lo
clienta1-1:
kind: linux
image: alpine:latest
exec:
- apk add iputils-ping
- ip -4 addr add 192.168.131.2/24 dev eth1
- ip link set dev eth1 up
- ip -4 route del default
- ip -4 route add 0.0.0.0/0 via 192.168.131.1
- ip -6 address add fdd8:8b9e:07c5::2/64 dev eth1
- ip -6 route add ::/0 via fdd8:8b9e:07c5::1
clienta1-3:
kind: linux
image: alpine:latest
exec:
- apk add iputils-ping
- ip -4 addr add 192.168.133.2/24 dev eth1
- ip link set dev eth1 up
- ip -4 route del default
- ip -4 route add 0.0.0.0/0 via 192.168.133.1
- ip -6 address add fdf2:f16f:a002::2/64 dev eth1
- ip -6 route add ::/0 via fdf2:f16f:a002::1
clienta1-4:
kind: linux
image: alpine:latest
exec:
- apk add iputils-ping
- ip -4 addr add 192.168.134.2/24 dev eth1
- ip link set dev eth1 up
- ip -4 route del default
- ip -4 route add 0.0.0.0/0 via 192.168.134.1
- ip -6 address add fde4:1b4c:2ef0::2/64 dev eth1
- ip -6 route add ::/0 via fde4:1b4c:2ef0::1
clienta1-6:
kind: linux
image: alpine:latest
exec:
- apk add iputils-ping
- ip -4 addr add 192.168.136.2/24 dev eth1
- ip link set dev eth1 up
- ip -4 route del default
- ip -4 route add 0.0.0.0/0 via 192.168.136.1
- ip -6 address add fdcb:a001:3440::2/64 dev eth1
- ip -6 route add ::/0 via fdcb:a001:3440::1
links:
- endpoints: ["p1:eth1", "p2:eth1"]
mtu: 1564
- endpoints: ["p1:eth2", "p4:eth2"]
mtu: 1564
- endpoints: ["p2:eth2", "p3:eth2"]
mtu: 1564
- endpoints: ["p2:eth3", "p5:eth3"]
mtu: 1564
- endpoints: ["p3:eth1", "p6:eth1"]
mtu: 1564
- endpoints: ["p6:eth2", "p5:eth2"]
mtu: 1564
- endpoints: ["p5:eth1", "p4:eth1"]
mtu: 1564
- endpoints: ["p1:eth3", "pe1:eth1"]
mtu: 1564
- endpoints: ["p4:eth3", "pe4:eth1"]
mtu: 1564
- endpoints: ["p3:eth3", "pe3:eth1"]
mtu: 1564
- endpoints: ["p6:eth3", "pe6:eth1"]
mtu: 1564
- endpoints: ["p2:eth4", "rr1:eth1"]
mtu: 1564
- endpoints: ["p5:eth4", "rr2:eth1"]
mtu: 1564
- endpoints: ["pe1:eth2", "clienta1-1:eth1"]
mtu: 1500
- endpoints: ["pe3:eth2", "clienta1-3:eth1"]
mtu: 1500
- endpoints: ["pe4:eth2", "clienta1-4:eth1"]
mtu: 1500
- endpoints: ["pe6:eth2", "clienta1-6:eth1"]
mtu: 1500
===== PE Configurations =====
==== PE1 ====
frr version 10.6.1_git
frr defaults traditional
hostname pe1
!
ip prefix-list LAN_IPV4 seq 10 permit 192.168.131.0/24
!
ipv6 prefix-list LAN_IPV6 seq 10 permit fdd8:8b9e:7c5::/64
!
route-map GLOBAL_IPV4-OUT permit 10
match ip address prefix-list LAN_IPV4
exit
!
route-map GLOBAL_IPV4-OUT deny 999
exit
!
route-map GLOBAL_IPV6-OUT permit 10
match ipv6 address prefix-list LAN_IPV6
exit
!
route-map GLOBAL_IPV6-OUT deny 999
exit
!
ip router-id 172.16.0.11
!
interface eth1
description "to p1 - eth3"
ipv6 address 2001:db8:1a::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to clienta-1 - eth1"
ip address 192.168.131.1/24
ipv6 address fdd8:8b9e:7c5::1/64
exit
!
interface lo
ipv6 address 2001:db8:b::1/128
ipv6 router isis SR
isis passive
exit
!
router bgp 65577
neighbor RR peer-group
neighbor RR remote-as 65577
neighbor RR password cisco123
neighbor RR update-source 2001:db8:b::1
neighbor RR capability extended-nexthop
neighbor 2001:db8:101::1 peer-group RR
neighbor 2001:db8:102::1 peer-group RR
!
segment-routing srv6
locator locator0
exit
!
address-family ipv4 unicast
redistribute connected route-map GLOBAL_IPV4-OUT
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
!
address-family ipv6 unicast
redistribute connected route-map GLOBAL_IPV6-OUT
neighbor RR activate
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
exit
!
router isis SR
net 49.0000.0000.0000.0011.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
locators
locator locator0
prefix 2001:db8:b::/48
exit
!
exit
!
exit
!
exit
!
==== PE3 ====
frr version 10.6.1_git
frr defaults traditional
hostname pe3
!
ip prefix-list LAN_IPV4 seq 10 permit 192.168.133.0/24
!
ipv6 prefix-list LAN_IPV6 seq 10 permit fdf2:f16f:a002::/64
!
route-map GLOBAL_IPV4-OUT permit 10
match ip address prefix-list LAN_IPV4
exit
!
route-map GLOBAL_IPV4-OUT deny 999
exit
!
route-map GLOBAL_IPV6-OUT permit 10
match ipv6 address prefix-list LAN_IPV6
exit
!
route-map GLOBAL_IPV6-OUT deny 999
exit
!
ip router-id 172.16.0.13
!
interface eth1
description "to p3 - eth3"
ipv6 address 2001:db8:3a::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to clienta-3 - eth1"
ip address 192.168.133.1/24
ipv6 address fdf2:f16f:a002::1/64
exit
!
interface lo
ipv6 address 2001:db8:d::1/128
ipv6 router isis SR
isis passive
exit
!
router bgp 65577
neighbor RR peer-group
neighbor RR remote-as 65577
neighbor RR password cisco123
neighbor RR update-source 2001:db8:d::1
neighbor RR capability extended-nexthop
neighbor 2001:db8:101::1 peer-group RR
neighbor 2001:db8:102::1 peer-group RR
!
segment-routing srv6
locator locator0
exit
!
address-family ipv4 unicast
redistribute connected route-map GLOBAL_IPV4-OUT
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
!
address-family ipv6 unicast
redistribute connected route-map GLOBAL_IPV6-OUT
neighbor RR activate
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
exit
!
router isis SR
net 49.0000.0000.0000.0013.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
locators
locator locator0
prefix 2001:db8:d::/48
exit
!
exit
!
exit
!
exit
!
==== PE4 ====
frr version 10.6.1_git
frr defaults traditional
hostname pe4
!
ip prefix-list LAN_IPV4 seq 10 permit 192.168.134.0/24
!
ipv6 prefix-list LAN_IPV6 seq 10 permit fde4:1b4c:2ef0::/64
!
route-map GLOBAL_IPV4-OUT permit 10
match ip address prefix-list LAN_IPV4
exit
!
route-map GLOBAL_IPV4-OUT deny 999
exit
!
route-map GLOBAL_IPV6-OUT permit 10
match ipv6 address prefix-list LAN_IPV6
exit
!
route-map GLOBAL_IPV6-OUT deny 999
exit
!
ip router-id 172.16.0.14
!
interface eth1
description "to p4 - eth3"
ipv6 address 2001:db8:4a::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to clienta-4 - eth1"
ip address 192.168.134.1/24
ipv6 address fde4:1b4c:2ef0::1/64
exit
!
interface lo
ipv6 address 2001:db8:e::1/128
ipv6 router isis SR
isis passive
exit
!
router bgp 65577
neighbor RR peer-group
neighbor RR remote-as 65577
neighbor RR password cisco123
neighbor RR update-source 2001:db8:e::1
neighbor RR capability extended-nexthop
neighbor 2001:db8:101::1 peer-group RR
neighbor 2001:db8:102::1 peer-group RR
!
segment-routing srv6
locator locator0
exit
!
address-family ipv4 unicast
redistribute connected route-map GLOBAL_IPV4-OUT
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
!
address-family ipv6 unicast
redistribute connected route-map GLOBAL_IPV6-OUT
neighbor RR activate
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
exit
!
router isis SR
net 49.0000.0000.0000.0014.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
locators
locator locator0
prefix 2001:db8:e::/48
exit
!
exit
!
exit
!
exit
!
==== PE6 ====
frr version 10.6.1_git
frr defaults traditional
hostname pe6
!
ip prefix-list LAN_IPV4 seq 10 permit 192.168.136.0/24
!
ipv6 prefix-list LAN_IPV6 seq 10 permit fdcb:a001:3440::/64
!
route-map GLOBAL_IPV4-OUT permit 10
match ip address prefix-list LAN_IPV4
exit
!
route-map GLOBAL_IPV4-OUT deny 999
exit
!
route-map GLOBAL_IPV6-OUT permit 10
match ipv6 address prefix-list LAN_IPV6
exit
!
route-map GLOBAL_IPV6-OUT deny 999
exit
!
ip router-id 172.16.0.16
!
interface eth1
description "to p6 - eth3"
ipv6 address 2001:db8:6a::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to clienta-6 - eth1"
ip address 192.168.136.1/24
ipv6 address fdcb:a001:3440::1/64
exit
!
interface lo
ipv6 address 2001:db8:10::1/128
ipv6 router isis SR
isis passive
exit
!
router bgp 65577
neighbor RR peer-group
neighbor RR remote-as 65577
neighbor RR password cisco123
neighbor RR update-source 2001:db8:10::1
neighbor RR capability extended-nexthop
neighbor 2001:db8:101::1 peer-group RR
neighbor 2001:db8:102::1 peer-group RR
!
segment-routing srv6
locator locator0
exit
!
address-family ipv4 unicast
redistribute connected route-map GLOBAL_IPV4-OUT
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
!
address-family ipv6 unicast
redistribute connected route-map GLOBAL_IPV6-OUT
neighbor RR activate
neighbor RR encapsulation-srv6-relax
sid export auto
exit-address-family
exit
!
router isis SR
net 49.0000.0000.0000.0016.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
locators
locator locator0
prefix 2001:db8:10::/48
exit
!
exit
!
exit
!
exit
!
===== P configurations =====
==== P1 ====
frr version 10.5.1_git
frr defaults traditional
hostname p1
!
ip router-id 172.16.0.1
!
interface eth1
description "to p2 - eth1"
ipv6 address 2001:db8:12::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to p4 - eth2"
ipv6 address 2001:db8:14::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth3
description "to pe1 - eth3"
ipv6 address 2001:db8:1a::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth4
description "to gw1 - eth1"
ipv6 address 2001:db8:f11::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:1::1/128
ipv6 router isis SR
isis passive
exit
!
router isis SR
net 49.0000.0000.0000.0001.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
static-sids
sid 2001:db8:1::1/128 locator locator0 behavior uN
exit
!
exit
!
srv6
locators
locator locator0
prefix 2001:db8:1::/48
exit
!
exit
!
exit
!
exit
!
==== P2 ====
frr version 10.5.1_git
frr defaults traditional
hostname p2
!
ip router-id 172.16.0.2
!
interface eth1
description "to p1 - eth1"
ipv6 address 2001:db8:12::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to p3 - eth2"
ipv6 address 2001:db8:23::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth3
description "to p5 - eth3"
ipv6 address 2001:db8:25::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth4
description "to rr1 - eth1"
ipv6 address 2001:db8:2101::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:2::1/128
ipv6 router isis SR
isis passive
exit
!
router isis SR
net 49.0000.0000.0000.0002.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
static-sids
sid 2001:db8:2::1/128 locator locator0 behavior uN
exit
!
exit
!
srv6
locators
locator locator0
prefix 2001:db8:2::/48
exit
!
exit
!
exit
!
exit
!
==== P3 ====
frr version 10.5.1_git
frr defaults traditional
hostname p3
!
ip router-id 172.16.0.3
!
interface eth1
description "to p6 - eth1"
ipv6 address 2001:db8:36::3/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to p2 - eth2"
ipv6 address 2001:db8:23::3/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth3
description "to pe3 - eth1"
ipv6 address 2001:db8:3a::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:3::1/128
ipv6 router isis SR
isis passive
exit
!
router isis SR
net 49.0000.0000.0000.0003.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
static-sids
sid 2001:db8:3::1/128 locator locator0 behavior uN
exit
!
exit
!
srv6
locators
locator locator0
prefix 2001:db8:3::/48
exit
!
exit
!
exit
!
exit
!
==== P4 ====
frr version 10.5.1_git
frr defaults traditional
hostname p4
!
ip router-id 172.16.0.4
!
interface eth1
description "to p5 - eth1"
ipv6 address 2001:db8:45::4/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to p1 - eth2"
ipv6 address 2001:db8:12::4/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth3
description "to pe4 - eth1"
ipv6 address 2001:db8:4a::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:4::1/128
ipv6 router isis SR
isis passive
exit
!
router isis SR
net 49.0000.0000.0000.0004.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
static-sids
sid 2001:db8:4::1/128 locator locator0 behavior uN
exit
!
exit
!
srv6
locators
locator locator0
prefix 2001:db8:4::/48
exit
!
exit
!
exit
!
exit
!
==== P5 ====
frr version 10.5.1_git
frr defaults traditional
hostname p5
!
ip router-id 172.16.0.5
!
interface eth1
description "to p4 - eth1"
ipv6 address 2001:db8:45::5/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to p6 - eth2"
ipv6 address 2001:db8:56::5/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth3
description "to p2 - eth3"
ipv6 address 2001:db8:25::5/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth4
description "to rr2 - eth1"
ipv6 address 2001:db8:5102::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:5::1/128
ipv6 router isis SR
isis passive
exit
!
router isis SR
net 49.0000.0000.0000.0005.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
static-sids
sid 2001:db8:5::1/128 locator locator0 behavior uN
exit
!
exit
!
srv6
locators
locator locator0
prefix 2001:db8:5::/48
exit
!
exit
!
exit
!
exit
!
==== P6 ====
frr version 10.5.1_git
frr defaults traditional
hostname p6
!
ip router-id 172.16.0.6
!
interface eth1
description "to p3 - eth1"
ipv6 address 2001:db8:36::6/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth2
description "to p5 - eth2"
ipv6 address 2001:db8:56::6/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth3
description "to pe6 - eth1"
ipv6 address 2001:db8:6a::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface eth4
description "to gw2 - eth1"
ipv6 address 2001:db8:f62::1/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:6::1/128
ipv6 router isis SR
isis passive
exit
!
router isis SR
net 49.0000.0000.0000.0006.00
segment-routing srv6
locator locator0
exit
exit
!
segment-routing
srv6
static-sids
sid 2001:db8:6::1/128 locator locator0 behavior uN
exit
!
exit
!
srv6
locators
locator locator0
prefix 2001:db8:6::/48
exit
!
exit
!
exit
!
exit
!
===== Route Reflectors configuration =====
==== RR1 ====
frr version 10.6.1_git
frr defaults traditional
hostname rr1
!
interface eth1
description "to p2 - eth4"
ipv6 address 2001:db8:2101::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:101::1/128
ipv6 router isis SR
isis passive
exit
!
router bgp 65577
bgp route-reflector allow-outbound-policy
neighbor PE peer-group
neighbor PE remote-as 65577
neighbor PE password cisco123
neighbor PE update-source 2001:db8:101::1
neighbor PE capability extended-nexthop
neighbor 2001:db8:b::1 peer-group PE
neighbor 2001:db8:b::1 description "PE1"
neighbor 2001:db8:d::1 peer-group PE
neighbor 2001:db8:d::1 description "PE3"
neighbor 2001:db8:e::1 peer-group PE
neighbor 2001:db8:e::1 description "PE4"
neighbor 2001:db8:10::1 peer-group PE
neighbor 2001:db8:10::1 description "PE6"
neighbor 2001:db8:11::1 peer-group PE
neighbor 2001:db8:11::1 description "GW1"
neighbor 2001:db8:12::1 peer-group PE
neighbor 2001:db8:12::1 description "GW2"
!
address-family ipv4 unicast
neighbor PE route-reflector-client
neighbor PE encapsulation-srv6-relax
exit-address-family
!
address-family ipv6 unicast
neighbor PE activate
neighbor PE route-reflector-client
neighbor PE encapsulation-srv6-relax
exit-address-family
exit
!
router isis SR
net 49.0000.0000.0000.0101.00
segment-routing srv6
locator locator0
exit
exit
!
==== RR2 ====
frr version 10.6.1_git
frr defaults traditional
hostname rr2
!
ip router-id 172.16.0.102
!
interface eth1
description "to p5 - eth4"
ipv6 address 2001:db8:5102::2/64
ipv6 router isis SR
isis network point-to-point
exit
!
interface lo
ipv6 address 2001:db8:102::1/128
ipv6 router isis SR
isis passive
exit
!
router bgp 65577
bgp route-reflector allow-outbound-policy
neighbor PE peer-group
neighbor PE remote-as 65577
neighbor PE password cisco123
neighbor PE update-source 2001:db8:102::1
neighbor PE capability extended-nexthop
neighbor 2001:db8:b::1 peer-group PE
neighbor 2001:db8:b::1 description "PE1"
neighbor 2001:db8:d::1 peer-group PE
neighbor 2001:db8:d::1 description "PE3"
neighbor 2001:db8:e::1 peer-group PE
neighbor 2001:db8:e::1 description "PE4"
neighbor 2001:db8:10::1 peer-group PE
neighbor 2001:db8:10::1 description "PE6"
neighbor 2001:db8:11::1 peer-group PE
neighbor 2001:db8:11::1 description "GW1"
neighbor 2001:db8:12::1 peer-group PE
neighbor 2001:db8:12::1 description "GW2"
!
address-family ipv4 unicast
neighbor PE route-reflector-client
neighbor PE encapsulation-srv6-relax
exit-address-family
!
address-family ipv6 unicast
neighbor PE activate
neighbor PE route-reflector-client
neighbor PE encapsulation-srv6-relax
exit-address-family
exit
!
router isis SR
net 49.0000.0000.0000.0102.00
segment-routing srv6
locator locator0
exit
exit
!