Line data Source code
1 1 : /** @file
2 : * @brief Network statistics
3 : *
4 : * Network statistics data. This should only be enabled when
5 : * debugging as it consumes memory.
6 : */
7 :
8 : /*
9 : * Copyright (c) 2016 Intel Corporation
10 : *
11 : * SPDX-License-Identifier: Apache-2.0
12 : */
13 :
14 : #ifndef ZEPHYR_INCLUDE_NET_NET_STATS_H_
15 : #define ZEPHYR_INCLUDE_NET_NET_STATS_H_
16 :
17 : #include <zephyr/types.h>
18 : #include <zephyr/net/net_core.h>
19 : #include <zephyr/net/net_mgmt.h>
20 :
21 : #include <zephyr/net/prometheus/collector.h>
22 : #include <zephyr/net/prometheus/counter.h>
23 : #include <zephyr/net/prometheus/metric.h>
24 : #include <zephyr/net/prometheus/gauge.h>
25 : #include <zephyr/net/prometheus/histogram.h>
26 : #include <zephyr/net/prometheus/summary.h>
27 :
28 : #ifdef __cplusplus
29 : extern "C" {
30 : #endif
31 :
32 : /**
33 : * @brief Network statistics library
34 : * @defgroup net_stats Network Statistics Library
35 : * @since 1.5
36 : * @version 0.8.0
37 : * @ingroup networking
38 : * @{
39 : */
40 :
41 : /**
42 : * @typedef net_stats_t
43 : * @brief Network statistics counter
44 : */
45 1 : typedef uint32_t net_stats_t;
46 :
47 : /**
48 : * @brief Number of bytes sent and received.
49 : */
50 1 : struct net_stats_bytes {
51 : /** Number of bytes sent */
52 1 : uint64_t sent;
53 : /** Number of bytes received */
54 1 : uint64_t received;
55 : };
56 :
57 : /**
58 : * @brief Number of network packets sent and received.
59 : */
60 1 : struct net_stats_pkts {
61 : /** Number of packets sent */
62 1 : net_stats_t tx;
63 : /** Number of packets received */
64 1 : net_stats_t rx;
65 : };
66 :
67 : /**
68 : * @brief IP layer statistics
69 : */
70 1 : struct net_stats_ip {
71 : /** Number of received packets at the IP layer. */
72 1 : net_stats_t recv;
73 :
74 : /** Number of sent packets at the IP layer. */
75 1 : net_stats_t sent;
76 :
77 : /** Number of forwarded packets at the IP layer. */
78 1 : net_stats_t forwarded;
79 :
80 : /** Number of dropped packets at the IP layer. */
81 1 : net_stats_t drop;
82 : };
83 :
84 : /**
85 : * @brief IP layer error statistics
86 : */
87 1 : struct net_stats_ip_errors {
88 : /** Number of packets dropped due to wrong IP version
89 : * or header length.
90 : */
91 1 : net_stats_t vhlerr;
92 :
93 : /** Number of packets dropped due to wrong IP length, high byte. */
94 1 : net_stats_t hblenerr;
95 :
96 : /** Number of packets dropped due to wrong IP length, low byte. */
97 1 : net_stats_t lblenerr;
98 :
99 : /** Number of packets dropped because they were IP fragments. */
100 1 : net_stats_t fragerr;
101 :
102 : /** Number of packets dropped due to IP checksum errors. */
103 1 : net_stats_t chkerr;
104 :
105 : /** Number of packets dropped because they were neither ICMP,
106 : * UDP nor TCP.
107 : */
108 1 : net_stats_t protoerr;
109 : };
110 :
111 : /**
112 : * @brief ICMP statistics
113 : */
114 1 : struct net_stats_icmp {
115 : /** Number of received ICMP packets. */
116 1 : net_stats_t recv;
117 :
118 : /** Number of sent ICMP packets. */
119 1 : net_stats_t sent;
120 :
121 : /** Number of dropped ICMP packets. */
122 1 : net_stats_t drop;
123 :
124 : /** Number of ICMP packets with a wrong type. */
125 1 : net_stats_t typeerr;
126 :
127 : /** Number of ICMP packets with a bad checksum. */
128 1 : net_stats_t chkerr;
129 : };
130 :
131 : /**
132 : * @brief TCP statistics
133 : */
134 1 : struct net_stats_tcp {
135 : /** Amount of received and sent TCP application data. */
136 1 : struct net_stats_bytes bytes;
137 :
138 : /** Amount of retransmitted data. */
139 1 : net_stats_t resent;
140 :
141 : /** Number of dropped packets at the TCP layer. */
142 1 : net_stats_t drop;
143 :
144 : /** Number of received TCP segments. */
145 1 : net_stats_t recv;
146 :
147 : /** Number of sent TCP segments. */
148 1 : net_stats_t sent;
149 :
150 : /** Number of dropped TCP segments. */
151 1 : net_stats_t seg_drop;
152 :
153 : /** Number of TCP segments with a bad checksum. */
154 1 : net_stats_t chkerr;
155 :
156 : /** Number of received TCP segments with a bad ACK number. */
157 1 : net_stats_t ackerr;
158 :
159 : /** Number of received bad TCP RST (reset) segments. */
160 1 : net_stats_t rsterr;
161 :
162 : /** Number of received TCP RST (reset) segments. */
163 1 : net_stats_t rst;
164 :
165 : /** Number of retransmitted TCP segments. */
166 1 : net_stats_t rexmit;
167 :
168 : /** Number of dropped connection attempts because too few connections
169 : * were available.
170 : */
171 1 : net_stats_t conndrop;
172 :
173 : /** Number of connection attempts for closed ports, triggering a RST. */
174 1 : net_stats_t connrst;
175 : };
176 :
177 : /**
178 : * @brief UDP statistics
179 : */
180 1 : struct net_stats_udp {
181 : /** Number of dropped UDP segments. */
182 1 : net_stats_t drop;
183 :
184 : /** Number of received UDP segments. */
185 1 : net_stats_t recv;
186 :
187 : /** Number of sent UDP segments. */
188 1 : net_stats_t sent;
189 :
190 : /** Number of UDP segments with a bad checksum. */
191 1 : net_stats_t chkerr;
192 : };
193 :
194 : /**
195 : * @brief IPv6 neighbor discovery statistics
196 : */
197 1 : struct net_stats_ipv6_nd {
198 : /** Number of dropped IPv6 neighbor discovery packets. */
199 1 : net_stats_t drop;
200 :
201 : /** Number of received IPv6 neighbor discovery packets. */
202 1 : net_stats_t recv;
203 :
204 : /** Number of sent IPv6 neighbor discovery packets. */
205 1 : net_stats_t sent;
206 : };
207 :
208 : /**
209 : * @brief IPv6 Path MTU Discovery statistics
210 : */
211 1 : struct net_stats_ipv6_pmtu {
212 : /** Number of dropped IPv6 PMTU packets. */
213 1 : net_stats_t drop;
214 :
215 : /** Number of received IPv6 PMTU packets. */
216 1 : net_stats_t recv;
217 :
218 : /** Number of sent IPv6 PMTU packets. */
219 1 : net_stats_t sent;
220 : };
221 :
222 : /**
223 : * @brief IPv4 Path MTU Discovery statistics
224 : */
225 1 : struct net_stats_ipv4_pmtu {
226 : /** Number of dropped IPv4 PMTU packets. */
227 1 : net_stats_t drop;
228 :
229 : /** Number of received IPv4 PMTU packets. */
230 1 : net_stats_t recv;
231 :
232 : /** Number of sent IPv4 PMTU packets. */
233 1 : net_stats_t sent;
234 : };
235 :
236 : /**
237 : * @brief IPv6 multicast listener daemon statistics
238 : */
239 1 : struct net_stats_ipv6_mld {
240 : /** Number of received IPv6 MLD queries. */
241 1 : net_stats_t recv;
242 :
243 : /** Number of sent IPv6 MLD reports. */
244 1 : net_stats_t sent;
245 :
246 : /** Number of dropped IPv6 MLD packets. */
247 1 : net_stats_t drop;
248 : };
249 :
250 : /**
251 : * @brief IPv4 IGMP daemon statistics
252 : */
253 1 : struct net_stats_ipv4_igmp {
254 : /** Number of received IPv4 IGMP queries */
255 1 : net_stats_t recv;
256 :
257 : /** Number of sent IPv4 IGMP reports */
258 1 : net_stats_t sent;
259 :
260 : /** Number of dropped IPv4 IGMP packets */
261 1 : net_stats_t drop;
262 : };
263 :
264 : /**
265 : * @brief DNS statistics
266 : */
267 1 : struct net_stats_dns {
268 : /** Number of received DNS queries */
269 1 : net_stats_t recv;
270 :
271 : /** Number of sent DNS responses */
272 1 : net_stats_t sent;
273 :
274 : /** Number of dropped DNS packets */
275 1 : net_stats_t drop;
276 : };
277 :
278 : /**
279 : * @brief Network packet transfer times for calculating average TX time
280 : */
281 1 : struct net_stats_tx_time {
282 : /** Sum of network packet transfer times. */
283 1 : uint64_t sum;
284 :
285 : /** Number of network packets transferred. */
286 1 : net_stats_t count;
287 : };
288 :
289 : /**
290 : * @brief Network packet receive times for calculating average RX time
291 : */
292 1 : struct net_stats_rx_time {
293 : /** Sum of network packet receive times. */
294 1 : uint64_t sum;
295 :
296 : /** Number of network packets received. */
297 1 : net_stats_t count;
298 : };
299 :
300 : /** @cond INTERNAL_HIDDEN */
301 :
302 : #if NET_TC_TX_COUNT == 0
303 : #define NET_TC_TX_STATS_COUNT 1
304 : #else
305 : #define NET_TC_TX_STATS_COUNT NET_TC_TX_COUNT
306 : #endif
307 :
308 : #if NET_TC_RX_COUNT == 0
309 : #define NET_TC_RX_STATS_COUNT 1
310 : #else
311 : #define NET_TC_RX_STATS_COUNT NET_TC_RX_COUNT
312 : #endif
313 :
314 : /** @endcond */
315 :
316 : /**
317 : * @brief Traffic class statistics
318 : */
319 1 : struct net_stats_tc {
320 : /** TX statistics for each traffic class */
321 : struct {
322 : /** Number of bytes sent for this traffic class */
323 1 : uint64_t bytes;
324 : /** Helper for calculating average TX time statistics */
325 1 : struct net_stats_tx_time tx_time;
326 : #if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL)
327 : /** Detailed TX time statistics inside network stack */
328 : struct net_stats_tx_time
329 : tx_time_detail[NET_PKT_DETAIL_STATS_COUNT];
330 : #endif
331 : /** Number of packets sent for this traffic class */
332 1 : net_stats_t pkts;
333 : /** Number of packets dropped for this traffic class */
334 1 : net_stats_t dropped;
335 : /** Priority of this traffic class */
336 1 : uint8_t priority;
337 1 : } sent[NET_TC_TX_STATS_COUNT];
338 :
339 : /** RX statistics for each traffic class */
340 : struct {
341 : /** Number of bytes received for this traffic class */
342 : uint64_t bytes;
343 : /** Helper for calculating average RX time statistics */
344 1 : struct net_stats_rx_time rx_time;
345 : #if defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
346 : /** Detailed RX time statistics inside network stack */
347 : struct net_stats_rx_time
348 : rx_time_detail[NET_PKT_DETAIL_STATS_COUNT];
349 : #endif
350 : /** Number of packets received for this traffic class */
351 : net_stats_t pkts;
352 : /** Number of packets dropped for this traffic class */
353 : net_stats_t dropped;
354 : /** Priority of this traffic class */
355 : uint8_t priority;
356 1 : } recv[NET_TC_RX_STATS_COUNT];
357 : };
358 :
359 :
360 : /**
361 : * @brief Power management statistics
362 : */
363 1 : struct net_stats_pm {
364 : /** Total suspend time */
365 1 : uint64_t overall_suspend_time;
366 : /** How many times we were suspended */
367 1 : net_stats_t suspend_count;
368 : /** How long the last suspend took */
369 1 : uint32_t last_suspend_time;
370 : /** Network interface last suspend start time */
371 1 : uint32_t start_time;
372 : };
373 :
374 : /**
375 : * @brief Network packet filter statistics
376 : */
377 1 : struct net_stats_pkt_filter {
378 : /** Network packet filter RX statistics */
379 : struct {
380 : /** Network packets dropped at network interface level */
381 1 : net_stats_t drop;
382 : #if defined(CONFIG_NET_PKT_FILTER_IPV4_HOOK)
383 : /** IPv4 packets dropped at network interface level */
384 : net_stats_t ipv4_drop;
385 : #endif
386 : #if defined(CONFIG_NET_PKT_FILTER_IPV6_HOOK)
387 : /** IPv6 packets dropped at network interface level */
388 : net_stats_t ipv6_drop;
389 : #endif
390 : #if defined(CONFIG_NET_PKT_FILTER_LOCAL_IN_HOOK)
391 : /** Packets dropped at connection input */
392 : net_stats_t local_drop;
393 : #endif
394 1 : } rx;
395 :
396 : /** Network packet filter TX statistics */
397 : struct {
398 : /** Network packets dropped at network interface level */
399 : net_stats_t drop;
400 1 : } tx;
401 : };
402 :
403 : /**
404 : * @brief All network statistics in one struct.
405 : */
406 1 : struct net_stats {
407 : /**
408 : * This calculates amount of data transferred through all the
409 : * network interfaces.
410 : */
411 1 : struct net_stats_bytes bytes;
412 :
413 : /** Count of malformed packets or packets we do not have handler for */
414 1 : net_stats_t processing_error;
415 :
416 : /** IP layer errors */
417 1 : struct net_stats_ip_errors ip_errors;
418 :
419 : #if defined(CONFIG_NET_STATISTICS_PKT_FILTER)
420 : struct net_stats_pkt_filter pkt_filter;
421 : #endif
422 :
423 : #if defined(CONFIG_NET_STATISTICS_IPV6)
424 : /** IPv6 statistics */
425 : struct net_stats_ip ipv6;
426 : #endif
427 :
428 : #if defined(CONFIG_NET_STATISTICS_IPV4)
429 : /** IPv4 statistics */
430 : struct net_stats_ip ipv4;
431 : #endif
432 :
433 : #if defined(CONFIG_NET_STATISTICS_ICMP)
434 : /** ICMP statistics */
435 : struct net_stats_icmp icmp;
436 : #endif
437 :
438 : #if defined(CONFIG_NET_STATISTICS_TCP)
439 : /** TCP statistics */
440 : struct net_stats_tcp tcp;
441 : #endif
442 :
443 : #if defined(CONFIG_NET_STATISTICS_UDP)
444 : /** UDP statistics */
445 : struct net_stats_udp udp;
446 : #endif
447 :
448 : #if defined(CONFIG_NET_STATISTICS_IPV6_ND)
449 : /** IPv6 neighbor discovery statistics */
450 : struct net_stats_ipv6_nd ipv6_nd;
451 : #endif
452 :
453 : #if defined(CONFIG_NET_STATISTICS_IPV6_PMTU)
454 : /** IPv6 Path MTU Discovery statistics */
455 : struct net_stats_ipv6_pmtu ipv6_pmtu;
456 : #endif
457 :
458 : #if defined(CONFIG_NET_STATISTICS_IPV4_PMTU)
459 : /** IPv4 Path MTU Discovery statistics */
460 : struct net_stats_ipv4_pmtu ipv4_pmtu;
461 : #endif
462 :
463 : #if defined(CONFIG_NET_STATISTICS_MLD)
464 : /** IPv6 MLD statistics */
465 : struct net_stats_ipv6_mld ipv6_mld;
466 : #endif
467 :
468 : #if defined(CONFIG_NET_STATISTICS_IGMP)
469 : /** IPv4 IGMP statistics */
470 : struct net_stats_ipv4_igmp ipv4_igmp;
471 : #endif
472 :
473 : #if defined(CONFIG_NET_STATISTICS_DNS)
474 : /** DNS statistics */
475 : struct net_stats_dns dns;
476 : #endif
477 :
478 : #if NET_TC_COUNT > 1
479 : /** Traffic class statistics */
480 : struct net_stats_tc tc;
481 : #endif
482 :
483 : #if defined(CONFIG_NET_PKT_TXTIME_STATS)
484 : /** Network packet TX time statistics */
485 : struct net_stats_tx_time tx_time;
486 : #endif
487 :
488 : #if defined(CONFIG_NET_PKT_RXTIME_STATS)
489 : /** Network packet RX time statistics */
490 : struct net_stats_rx_time rx_time;
491 : #endif
492 :
493 : #if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL)
494 : /** Network packet TX time detail statistics */
495 : struct net_stats_tx_time tx_time_detail[NET_PKT_DETAIL_STATS_COUNT];
496 : #endif
497 : #if defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
498 : /** Network packet RX time detail statistics */
499 : struct net_stats_rx_time rx_time_detail[NET_PKT_DETAIL_STATS_COUNT];
500 : #endif
501 :
502 : #if defined(CONFIG_NET_STATISTICS_POWER_MANAGEMENT)
503 : /** Power management statistics */
504 : struct net_stats_pm pm;
505 : #endif
506 : };
507 :
508 : /**
509 : * @brief Ethernet error statistics
510 : */
511 1 : struct net_stats_eth_errors {
512 : /** Number of RX length errors */
513 1 : net_stats_t rx_length_errors;
514 :
515 : /** Number of RX overrun errors */
516 1 : net_stats_t rx_over_errors;
517 :
518 : /** Number of RX CRC errors */
519 1 : net_stats_t rx_crc_errors;
520 :
521 : /** Number of RX frame errors */
522 1 : net_stats_t rx_frame_errors;
523 :
524 : /** Number of RX net_pkt allocation errors */
525 1 : net_stats_t rx_no_buffer_count;
526 :
527 : /** Number of RX missed errors */
528 1 : net_stats_t rx_missed_errors;
529 :
530 : /** Number of RX long length errors */
531 1 : net_stats_t rx_long_length_errors;
532 :
533 : /** Number of RX short length errors */
534 1 : net_stats_t rx_short_length_errors;
535 :
536 : /** Number of RX buffer align errors */
537 1 : net_stats_t rx_align_errors;
538 :
539 : /** Number of RX DMA failed errors */
540 1 : net_stats_t rx_dma_failed;
541 :
542 : /** Number of RX net_buf allocation errors */
543 1 : net_stats_t rx_buf_alloc_failed;
544 :
545 : /** Number of TX aborted errors */
546 1 : net_stats_t tx_aborted_errors;
547 :
548 : /** Number of TX carrier errors */
549 1 : net_stats_t tx_carrier_errors;
550 :
551 : /** Number of TX FIFO errors */
552 1 : net_stats_t tx_fifo_errors;
553 :
554 : /** Number of TX heartbeat errors */
555 1 : net_stats_t tx_heartbeat_errors;
556 :
557 : /** Number of TX window errors */
558 1 : net_stats_t tx_window_errors;
559 :
560 : /** Number of TX DMA failed errors */
561 1 : net_stats_t tx_dma_failed;
562 :
563 : /** Number of uncorrected ECC errors */
564 1 : net_stats_t uncorr_ecc_errors;
565 :
566 : /** Number of corrected ECC errors */
567 1 : net_stats_t corr_ecc_errors;
568 : };
569 :
570 : /**
571 : * @brief Ethernet flow control statistics
572 : */
573 1 : struct net_stats_eth_flow {
574 : /** Number of RX XON flow control */
575 1 : net_stats_t rx_flow_control_xon;
576 :
577 : /** Number of RX XOFF flow control */
578 1 : net_stats_t rx_flow_control_xoff;
579 :
580 : /** Number of TX XON flow control */
581 1 : net_stats_t tx_flow_control_xon;
582 :
583 : /** Number of TX XOFF flow control */
584 1 : net_stats_t tx_flow_control_xoff;
585 : };
586 :
587 : /**
588 : * @brief Ethernet checksum statistics
589 : */
590 1 : struct net_stats_eth_csum {
591 : /** Number of good RX checksum offloading */
592 1 : net_stats_t rx_csum_offload_good;
593 :
594 : /** Number of failed RX checksum offloading */
595 1 : net_stats_t rx_csum_offload_errors;
596 : };
597 :
598 : /**
599 : * @brief Ethernet hardware timestamp statistics
600 : */
601 1 : struct net_stats_eth_hw_timestamp {
602 : /** Number of RX hardware timestamp cleared */
603 1 : net_stats_t rx_hwtstamp_cleared;
604 :
605 : /** Number of RX hardware timestamp timeout */
606 1 : net_stats_t tx_hwtstamp_timeouts;
607 :
608 : /** Number of RX hardware timestamp skipped */
609 1 : net_stats_t tx_hwtstamp_skipped;
610 : };
611 :
612 : #ifdef CONFIG_NET_STATISTICS_ETHERNET_VENDOR
613 : /**
614 : * @brief Ethernet vendor specific statistics
615 : */
616 : struct net_stats_eth_vendor {
617 : const char * const key; /**< Key name of vendor statistics */
618 : uint32_t value; /**< Value of the statistics key */
619 : };
620 : #endif
621 :
622 : /**
623 : * @brief All Ethernet specific statistics
624 : */
625 1 : struct net_stats_eth {
626 : /** Total number of bytes received and sent */
627 1 : struct net_stats_bytes bytes;
628 :
629 : /** Total number of packets received and sent */
630 1 : struct net_stats_pkts pkts;
631 :
632 : /** Total number of broadcast packets received and sent */
633 1 : struct net_stats_pkts broadcast;
634 :
635 : /** Total number of multicast packets received and sent */
636 1 : struct net_stats_pkts multicast;
637 :
638 : /** Total number of errors in RX and TX */
639 1 : struct net_stats_pkts errors;
640 :
641 : /** Total number of errors in RX and TX */
642 1 : struct net_stats_eth_errors error_details;
643 :
644 : /** Total number of flow control errors in RX and TX */
645 1 : struct net_stats_eth_flow flow_control;
646 :
647 : /** Total number of checksum errors in RX and TX */
648 1 : struct net_stats_eth_csum csum;
649 :
650 : /** Total number of hardware timestamp errors in RX and TX */
651 1 : struct net_stats_eth_hw_timestamp hw_timestamp;
652 :
653 : /** Total number of collisions */
654 1 : net_stats_t collisions;
655 :
656 : /** Total number of dropped TX packets */
657 1 : net_stats_t tx_dropped;
658 :
659 : /** Total number of TX timeout errors */
660 1 : net_stats_t tx_timeout_count;
661 :
662 : /** Total number of TX queue restarts */
663 1 : net_stats_t tx_restart_queue;
664 :
665 : /** Total number of RX unknown protocol packets */
666 1 : net_stats_t unknown_protocol;
667 :
668 : #ifdef CONFIG_NET_STATISTICS_ETHERNET_VENDOR
669 : /** Array is terminated with an entry containing a NULL key */
670 : struct net_stats_eth_vendor *vendor;
671 : #endif
672 : };
673 :
674 : /**
675 : * @brief All PPP specific statistics
676 : */
677 1 : struct net_stats_ppp {
678 : /** Total number of bytes received and sent */
679 1 : struct net_stats_bytes bytes;
680 :
681 : /** Total number of packets received and sent */
682 1 : struct net_stats_pkts pkts;
683 :
684 : /** Number of received and dropped PPP frames. */
685 1 : net_stats_t drop;
686 :
687 : /** Number of received PPP frames with a bad checksum. */
688 1 : net_stats_t chkerr;
689 : };
690 :
691 : /**
692 : * @brief All Wi-Fi management statistics
693 : */
694 1 : struct net_stats_sta_mgmt {
695 : /** Number of received beacons */
696 1 : net_stats_t beacons_rx;
697 :
698 : /** Number of missed beacons */
699 1 : net_stats_t beacons_miss;
700 : };
701 :
702 : /**
703 : * @brief All Wi-Fi specific statistics
704 : */
705 1 : struct net_stats_wifi {
706 : /** Total number of beacon errors */
707 1 : struct net_stats_sta_mgmt sta_mgmt;
708 :
709 : /** Total number of bytes received and sent */
710 1 : struct net_stats_bytes bytes;
711 :
712 : /** Total number of packets received and sent */
713 1 : struct net_stats_pkts pkts;
714 :
715 : /** Total number of broadcast packets received and sent */
716 1 : struct net_stats_pkts broadcast;
717 :
718 : /** Total number of multicast packets received and sent */
719 1 : struct net_stats_pkts multicast;
720 :
721 : /** Total number of errors in RX and TX */
722 1 : struct net_stats_pkts errors;
723 :
724 : /** Total number of unicast packets received and sent */
725 1 : struct net_stats_pkts unicast;
726 :
727 : /** Total number of dropped packets at received and sent*/
728 1 : net_stats_t overrun_count;
729 : };
730 :
731 : #if defined(CONFIG_NET_STATISTICS_USER_API)
732 : /* Management part definitions */
733 :
734 : /** @cond INTERNAL_HIDDEN */
735 :
736 : #define NET_STATS_LAYER NET_MGMT_LAYER_L3
737 : #define NET_STATS_CODE NET_MGMT_LAYER_CODE_STATS
738 : #define NET_STATS_BASE (NET_MGMT_LAYER(NET_STATS_LAYER) | \
739 : NET_MGMT_LAYER_CODE(NET_STATS_CODE))
740 :
741 : enum net_request_stats_cmd {
742 : NET_REQUEST_STATS_CMD_GET_ALL = 1,
743 : NET_REQUEST_STATS_CMD_GET_PROCESSING_ERROR,
744 : NET_REQUEST_STATS_CMD_GET_PKT_FILTER_DROP,
745 : NET_REQUEST_STATS_CMD_GET_BYTES,
746 : NET_REQUEST_STATS_CMD_GET_IP_ERRORS,
747 : NET_REQUEST_STATS_CMD_GET_IPV4,
748 : NET_REQUEST_STATS_CMD_GET_IPV6,
749 : NET_REQUEST_STATS_CMD_GET_IPV6_ND,
750 : NET_REQUEST_STATS_CMD_GET_IPV6_PMTU,
751 : NET_REQUEST_STATS_CMD_GET_IPV4_PMTU,
752 : NET_REQUEST_STATS_CMD_GET_ICMP,
753 : NET_REQUEST_STATS_CMD_GET_UDP,
754 : NET_REQUEST_STATS_CMD_GET_TCP,
755 : NET_REQUEST_STATS_CMD_GET_ETHERNET,
756 : NET_REQUEST_STATS_CMD_GET_PPP,
757 : NET_REQUEST_STATS_CMD_GET_PM,
758 : NET_REQUEST_STATS_CMD_GET_WIFI,
759 : NET_REQUEST_STATS_CMD_RESET_WIFI,
760 : NET_REQUEST_STATS_CMD_GET_VPN,
761 : };
762 :
763 : /** @endcond */
764 :
765 : /** Request all network statistics */
766 : #define NET_REQUEST_STATS_GET_ALL \
767 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_ALL)
768 :
769 : /** Request all processing error statistics */
770 : #define NET_REQUEST_STATS_GET_PROCESSING_ERROR \
771 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_PROCESSING_ERROR)
772 :
773 : /** Request all pkt_filter drop statistics */
774 : #define NET_REQUEST_STATS_GET_PKT_FILTER_DROP \
775 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_PKT_FILTER_DROP)
776 :
777 : /** Request number of received and sent bytes */
778 : #define NET_REQUEST_STATS_GET_BYTES \
779 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_BYTES)
780 :
781 : /** Request IP error statistics */
782 : #define NET_REQUEST_STATS_GET_IP_ERRORS \
783 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IP_ERRORS)
784 :
785 : /** @cond INTERNAL_HIDDEN */
786 :
787 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_ALL);
788 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_PROCESSING_ERROR);
789 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_BYTES);
790 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IP_ERRORS);
791 :
792 : #if defined(CONFIG_NET_STATISTICS_PKT_FILTER)
793 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_PKT_FILTER_DROP);
794 : #endif /* CONFIG_NET_STATISTICS_PKT_FILTER */
795 :
796 : /** @endcond */
797 :
798 : #if defined(CONFIG_NET_STATISTICS_IPV4)
799 : /** Request IPv4 statistics */
800 : #define NET_REQUEST_STATS_GET_IPV4 \
801 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV4)
802 :
803 : /** @cond INTERNAL_HIDDEN */
804 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV4);
805 : /** @endcond */
806 : #endif /* CONFIG_NET_STATISTICS_IPV4 */
807 :
808 : #if defined(CONFIG_NET_STATISTICS_IPV6)
809 : /** Request IPv6 statistics */
810 : #define NET_REQUEST_STATS_GET_IPV6 \
811 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV6)
812 :
813 : /** @cond INTERNAL_HIDDEN */
814 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV6);
815 : /** @endcond */
816 : #endif /* CONFIG_NET_STATISTICS_IPV6 */
817 :
818 : #if defined(CONFIG_NET_STATISTICS_IPV6_ND)
819 : /** Request IPv6 neighbor discovery statistics */
820 : #define NET_REQUEST_STATS_GET_IPV6_ND \
821 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV6_ND)
822 :
823 : /** @cond INTERNAL_HIDDEN */
824 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV6_ND);
825 : /** @endcond */
826 : #endif /* CONFIG_NET_STATISTICS_IPV6_ND */
827 :
828 : #if defined(CONFIG_NET_STATISTICS_IPV6_PMTU)
829 : /** Request IPv6 Path MTU Discovery statistics */
830 : #define NET_REQUEST_STATS_GET_IPV6_PMTU \
831 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV6_PMTU)
832 :
833 : /** @cond INTERNAL_HIDDEN */
834 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV6_PMTU);
835 : /** @endcond */
836 : #endif /* CONFIG_NET_STATISTICS_IPV6_PMTU */
837 :
838 : #if defined(CONFIG_NET_STATISTICS_IPV4_PMTU)
839 : /** Request IPv4 Path MTU Discovery statistics */
840 : #define NET_REQUEST_STATS_GET_IPV4_PMTU \
841 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV4_PMTU)
842 :
843 : /** @cond INTERNAL_HIDDEN */
844 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV4_PMTU);
845 : /** @endcond */
846 : #endif /* CONFIG_NET_STATISTICS_IPV4_PMTU */
847 :
848 : #if defined(CONFIG_NET_STATISTICS_ICMP)
849 : /** Request ICMPv4 and ICMPv6 statistics */
850 : #define NET_REQUEST_STATS_GET_ICMP \
851 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_ICMP)
852 :
853 : /** @cond INTERNAL_HIDDEN */
854 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_ICMP);
855 : /** @endcond */
856 : #endif /* CONFIG_NET_STATISTICS_ICMP */
857 :
858 : #if defined(CONFIG_NET_STATISTICS_UDP)
859 : /** Request UDP statistics */
860 : #define NET_REQUEST_STATS_GET_UDP \
861 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_UDP)
862 :
863 : /** @cond INTERNAL_HIDDEN */
864 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_UDP);
865 : /** @endcond */
866 : #endif /* CONFIG_NET_STATISTICS_UDP */
867 :
868 : #if defined(CONFIG_NET_STATISTICS_TCP)
869 : /** Request TCP statistics */
870 : #define NET_REQUEST_STATS_GET_TCP \
871 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_TCP)
872 :
873 : /** @cond INTERNAL_HIDDEN */
874 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_TCP);
875 : /** @endcond */
876 : #endif /* CONFIG_NET_STATISTICS_TCP */
877 :
878 : #if defined(CONFIG_NET_STATISTICS_ETHERNET)
879 : /** Request Ethernet statistics */
880 : #define NET_REQUEST_STATS_GET_ETHERNET \
881 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_ETHERNET)
882 :
883 : /** @cond INTERNAL_HIDDEN */
884 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_ETHERNET);
885 : /** @endcond */
886 : #endif /* CONFIG_NET_STATISTICS_ETHERNET */
887 :
888 : #if defined(CONFIG_NET_STATISTICS_PPP)
889 : /** Request PPP statistics */
890 : #define NET_REQUEST_STATS_GET_PPP \
891 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_PPP)
892 :
893 : /** @cond INTERNAL_HIDDEN */
894 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_PPP);
895 : /** @endcond */
896 : #endif /* CONFIG_NET_STATISTICS_PPP */
897 :
898 : #if defined(CONFIG_NET_STATISTICS_VPN)
899 : /** Request VPN statistics */
900 : #define NET_REQUEST_STATS_GET_VPN \
901 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_VPN)
902 :
903 : /** @cond INTERNAL_HIDDEN */
904 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_VPN);
905 : /** @endcond */
906 : #endif /* CONFIG_NET_STATISTICS_VPN */
907 :
908 : #endif /* CONFIG_NET_STATISTICS_USER_API */
909 :
910 : #if defined(CONFIG_NET_STATISTICS_POWER_MANAGEMENT)
911 : /** Request network power management statistics */
912 : #define NET_REQUEST_STATS_GET_PM \
913 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_PM)
914 :
915 : /** @cond INTERNAL_HIDDEN */
916 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_PM);
917 : /** @endcond */
918 : #endif /* CONFIG_NET_STATISTICS_POWER_MANAGEMENT */
919 :
920 : #if defined(CONFIG_NET_STATISTICS_WIFI)
921 : /** Request Wi-Fi statistics */
922 : #define NET_REQUEST_STATS_GET_WIFI \
923 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_WIFI)
924 :
925 : /** @cond INTERNAL_HIDDEN */
926 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_WIFI);
927 : /** @endcond */
928 :
929 : /** Reset Wi-Fi statistics*/
930 : #define NET_REQUEST_STATS_RESET_WIFI \
931 : (NET_STATS_BASE | NET_REQUEST_STATS_CMD_RESET_WIFI)
932 :
933 : /** @cond INTERNAL_HIDDEN */
934 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_RESET_WIFI);
935 : /** @endcond */
936 : #endif /* CONFIG_NET_STATISTICS_WIFI */
937 :
938 0 : #define NET_STATS_GET_METRIC_NAME(_name) _name
939 0 : #define NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx) net_stats_##dev_id##_##sfx##_collector
940 0 : #define NET_STATS_GET_VAR(dev_id, sfx, var) zephyr_net_##var
941 0 : #define NET_STATS_GET_INSTANCE(dev_id, sfx, _not_used) STRINGIFY(_##dev_id##_##sfx)
942 :
943 : /* The label value is set to be the network interface name. Note that we skip
944 : * the first character (_) when setting the label value. This can be changed
945 : * if there is a way to token paste the instance name without the prefix character.
946 : * Note also that the below macros have some parameters that are not used atm.
947 : */
948 : #define NET_STATS_PROMETHEUS_COUNTER_DEFINE(_desc, _labelval, _not_used, \
949 0 : _collector, _name, _stat_var_ptr) \
950 : static PROMETHEUS_COUNTER_DEFINE( \
951 : NET_STATS_GET_METRIC_NAME(_name), \
952 : _desc, ({ .key = "nic", .value = &_labelval[1] }), \
953 : &(_collector), _stat_var_ptr)
954 :
955 : #define NET_STATS_PROMETHEUS_GAUGE_DEFINE(_desc, _labelval, _not_used, \
956 0 : _collector, _name, _stat_var_ptr) \
957 : static PROMETHEUS_GAUGE_DEFINE( \
958 : NET_STATS_GET_METRIC_NAME(_name), \
959 : _desc, ({ .key = "nic", .value = &_labelval[1] }), \
960 : &(_collector), _stat_var_ptr)
961 :
962 : #define NET_STATS_PROMETHEUS_SUMMARY_DEFINE(_desc, _labelval, _not_used, \
963 0 : _collector, _name, _stat_var_ptr) \
964 : static PROMETHEUS_SUMMARY_DEFINE( \
965 : NET_STATS_GET_METRIC_NAME(_name), \
966 : _desc, ({ .key = "nic", .value = &_labelval[1] }), \
967 : &(_collector), _stat_var_ptr)
968 :
969 : #define NET_STATS_PROMETHEUS_HISTOGRAM_DEFINE(_desc, _labelval, _not_used, \
970 0 : _collector, _name, _stat_var_ptr) \
971 : static PROMETHEUS_HISTOGRAM_DEFINE( \
972 : NET_STATS_GET_METRIC_NAME(_name), \
973 : _desc, ({ .key = "nic", .value = &_labelval[1] }), \
974 : &(_collector), _stat_var_ptr)
975 :
976 : /* IPv6 layer statistics */
977 : #if defined(CONFIG_NET_STATISTICS_IPV6)
978 : #define NET_STATS_PROMETHEUS_IPV6(iface, dev_id, sfx) \
979 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
980 : "IPv6 packets sent", \
981 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_sent), \
982 : "packet_count", \
983 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
984 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_sent), \
985 : &(iface)->stats.ipv6.sent); \
986 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
987 : "IPv6 packets received", \
988 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_recv), \
989 : "packet_count", \
990 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
991 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_recv), \
992 : &(iface)->stats.ipv6.recv); \
993 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
994 : "IPv6 packets dropped", \
995 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_drop), \
996 : "packet_count", \
997 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
998 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_drop), \
999 : &(iface)->stats.ipv6.drop); \
1000 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1001 : "IPv6 packets forwarded", \
1002 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_forward), \
1003 : "packet_count", \
1004 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1005 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_forwarded), \
1006 : &(iface)->stats.ipv6.forwarded)
1007 : #else
1008 0 : #define NET_STATS_PROMETHEUS_IPV6(iface, dev_id, sfx)
1009 : #endif
1010 :
1011 : /* IPv4 layer statistics */
1012 : #if defined(CONFIG_NET_STATISTICS_IPV4)
1013 : #define NET_STATS_PROMETHEUS_IPV4(iface, dev_id, sfx) \
1014 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1015 : "IPv4 packets sent", \
1016 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_sent), \
1017 : "packet_count", \
1018 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1019 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_sent), \
1020 : &(iface)->stats.ipv4.sent); \
1021 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1022 : "IPv4 packets received", \
1023 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_recv), \
1024 : "packet_count", \
1025 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1026 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_recv), \
1027 : &(iface)->stats.ipv4.recv); \
1028 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1029 : "IPv4 packets dropped", \
1030 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_drop), \
1031 : "packet_count", \
1032 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1033 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_drop), \
1034 : &(iface)->stats.ipv4.drop); \
1035 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1036 : "IPv4 packets forwarded", \
1037 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_forwarded), \
1038 : "packet_count", \
1039 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1040 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_forwarded), \
1041 : &(iface)->stats.ipv4.forwarded)
1042 : #else
1043 0 : #define NET_STATS_PROMETHEUS_IPV4(iface, dev_id, sfx)
1044 : #endif
1045 :
1046 : /* ICMP layer statistics */
1047 : #if defined(CONFIG_NET_STATISTICS_ICMP)
1048 : #define NET_STATS_PROMETHEUS_ICMP(iface, dev_id, sfx) \
1049 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1050 : "ICMP packets sent", \
1051 : NET_STATS_GET_INSTANCE(dev_id, sfx, icmp_sent), \
1052 : "packet_count", \
1053 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1054 : NET_STATS_GET_VAR(dev_id, sfx, icmp_sent), \
1055 : &(iface)->stats.icmp.sent); \
1056 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1057 : "ICMP packets received", \
1058 : NET_STATS_GET_INSTANCE(dev_id, sfx, icmp_recv), \
1059 : "packet_count", \
1060 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1061 : NET_STATS_GET_VAR(dev_id, sfx, icmp_recv), \
1062 : &(iface)->stats.icmp.recv); \
1063 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1064 : "ICMP packets dropped", \
1065 : NET_STATS_GET_INSTANCE(dev_id, sfx, icmp_drop), \
1066 : "packet_count", \
1067 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1068 : NET_STATS_GET_VAR(dev_id, sfx, icmp_drop), \
1069 : &(iface)->stats.icmp.drop); \
1070 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1071 : "ICMP packets checksum error", \
1072 : NET_STATS_GET_INSTANCE(dev_id, sfx, icmp_chkerr), \
1073 : "packet_count", \
1074 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1075 : NET_STATS_GET_VAR(dev_id, sfx, icmp_chkerr), \
1076 : &(iface)->stats.icmp.chkerr); \
1077 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1078 : "ICMP packets type error", \
1079 : NET_STATS_GET_INSTANCE(dev_id, sfx, icmp_typeerr), \
1080 : "packet_count", \
1081 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1082 : NET_STATS_GET_VAR(dev_id, sfx, icmp_typeerr), \
1083 : &(iface)->stats.icmp.typeerr)
1084 : #else
1085 0 : #define NET_STATS_PROMETHEUS_ICMP(iface, dev_id, sfx)
1086 : #endif
1087 :
1088 : /* UDP layer statistics */
1089 : #if defined(CONFIG_NET_STATISTICS_UDP)
1090 : #define NET_STATS_PROMETHEUS_UDP(iface, dev_id, sfx) \
1091 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1092 : "UDP packets sent", \
1093 : NET_STATS_GET_INSTANCE(dev_id, sfx, udp_sent), \
1094 : "packet_count", \
1095 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1096 : NET_STATS_GET_VAR(dev_id, sfx, udp_sent), \
1097 : &(iface)->stats.udp.sent); \
1098 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1099 : "UDP packets received", \
1100 : NET_STATS_GET_INSTANCE(dev_id, sfx, udp_recv), \
1101 : "packet_count", \
1102 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1103 : NET_STATS_GET_VAR(dev_id, sfx, udp_recv), \
1104 : &(iface)->stats.udp.recv); \
1105 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1106 : "UDP packets dropped", \
1107 : NET_STATS_GET_INSTANCE(dev_id, sfx, udp_drop), \
1108 : "packet_count", \
1109 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1110 : NET_STATS_GET_VAR(dev_id, sfx, udp_drop), \
1111 : &(iface)->stats.udp.drop); \
1112 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1113 : "UDP packets checksum error", \
1114 : NET_STATS_GET_INSTANCE(dev_id, sfx, udp_chkerr), \
1115 : "packet_count", \
1116 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1117 : NET_STATS_GET_VAR(dev_id, sfx, udp_chkerr), \
1118 : &(iface)->stats.udp.chkerr)
1119 : #else
1120 0 : #define NET_STATS_PROMETHEUS_UDP(iface, dev_id, sfx)
1121 : #endif
1122 :
1123 : /* TCP layer statistics */
1124 : #if defined(CONFIG_NET_STATISTICS_TCP)
1125 : #define NET_STATS_PROMETHEUS_TCP(iface, dev_id, sfx) \
1126 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1127 : "TCP bytes sent", \
1128 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_bytes_sent), \
1129 : "byte_count", \
1130 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1131 : NET_STATS_GET_VAR(dev_id, sfx, tcp_bytes_sent), \
1132 : &(iface)->stats.tcp.bytes.sent); \
1133 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1134 : "TCP bytes received", \
1135 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_bytes_recv), \
1136 : "byte_count", \
1137 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1138 : NET_STATS_GET_VAR(dev_id, sfx, tcp_bytes_recv), \
1139 : &(iface)->stats.tcp.bytes.received); \
1140 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1141 : "TCP bytes resent", \
1142 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_bytes_resent), \
1143 : "byte_count", \
1144 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1145 : NET_STATS_GET_VAR(dev_id, sfx, tcp_bytes_resent), \
1146 : &(iface)->stats.tcp.resent); \
1147 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1148 : "TCP packets sent", \
1149 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_sent), \
1150 : "packet_count", \
1151 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1152 : NET_STATS_GET_VAR(dev_id, sfx, tcp_sent), \
1153 : &(iface)->stats.tcp.sent); \
1154 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1155 : "TCP packets received", \
1156 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_recv), \
1157 : "packet_count", \
1158 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1159 : NET_STATS_GET_VAR(dev_id, sfx, tcp_recv), \
1160 : &(iface)->stats.tcp.recv); \
1161 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1162 : "TCP packets dropped", \
1163 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_drop), \
1164 : "packet_count", \
1165 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1166 : NET_STATS_GET_VAR(dev_id, sfx, tcp_drop), \
1167 : &(iface)->stats.tcp.drop); \
1168 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1169 : "TCP packets checksum error", \
1170 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_chkerr), \
1171 : "packet_count", \
1172 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1173 : NET_STATS_GET_VAR(dev_id, sfx, tcp_chkerr), \
1174 : &(iface)->stats.tcp.chkerr); \
1175 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1176 : "TCP packets ack error", \
1177 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_ackerr), \
1178 : "packet_count", \
1179 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1180 : NET_STATS_GET_VAR(dev_id, sfx, tcp_ackerr), \
1181 : &(iface)->stats.tcp.ackerr); \
1182 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1183 : "TCP packets reset error", \
1184 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_rsterr), \
1185 : "packet_count", \
1186 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1187 : NET_STATS_GET_VAR(dev_id, sfx, tcp_rsterr), \
1188 : &(iface)->stats.tcp.rsterr); \
1189 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1190 : "TCP packets retransmitted", \
1191 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_rexmit), \
1192 : "packet_count", \
1193 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1194 : NET_STATS_GET_VAR(dev_id, sfx, tcp_rexmit), \
1195 : &(iface)->stats.tcp.rexmit); \
1196 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1197 : "TCP reset received", \
1198 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_rst_recv), \
1199 : "packet_count", \
1200 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1201 : NET_STATS_GET_VAR(dev_id, sfx, tcp_rst), \
1202 : &(iface)->stats.tcp.rst); \
1203 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1204 : "TCP connection drop", \
1205 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_conndrop), \
1206 : "packet_count", \
1207 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1208 : NET_STATS_GET_VAR(dev_id, sfx, tcp_conndrop), \
1209 : &(iface)->stats.tcp.conndrop); \
1210 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1211 : "TCP connection reset", \
1212 : NET_STATS_GET_INSTANCE(dev_id, sfx, tcp_connrst), \
1213 : "packet_count", \
1214 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1215 : NET_STATS_GET_VAR(dev_id, sfx, tcp_connrst), \
1216 : &(iface)->stats.tcp.connrst)
1217 : #else
1218 0 : #define NET_STATS_PROMETHEUS_TCP(iface, dev_id, sfx)
1219 : #endif
1220 :
1221 : /* IPv6 Neighbor Discovery statistics */
1222 : #if defined(CONFIG_NET_STATISTICS_IPV6_ND)
1223 : #define NET_STATS_PROMETHEUS_IPV6_ND(iface, dev_id, sfx) \
1224 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1225 : "IPv6 ND packets sent", \
1226 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_nd_sent), \
1227 : "packet_count", \
1228 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1229 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_nd_sent), \
1230 : &(iface)->stats.ipv6_nd.sent); \
1231 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1232 : "IPv6 ND packets received", \
1233 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_nd_recv), \
1234 : "packet_count", \
1235 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1236 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_nd_recv), \
1237 : &(iface)->stats.ipv6_nd.recv); \
1238 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1239 : "IPv6 ND packets dropped", \
1240 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_nd_drop), \
1241 : "packet_count", \
1242 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1243 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_nd_drop), \
1244 : &(iface)->stats.ipv6_nd.drop)
1245 : #else
1246 0 : #define NET_STATS_PROMETHEUS_IPV6_ND(iface, dev_id, sfx)
1247 : #endif
1248 :
1249 : /* IPv6 Path MTU Discovery statistics */
1250 : #if defined(CONFIG_NET_STATISTICS_IPV6_PMTU)
1251 : #define NET_STATS_PROMETHEUS_IPV6_PMTU(iface, dev_id, sfx) \
1252 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1253 : "IPv6 PMTU packets sent", \
1254 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_pmtu_sent), \
1255 : "packet_count", \
1256 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1257 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_pmtu_sent), \
1258 : &(iface)->stats.ipv6_pmtu.sent); \
1259 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1260 : "IPv6 PMTU packets received", \
1261 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_pmtu_recv), \
1262 : "packet_count", \
1263 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1264 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_pmtu_recv), \
1265 : &(iface)->stats.ipv6_pmtu.recv); \
1266 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1267 : "IPv6 PMTU packets dropped", \
1268 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_pmtu_drop), \
1269 : "packet_count", \
1270 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1271 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_pmtu_drop), \
1272 : &(iface)->stats.ipv6_pmtu.drop)
1273 : #else
1274 0 : #define NET_STATS_PROMETHEUS_IPV6_PMTU(iface, dev_id, sfx)
1275 : #endif
1276 :
1277 : /* IPv4 Path MTU Discovery statistics */
1278 : #if defined(CONFIG_NET_STATISTICS_IPV4_PMTU)
1279 : #define NET_STATS_PROMETHEUS_IPV4_PMTU(iface, dev_id, sfx) \
1280 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1281 : "IPv4 PMTU packets sent", \
1282 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_pmtu_sent), \
1283 : "packet_count", \
1284 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1285 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_pmtu_sent), \
1286 : &(iface)->stats.ipv4_pmtu.sent); \
1287 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1288 : "IPv4 PMTU packets received", \
1289 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_pmtu_recv), \
1290 : "packet_count", \
1291 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1292 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_pmtu_recv), \
1293 : &(iface)->stats.ipv4_pmtu.recv); \
1294 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1295 : "IPv4 PMTU packets dropped", \
1296 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_pmtu_drop), \
1297 : "packet_count", \
1298 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1299 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_pmtu_drop), \
1300 : &(iface)->stats.ipv4_pmtu.drop)
1301 : #else
1302 0 : #define NET_STATS_PROMETHEUS_IPV4_PMTU(iface, dev_id, sfx)
1303 : #endif
1304 :
1305 : /* IPv6 Multicast Listener Discovery statistics */
1306 : #if defined(CONFIG_NET_STATISTICS_MLD)
1307 : #define NET_STATS_PROMETHEUS_MLD(iface, dev_id, sfx) \
1308 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1309 : "IPv6 MLD packets sent", \
1310 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_mld_sent), \
1311 : "packet_count", \
1312 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1313 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_mld_sent), \
1314 : &(iface)->stats.ipv6_mld.sent); \
1315 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1316 : "IPv6 MLD packets received", \
1317 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_mld_recv), \
1318 : "packet_count", \
1319 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1320 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_mld_recv), \
1321 : &(iface)->stats.ipv6_mld.recv); \
1322 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1323 : "IPv6 MLD packets dropped", \
1324 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv6_mld_drop), \
1325 : "packet_count", \
1326 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1327 : NET_STATS_GET_VAR(dev_id, sfx, ipv6_mld_drop), \
1328 : &(iface)->stats.ipv6_mld.drop)
1329 : #else
1330 0 : #define NET_STATS_PROMETHEUS_MLD(iface, dev_id, sfx)
1331 : #endif
1332 :
1333 : /* IPv4 IGMP statistics */
1334 : #if defined(CONFIG_NET_STATISTICS_IGMP)
1335 : #define NET_STATS_PROMETHEUS_IGMP(iface, dev_id, sfx) \
1336 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1337 : "IPv4 IGMP packets sent", \
1338 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_igmp_sent), \
1339 : "packet_count", \
1340 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1341 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_igmp_sent), \
1342 : &(iface)->stats.ipv4_igmp.sent); \
1343 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1344 : "IPv4 IGMP packets received", \
1345 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_igmp_recv), \
1346 : "packet_count", \
1347 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1348 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_igmp_recv), \
1349 : &(iface)->stats.ipv4_igmp.recv); \
1350 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1351 : "IPv4 IGMP packets dropped", \
1352 : NET_STATS_GET_INSTANCE(dev_id, sfx, ipv4_igmp_drop), \
1353 : "packet_count", \
1354 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1355 : NET_STATS_GET_VAR(dev_id, sfx, ipv4_igmp_drop), \
1356 : &(iface)->stats.ipv4_igmp.drop)
1357 : #else
1358 0 : #define NET_STATS_PROMETHEUS_IGMP(iface, dev_id, sfx)
1359 : #endif
1360 :
1361 : /* DNS statistics */
1362 : #if defined(CONFIG_NET_STATISTICS_DNS)
1363 : #define NET_STATS_PROMETHEUS_DNS(iface, dev_id, sfx) \
1364 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1365 : "DNS packets sent", \
1366 : NET_STATS_GET_INSTANCE(dev_id, sfx, dns_sent), \
1367 : "packet_count", \
1368 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1369 : NET_STATS_GET_VAR(dev_id, sfx, dns_sent), \
1370 : &(iface)->stats.dns.sent); \
1371 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1372 : "DNS packets received", \
1373 : NET_STATS_GET_INSTANCE(dev_id, sfx, dns_recv), \
1374 : "packet_count", \
1375 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1376 : NET_STATS_GET_VAR(dev_id, sfx, dns_recv), \
1377 : &(iface)->stats.dns.recv); \
1378 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1379 : "DNS packets dropped", \
1380 : NET_STATS_GET_INSTANCE(dev_id, sfx, dns_drop), \
1381 : "packet_count", \
1382 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1383 : NET_STATS_GET_VAR(dev_id, sfx, dns_drop), \
1384 : &(iface)->stats.dns.drop)
1385 : #else
1386 0 : #define NET_STATS_PROMETHEUS_DNS(iface, dev_id, sfx)
1387 : #endif
1388 :
1389 : /* TX time statistics */
1390 : #if defined(CONFIG_NET_PKT_TXTIME_STATS)
1391 : #define NET_STATS_PROMETHEUS_TX_TIME(iface, dev_id, sfx) \
1392 : NET_STATS_PROMETHEUS_SUMMARY_DEFINE( \
1393 : "TX time in microseconds", \
1394 : NET_STATS_GET_INSTANCE(dev_id, sfx, tx_time), \
1395 : "time", \
1396 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1397 : NET_STATS_GET_VAR(dev_id, sfx, tx_time), \
1398 : &(iface)->stats.tx_time)
1399 : #else
1400 0 : #define NET_STATS_PROMETHEUS_TX_TIME(iface, dev_id, sfx)
1401 : #endif
1402 :
1403 : /* RX time statistics */
1404 : #if defined(CONFIG_NET_PKT_RXTIME_STATS)
1405 : #define NET_STATS_PROMETHEUS_RX_TIME(iface, dev_id, sfx) \
1406 : NET_STATS_PROMETHEUS_SUMMARY_DEFINE( \
1407 : "RX time in microseconds", \
1408 : NET_STATS_GET_INSTANCE(dev_id, sfx, rx_time), \
1409 : "time", \
1410 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1411 : NET_STATS_GET_VAR(dev_id, sfx, rx_time), \
1412 : &(iface)->stats.rx_time)
1413 : #else
1414 0 : #define NET_STATS_PROMETHEUS_RX_TIME(iface, dev_id, sfx)
1415 : #endif
1416 :
1417 0 : #define NET_STATS_PROMETHEUS_PKT_FILTER_IPV4(iface, dev_id, sfx) \
1418 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1419 : "Packet filter RX IPv4 drop", \
1420 : NET_STATS_GET_INSTANCE(dev_id, sfx, pkt_filter_rx_ipv4_drop), \
1421 : "packet_count", \
1422 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1423 : NET_STATS_GET_VAR(dev_id, sfx, pkt_filter_rx_ipv4_drop),\
1424 : &(iface)->stats.pkt_filter.rx.ipv4_drop);
1425 :
1426 0 : #define NET_STATS_PROMETHEUS_PKT_FILTER_IPV6(iface, dev_id, sfx) \
1427 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1428 : "Packet filter RX IPv6 drop", \
1429 : NET_STATS_GET_INSTANCE(dev_id, sfx, pkt_filter_rx_ipv6_drop), \
1430 : "packet_count", \
1431 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1432 : NET_STATS_GET_VAR(dev_id, sfx, pkt_filter_rx_ipv6_drop),\
1433 : &(iface)->stats.pkt_filter.rx.ipv6_drop);
1434 :
1435 0 : #define NET_STATS_PROMETHEUS_PKT_FILTER_LOCAL(iface, dev_id, sfx) \
1436 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1437 : "Packet filter RX local drop", \
1438 : NET_STATS_GET_INSTANCE(dev_id, sfx, pkt_filter_rx_local_drop), \
1439 : "packet_count", \
1440 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1441 : NET_STATS_GET_VAR(dev_id, sfx, pkt_filter_rx_local_drop),\
1442 : &(iface)->stats.pkt_filter.rx.local_drop);
1443 :
1444 0 : #define NET_STATS_PROMETHEUS_PKT_FILTER(iface, dev_id, sfx) \
1445 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1446 : "Packet filter RX drop", \
1447 : NET_STATS_GET_INSTANCE(dev_id, sfx, pkt_filter_rx_drop),\
1448 : "packet_count", \
1449 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1450 : NET_STATS_GET_VAR(dev_id, sfx, pkt_filter_rx_drop), \
1451 : &(iface)->stats.pkt_filter.rx.drop); \
1452 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1453 : "Packet filter TX drop", \
1454 : NET_STATS_GET_INSTANCE(dev_id, sfx, pkt_filter_tx_drop),\
1455 : "packet_count", \
1456 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1457 : NET_STATS_GET_VAR(dev_id, sfx, pkt_filter_tx_drop), \
1458 : &(iface)->stats.pkt_filter.tx.drop); \
1459 : IF_ENABLED(CONFIG_NET_PKT_FILTER_IPV4_HOOK, \
1460 : (NET_STATS_PROMETHEUS_PKT_FILTER_IPV4(iface, dev_id, sfx))) \
1461 : IF_ENABLED(CONFIG_NET_PKT_FILTER_IPV6_HOOK, \
1462 : (NET_STATS_PROMETHEUS_PKT_FILTER_IPV6(iface, dev_id, sfx))) \
1463 : IF_ENABLED(CONFIG_NET_PKT_FILTER_LOCAL_IN_HOOK, \
1464 : (NET_STATS_PROMETHEUS_PKT_FILTER_LOCAL(iface, dev_id, sfx)))
1465 :
1466 : /* Per network interface statistics via Prometheus */
1467 0 : #define NET_STATS_PROMETHEUS(iface, dev_id, sfx) \
1468 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1469 : "Processing error", \
1470 : NET_STATS_GET_INSTANCE(dev_id, sfx, process_error), \
1471 : "error_count", \
1472 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1473 : NET_STATS_GET_VAR(dev_id, sfx, processing_error), \
1474 : &(iface)->stats.processing_error); \
1475 : IF_ENABLED(CONFIG_NET_STATISTICS_PKT_FILTER, \
1476 : (NET_STATS_PROMETHEUS_PKT_FILTER(iface, dev_id, sfx))) \
1477 : /* IP layer error statistics */ \
1478 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1479 : "IP proto error", \
1480 : NET_STATS_GET_INSTANCE(dev_id, sfx, ip_proto_error), \
1481 : "error_count", \
1482 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1483 : NET_STATS_GET_VAR(dev_id, sfx, ip_errors_protoerr), \
1484 : &(iface)->stats.ip_errors.protoerr); \
1485 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1486 : "IP version/header len error", \
1487 : NET_STATS_GET_INSTANCE(dev_id, sfx, ip_vhl_error), \
1488 : "error_count", \
1489 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1490 : NET_STATS_GET_VAR(dev_id, sfx, ip_errors_vhlerr), \
1491 : &(iface)->stats.ip_errors.vhlerr); \
1492 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1493 : "IP header len error (high byte)", \
1494 : NET_STATS_GET_INSTANCE(dev_id, sfx, ip_hblen_error), \
1495 : "error_count", \
1496 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1497 : NET_STATS_GET_VAR(dev_id, sfx, ip_errors_hblenerr), \
1498 : &(iface)->stats.ip_errors.hblenerr); \
1499 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1500 : "IP header len error (low byte)", \
1501 : NET_STATS_GET_INSTANCE(dev_id, sfx, ip_lblen_error), \
1502 : "error_count", \
1503 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1504 : NET_STATS_GET_VAR(dev_id, sfx, ip_errors_lblenerr), \
1505 : &(iface)->stats.ip_errors.lblenerr); \
1506 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1507 : "IP fragment error", \
1508 : NET_STATS_GET_INSTANCE(dev_id, sfx, ip_frag_error), \
1509 : "error_count", \
1510 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1511 : NET_STATS_GET_VAR(dev_id, sfx, ip_errors_fragerr), \
1512 : &(iface)->stats.ip_errors.fragerr); \
1513 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1514 : "IP checksum error", \
1515 : NET_STATS_GET_INSTANCE(dev_id, sfx, ip_chk_error), \
1516 : "error_count", \
1517 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1518 : NET_STATS_GET_VAR(dev_id, sfx, ip_errors_chkerr), \
1519 : &(iface)->stats.ip_errors.chkerr); \
1520 : /* General network statistics */ \
1521 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1522 : "Bytes received", \
1523 : NET_STATS_GET_INSTANCE(dev_id, sfx, bytes_recv), \
1524 : "byte_count", \
1525 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1526 : NET_STATS_GET_VAR(dev_id, sfx, bytes_recv), \
1527 : &(iface)->stats.bytes.received); \
1528 : NET_STATS_PROMETHEUS_COUNTER_DEFINE( \
1529 : "Bytes sent", \
1530 : NET_STATS_GET_INSTANCE(dev_id, sfx, bytes_sent), \
1531 : "byte_count", \
1532 : NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx), \
1533 : NET_STATS_GET_VAR(dev_id, sfx, bytes_sent), \
1534 : &(iface)->stats.bytes.sent); \
1535 : NET_STATS_PROMETHEUS_IPV6(iface, dev_id, sfx); \
1536 : NET_STATS_PROMETHEUS_IPV4(iface, dev_id, sfx); \
1537 : NET_STATS_PROMETHEUS_ICMP(iface, dev_id, sfx); \
1538 : NET_STATS_PROMETHEUS_UDP(iface, dev_id, sfx); \
1539 : NET_STATS_PROMETHEUS_TCP(iface, dev_id, sfx); \
1540 : NET_STATS_PROMETHEUS_IPV6_ND(iface, dev_id, sfx); \
1541 : NET_STATS_PROMETHEUS_IPV6_PMTU(iface, dev_id, sfx); \
1542 : NET_STATS_PROMETHEUS_IPV4_PMTU(iface, dev_id, sfx); \
1543 : NET_STATS_PROMETHEUS_MLD(iface, dev_id, sfx); \
1544 : NET_STATS_PROMETHEUS_IGMP(iface, dev_id, sfx); \
1545 : NET_STATS_PROMETHEUS_DNS(iface, dev_id, sfx); \
1546 : NET_STATS_PROMETHEUS_TX_TIME(iface, dev_id, sfx); \
1547 : NET_STATS_PROMETHEUS_RX_TIME(iface, dev_id, sfx)
1548 :
1549 : /**
1550 : * @}
1551 : */
1552 :
1553 : #ifdef __cplusplus
1554 : }
1555 : #endif
1556 :
1557 : #endif /* ZEPHYR_INCLUDE_NET_NET_STATS_H_ */
|