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).

Service Function Chaining with SRv6

  • 1.
    Service Function Chainingwith 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 • ServiceFunctions (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 SRv6aware 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 SRv6aware VNFs 3 2 B B:: A A:: 41 5 VNF1 2::F1 VNF3 4::F3 VNF2 3::F2 6 5::D6
  • 7.
    SFC of SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 SRv6aware 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 Extensionkernel 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 registersa 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_ROUTINGPOST_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 nodeLinux 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 nodeLinux 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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-unawareVNFs 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 – SFCscenario • 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 Ingressnode 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 andsrext 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 AhmedAbdelSalam 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).