SlideShare a Scribd company logo
1 of 64
Download to read offline
Service Function Chaining with SRv6
Linux-based NFV Infrastructure
Ahmed AbdelSalam(1), Stefano Salsano(2), Francois Clad(3)
(1)Gran Sasso Science Institute, (2)University of Rome Tor Vergata, (3)Cisco Systems
Service Functions
• Service Functions (SFs) can be categorized in two types, depending on whether
they are able to behave properly in the presence of Segment Routing (SR)
information or not
• SR-aware SF: can process the SR information in the packets it receives. This means being
able to identify the active segment as a local instruction and move forward in the segment
list, but also that the SF own behavior is not hindered due to the presence of SR information
• SR-unaware SF: can not process the SR information in the traffic SR traffic or behaves
incorrectly for such traffic
2
Service Functions Chaining
• Service Function Chaining (SFC) enables the creation of composite network
services that consist of an ordered set of service functions.
• SRv6 provides a simple and scalable way to chain service functions, which
supports both SR-aware as well as SR-unaware SFs.
• SR enables SFC by assigning a segment identifier, or SID, to each SF and
sequencing these service SIDs in a segment list.
3
SFC Example - SIDs and addresses Allocation
• All nodes are Linux machines.
• Links between two nodes N1 and N2 are assigned addresses in the form
N1:N2::N1 and N1:N2::N2 respectively
• Each node Nx owns an IPv6 prefix in the form of x::/64 (e.g., 1::/64 for N1)
• Local SID is represented as LOC::FUNC:ARGS
• LOC is represented in 64 bits
• FUNC is represented in 48 bits
• ARGS are represented in 16 bits
• LOC part of the SID is routable
4
SRv6
SRv6+
SREXT
Non
SRv6
Non-SRv6 traffic
SRv6 traffic
SR unaware VNF
SR aware VNF
SFC of SRv6 aware VNFs
• An SR-aware SF is associated with a service segment locally instantiated on the
appliance, which is used to steer traffic through the SF.
• The segment exact behavior depends on how each SF processes the traffic.
• If the SF is configured to intercept all the packets passing through the appliance, the
underlying routing system only has to implement a default SR endpoint behavior
• If the SF requires the packets to be directed to a specific virtual interface, networking queue
or process, a dedicated SR behavior may be required to steer the packets to the appropriate
location.
5
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
6
5::D6
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
7
5::D6
$ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap
segs 2::F1, 3::F2, 4::F3, 5::D6
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
8
5::D6
$ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap
segs 2::F1, 3::F2, 4::F3, 5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
9
5::D6
$ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap
segs 2::F1, 3::F2, 4::F3, 5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
10
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
11
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
12
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
13
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
14
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
15
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
16
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
17
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
18
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 5::D6
(5::D6, 4::F3, 3::F2, 2::F1) SL=0
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
19
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 5::D6
(5::D6, 4::F3, 3::F2, 2::F1) SL=0
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6 aware VNFs
3
2 B
B::
A
A::
41 5
VNF1
2::F1
VNF3
4::F3
VNF2
3::F2
20
5::D6
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::F1
(5::D6, 4::F3, 3::F2, 2::F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::F2
(5::D6, 4::F3, 3::F2, 2::F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::F3
(5::D6, 4::F3, 3::F2, 2::F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 5::D6
(5::D6, 4::F3, 3::F2, 2::F1) SL=0
Payload
IPv6 Hdr SA = A::, DA = B::
IPv6 Hdr SA = A::, DA = B::
Payload
SRv6 unaware VNFs
• SR-unaware service functions are not able to process segment routed traffic.
• It may either drop the traffic or take erroneous decisions due to the
unrecognized routing information.
• In order to include such SFs in an SR SFC policy, it is thus required to remove
the SR information before the SF processes the packet, or to alter it in such a
way that the SF can correctly process the packet.
• SR proxy is as an entity, separate from the SF, that performs these modifications
and handle the SR processing on behalf of an SF
21
SRv6 unaware VNFs
• An SR-unaware SF is associated with a service segment instantiated on the SR
proxy, which is used to steer traffic through the SF.
• The SR Proxy removes the SR encapsulation before sending the packet to the SF
• The SR encapsulation is added again after the packet being processed by the SF
22
Service Function
SR proxy
IFACE-OUT IFACE-IN
SR traffic SR traffic
Non-SR traffic
Segment Routing Extension kernel module (srext)
• To support such proxy behavior, we developed, at the Networking Group of
University of Rome Tor Vergata, Italy, a new kernel module named srext.
• It provides the basic SR functions in addition to more advanced ones.
• It can be used as a standalone SRv6 implementation or as a complement to the
existing SRv6 kernel implementation (kernel 4.10 and later kernels).
• It supports “my local SID table” which contains the local SRv6 segments
explicitly instantiated in the node and associates each SID with a function.
23
srext
• srext registers a callback function in the pre-routing hook of the netfilter
framework. The callback function is invoked for each received IPv6 packet.
• If the destination address of the IPv6 packet matches an entry in the local SID
table, the associated behavior is applied otherwise the packet will go through
the kernel's routing sub-system for normal processing.
• srext can be used in a Linux NFV node in order to support legacy VNFs (i.e. "SR-
unaware" VNFs) in a Service Chain implemented with SRv6.
24
Netfilter Framework
Pkt_in PRE_ROUTING POST_ROUTINGFORWARD
LOCAL_OUTLOCAL_IN
Routing
Local Process Local Process
Routing
Pkt_out
SREXT
Localsid
table
25
srext
Linux kernel
VNF
Namespace
NFV node Linux VM
srext
Kernel module + Netfilter hook
srext
Linux kernel
VNF
Namespace
NFV node Linux VM
PREROUTING
srext
Localsid table match ?
Sanity check ?
Apply SRv6 behavior
Xmit packet to VNF
Y
pass
Processing of northbound packets (from NFV node to VNF)
26
Save the outer IPv6 Hdr
and SRH
SRv6-MY-LOCALSID-TABLE:
=======================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
SRv6 - SRDEV
=====================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
srext
Linux kernel
VNF
Namespace
NFV node Linux VM
PREROUTING
srext
Processing of southbound packets (from VNF to NFV node)
27
SRv6 - SRDEV
=====================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
SRDEV table match ?
Filter control traffic
Re-add saved headers
Y
IPv6 Routing
CLI for srext
• srext provides a command-line interface to interact with the local SID table, for
adding a new SID, removing an existing SID, showing its content and more.
$ srconf localsid
Usage: srconf localsid { help | flush }
srconf localsid { show | clear-counters } [SID]
srconf localsid del SID
srconf localsid add SID BEHAVIOUR
BEHAVIOUR:= { end |
end.dx2 TARGETIF |
end.dx4 NEXTHOP4 TARGETIF |
{ end.x | end.dx6 } NEXTHOP6 TARGETIF |
{ end.ad4 | end.ead4 } NEXTHOP4 TARGETIF SOURCEIF |
{ end.am | end.ad6 | end.ead6 } NEXTHOP6 TARGETIF SOURCEIF |
end.as4 NEXTHOP4 TARGETIF SOURCEIF src ADDR segs SIDLIST left SEGMENTLEFT|
end.as6 NEXTHOP6 TARGETIF SOURCEIF src ADDR segs SIDLIST left SEGMENTLEFT }
NEXTHOP4:= { ip IPv4-ADDR | mac MAC-ADDR}
NEXTHOP6:= { ip IPv6-ADDR | mac MAC-ADDR}
28
CLI for srext
29
• Adding SID
$ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth0_nfv veth1_nfv
• Deleting SID
$ srconf localsid del 2::AD6:F1
• Flush Localsid table
$ srconf localsid flush
• Show Localsid table
$ srconf localsid show
SRv6 - MY LOCALSID TABLE:
==================================================
SID : 2::AD6:F1
Behavior: end.ad6
Next hop: 2:f1::f1
OIF : veth0_nfv
IIF : veth1_nfv
Good traffic: [33 packets : 3894 bytes]
Bad traffic: [0 packets : 0 bytes]
------------------------------------------------------
SID : 2::AD6:F2
Behavior: end.ad6
Next hop: 00:00:00:02:f3:f3
OIF : veth2_nfv
IIF : veth3_nfv
Good traffic: [33 packets : 3894 bytes]
Bad traffic: [0 packets : 0 bytes]
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
VNF2
30
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
31
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
32
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
$ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth0_2 veth1_2
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
33
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
$ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth0_2 veth1_2
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
34
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
VNF2
$ srconf localsid add 3::AD6:F2 end.ad6 ip 3:f2::f2 veth0_3 veth1_3
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
35
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
VNF2
$ srconf localsid add 3::AD6:F2 end.ad6 ip 3:f2::f2 veth0_3 veth1_3
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
36
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
$ srconf localsid add 4::AD6:F3 end.ad6 mac 00:00:00:04:f3:f3 veth0_4 veth1_4
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
37
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
$ srconf localsid add 4::AD6:F3 end.ad6 mac 00:00:00:04:f3:f3 veth0_4 veth1_4
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
38
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
39
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
40
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
41
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
42
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
43
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
44
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
45
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
46
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
47
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
48
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
49
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
50
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
51
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
52
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
53
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
54
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
55
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
4-SRv6-SRDEV
=================
Iface : veth1_4
Behavior: end.ad6
SR Hdr
IPv6 Hdr
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
56
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
4-SRv6-SRDEV
=================
Iface : veth1_4
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
57
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
4-SRv6-SRDEV
=================
Iface : veth1_4
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
58
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
4-SRv6-SRDEV
=================
Iface : veth1_4
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
59
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 5::D6
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=0
Payload
IPv6 Hdr SA = A::, DA = B::
4-SRv6-SRDEV
=================
Iface : veth1_4
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
SFC of SRv6-unaware VNFs
B
B::
A
A::
1 5
VNF1 VNF3
60
2
3
4
2::AD6:F1
3::AD6:F2
4::AD6:F3
5::D6
$ ip -6 route add B::/64 via 1:2::1 encap seg6 mode
encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6
2-LOCALSID-TABLE:
==================
SID : 2::AD6:F1
Behavior: end.ad6
Next_hop: 2:f1::f1
OIF : veth0_2
IIF : veth1_2
3-LOCALSID-TABLE:
==================
SID : 3::AD6:F2
Behavior: end.ad6
Next_hop: 3:f2::f3
OIF : veth0_3
IIF : veth1_3
4-LOCALSID-TABLE:
==================
SID : 4::AD6:F3
Behavior: end.ad6
Next_hop:
00:00:00:04:f3:f3
OIF : veth0_4
IIF : veth1_4
IPv6 Hdr SA = A::, DA = B::
Payload
2-SRv6-SRDEV
=================
Iface : veth1_2
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
3-SRv6-SRDEV
=================
Iface : veth1_3
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
VNF2
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 5::D6
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=0
Payload
IPv6 Hdr SA = A::, DA = B::
4-SRv6-SRDEV
=================
Iface : veth1_4
Behavior: end.ad6
SR Hdr
IPv6 Hdr
IPv6 Hdr SA = A::, DA = B::
Payload
IPv6 Hdr SA = A::, DA = B::
Payload
Veth0_2 Veth1_2
Veth0_3 Veth1_3
Veth0_4 Veth1_4
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3
Payload
IPv6 Hdr SA = A::, DA = B::
SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2
Payload
IPv6 Hdr SA = A::, DA = B:: SR Hdr
IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3
(5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1
Payload
IPv6 Hdr SA = A::, DA = B::
Testbed – SFC scenario
• We provide a simple VirtualBox testbed using Vagrant
• The testbed is composed of three Virtual Machines (VMs) that represent SR
ingress node, NFV node, and SR egress node
• VNFs are running as network namespaces in the NFV node
• For simplicity, The SR proxy behavior uses the same interface for Target and
source interface (this is possible only in the case of unidirectional SFC)
61
NFV node
srext
srext
Linux kernel
Ingress node
Egress node
Linux VM Linux VM Linux VM
Linux kernel
1:2::1/64
VNF2
Namespace
srext
Linux kernel
Namespace
IPv6
IPv6
VNF1
Namespace
IPv6
Testbed
server
1:2::2/64 2:3::2/64 2:3::3/64
$ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap segs
2::AD:F1,2::AE:F2,2::AD:F3,3::D6
$ modprobe srext
$ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth1_2 veth1_2
$ srconf localsid add 2::AD6:F2 end.ad6 ip 2:f2::f2 veth2_2 veth2_2
$ srconf localsid add 2::AD6:F3 end.ad6 mac 00:00:00:02:f3:f3 veth3_2 veth3_2
$ srconf localsid add 2:: end
$ip -6 route add A::/64 via 2:3::2 encap seg6 mode encap segs 2::,1::D6
62
Client
Namespace
IPv6
- The SR policy on the ingress node force the traffic to go through the three SR-unaware VNFs in the NFV node
- The same network interface is used for target and source interface
VNF3
Namespace
B::1/64
B::2/64
veth0_server
veth1_3
veth0_client
veth1_1
A::1/64
A::2/64
eth1
eth1
2:f3::f3/64
veth3_2
2:f3::2/64
IPv6
2:f2::f2/64
veth2_2
2:f2::2/64
veth0_vnf3veth0_vnf2veth0_vnf1
2:f1::f1/64
veth1_2
2:f1::2/64
eth2
eth2
$ srconf localsid add 1::D6 end.dx6 ip A::2 veth1_1 $ srconf localsid add 3::D6 end.dx6 ip B::2 veth1_3
Testbed
• Instructions and srext source code are open source and available online
https://github.com/netgroup/SRv6-net-prog/
• Detailed description of the testbed and how to replicate the SFC use-case are
available directly on the link below https://netgroup.github.io/SRv6-net-
prog/testbed-basic.html
63
Thank you. Questions?
Contacts
Ahmed AbdelSalam
Gran Sasso Science Institute
ahmed.abdelsalam@gssi.it
Stefano Salsano
University of Rome Tor Vergata
stefano.salsano@uniroma2.it
The tools we developed are available on github:
https://netgroup.github.io/SRv6-net-prog/
64
The work of Stefano Salsano has been supported by the SUPERFLUIDITY project, which has received funding from
the European Union’s Horizon 2020 research and innovation program under grant agreement No.671566 (Research
and Innovation Action).

More Related Content

What's hot

SRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationSRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationKentaro Ebisawa
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptablesKernel TLV
 
MPLS WC 2014 Segment Routing TI-LFA Fast ReRoute
MPLS WC 2014  Segment Routing TI-LFA Fast ReRouteMPLS WC 2014  Segment Routing TI-LFA Fast ReRoute
MPLS WC 2014 Segment Routing TI-LFA Fast ReRouteBruno Decraene
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelDivye Kapoor
 
JANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsJANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsKentaro Ebisawa
 
Segment Routing Advanced Use Cases - Cisco Live 2016 USA
Segment Routing Advanced Use Cases - Cisco Live 2016 USASegment Routing Advanced Use Cases - Cisco Live 2016 USA
Segment Routing Advanced Use Cases - Cisco Live 2016 USAJose Liste
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越Kentaro Ebisawa
 
Segment Routing: A Tutorial
Segment Routing: A TutorialSegment Routing: A Tutorial
Segment Routing: A TutorialAPNIC
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecturehugo lu
 
Cilium - Bringing the BPF Revolution to Kubernetes Networking and Security
Cilium - Bringing the BPF Revolution to Kubernetes Networking and SecurityCilium - Bringing the BPF Revolution to Kubernetes Networking and Security
Cilium - Bringing the BPF Revolution to Kubernetes Networking and SecurityThomas Graf
 
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...LINE Corporation
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughThomas Graf
 
Building DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPNBuilding DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPNCisco Canada
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabMichelle Holley
 
Traffic Engineering Using Segment Routing
Traffic Engineering Using Segment Routing Traffic Engineering Using Segment Routing
Traffic Engineering Using Segment Routing Cisco Canada
 
Virtualized network with openvswitch
Virtualized network with openvswitchVirtualized network with openvswitch
Virtualized network with openvswitchSim Janghoon
 
TechWiseTV Workshop: Segment Routing for the Datacenter
TechWiseTV Workshop: Segment Routing for the DatacenterTechWiseTV Workshop: Segment Routing for the Datacenter
TechWiseTV Workshop: Segment Routing for the DatacenterRobb Boyd
 

What's hot (20)

SRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationSRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and Implementation
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptables
 
MENOG-Segment Routing Introduction
MENOG-Segment Routing IntroductionMENOG-Segment Routing Introduction
MENOG-Segment Routing Introduction
 
MPLS WC 2014 Segment Routing TI-LFA Fast ReRoute
MPLS WC 2014  Segment Routing TI-LFA Fast ReRouteMPLS WC 2014  Segment Routing TI-LFA Fast ReRoute
MPLS WC 2014 Segment Routing TI-LFA Fast ReRoute
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
JANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsJANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source Implementations
 
Segment Routing Advanced Use Cases - Cisco Live 2016 USA
Segment Routing Advanced Use Cases - Cisco Live 2016 USASegment Routing Advanced Use Cases - Cisco Live 2016 USA
Segment Routing Advanced Use Cases - Cisco Live 2016 USA
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越
 
Segment Routing: A Tutorial
Segment Routing: A TutorialSegment Routing: A Tutorial
Segment Routing: A Tutorial
 
SRv6 study
SRv6 studySRv6 study
SRv6 study
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecture
 
Cilium - Bringing the BPF Revolution to Kubernetes Networking and Security
Cilium - Bringing the BPF Revolution to Kubernetes Networking and SecurityCilium - Bringing the BPF Revolution to Kubernetes Networking and Security
Cilium - Bringing the BPF Revolution to Kubernetes Networking and Security
 
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
 
Deploying IPv6 on OpenStack
Deploying IPv6 on OpenStackDeploying IPv6 on OpenStack
Deploying IPv6 on OpenStack
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
 
Building DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPNBuilding DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPN
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on Lab
 
Traffic Engineering Using Segment Routing
Traffic Engineering Using Segment Routing Traffic Engineering Using Segment Routing
Traffic Engineering Using Segment Routing
 
Virtualized network with openvswitch
Virtualized network with openvswitchVirtualized network with openvswitch
Virtualized network with openvswitch
 
TechWiseTV Workshop: Segment Routing for the Datacenter
TechWiseTV Workshop: Segment Routing for the DatacenterTechWiseTV Workshop: Segment Routing for the Datacenter
TechWiseTV Workshop: Segment Routing for the Datacenter
 

Similar to Service Function Chaining with SRv6

VPP for Stateless SRv6/GTP-U Translation
VPP for Stateless SRv6/GTP-U TranslationVPP for Stateless SRv6/GTP-U Translation
VPP for Stateless SRv6/GTP-U TranslationSatoru Matsushima
 
Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...
Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...
Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...APNIC
 
SRv6-TOI-rev3i-EXTERNAL.pdf
SRv6-TOI-rev3i-EXTERNAL.pdfSRv6-TOI-rev3i-EXTERNAL.pdf
SRv6-TOI-rev3i-EXTERNAL.pdfYunLiu75
 
Neighbor Discovery Deep Dive – IPv6-Networking-Referat
Neighbor Discovery Deep Dive – IPv6-Networking-ReferatNeighbor Discovery Deep Dive – IPv6-Networking-Referat
Neighbor Discovery Deep Dive – IPv6-Networking-ReferatDigicomp Academy AG
 
18-20180514_SRv6_RIPE.pdf
18-20180514_SRv6_RIPE.pdf18-20180514_SRv6_RIPE.pdf
18-20180514_SRv6_RIPE.pdfYunLiu75
 
Getting started with IPv6
Getting started with IPv6Getting started with IPv6
Getting started with IPv6Private
 
Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...
Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...
Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...Hsien-Hsin Sean Lee, Ph.D.
 
DNS, DHCP & IPAM with IPv6
DNS, DHCP & IPAM with IPv6DNS, DHCP & IPAM with IPv6
DNS, DHCP & IPAM with IPv6Andreas Taudte
 
Yokohama Art Spot meets SPARQL
Yokohama Art Spot meets SPARQLYokohama Art Spot meets SPARQL
Yokohama Art Spot meets SPARQLFuyuko Matsumura
 
Ieee nfv-sdn-2020-srv6-tutorial
Ieee nfv-sdn-2020-srv6-tutorialIeee nfv-sdn-2020-srv6-tutorial
Ieee nfv-sdn-2020-srv6-tutorialStefano Salsano
 
Manual L64105 Mpeg2 Av Decoder
Manual L64105 Mpeg2 Av DecoderManual L64105 Mpeg2 Av Decoder
Manual L64105 Mpeg2 Av DecoderSais Abdelkrim
 
Stack Smashing Protector (Paul Rascagneres)
Stack Smashing Protector (Paul Rascagneres)Stack Smashing Protector (Paul Rascagneres)
Stack Smashing Protector (Paul Rascagneres)Hackfest Communication
 

Similar to Service Function Chaining with SRv6 (20)

VPP for Stateless SRv6/GTP-U Translation
VPP for Stateless SRv6/GTP-U TranslationVPP for Stateless SRv6/GTP-U Translation
VPP for Stateless SRv6/GTP-U Translation
 
Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...
Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...
Leveraging IPv6 extension header for traffic engineering, by Eric Vyncke [APN...
 
SRv6-TOI-rev3i-EXTERNAL.pdf
SRv6-TOI-rev3i-EXTERNAL.pdfSRv6-TOI-rev3i-EXTERNAL.pdf
SRv6-TOI-rev3i-EXTERNAL.pdf
 
Nxll23 i pv6
Nxll23 i pv6Nxll23 i pv6
Nxll23 i pv6
 
Neighbor Discovery Deep Dive – IPv6-Networking-Referat
Neighbor Discovery Deep Dive – IPv6-Networking-ReferatNeighbor Discovery Deep Dive – IPv6-Networking-Referat
Neighbor Discovery Deep Dive – IPv6-Networking-Referat
 
18-20180514_SRv6_RIPE.pdf
18-20180514_SRv6_RIPE.pdf18-20180514_SRv6_RIPE.pdf
18-20180514_SRv6_RIPE.pdf
 
Getting started with IPv6
Getting started with IPv6Getting started with IPv6
Getting started with IPv6
 
Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...
Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...
Lec7 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- Dynamic Sch...
 
DNS, DHCP & IPAM with IPv6
DNS, DHCP & IPAM with IPv6DNS, DHCP & IPAM with IPv6
DNS, DHCP & IPAM with IPv6
 
Yokohama Art Spot meets SPARQL
Yokohama Art Spot meets SPARQLYokohama Art Spot meets SPARQL
Yokohama Art Spot meets SPARQL
 
201901-SRv6.pdf
201901-SRv6.pdf201901-SRv6.pdf
201901-SRv6.pdf
 
I pv6 eigrp
I pv6 eigrpI pv6 eigrp
I pv6 eigrp
 
IPv6 EIGRP
IPv6 EIGRPIPv6 EIGRP
IPv6 EIGRP
 
Ieee nfv-sdn-2020-srv6-tutorial
Ieee nfv-sdn-2020-srv6-tutorialIeee nfv-sdn-2020-srv6-tutorial
Ieee nfv-sdn-2020-srv6-tutorial
 
Manual L64105 Mpeg2 Av Decoder
Manual L64105 Mpeg2 Av DecoderManual L64105 Mpeg2 Av Decoder
Manual L64105 Mpeg2 Av Decoder
 
IPv6 tools
IPv6 toolsIPv6 tools
IPv6 tools
 
Stack Smashing Protector (Paul Rascagneres)
Stack Smashing Protector (Paul Rascagneres)Stack Smashing Protector (Paul Rascagneres)
Stack Smashing Protector (Paul Rascagneres)
 
IPV6 IPv6 Routing Lab By Rob Hamm
IPV6 IPv6 Routing Lab  By Rob HammIPV6 IPv6 Routing Lab  By Rob Hamm
IPV6 IPv6 Routing Lab By Rob Hamm
 
Lab telematicos
Lab telematicosLab telematicos
Lab telematicos
 
Lab telematicos
Lab telematicosLab telematicos
Lab telematicos
 

Recently uploaded

Summary IGF 2013 Bali - English (tata kelola internet / internet governance)
Summary  IGF 2013 Bali - English (tata kelola internet / internet governance)Summary  IGF 2013 Bali - English (tata kelola internet / internet governance)
Summary IGF 2013 Bali - English (tata kelola internet / internet governance)ICT Watch - Indonesia
 
Summary ID-IGF 2016 National Dialogue - English (tata kelola internet / int...
Summary  ID-IGF 2016 National Dialogue  - English (tata kelola internet / int...Summary  ID-IGF 2016 National Dialogue  - English (tata kelola internet / int...
Summary ID-IGF 2016 National Dialogue - English (tata kelola internet / int...ICT Watch - Indonesia
 
Tari Eason Warriors Come Out To Play T Shirts
Tari Eason Warriors Come Out To Play T ShirtsTari Eason Warriors Come Out To Play T Shirts
Tari Eason Warriors Come Out To Play T Shirtsrahman018755
 
办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...
办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...
办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...vmzoxnx5
 
IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119APNIC
 
Power of Social Media for E-commerce.pdf
Power of Social Media for E-commerce.pdfPower of Social Media for E-commerce.pdf
Power of Social Media for E-commerce.pdfrajats19920
 

Recently uploaded (6)

Summary IGF 2013 Bali - English (tata kelola internet / internet governance)
Summary  IGF 2013 Bali - English (tata kelola internet / internet governance)Summary  IGF 2013 Bali - English (tata kelola internet / internet governance)
Summary IGF 2013 Bali - English (tata kelola internet / internet governance)
 
Summary ID-IGF 2016 National Dialogue - English (tata kelola internet / int...
Summary  ID-IGF 2016 National Dialogue  - English (tata kelola internet / int...Summary  ID-IGF 2016 National Dialogue  - English (tata kelola internet / int...
Summary ID-IGF 2016 National Dialogue - English (tata kelola internet / int...
 
Tari Eason Warriors Come Out To Play T Shirts
Tari Eason Warriors Come Out To Play T ShirtsTari Eason Warriors Come Out To Play T Shirts
Tari Eason Warriors Come Out To Play T Shirts
 
办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...
办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...
办理澳洲USYD文凭证书学历认证【Q微/1954292140】办理悉尼大学毕业证书真实成绩单GPA修改/办理澳洲大学文凭证书Offer录取通知书/在读证明...
 
IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119
 
Power of Social Media for E-commerce.pdf
Power of Social Media for E-commerce.pdfPower of Social Media for E-commerce.pdf
Power of Social Media for E-commerce.pdf
 

Service Function Chaining with SRv6

  • 1. Service Function Chaining with SRv6 Linux-based NFV Infrastructure Ahmed AbdelSalam(1), Stefano Salsano(2), Francois Clad(3) (1)Gran Sasso Science Institute, (2)University of Rome Tor Vergata, (3)Cisco Systems
  • 2. Service Functions • Service Functions (SFs) can be categorized in two types, depending on whether they are able to behave properly in the presence of Segment Routing (SR) information or not • SR-aware SF: can process the SR information in the packets it receives. This means being able to identify the active segment as a local instruction and move forward in the segment list, but also that the SF own behavior is not hindered due to the presence of SR information • SR-unaware SF: can not process the SR information in the traffic SR traffic or behaves incorrectly for such traffic 2
  • 3. Service Functions Chaining • Service Function Chaining (SFC) enables the creation of composite network services that consist of an ordered set of service functions. • SRv6 provides a simple and scalable way to chain service functions, which supports both SR-aware as well as SR-unaware SFs. • SR enables SFC by assigning a segment identifier, or SID, to each SF and sequencing these service SIDs in a segment list. 3
  • 4. SFC Example - SIDs and addresses Allocation • All nodes are Linux machines. • Links between two nodes N1 and N2 are assigned addresses in the form N1:N2::N1 and N1:N2::N2 respectively • Each node Nx owns an IPv6 prefix in the form of x::/64 (e.g., 1::/64 for N1) • Local SID is represented as LOC::FUNC:ARGS • LOC is represented in 64 bits • FUNC is represented in 48 bits • ARGS are represented in 16 bits • LOC part of the SID is routable 4 SRv6 SRv6+ SREXT Non SRv6 Non-SRv6 traffic SRv6 traffic SR unaware VNF SR aware VNF
  • 5. SFC of SRv6 aware VNFs • An SR-aware SF is associated with a service segment locally instantiated on the appliance, which is used to steer traffic through the SF. • The segment exact behavior depends on how each SF processes the traffic. • If the SF is configured to intercept all the packets passing through the appliance, the underlying routing system only has to implement a default SR endpoint behavior • If the SF requires the packets to be directed to a specific virtual interface, networking queue or process, a dedicated SR behavior may be required to steer the packets to the appropriate location. 5
  • 6. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 6 5::D6
  • 7. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 7 5::D6 $ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap segs 2::F1, 3::F2, 4::F3, 5::D6
  • 8. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 8 5::D6 $ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap segs 2::F1, 3::F2, 4::F3, 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload
  • 9. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 9 5::D6 $ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap segs 2::F1, 3::F2, 4::F3, 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload
  • 10. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 10 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 11. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 11 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 12. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 12 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 13. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 13 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 14. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 14 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 15. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 15 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 16. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 16 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 17. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 17 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 18. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 18 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 5::D6 (5::D6, 4::F3, 3::F2, 2::F1) SL=0 Payload IPv6 Hdr SA = A::, DA = B::
  • 19. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 19 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 5::D6 (5::D6, 4::F3, 3::F2, 2::F1) SL=0 Payload IPv6 Hdr SA = A::, DA = B::
  • 20. SFC of SRv6 aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 20 5::D6 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::F1 (5::D6, 4::F3, 3::F2, 2::F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::F2 (5::D6, 4::F3, 3::F2, 2::F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::F3 (5::D6, 4::F3, 3::F2, 2::F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 5::D6 (5::D6, 4::F3, 3::F2, 2::F1) SL=0 Payload IPv6 Hdr SA = A::, DA = B:: IPv6 Hdr SA = A::, DA = B:: Payload
  • 21. SRv6 unaware VNFs • SR-unaware service functions are not able to process segment routed traffic. • It may either drop the traffic or take erroneous decisions due to the unrecognized routing information. • In order to include such SFs in an SR SFC policy, it is thus required to remove the SR information before the SF processes the packet, or to alter it in such a way that the SF can correctly process the packet. • SR proxy is as an entity, separate from the SF, that performs these modifications and handle the SR processing on behalf of an SF 21
  • 22. SRv6 unaware VNFs • An SR-unaware SF is associated with a service segment instantiated on the SR proxy, which is used to steer traffic through the SF. • The SR Proxy removes the SR encapsulation before sending the packet to the SF • The SR encapsulation is added again after the packet being processed by the SF 22 Service Function SR proxy IFACE-OUT IFACE-IN SR traffic SR traffic Non-SR traffic
  • 23. Segment Routing Extension kernel module (srext) • To support such proxy behavior, we developed, at the Networking Group of University of Rome Tor Vergata, Italy, a new kernel module named srext. • It provides the basic SR functions in addition to more advanced ones. • It can be used as a standalone SRv6 implementation or as a complement to the existing SRv6 kernel implementation (kernel 4.10 and later kernels). • It supports “my local SID table” which contains the local SRv6 segments explicitly instantiated in the node and associates each SID with a function. 23
  • 24. srext • srext registers a callback function in the pre-routing hook of the netfilter framework. The callback function is invoked for each received IPv6 packet. • If the destination address of the IPv6 packet matches an entry in the local SID table, the associated behavior is applied otherwise the packet will go through the kernel's routing sub-system for normal processing. • srext can be used in a Linux NFV node in order to support legacy VNFs (i.e. "SR- unaware" VNFs) in a Service Chain implemented with SRv6. 24
  • 25. Netfilter Framework Pkt_in PRE_ROUTING POST_ROUTINGFORWARD LOCAL_OUTLOCAL_IN Routing Local Process Local Process Routing Pkt_out SREXT Localsid table 25 srext Linux kernel VNF Namespace NFV node Linux VM srext Kernel module + Netfilter hook
  • 26. srext Linux kernel VNF Namespace NFV node Linux VM PREROUTING srext Localsid table match ? Sanity check ? Apply SRv6 behavior Xmit packet to VNF Y pass Processing of northbound packets (from NFV node to VNF) 26 Save the outer IPv6 Hdr and SRH SRv6-MY-LOCALSID-TABLE: ======================= SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 SRv6 - SRDEV ===================== Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr
  • 27. srext Linux kernel VNF Namespace NFV node Linux VM PREROUTING srext Processing of southbound packets (from VNF to NFV node) 27 SRv6 - SRDEV ===================== Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr SRDEV table match ? Filter control traffic Re-add saved headers Y IPv6 Routing
  • 28. CLI for srext • srext provides a command-line interface to interact with the local SID table, for adding a new SID, removing an existing SID, showing its content and more. $ srconf localsid Usage: srconf localsid { help | flush } srconf localsid { show | clear-counters } [SID] srconf localsid del SID srconf localsid add SID BEHAVIOUR BEHAVIOUR:= { end | end.dx2 TARGETIF | end.dx4 NEXTHOP4 TARGETIF | { end.x | end.dx6 } NEXTHOP6 TARGETIF | { end.ad4 | end.ead4 } NEXTHOP4 TARGETIF SOURCEIF | { end.am | end.ad6 | end.ead6 } NEXTHOP6 TARGETIF SOURCEIF | end.as4 NEXTHOP4 TARGETIF SOURCEIF src ADDR segs SIDLIST left SEGMENTLEFT| end.as6 NEXTHOP6 TARGETIF SOURCEIF src ADDR segs SIDLIST left SEGMENTLEFT } NEXTHOP4:= { ip IPv4-ADDR | mac MAC-ADDR} NEXTHOP6:= { ip IPv6-ADDR | mac MAC-ADDR} 28
  • 29. CLI for srext 29 • Adding SID $ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth0_nfv veth1_nfv • Deleting SID $ srconf localsid del 2::AD6:F1 • Flush Localsid table $ srconf localsid flush • Show Localsid table $ srconf localsid show SRv6 - MY LOCALSID TABLE: ================================================== SID : 2::AD6:F1 Behavior: end.ad6 Next hop: 2:f1::f1 OIF : veth0_nfv IIF : veth1_nfv Good traffic: [33 packets : 3894 bytes] Bad traffic: [0 packets : 0 bytes] ------------------------------------------------------ SID : 2::AD6:F2 Behavior: end.ad6 Next hop: 00:00:00:02:f3:f3 OIF : veth2_nfv IIF : veth3_nfv Good traffic: [33 packets : 3894 bytes] Bad traffic: [0 packets : 0 bytes]
  • 30. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 VNF2 30 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 31. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 31 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 32. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 32 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 $ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth0_2 veth1_2 VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 33. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 33 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 $ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth0_2 veth1_2 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 34. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 34 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 VNF2 $ srconf localsid add 3::AD6:F2 end.ad6 ip 3:f2::f2 veth0_3 veth1_3 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 35. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 35 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 VNF2 $ srconf localsid add 3::AD6:F2 end.ad6 ip 3:f2::f2 veth0_3 veth1_3 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 36. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 36 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 $ srconf localsid add 4::AD6:F3 end.ad6 mac 00:00:00:04:f3:f3 veth0_4 veth1_4 VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 37. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 37 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 $ srconf localsid add 4::AD6:F3 end.ad6 mac 00:00:00:04:f3:f3 veth0_4 veth1_4 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 38. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 38 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 39. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 39 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 40. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 40 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 41. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 41 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 42. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 42 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 43. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 43 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 44. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 44 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 45. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 45 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 46. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 46 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B::
  • 47. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 47 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4
  • 48. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 48 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 49. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 49 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 50. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 50 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 51. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 51 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 IPv6 Hdr SA = A::, DA = B:: Payload Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 52. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 52 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 IPv6 Hdr SA = A::, DA = B:: Payload Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 53. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 53 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B:: Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B::
  • 54. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 54 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 55. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 55 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 4-SRv6-SRDEV ================= Iface : veth1_4 Behavior: end.ad6 SR Hdr IPv6 Hdr Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 56. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 56 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 4-SRv6-SRDEV ================= Iface : veth1_4 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 57. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 57 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 4-SRv6-SRDEV ================= Iface : veth1_4 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload IPv6 Hdr SA = A::, DA = B:: Payload Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 58. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 58 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 4-SRv6-SRDEV ================= Iface : veth1_4 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload IPv6 Hdr SA = A::, DA = B:: Payload Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 59. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 59 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 5::D6 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=0 Payload IPv6 Hdr SA = A::, DA = B:: 4-SRv6-SRDEV ================= Iface : veth1_4 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 60. SFC of SRv6-unaware VNFs B B:: A A:: 1 5 VNF1 VNF3 60 2 3 4 2::AD6:F1 3::AD6:F2 4::AD6:F3 5::D6 $ ip -6 route add B::/64 via 1:2::1 encap seg6 mode encap segs 2::AD6:F1,3::AD6:F2,4::AD6:F3,5::D6 2-LOCALSID-TABLE: ================== SID : 2::AD6:F1 Behavior: end.ad6 Next_hop: 2:f1::f1 OIF : veth0_2 IIF : veth1_2 3-LOCALSID-TABLE: ================== SID : 3::AD6:F2 Behavior: end.ad6 Next_hop: 3:f2::f3 OIF : veth0_3 IIF : veth1_3 4-LOCALSID-TABLE: ================== SID : 4::AD6:F3 Behavior: end.ad6 Next_hop: 00:00:00:04:f3:f3 OIF : veth0_4 IIF : veth1_4 IPv6 Hdr SA = A::, DA = B:: Payload 2-SRv6-SRDEV ================= Iface : veth1_2 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload 3-SRv6-SRDEV ================= Iface : veth1_3 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload VNF2 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 5::D6 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=0 Payload IPv6 Hdr SA = A::, DA = B:: 4-SRv6-SRDEV ================= Iface : veth1_4 Behavior: end.ad6 SR Hdr IPv6 Hdr IPv6 Hdr SA = A::, DA = B:: Payload IPv6 Hdr SA = A::, DA = B:: Payload Veth0_2 Veth1_2 Veth0_3 Veth1_3 Veth0_4 Veth1_4 SR Hdr IPv6 Hdr SA = 1:2::1, DA = 2::AD6:F1 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=3 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 3::AD6:F2 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=2 Payload IPv6 Hdr SA = A::, DA = B:: SR Hdr IPv6 Hdr SA = 1:2::1, DA = 4::AD6:F3 (5::D6, 4::AD6:F3, 3::AD6:F2, 2::AD6:F1) SL=1 Payload IPv6 Hdr SA = A::, DA = B::
  • 61. Testbed – SFC scenario • We provide a simple VirtualBox testbed using Vagrant • The testbed is composed of three Virtual Machines (VMs) that represent SR ingress node, NFV node, and SR egress node • VNFs are running as network namespaces in the NFV node • For simplicity, The SR proxy behavior uses the same interface for Target and source interface (this is possible only in the case of unidirectional SFC) 61
  • 62. NFV node srext srext Linux kernel Ingress node Egress node Linux VM Linux VM Linux VM Linux kernel 1:2::1/64 VNF2 Namespace srext Linux kernel Namespace IPv6 IPv6 VNF1 Namespace IPv6 Testbed server 1:2::2/64 2:3::2/64 2:3::3/64 $ ip -6 route add B::/64 via 1:2::2 encap seg6 mode encap segs 2::AD:F1,2::AE:F2,2::AD:F3,3::D6 $ modprobe srext $ srconf localsid add 2::AD6:F1 end.ad6 ip 2:f1::f1 veth1_2 veth1_2 $ srconf localsid add 2::AD6:F2 end.ad6 ip 2:f2::f2 veth2_2 veth2_2 $ srconf localsid add 2::AD6:F3 end.ad6 mac 00:00:00:02:f3:f3 veth3_2 veth3_2 $ srconf localsid add 2:: end $ip -6 route add A::/64 via 2:3::2 encap seg6 mode encap segs 2::,1::D6 62 Client Namespace IPv6 - The SR policy on the ingress node force the traffic to go through the three SR-unaware VNFs in the NFV node - The same network interface is used for target and source interface VNF3 Namespace B::1/64 B::2/64 veth0_server veth1_3 veth0_client veth1_1 A::1/64 A::2/64 eth1 eth1 2:f3::f3/64 veth3_2 2:f3::2/64 IPv6 2:f2::f2/64 veth2_2 2:f2::2/64 veth0_vnf3veth0_vnf2veth0_vnf1 2:f1::f1/64 veth1_2 2:f1::2/64 eth2 eth2 $ srconf localsid add 1::D6 end.dx6 ip A::2 veth1_1 $ srconf localsid add 3::D6 end.dx6 ip B::2 veth1_3
  • 63. Testbed • Instructions and srext source code are open source and available online https://github.com/netgroup/SRv6-net-prog/ • Detailed description of the testbed and how to replicate the SFC use-case are available directly on the link below https://netgroup.github.io/SRv6-net- prog/testbed-basic.html 63
  • 64. Thank you. Questions? Contacts Ahmed AbdelSalam Gran Sasso Science Institute ahmed.abdelsalam@gssi.it Stefano Salsano University of Rome Tor Vergata stefano.salsano@uniroma2.it The tools we developed are available on github: https://netgroup.github.io/SRv6-net-prog/ 64 The work of Stefano Salsano has been supported by the SUPERFLUIDITY project, which has received funding from the European Union’s Horizon 2020 research and innovation program under grant agreement No.671566 (Research and Innovation Action).