feat(docs): Add Methodology
[csit.git] / docs / content / methodology / vpp_forwarding_modes.md
1 ---
2 bookToc: false
3 title: "VPP Forwarding Modes"
4 weight: 3
5 ---
6
7 # VPP Forwarding Modes
8
9 VPP is tested in a number of L2, IPv4 and IPv6 packet lookup and
10 forwarding modes. Within each mode baseline and scale tests are
11 executed, the latter with varying number of FIB entries.
12
13 ## L2 Ethernet Switching
14
15 VPP is tested in three L2 forwarding modes:
16
17 - *l2patch*: L2 patch, the fastest point-to-point L2 path that loops
18   packets between two interfaces without any Ethernet frame checks or
19   lookups.
20 - *l2xc*: L2 cross-connect, point-to-point L2 path with all Ethernet
21   frame checks, but no MAC learning and no MAC lookup.
22 - *l2bd*: L2 bridge-domain, multipoint-to-multipoint L2 path with all
23   Ethernet frame checks, with MAC learning (unless static MACs are used)
24   and MAC lookup.
25
26 l2bd tests are executed in baseline and scale configurations:
27
28 - *l2bdbase*: Two MAC FIB entries are learned by VPP to enable packet
29   switching between two interfaces in two directions. VPP L2 switching
30   is tested with 254 IPv4 unique flows per direction, varying IPv4
31   source address per flow in order to invoke RSS based packet
32   distribution across VPP workers. The same source and destination MAC
33   address is used for all flows per direction. IPv4 source address is
34   incremented for every packet.
35
36 - *l2bdscale*: A high number of MAC FIB entries are learned by VPP to
37   enable packet switching between two interfaces in two directions.
38   Tested MAC FIB sizes include: i) 10k with 5k unique flows per
39   direction, ii) 100k with 2 x 50k flows and iii) 1M with 2 x 500k
40   flows. Unique flows are created by using distinct source and
41   destination MAC addresses that are changed for every packet using
42   incremental ordering, making VPP learn (or refresh) distinct src MAC
43   entries and look up distinct dst MAC entries for every packet. For
44   details, see
45   [Packet Flow Ordering]({{< ref "packet_flow_ordering#Packet Flow Ordering" >}}).
46
47 Ethernet wire encapsulations tested include: untagged, dot1q, dot1ad.
48
49 ## IPv4 Routing
50
51 IPv4 routing tests are executed in baseline and scale configurations:
52
53 - *ip4base*: Two /32 IPv4 FIB entries are configured in VPP to enable
54   packet routing between two interfaces in two directions. VPP routing
55   is tested with 253 IPv4 unique flows per direction, varying IPv4
56   source address per flow in order to invoke RSS based packet
57   distribution across VPP workers. IPv4 source address is incremented
58   for every packet.
59
60 - *ip4scale*: A high number of /32 IPv4 FIB entries are configured in
61   VPP. Tested IPv4 FIB sizes include: i) 20k with 10k unique flows per
62   direction, ii) 200k with 2 * 100k flows and iii) 2M with 2 * 1M
63   flows. Unique flows are created by using distinct IPv4 destination
64   addresses that are changed for every packet, using incremental or
65   random ordering. For details, see
66   [Packet Flow Ordering]({{< ref "packet_flow_ordering#Packet Flow Ordering" >}}).
67
68 ## IPv6 Routing
69
70 Similarly to IPv4, IPv6 routing tests are executed in baseline and scale
71 configurations:
72
73 - *ip6base*: Two /128 IPv4 FIB entries are configured in VPP to enable
74   packet routing between two interfaces in two directions. VPP routing
75   is tested with 253 IPv6 unique flows per direction, varying IPv6
76   source address per flow in order to invoke RSS based packet
77   distribution across VPP workers. IPv6 source address is incremented
78   for every packet.
79
80 - *ip4scale*: A high number of /128 IPv6 FIB entries are configured in
81   VPP. Tested IPv6 FIB sizes include: i) 20k with 10k unique flows per
82   direction, ii) 200k with 2 * 100k flows and iii) 2M with 2 * 1M
83   flows. Unique flows are created by using distinct IPv6 destination
84   addresses that are changed for every packet, using incremental or
85   random ordering. For details, see
86   [Packet Flow Ordering]({{< ref "packet_flow_ordering#Packet Flow Ordering" >}}).
87
88 ## SRv6 Routing
89
90 SRv6 routing tests are executed in a number of baseline configurations,
91 in each case SR policy and steering policy are configured for one
92 direction and one (or two) SR behaviours (functions) in the other
93 directions:
94
95 - *srv6enc1sid*: One SID (no SRH present), one SR function - End.
96 - *srv6enc2sids*: Two SIDs (SRH present), two SR functions - End and
97   End.DX6.
98 - *srv6enc2sids-nodecaps*: Two SIDs (SRH present) without decapsulation,
99   one SR function - End.
100 - *srv6proxy-dyn*: Dynamic SRv6 proxy, one SR function - End.AD.
101 - *srv6proxy-masq*: Masquerading SRv6 proxy, one SR function - End.AM.
102 - *srv6proxy-stat*: Static SRv6 proxy, one SR function - End.AS.
103
104 In all listed cases low number of IPv6 flows (253 per direction) is
105 routed by VPP.