1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
## UDP-Pinger for IPv6 with IOAM {#ioam_udppinger_doc}
Traditionally to detect and isolate network faults, ping and traceroute
are used. But in a complex network with large number of U/E-CMP being
availble, it would be difficult to detect and isolate faults in the
network. Also detecting loss/reordering/duplication of packets becomes
much harder. [draft-lapukhov-dataplane-probe] uses active probes to
solve the above mentioned problems. UDP-Pinger with IOAM, would combine
[draft-lapukhov-dataplane-probe] with [IOAM-ietf-data] and
[IOAM-ietf-transport] to provide a more sophisticated way for
detection/isolation of network faults and enable network telemetry.
UDP-Pinger for IPv6 does:
- Crafts and sends Probe packets from source node to destination.
- Probe packet is an IPv6 packet with HBH header to collect IOAM data
and UDP header followed by payload.
- UDP source and destination ports are varied to cover all possible
paths in network as well as to simulate real application traffic.
- IOAM Trace option is used to record the path Probe packets take
and also for measuring latency.
- IOAM E2E option is used to measure packet loss, reordering and
duplicate packets.
- UDP payload follows packet format in [draft-lapukhov-dataplane-probe]
and is used on source/destination nodes to identify Probe/Reply packets.
- Destination node on receiving Probe packet sends a reply back to source.
Reply packet is formed by exchanging source and destination IP addresses
and packet type in UDP payload.
- Source node on receiving Reply packet can trace packet Path and measure
latency, packet loss, reordering, duplication.
- On detecting fault in network, Probe packets are sent with loopback
flag set. On seeing loopback flag, each device in network along with
forwarding the packet, also sends a copy back to source. With this
Source node can corelate and detect the faulty node/link.
## Configuration
Following section describes how to enable UDP-Pinger on a VPP node.
Please note that IOAM configurations as mentioned in @subpage ioam_ipv6_doc
have to be made prior to starting any of the below configurations.
### UDP-Pinger Enable/Disable
For configuring UDP-Pinger between two end-points, following parametrs
need to be provided by using the CLI:
set udp-ping src <local IPv6 address> src-port-range <local port range>
dst <remote IPv6 address> dst-port-range <destination port range>
interval <time interval in sec> [fault-detect] [disable]
- src : IPv6 address of local node.
- src-port-range : Port range for source port in UDP header.
Syntax is <start_port>:<end_port>
- dst : IPv6 address of the destination node.
- dst-port-range : Port range for destination port in UDP header.
Syntax is <start_port>:<end_port>
- interval : Time interval in seconds for which Probe packets need to
be sent out.
- fault-detect : This is to enable IOAM loopback functionality on
detecting a failure and to detect faulty node/link.
- disable : Used for deleting a UDP-Ping flow.
Example:
To create a UDP-Pinger session:
set udp-ping src db00::1 src-port-range 5000:5002 dst db02::1 dst-port-range 6000:6002 interval 1 fault-detect
To delete a UDP-Pinger session:
set udp-ping src db00::1 src-port-range 5000:5002 dst db02::1 dst-port-range 6000:6002 interval 1 fault-detect disable
### UDP-Pinger Data Export
For exporting network telemetry data extracted from UDP-Pinger sessions,
below command is used. Data is exported as IP-Fix records.
set udp-ping export-ipfix [disable]
On enabling udp-ping export, UDP-Pinger data is exported as
IP-Fix record to IP-Fix collector address as configured in
IP-Fix using the command:
set ipfix exporter collector <Remote IP Address> src <Local IP address>
Following data is exported from UDP-Pinger:
- IOAM Trace information for each of UDP-Pinger flow
- Roundtrip Delay
- Packet loss count
- Reordered Packet count
- Duplicate Packet count
Example:
To enable export:
set ipfix exporter collector 172.16.1.254 src 172.16.1.229
set udp-ping export-ipfix
To disable export:
set udp-ping export-ipfix disable
## Operational data
For checking the state of the UDP-Pinger sessions, below command can be used:
show udp-ping summary
Command displays follwing for each UDP-Pinger session:
- IOAM Trace information for each of UDP-Pinger flow
- Roundtrip Delay
- Packet loss count
- Reordered Packet count
- Duplicate Packet count
Example:
vpp#show udp-ping summary
UDP-Ping data:
Src: db00::1, Dst: db02::1
Start src port: 5000, End src port: 5002
Start dst port: 6000, End dst port: 6002
Interval: 1
Src Port - 5000, Dst Port - 6000, Flow CTX - 0
Path State - Up
Path Data:
pkt_sent : 400
pkt_counter : 400
bytes_counter : 458700
Trace data:
pkt_sent : 400
pkt_counter : 400
bytes_counter : 45870
Trace data:
path_map:
node_id: 0x1, ingress_if: 1, egress_if: 2, state:UP
node_id: 0x2, ingress_if: 0, egress_if: 2, state:UP
node_id: 0x3, ingress_if: 3, egress_if: 0, state:UP
node_id: 0x2, ingress_if: 4, egress_if: 9, state:UP
node_id: 0x1, ingress_if: 10, egress_if: 0, state:UP
pkt_counter: 400
bytes_counter: 45870
min_delay: 10
max_delay: 50
mean_delay: 15
POT data:
sfc_validated_count : 0
sfc_invalidated_count : 0
Seqno Data:
RX Packets : 400
Lost Packets : 0
Duplicate Packets : 0
Reordered Packets : 0
Src Port - 5000, Dst Port - 6001, Flow CTX - 1
Path State - Down
Path Data:
pkt_sent : 500
pkt_counter : 400
bytes_counter : 45870
Trace data:
pkt_sent : 500
pkt_counter : 400
bytes_counter : 45870
Trace data:
path_map:
node_id: 0x1, ingress_if: 1, egress_if: 2, state:UP
node_id: 0x2, ingress_if: 0, egress_if: 2, state:UP
node_id: 0x3, ingress_if: 3, egress_if: 0, state:Down
node_id: 0x2, ingress_if: 4, egress_if: 9, state:Down
node_id: 0x1, ingress_if: 10, egress_if: 0, state:Down
pkt_counter: 500
bytes_counter: 45870
min_delay: 50
max_delay: 500
mean_delay: 100
POT data:
sfc_validated_count : 0
sfc_invalidated_count : 0
Seqno Data:
RX Packets : 400
Lost Packets : 100
Duplicate Packets : 20
Reordered Packets : 5
<So on for other source/destination port combination>
[draft-lapukhov-dataplane-probe]:<https://tools.ietf.org/html/draft-lapukhov-dataplane-probe-01>
[IOAM-ietf-data]:<https://tools.ietf.org/html/draft-brockners-inband-oam-data-04>
[IOAM-ietf-transport]:<https://tools.ietf.org/html/draft-brockners-inband-oam-transport-03>
|