Add charts for TCPv4/TCPV6/ICMP errors in windows (#18526)
* Add charts for TCPv4/TCPV6/ICMP errors * Fix titles
Stelios Fragkakis committed
Sep 16, 2024 at 15:20 UTC
d953ce31cd981c0b7ca97574241a0821f6e0c749
2 files changed
+292
-30
src/collectors/all.h
+1
@@ -319,6 +319,7 @@
319
#define NETDATA_CHART_PRIO_IPV6_TCP_PACKETS 6130
320
#define NETDATA_CHART_PRIO_IPV6_TCP_SOCKETS 6140
321
#define NETDATA_CHART_PRIO_IPV6_ICMP_PACKETS 6145
322
+#define NETDATA_CHART_PRIO_IPV6_ICMP_MESSAGES 6146
323
#define NETDATA_CHART_PRIO_IPV6_ICMP 6150
324
#define NETDATA_CHART_PRIO_IPV6_ICMP_REDIR 6155
325
#define NETDATA_CHART_PRIO_IPV6_ICMP_ERRORS 6160
src/collectors/windows.plugin/perflib-network.c
+291
-30
@@ -3,6 +3,28 @@
3
#include "windows_plugin.h"
4
#include "windows-internals.h"
5
6
+
7
+#define ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, counter) \
8
+ do { \
9
+ if ((p)->packets.counter.key) { \
10
+ packets += perflibGetObjectCounter((pDataBlock), (pObjectType), &(p)->packets.counter) ? 1 : 0; \
11
+ } \
12
+ } while (0)
13
+
14
+#define SET_DIM_IF_KEY_AND_UPDATED(p, field) \
15
+ do { \
16
+ if ((p)->packets.field.key && (p)->packets.field.updated) { \
17
+ rrddim_set_by_pointer( \
18
+ (p)->packets.st, (p)->packets.rd_##field, (collected_number)(p)->packets.field.current.Data); \
19
+ } \
20
+ } while (0)
21
+
22
+#define ADD_RRD_DIM_IF_KEY(packet_field, id, name, multiplier, algorithm) \
23
+ do { \
24
+ if (p->packets.packet_field.key) \
25
+ p->packets.rd_##packet_field = rrddim_add(st, id, name, multiplier, 1, algorithm); \
26
+ } while (0)
27
+
28
// --------------------------------------------------------------------------------------------------------------------
29
// network protocols
30
@@ -14,11 +36,75 @@ struct network_protocol {
36
COUNTER_DATA sent;
37
COUNTER_DATA delivered;
38
COUNTER_DATA forwarded;
39
+
40
+ COUNTER_DATA InDiscards;
41
+ COUNTER_DATA OutDiscards;
42
+ COUNTER_DATA InHdrErrors;
43
+ COUNTER_DATA InAddrErrors;
44
+ COUNTER_DATA InUnknownProtos;
45
+ COUNTER_DATA InTooBigErrors;
46
+ COUNTER_DATA InTruncatedPkts;
47
+ COUNTER_DATA InNoRoutes;
48
+ COUNTER_DATA OutNoRoutes;
49
+
50
+ COUNTER_DATA InEchoReps;
51
+ COUNTER_DATA OutEchoReps;
52
+ COUNTER_DATA InDestUnreachs;
53
+ COUNTER_DATA OutDestUnreachs;
54
+ COUNTER_DATA InRedirects;
55
+ COUNTER_DATA OutRedirects;
56
+ COUNTER_DATA InEchos;
57
+ COUNTER_DATA OutEchos;
58
+ COUNTER_DATA InRouterAdvert;
59
+ COUNTER_DATA OutRouterAdvert;
60
+ COUNTER_DATA InRouterSelect;
61
+ COUNTER_DATA OutRouterSelect;
62
+ COUNTER_DATA InTimeExcds;
63
+ COUNTER_DATA OutTimeExcds;
64
+ COUNTER_DATA InParmProbs;
65
+ COUNTER_DATA OutParmProbs;
66
+ COUNTER_DATA InTimestamps;
67
+ COUNTER_DATA OutTimestamps;
68
+ COUNTER_DATA InTimestampReps;
69
+ COUNTER_DATA OutTimestampReps;
70
+
71
RRDSET *st;
72
RRDDIM *rd_received;
73
RRDDIM *rd_sent;
74
RRDDIM *rd_forwarded;
75
RRDDIM *rd_delivered;
76
+
77
+ RRDDIM *rd_InDiscards;
78
+ RRDDIM *rd_OutDiscards;
79
+ RRDDIM *rd_InHdrErrors;
80
+ RRDDIM *rd_InAddrErrors;
81
+ RRDDIM *rd_InUnknownProtos;
82
+ RRDDIM *rd_InTooBigErrors;
83
+ RRDDIM *rd_InTruncatedPkts;
84
+ RRDDIM *rd_InNoRoutes;
85
+ RRDDIM *rd_OutNoRoutes;
86
+
87
+ RRDDIM *rd_InEchoReps;
88
+ RRDDIM *rd_OutEchoReps;
89
+ RRDDIM *rd_InDestUnreachs;
90
+ RRDDIM *rd_OutDestUnreachs;
91
+ RRDDIM *rd_InRedirects;
92
+ RRDDIM *rd_OutRedirects;
93
+ RRDDIM *rd_InEchos;
94
+ RRDDIM *rd_OutEchos;
95
+ RRDDIM *rd_InRouterAdvert;
96
+ RRDDIM *rd_OutRouterAdvert;
97
+ RRDDIM *rd_InRouterSelect;
98
+ RRDDIM *rd_OutRouterSelect;
99
+ RRDDIM *rd_InTimeExcds;
100
+ RRDDIM *rd_OutTimeExcds;
101
+ RRDDIM *rd_InParmProbs;
102
+ RRDDIM *rd_OutParmProbs;
103
+ RRDDIM *rd_InTimestamps;
104
+ RRDDIM *rd_OutTimestamps;
105
+ RRDDIM *rd_InTimestampReps;
106
+ RRDDIM *rd_OutTimestampReps;
107
+
108
const char *type;
109
const char *id;
110
const char *family;
@@ -137,6 +223,107 @@ struct network_protocol {
223
},
224
},
225
226
+ {
227
+ .protocol = "IPv4",
228
+ .packets = {
229
+ .InDiscards = { .key = "Datagrams Received Discarded" },
230
+ .OutDiscards = { .key = "Datagrams Outbound Discarded" },
231
+ .OutNoRoutes = { .key = "Datagrams Outbound No Route" },
232
+ .InAddrErrors = { .key = "Datagrams Received Address Errors" },
233
+ .InHdrErrors = { .key = "Datagrams Received Header Errors" },
234
+ .InUnknownProtos = { .key = "Datagrams Received Unknown Protocol" },
235
+ .type = "ipv4",
236
+ .id = "errors",
237
+ .family = "errors",
238
+ .context = "ipv4.errors",
239
+ .title = "IPv4 errors",
240
+ .priority = NETDATA_CHART_PRIO_IPV4_ERRORS,
241
+ },
242
+ },
243
+ {
244
+ .protocol = "IPv6",
245
+ .packets = {
246
+ .InDiscards = { .key = "Datagrams Received Discarded" },
247
+ .OutDiscards = { .key = "Datagrams Outbound Discarded" },
248
+ .OutNoRoutes = { .key = "Datagrams Outbound No Route" },
249
+ .InAddrErrors = { .key = "Datagrams Received Address Errors" },
250
+ .InHdrErrors = { .key = "Datagrams Received Header Errors" },
251
+ .InUnknownProtos = { .key = "Datagrams Received Unknown Protocol" },
252
+ .type = "ipv6",
253
+ .id = "errors",
254
+ .family = "errors",
255
+ .context = "ipv6.errors",
256
+ .title = "IPv6 errors",
257
+ .priority = NETDATA_CHART_PRIO_IPV6_ERRORS,
258
+ },
259
+ },
260
+ {
261
+ .protocol = "ICMP",
262
+ .packets =
263
+ {
264
+ .InEchoReps = {.key = "Received Echo Reply/sec"},
265
+ .OutEchoReps = {.key = "Received Echo Reply/sec"},
266
+ .InDestUnreachs = {.key = "Received Dest. Unreachable"},
267
+ .OutDestUnreachs = {.key = "Sent Destination Unreachable"},
268
+ .InRedirects = {.key = "Received Redirect/sec"},
269
+ .OutRedirects = {.key = "Sent Redirect/sec"},
270
+ .InEchos = {.key = "Received Echo/sec"},
271
+ .OutEchos = {.key = "Sent Echo/sec"},
272
+ .InRouterAdvert = {.key = NULL},
273
+ .OutRouterAdvert = {.key = NULL},
274
+ .InRouterSelect = {.key = NULL},
275
+ .OutRouterSelect = {.key = NULL},
276
+ .InTimeExcds = {.key = "Received Time Exceeded"},
277
+ .OutTimeExcds = {.key = "Sent Time Exceeded"},
278
+ .InParmProbs = {.key = "Received Parameter Problem"},
279
+ .OutParmProbs = {.key = "Sent Parameter Problem"},
280
+ .InTimestamps = {.key = "Received Timestamp/sec"},
281
+ .OutTimestamps = {.key = "Sent Timestamp/sec"},
282
+ .InTimestampReps = {.key = "Received Timestamp Reply/sec"},
283
+ .OutTimestampReps = {.key = "Sent Timestamp Reply/sec"},
284
+
285
+ .type = "ipv4",
286
+ .id = "icmpmsg",
287
+ .family = "icmp",
288
+ .context = "ipv4.icmpmsg",
289
+ .title = "IPv4 ICMP Packets",
290
+ .priority = NETDATA_CHART_PRIO_IPV4_ICMP_MESSAGES,
291
+ },
292
+ },
293
+ {
294
+ .protocol = "ICMPv6",
295
+ .packets =
296
+ {
297
+ .InEchoReps = {.key = "Received Echo Reply/sec"},
298
+ .OutEchoReps = {.key = "Received Echo Reply/sec"},
299
+ .InDestUnreachs = {.key = "Received Dest. Unreachable"},
300
+ .OutDestUnreachs = {.key = "Sent Destination Unreachable"},
301
+ .InRedirects = {.key = "Received Redirect/sec"},
302
+ .OutRedirects = {.key = "Sent Redirect/sec"},
303
+ .InEchos = {.key = "Received Echo/sec"},
304
+ .OutEchos = {.key = "Sent Echo/sec"},
305
+ .InRouterAdvert = {.key = NULL},
306
+ .OutRouterAdvert = {.key = NULL},
307
+ .InRouterSelect = {.key = NULL},
308
+ .OutRouterSelect = {.key = NULL},
309
+ .InTimeExcds = {.key = "Received Time Exceeded"},
310
+ .OutTimeExcds = {.key = "Sent Time Exceeded"},
311
+ .InParmProbs = {.key = "Received Parameter Problem"},
312
+ .OutParmProbs = {.key = "Sent Parameter Problem"},
313
+ .InTimestamps = {.key = "Received Timestamp/sec"},
314
+ .OutTimestamps = {.key = "Sent Timestamp/sec"},
315
+ .InTimestampReps = {.key = "Received Timestamp Reply/sec"},
316
+ .OutTimestampReps = {.key = "Sent Timestamp Reply/sec"},
317
+
318
+ .type = "ipv6",
319
+ .id = "icmpmsg",
320
+ .family = "icmp",
321
+ .context = "ipv6.icmpmsg",
322
+ .title = "IPv6 ICMP Packets",
323
+ .priority = NETDATA_CHART_PRIO_IPV6_ICMP_MESSAGES,
324
+ },
325
+ },
326
+
327
// terminator
328
{
329
.protocol = NULL,
@@ -171,27 +358,78 @@ static void protocol_packets_chart_update(struct network_protocol *p, int update
358
, RRDSET_TYPE_AREA
359
);
360
174
- p->packets.rd_received = rrddim_add(p->packets.st, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
175
- p->packets.rd_sent = rrddim_add(p->packets.st, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
361
+ RRDSET *st = p->packets.st;
362
+
363
+ ADD_RRD_DIM_IF_KEY(received, "received", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
364
+ ADD_RRD_DIM_IF_KEY(sent, "sent", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
365
+ ADD_RRD_DIM_IF_KEY(forwarded, "forwarded", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
366
+ ADD_RRD_DIM_IF_KEY(delivered, "delivered", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
367
+ ADD_RRD_DIM_IF_KEY(InDiscards, "InDiscards", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
368
+ ADD_RRD_DIM_IF_KEY(OutDiscards, "OutDiscards", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
369
+ ADD_RRD_DIM_IF_KEY(InHdrErrors, "InHdrErrors", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
370
+ ADD_RRD_DIM_IF_KEY(InAddrErrors, "InAddrErrors", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
371
+ ADD_RRD_DIM_IF_KEY(InUnknownProtos, "InUnknownProtos", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
372
+ ADD_RRD_DIM_IF_KEY(InTooBigErrors, "InTooBigErrors", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
373
+ ADD_RRD_DIM_IF_KEY(InTruncatedPkts, "InTruncatedPkts", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
374
+ ADD_RRD_DIM_IF_KEY(InNoRoutes, "InNoRoutes", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
375
+ ADD_RRD_DIM_IF_KEY(OutNoRoutes, "OutNoRoutes", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
376
+ ADD_RRD_DIM_IF_KEY(InEchoReps, "InType0", "InEchoReps", 1, RRD_ALGORITHM_INCREMENTAL);
377
+ ADD_RRD_DIM_IF_KEY(OutEchoReps, "OutType0", "OutEchoReps", -1, RRD_ALGORITHM_INCREMENTAL);
378
+ ADD_RRD_DIM_IF_KEY(InDestUnreachs, "InType3", "InDestUnreachs", 1, RRD_ALGORITHM_INCREMENTAL);
379
+ ADD_RRD_DIM_IF_KEY(OutDestUnreachs, "OutType3", "OutDestUnreachs", -1, RRD_ALGORITHM_INCREMENTAL);
380
+ ADD_RRD_DIM_IF_KEY(InRedirects, "InType5", "InRedirects", 1, RRD_ALGORITHM_INCREMENTAL);
381
+ ADD_RRD_DIM_IF_KEY(OutRedirects, "OutType5", "OutRedirects", -1, RRD_ALGORITHM_INCREMENTAL);
382
+ ADD_RRD_DIM_IF_KEY(InEchos, "InType8", "InEchos", 1, RRD_ALGORITHM_INCREMENTAL);
383
+ ADD_RRD_DIM_IF_KEY(OutEchos, "OutType8", "OutEchos", -1, RRD_ALGORITHM_INCREMENTAL);
384
+ ADD_RRD_DIM_IF_KEY(InRouterAdvert, "InType9", "InRouterAdvert", 1, RRD_ALGORITHM_INCREMENTAL);
385
+ ADD_RRD_DIM_IF_KEY(OutRouterAdvert, "OutType9", "OutRouterAdvert", -1, RRD_ALGORITHM_INCREMENTAL);
386
+ ADD_RRD_DIM_IF_KEY(InRouterSelect, "InType10", "InRouterSelect", 1, RRD_ALGORITHM_INCREMENTAL);
387
+ ADD_RRD_DIM_IF_KEY(OutRouterSelect, "OutType10", "OutRouterSelect", -1, RRD_ALGORITHM_INCREMENTAL);
388
+ ADD_RRD_DIM_IF_KEY(InTimeExcds, "InType11", "InTimeExcds", 1, RRD_ALGORITHM_INCREMENTAL);
389
+ ADD_RRD_DIM_IF_KEY(OutTimeExcds, "OutType11", "OutTimeExcds", -1, RRD_ALGORITHM_INCREMENTAL);
390
+ ADD_RRD_DIM_IF_KEY(InParmProbs, "InType12", "InParmProbs", 1, RRD_ALGORITHM_INCREMENTAL);
391
+ ADD_RRD_DIM_IF_KEY(OutParmProbs, "OutType12", "OutParmProbs", -1, RRD_ALGORITHM_INCREMENTAL);
392
+ ADD_RRD_DIM_IF_KEY(InTimestamps, "InType13", "InTimestamps", 1, RRD_ALGORITHM_INCREMENTAL);
393
+ ADD_RRD_DIM_IF_KEY(OutTimestamps, "OutType13", "OutTimestamps", -1, RRD_ALGORITHM_INCREMENTAL);
394
+ ADD_RRD_DIM_IF_KEY(InTimestampReps, "InType14", "InTimestampReps", 1, RRD_ALGORITHM_INCREMENTAL);
395
+ ADD_RRD_DIM_IF_KEY(OutTimestampReps, "OutType14", "OutTimestampReps", -1, RRD_ALGORITHM_INCREMENTAL);
396
177
- if(p->packets.forwarded.key)
178
- p->packets.rd_forwarded = rrddim_add(p->packets.st, "forwarded", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
179
-
180
- if(p->packets.delivered.key)
181
- p->packets.rd_delivered = rrddim_add(p->packets.st, "delivered", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
397
}
398
184
- if(p->packets.received.updated)
185
- rrddim_set_by_pointer(p->packets.st, p->packets.rd_received, (collected_number)p->packets.received.current.Data);
186
-
187
- if(p->packets.sent.updated)
188
- rrddim_set_by_pointer(p->packets.st, p->packets.rd_sent, (collected_number)p->packets.sent.current.Data);
189
-
190
- if(p->packets.forwarded.key && p->packets.forwarded.updated)
191
- rrddim_set_by_pointer(p->packets.st, p->packets.rd_forwarded, (collected_number)p->packets.forwarded.current.Data);
192
-
193
- if(p->packets.delivered.key && p->packets.delivered.updated)
194
- rrddim_set_by_pointer(p->packets.st, p->packets.rd_delivered, (collected_number)p->packets.delivered.current.Data);
399
+ SET_DIM_IF_KEY_AND_UPDATED(p, received);
400
+ SET_DIM_IF_KEY_AND_UPDATED(p, sent);
401
+
402
+ SET_DIM_IF_KEY_AND_UPDATED(p, forwarded);
403
+ SET_DIM_IF_KEY_AND_UPDATED(p, delivered);
404
+ SET_DIM_IF_KEY_AND_UPDATED(p, InDiscards);
405
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutDiscards);
406
+ SET_DIM_IF_KEY_AND_UPDATED(p, InHdrErrors);
407
+ SET_DIM_IF_KEY_AND_UPDATED(p, InAddrErrors);
408
+ SET_DIM_IF_KEY_AND_UPDATED(p, InUnknownProtos);
409
+ SET_DIM_IF_KEY_AND_UPDATED(p, InTooBigErrors);
410
+ SET_DIM_IF_KEY_AND_UPDATED(p, InTruncatedPkts);
411
+ SET_DIM_IF_KEY_AND_UPDATED(p, InNoRoutes);
412
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutNoRoutes);
413
+ SET_DIM_IF_KEY_AND_UPDATED(p, InEchoReps);
414
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutEchoReps);
415
+ SET_DIM_IF_KEY_AND_UPDATED(p, InDestUnreachs);
416
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutDestUnreachs);
417
+ SET_DIM_IF_KEY_AND_UPDATED(p, InRedirects);
418
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutRedirects);
419
+ SET_DIM_IF_KEY_AND_UPDATED(p, InEchos);
420
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutEchos);
421
+ SET_DIM_IF_KEY_AND_UPDATED(p, InRouterAdvert);
422
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutRouterAdvert);
423
+ SET_DIM_IF_KEY_AND_UPDATED(p, InRouterSelect);
424
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutRouterSelect);
425
+ SET_DIM_IF_KEY_AND_UPDATED(p, InTimeExcds);
426
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutTimeExcds);
427
+ SET_DIM_IF_KEY_AND_UPDATED(p, InParmProbs);
428
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutParmProbs);
429
+ SET_DIM_IF_KEY_AND_UPDATED(p, InTimestamps);
430
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutTimestamps);
431
+ SET_DIM_IF_KEY_AND_UPDATED(p, InTimestampReps);
432
+ SET_DIM_IF_KEY_AND_UPDATED(p, OutTimestampReps);
433
434
rrdset_done(p->packets.st);
435
}
@@ -203,17 +441,41 @@ static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, s
441
if(!pObjectType) return false;
442
443
size_t packets = 0;
206
- if(p->packets.received.key)
207
- packets += perflibGetObjectCounter(pDataBlock, pObjectType, &p->packets.received) ? 1 : 0;
208
-
209
- if(p->packets.sent.key)
210
- packets += perflibGetObjectCounter(pDataBlock, pObjectType, &p->packets.sent) ? 1 : 0;
211
-
212
- if(p->packets.delivered.key)
213
- packets += perflibGetObjectCounter(pDataBlock, pObjectType, &p->packets.delivered) ? 1 :0;
214
-
215
- if(p->packets.forwarded.key)
216
- packets += perflibGetObjectCounter(pDataBlock, pObjectType, &p->packets.forwarded) ? 1 : 0;
444
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, received);
445
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, sent);
446
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, delivered);
447
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, forwarded);
448
+
449
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InDiscards);
450
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutDiscards);
451
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InHdrErrors);
452
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InAddrErrors);
453
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InUnknownProtos);
454
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTooBigErrors);
455
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTruncatedPkts);
456
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InNoRoutes);
457
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutNoRoutes);
458
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InEchoReps);
459
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutEchoReps);
460
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InDestUnreachs);
461
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutDestUnreachs);
462
+
463
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InRedirects);
464
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutRedirects);
465
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InEchos);
466
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutEchos);
467
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InRouterAdvert);
468
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutRouterAdvert);
469
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InRouterSelect);
470
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutRouterSelect);
471
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTimeExcds);
472
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutTimeExcds);
473
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InParmProbs);
474
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutParmProbs);
475
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTimestamps);
476
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutTimestamps);
477
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTimestampReps);
478
+ ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutTimestampReps);
479
480
if(packets)
481
protocol_packets_chart_update(p, update_every);
@@ -448,6 +710,5 @@ int do_PerflibNetwork(int update_every, usec_t dt __maybe_unused) {
710
tcp46.packets.sent.current.Data += tcp6->packets.sent.current.Data;
711
protocol_packets_chart_update(&tcp46, update_every);
712
}
451
-
713
return 0;
714
}