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 typedef uint32_t net_stats_t; 46 47 /** 48 * @brief Number of bytes sent and received. 49 */ 50 struct net_stats_bytes { 51 /** Number of bytes sent */ 52 uint64_t sent; 53 /** Number of bytes received */ 54 uint64_t received; 55 }; 56 57 /** 58 * @brief Number of network packets sent and received. 59 */ 60 struct net_stats_pkts { 61 /** Number of packets sent */ 62 net_stats_t tx; 63 /** Number of packets received */ 64 net_stats_t rx; 65 }; 66 67 /** 68 * @brief IP layer statistics 69 */ 70 struct net_stats_ip { 71 /** Number of received packets at the IP layer. */ 72 net_stats_t recv; 73 74 /** Number of sent packets at the IP layer. */ 75 net_stats_t sent; 76 77 /** Number of forwarded packets at the IP layer. */ 78 net_stats_t forwarded; 79 80 /** Number of dropped packets at the IP layer. */ 81 net_stats_t drop; 82 }; 83 84 /** 85 * @brief IP layer error statistics 86 */ 87 struct net_stats_ip_errors { 88 /** Number of packets dropped due to wrong IP version 89 * or header length. 90 */ 91 net_stats_t vhlerr; 92 93 /** Number of packets dropped due to wrong IP length, high byte. */ 94 net_stats_t hblenerr; 95 96 /** Number of packets dropped due to wrong IP length, low byte. */ 97 net_stats_t lblenerr; 98 99 /** Number of packets dropped because they were IP fragments. */ 100 net_stats_t fragerr; 101 102 /** Number of packets dropped due to IP checksum errors. */ 103 net_stats_t chkerr; 104 105 /** Number of packets dropped because they were neither ICMP, 106 * UDP nor TCP. 107 */ 108 net_stats_t protoerr; 109 }; 110 111 /** 112 * @brief ICMP statistics 113 */ 114 struct net_stats_icmp { 115 /** Number of received ICMP packets. */ 116 net_stats_t recv; 117 118 /** Number of sent ICMP packets. */ 119 net_stats_t sent; 120 121 /** Number of dropped ICMP packets. */ 122 net_stats_t drop; 123 124 /** Number of ICMP packets with a wrong type. */ 125 net_stats_t typeerr; 126 127 /** Number of ICMP packets with a bad checksum. */ 128 net_stats_t chkerr; 129 }; 130 131 /** 132 * @brief TCP statistics 133 */ 134 struct net_stats_tcp { 135 /** Amount of received and sent TCP application data. */ 136 struct net_stats_bytes bytes; 137 138 /** Amount of retransmitted data. */ 139 net_stats_t resent; 140 141 /** Number of dropped packets at the TCP layer. */ 142 net_stats_t drop; 143 144 /** Number of received TCP segments. */ 145 net_stats_t recv; 146 147 /** Number of sent TCP segments. */ 148 net_stats_t sent; 149 150 /** Number of dropped TCP segments. */ 151 net_stats_t seg_drop; 152 153 /** Number of TCP segments with a bad checksum. */ 154 net_stats_t chkerr; 155 156 /** Number of received TCP segments with a bad ACK number. */ 157 net_stats_t ackerr; 158 159 /** Number of received bad TCP RST (reset) segments. */ 160 net_stats_t rsterr; 161 162 /** Number of received TCP RST (reset) segments. */ 163 net_stats_t rst; 164 165 /** Number of retransmitted TCP segments. */ 166 net_stats_t rexmit; 167 168 /** Number of dropped connection attempts because too few connections 169 * were available. 170 */ 171 net_stats_t conndrop; 172 173 /** Number of connection attempts for closed ports, triggering a RST. */ 174 net_stats_t connrst; 175 }; 176 177 /** 178 * @brief UDP statistics 179 */ 180 struct net_stats_udp { 181 /** Number of dropped UDP segments. */ 182 net_stats_t drop; 183 184 /** Number of received UDP segments. */ 185 net_stats_t recv; 186 187 /** Number of sent UDP segments. */ 188 net_stats_t sent; 189 190 /** Number of UDP segments with a bad checksum. */ 191 net_stats_t chkerr; 192 }; 193 194 /** 195 * @brief IPv6 neighbor discovery statistics 196 */ 197 struct net_stats_ipv6_nd { 198 /** Number of dropped IPv6 neighbor discovery packets. */ 199 net_stats_t drop; 200 201 /** Number of received IPv6 neighbor discovery packets. */ 202 net_stats_t recv; 203 204 /** Number of sent IPv6 neighbor discovery packets. */ 205 net_stats_t sent; 206 }; 207 208 /** 209 * @brief IPv6 Path MTU Discovery statistics 210 */ 211 struct net_stats_ipv6_pmtu { 212 /** Number of dropped IPv6 PMTU packets. */ 213 net_stats_t drop; 214 215 /** Number of received IPv6 PMTU packets. */ 216 net_stats_t recv; 217 218 /** Number of sent IPv6 PMTU packets. */ 219 net_stats_t sent; 220 }; 221 222 /** 223 * @brief IPv4 Path MTU Discovery statistics 224 */ 225 struct net_stats_ipv4_pmtu { 226 /** Number of dropped IPv4 PMTU packets. */ 227 net_stats_t drop; 228 229 /** Number of received IPv4 PMTU packets. */ 230 net_stats_t recv; 231 232 /** Number of sent IPv4 PMTU packets. */ 233 net_stats_t sent; 234 }; 235 236 /** 237 * @brief IPv6 multicast listener daemon statistics 238 */ 239 struct net_stats_ipv6_mld { 240 /** Number of received IPv6 MLD queries. */ 241 net_stats_t recv; 242 243 /** Number of sent IPv6 MLD reports. */ 244 net_stats_t sent; 245 246 /** Number of dropped IPv6 MLD packets. */ 247 net_stats_t drop; 248 }; 249 250 /** 251 * @brief IPv4 IGMP daemon statistics 252 */ 253 struct net_stats_ipv4_igmp { 254 /** Number of received IPv4 IGMP queries */ 255 net_stats_t recv; 256 257 /** Number of sent IPv4 IGMP reports */ 258 net_stats_t sent; 259 260 /** Number of dropped IPv4 IGMP packets */ 261 net_stats_t drop; 262 }; 263 264 /** 265 * @brief DNS statistics 266 */ 267 struct net_stats_dns { 268 /** Number of received DNS queries */ 269 net_stats_t recv; 270 271 /** Number of sent DNS responses */ 272 net_stats_t sent; 273 274 /** Number of dropped DNS packets */ 275 net_stats_t drop; 276 }; 277 278 /** 279 * @brief Network packet transfer times for calculating average TX time 280 */ 281 struct net_stats_tx_time { 282 /** Sum of network packet transfer times. */ 283 uint64_t sum; 284 285 /** Number of network packets transferred. */ 286 net_stats_t count; 287 }; 288 289 /** 290 * @brief Network packet receive times for calculating average RX time 291 */ 292 struct net_stats_rx_time { 293 /** Sum of network packet receive times. */ 294 uint64_t sum; 295 296 /** Number of network packets received. */ 297 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 struct net_stats_tc { 320 /** TX statistics for each traffic class */ 321 struct { 322 /** Number of bytes sent for this traffic class */ 323 uint64_t bytes; 324 /** Helper for calculating average TX time statistics */ 325 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 net_stats_t pkts; 333 /** Number of packets dropped for this traffic class */ 334 net_stats_t dropped; 335 /** Priority of this traffic class */ 336 uint8_t priority; 337 } 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 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 } recv[NET_TC_RX_STATS_COUNT]; 357 }; 358 359 360 /** 361 * @brief Power management statistics 362 */ 363 struct net_stats_pm { 364 /** Total suspend time */ 365 uint64_t overall_suspend_time; 366 /** How many times we were suspended */ 367 net_stats_t suspend_count; 368 /** How long the last suspend took */ 369 uint32_t last_suspend_time; 370 /** Network interface last suspend start time */ 371 uint32_t start_time; 372 }; 373 374 /** 375 * @brief Network packet filter statistics 376 */ 377 struct net_stats_pkt_filter { 378 /** Network packet filter RX statistics */ 379 struct { 380 /** Network packets dropped at network interface level */ 381 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 } rx; 395 396 /** Network packet filter TX statistics */ 397 struct { 398 /** Network packets dropped at network interface level */ 399 net_stats_t drop; 400 } tx; 401 }; 402 403 /** 404 * @brief All network statistics in one struct. 405 */ 406 struct net_stats { 407 /** 408 * This calculates amount of data transferred through all the 409 * network interfaces. 410 */ 411 struct net_stats_bytes bytes; 412 413 /** Count of malformed packets or packets we do not have handler for */ 414 net_stats_t processing_error; 415 416 /** IP layer errors */ 417 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 struct net_stats_eth_errors { 512 /** Number of RX length errors */ 513 net_stats_t rx_length_errors; 514 515 /** Number of RX overrun errors */ 516 net_stats_t rx_over_errors; 517 518 /** Number of RX CRC errors */ 519 net_stats_t rx_crc_errors; 520 521 /** Number of RX frame errors */ 522 net_stats_t rx_frame_errors; 523 524 /** Number of RX net_pkt allocation errors */ 525 net_stats_t rx_no_buffer_count; 526 527 /** Number of RX missed errors */ 528 net_stats_t rx_missed_errors; 529 530 /** Number of RX long length errors */ 531 net_stats_t rx_long_length_errors; 532 533 /** Number of RX short length errors */ 534 net_stats_t rx_short_length_errors; 535 536 /** Number of RX buffer align errors */ 537 net_stats_t rx_align_errors; 538 539 /** Number of RX DMA failed errors */ 540 net_stats_t rx_dma_failed; 541 542 /** Number of RX net_buf allocation errors */ 543 net_stats_t rx_buf_alloc_failed; 544 545 /** Number of TX aborted errors */ 546 net_stats_t tx_aborted_errors; 547 548 /** Number of TX carrier errors */ 549 net_stats_t tx_carrier_errors; 550 551 /** Number of TX FIFO errors */ 552 net_stats_t tx_fifo_errors; 553 554 /** Number of TX heartbeat errors */ 555 net_stats_t tx_heartbeat_errors; 556 557 /** Number of TX window errors */ 558 net_stats_t tx_window_errors; 559 560 /** Number of TX DMA failed errors */ 561 net_stats_t tx_dma_failed; 562 563 /** Number of uncorrected ECC errors */ 564 net_stats_t uncorr_ecc_errors; 565 566 /** Number of corrected ECC errors */ 567 net_stats_t corr_ecc_errors; 568 }; 569 570 /** 571 * @brief Ethernet flow control statistics 572 */ 573 struct net_stats_eth_flow { 574 /** Number of RX XON flow control */ 575 net_stats_t rx_flow_control_xon; 576 577 /** Number of RX XOFF flow control */ 578 net_stats_t rx_flow_control_xoff; 579 580 /** Number of TX XON flow control */ 581 net_stats_t tx_flow_control_xon; 582 583 /** Number of TX XOFF flow control */ 584 net_stats_t tx_flow_control_xoff; 585 }; 586 587 /** 588 * @brief Ethernet checksum statistics 589 */ 590 struct net_stats_eth_csum { 591 /** Number of good RX checksum offloading */ 592 net_stats_t rx_csum_offload_good; 593 594 /** Number of failed RX checksum offloading */ 595 net_stats_t rx_csum_offload_errors; 596 }; 597 598 /** 599 * @brief Ethernet hardware timestamp statistics 600 */ 601 struct net_stats_eth_hw_timestamp { 602 /** Number of RX hardware timestamp cleared */ 603 net_stats_t rx_hwtstamp_cleared; 604 605 /** Number of RX hardware timestamp timeout */ 606 net_stats_t tx_hwtstamp_timeouts; 607 608 /** Number of RX hardware timestamp skipped */ 609 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 struct net_stats_eth { 626 /** Total number of bytes received and sent */ 627 struct net_stats_bytes bytes; 628 629 /** Total number of packets received and sent */ 630 struct net_stats_pkts pkts; 631 632 /** Total number of broadcast packets received and sent */ 633 struct net_stats_pkts broadcast; 634 635 /** Total number of multicast packets received and sent */ 636 struct net_stats_pkts multicast; 637 638 /** Total number of errors in RX and TX */ 639 struct net_stats_pkts errors; 640 641 /** Total number of errors in RX and TX */ 642 struct net_stats_eth_errors error_details; 643 644 /** Total number of flow control errors in RX and TX */ 645 struct net_stats_eth_flow flow_control; 646 647 /** Total number of checksum errors in RX and TX */ 648 struct net_stats_eth_csum csum; 649 650 /** Total number of hardware timestamp errors in RX and TX */ 651 struct net_stats_eth_hw_timestamp hw_timestamp; 652 653 /** Total number of collisions */ 654 net_stats_t collisions; 655 656 /** Total number of dropped TX packets */ 657 net_stats_t tx_dropped; 658 659 /** Total number of TX timeout errors */ 660 net_stats_t tx_timeout_count; 661 662 /** Total number of TX queue restarts */ 663 net_stats_t tx_restart_queue; 664 665 /** Total number of RX unknown protocol packets */ 666 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 struct net_stats_ppp { 678 /** Total number of bytes received and sent */ 679 struct net_stats_bytes bytes; 680 681 /** Total number of packets received and sent */ 682 struct net_stats_pkts pkts; 683 684 /** Number of received and dropped PPP frames. */ 685 net_stats_t drop; 686 687 /** Number of received PPP frames with a bad checksum. */ 688 net_stats_t chkerr; 689 }; 690 691 /** 692 * @brief All Wi-Fi management statistics 693 */ 694 struct net_stats_sta_mgmt { 695 /** Number of received beacons */ 696 net_stats_t beacons_rx; 697 698 /** Number of missed beacons */ 699 net_stats_t beacons_miss; 700 }; 701 702 /** 703 * @brief All Wi-Fi specific statistics 704 */ 705 struct net_stats_wifi { 706 /** Total number of beacon errors */ 707 struct net_stats_sta_mgmt sta_mgmt; 708 709 /** Total number of bytes received and sent */ 710 struct net_stats_bytes bytes; 711 712 /** Total number of packets received and sent */ 713 struct net_stats_pkts pkts; 714 715 /** Total number of broadcast packets received and sent */ 716 struct net_stats_pkts broadcast; 717 718 /** Total number of multicast packets received and sent */ 719 struct net_stats_pkts multicast; 720 721 /** Total number of errors in RX and TX */ 722 struct net_stats_pkts errors; 723 724 /** Total number of unicast packets received and sent */ 725 struct net_stats_pkts unicast; 726 727 /** Total number of dropped packets at received and sent*/ 728 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 #define NET_STATS_GET_METRIC_NAME(_name) _name 939 #define NET_STATS_GET_COLLECTOR_NAME(dev_id, sfx) net_stats_##dev_id##_##sfx##_collector 940 #define NET_STATS_GET_VAR(dev_id, sfx, var) zephyr_net_##var 941 #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 _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 _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 _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 _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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #define NET_STATS_PROMETHEUS_RX_TIME(iface, dev_id, sfx) 1415 #endif 1416 1417 #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 #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 #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 #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 #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_ */ 1558