LCOV - code coverage report
Current view: top level - zephyr/net - net_stats.h Coverage Total Hit
Test: new.info Lines: 86.1 % 187 161
Test Date: 2025-09-05 22:20:39

            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_ */
        

Generated by: LCOV version 2.0-1