VPP/Configure IPv6 Segment Routing

From fd.io
< VPP
Jump to: navigation, search

This example shows how to use the VPP platform for IPv6 segment routing.

Introduction

Segment routing changes the way packets are forwarded inside a network to enable network operators to have better control on the path followed by the packets.

Segment Routing can be applied to the IPv6 architecture, with a new type of routing extension header. A segment is encoded as an IPv6 address. An ordered list of segments is encoded as an ordered list of IPv6 addresses in the routing extension header. The segment to process is indicated by a pointer in the routing extension header. Upon completion of a segment, the pointer is incremented.

The topology and VPP debug CLI configuration below show how to configure an IPv6 segment routing network.

VIRL File

It can be tedious to configure this scenario manually. For help, see the example:

IPv6 SR VIRL topology file

The example page is a VIRL topology description in plain text. You will need to store the text to a file and give it the .virl extension.

The iosv-1, iosv-2, and iosv-4 nodes are virtual IOS Classic routers, which could be easily replaced with Linux hosts or other network devices capable of sending IPv6 ICMP echo requests.

Topology Diagram

IPv6 Segment Routing Topology

Configuration

iosv-1 relevant configuration

interface GigabitEthernet0/1
 description to vpp-1
 ipv6 address ::A:1:1:0:6/126
! route to iosv-2
ipv6 route ::A:1:1:0:16/128 ::A:1:1:0:7
! route to iosv-4
ipv6 route ::A:1:1:0:22/128 ::A:1:1:0:7

iosv-2 relevant configuration

interface GigabitEthernet0/1
 description to vpp-2
 ipv6 address ::A:1:1:0:16/126
!
ipv6 route ::A:1:1:0:6/128 ::A:1:1:0:17

iosv-4 relevant configuration

interface GigabitEthernet0/1
 description to vpp-2
 ipv6 address ::A:1:1:0:22/126
! Route to iosv-1
ipv6 route ::A:1:1:0:6/128 ::A:1:1:0:23

vpp-1 relevant configuration

set interface ip address GigabitEthernet0/4/0 ::a:1:1:0:7/126
set interface state GigabitEthernet0/4/0 up
set interface ip address GigabitEthernet0/5/0 ::a:1:1:0:b/126
set interface state GigabitEthernet0/5/0 up
set interface ip address GigabitEthernet0/6/0 ::a:1:1:0:e/126
set interface state GigabitEthernet0/6/0 up
set interface ip address GigabitEthernet0/7/0 ::a:1:1:0:12/126
set interface state GigabitEthernet0/7/0 up
sr tunnel src 0::a:1:1:0:6 dst 0::a:1:1:0:16/128 next 0::a:1:1:0:f next 0::a:1:1:0:1a next 0::a:1:1:0:16 tag 0::a:1:1:0:7 InPE 1 clean
sr tunnel src 0::a:1:1:0:6 dst 0::a:1:1:0:22/128 next 0::a:1:1:0:f next 0::a:1:1:0:1a next 0::a:1:1:0:22 tag 0::a:1:1:0:7 InPE 1 clean

vpp-3 relevant configuration

set interface ip address GigabitEthernet0/4/0 ::a:1:1:0:f/126
set interface state GigabitEthernet0/4/0 up
set interface ip address GigabitEthernet0/5/0 ::a:1:1:0:1b/126
set interface state GigabitEthernet0/5/0 up
comment { to avoid dropping all SR traffic due to source rpf check failures }
ip route add ::a:1:1:0:6/128 via drop
ip route add ::a:1:1:0:16/128 via drop
ip route add ::a:1:1:0:22/128 via drop

vpp-2 relevant configuration

set interface ip address GigabitEthernet0/4/0 ::a:1:1:0:1a/126
set interface state GigabitEthernet0/4/0 up
set interface ip address GigabitEthernet0/5/0 ::a:1:1:0:1e/126
set interface state GigabitEthernet0/5/0 up
set interface ip address GigabitEthernet0/6/0 ::a:1:1:0:17/126
set interface state GigabitEthernet0/6/0 up
set interface ip address GigabitEthernet0/7/0 ::a:1:1:0:23/126
set interface state GigabitEthernet0/7/0 up
sr tunnel src 0::a:1:1:0:16 dst 0::a:1:1:0:6/128 next 0::a:1:1:0:1b next 0::a:1:1:0:e next 0::a:1:1:0:6 tag 0::a:1:1:0:17 InPE 1 clean

vpp-4 relevant configuration

set interface ip address GigabitEthernet0/4/0 ::a:1:1:0:13/126
set interface state GigabitEthernet0/4/0 up
set interface ip address GigabitEthernet0/5/0 ::a:1:1:0:1f/126
set interface state GigabitEthernet0/5/0 up