![]() |
FD.io VPP
v17.04-9-g99c0734
Vector Packet Processing
|
This document describes the details about configuring and monitoring the usage of IOAM over VxLAN-GPE. The packet formats used by the implementation are specified in the IETF draft below:
VPP can function as IOAM encapsulating, transit and decapsulating node. IOAM data transported as options in an VxLAN-GPE extension header is described here.
The following IOAM features are supported:
Configuring IOAM over VxLAN-GPE involves:
The CLI for configuring IOAM is explained here followed by detailed steps and examples to deploy IOAM for VxLAN-GPE on VPP as an encapsulating, transit or decapsulating IOAM node in the subsequent sub-sections.
Configure VxLAN tunnel parameters to select packets for IOAM data insertion
vpp# set vxlan-gpe-ioam vxlan <src-ip> <dst_ip> <vnid> [disable]
vpp# set ioam-trace profile trace-type 0x1f trace-elts 4 trace-tsp 1 node-id 0x1 app-data 0x1234 vpp# set vxlan-gpe-ioam trace
Example:
vpp# set ioam-trace profile trace-type 0x1f trace-elts 4 trace-tsp 1 node-id 0x2 app-data 0x1234 vpp# set vxlan-gpe-ioam-transit dst-ip <dst_ip> [outer-fib-index <outer_fib_index>] [disable] - Note the disable switch is used to disable the selection of packets for IOAM data insertion.
The decapsulating node similar to encapsulating node requires configuration of the VxLAN-GPE tunnels for identifying the packets to remove IOAM data from.
vpp# set vxlan-gpe-ioam vxlan <src-ip> <dst_ip> <vnid> [disable]
Example:
vpp# set ioam-trace profile trace-type 0x1f trace-elts 4 trace-tsp 1 node-id 0x3 app-data 0x1234 vpp# set vxlan-gpe-ioam trace
IOAM data records extracted from the VxLAN-GPE header can be exported as IPFIX records. These IPFIX records can then be analysed using offline scripts or standard IPFIX collector modules.
Example: vpp# set vxlan-gpe-ioam export ipfix collector <ip4-address> src <ip4-address>
Following CLIs are available to check IOAM operation:
Example when the nodes are receiving data over a DPDK interface: Enable tracing using "trace add dpdk-input 20" and execute "show trace" to view the IOAM data collected:
vpp# trace add dpdk-input 20
vpp# show trace
------------------- Start of thread 0 vpp_main -------------------
Packet 1
00:41:58:236271: af-packet-input
af_packet: hw_if_index 1 next-index 1
tpacket2_hdr:
status 0x20000001 len 114 snaplen 114 mac 66 net 80
sec 0x57c5b238 nsec 0x1bae439a vlan 0
00:41:58:236281: ethernet-input
IP4: fa:16:3e:1b:3b:df -> fa:16:3e:a5:df:a7
00:41:58:236289: l2-input
l2-input: sw_if_index 1 dst fa:16:3e:a5:df:a7 src fa:16:3e:1b:3b:df
00:41:58:236292: l2-learn
l2-learn: sw_if_index 1 dst fa:16:3e:a5:df:a7 src fa:16:3e:1b:3b:df bd_index 1
00:41:58:236297: l2-fwd
l2-fwd: sw_if_index 1 dst fa:16:3e:a5:df:a7 src fa:16:3e:1b:3b:df bd_index 1
00:41:58:236299: l2-flood
l2-flood: sw_if_index 1 dst fa:16:3e:a5:df:a7 src fa:16:3e:1b:3b:df bd_index 1
00:41:58:236304: l2-output
l2-output: sw_if_index 4 dst fa:16:3e:a5:df:a7 src fa:16:3e:1b:3b:df
00:41:58:236306: vxlan-gpe-encap
VXLAN-GPE-ENCAP: tunnel 0
00:41:58:236309: vxlan-gpe-encap-ioam-v4
VXLAN_GPE_IOAM_HOP_BY_HOP: next_index 0 len 40 traced 40 Trace Type 0x1f , 1 elts left
[0] ttl 0x0 node id 0x0 ingress 0x0 egress 0x0 ts 0x0
app 0x0
[1] ttl 0xff node id 0x323200 ingress 0x4 egress 0x4 ts 0x57c5b238
app 0xa5a55e5e
VXLAN-GPE-ENCAP: tunnel 0
VXLAN_GPE_IOAM_HOP_BY_HOP: next_index 0 len 8 traced 0VXLAN-GPE-ENCAP: tunnel 0
00:41:58:236314: ip4-lookup
fib 0 adj-idx 13 : via 10.0.0.10 flow hash: 0x00000000
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 254, length 190, checksum 0xaf19
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
00:41:58:236318: ip4-indirect
fib 0 adj-idx 10 : host-eth2
IP4: 02:fe:3c:85:ec:72 -> 02:fe:64:28:83:90 flow hash: 0x00000000
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 254, length 190, checksum 0xaf19
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
00:41:58:236320: ip4-rewrite-transit
tx_sw_if_index 2 adj-idx 10 : host-eth2
IP4: 02:fe:3c:85:ec:72 -> 02:fe:64:28:83:90 flow hash: 0x00000000
IP4: 02:fe:3c:85:ec:72 -> 02:fe:64:28:83:90
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 253, length 190, checksum 0xb019
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
00:41:58:236322: host-eth2-output
host-eth2
IP4: 02:fe:3c:85:ec:72 -> 02:fe:64:28:83:90
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 253, length 190, checksum 0xb019
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
00:41:58:236512: l2-flood
l2-flood: sw_if_index 1 dst fa:16:3e:a5:df:a7 src fa:16:3e:1b:3b:df bd_index 1
00:41:58:236514: error-drop
l2-flood: BVI L3 mac mismatch
vpp# trace add dpdk-input 20
vpp# show trace
------------------- Start of thread 0 vpp_main -------------------
Packet 1
17:26:12:929645: af-packet-input
af_packet: hw_if_index 1 next-index 1
tpacket2_hdr:
status 0x20000001 len 204 snaplen 204 mac 66 net 80
sec 0x57c670fd nsec 0x74e39a2 vlan 0
17:26:12:929656: ethernet-input
IP4: 02:fe:c0:42:3c:a9 -> 02:fe:50:ec:fa:0a
17:26:12:929662: ip4-input
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 252, length 190, checksum 0xb119
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
17:26:12:929666: ip4-lookup
fib 0 adj-idx 12 : 7.0.0.11/16 flow hash: 0x00000000
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 252, length 190, checksum 0xb119
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
17:26:12:929670: ip4-local
UDP: 6.0.0.11 -> 7.0.0.11
tos 0x00, ttl 252, length 190, checksum 0xb119
fragment id 0x0000
UDP: 4790 -> 4790
length 170, checksum 0x0000
17:26:12:929672: ip4-udp-lookup
UDP: src-port 4790 dst-port 4790
17:26:12:929680: vxlan4-gpe-input
VXLAN-GPE: tunnel 0 next 3 error 0IP6_HOP_BY_HOP: next index 3 len 40 traced 40 Trace Type 0x1f , 1 elts left
[0] ttl 0x0 node id 0x0 ingress 0x0 egress 0x0 ts 0x0
app 0x0
[1] ttl 0xff node id 0x323200 ingress 0x4 egress 0x4 ts 0x57c670fc
app 0xa5a55e5e
17:26:12:929687: ethernet-input
IP4: fa:16:3e:1b:3b:df -> fa:16:3e:a5:df:a7