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