/** @file * @brief Network statistics * * Network statistics data. This should only be enabled when * debugging as it consumes memory. */ /* * Copyright (c) 2016 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __NET_STATS_H #define __NET_STATS_H #include #ifdef __cplusplus extern "C" { #endif typedef uint32_t net_stats_t; struct net_stats_ip { /** Number of received packets at the IP layer. */ net_stats_t recv; /** Number of sent packets at the IP layer. */ net_stats_t sent; /** Number of forwarded packets at the IP layer. */ net_stats_t forwarded; /** Number of dropped packets at the IP layer. */ net_stats_t drop; }; struct net_stats_ip_errors { /** Number of packets dropped due to wrong IP version * or header length. */ net_stats_t vhlerr; /** Number of packets dropped due to wrong IP length, high byte. */ net_stats_t hblenerr; /** Number of packets dropped due to wrong IP length, low byte. */ net_stats_t lblenerr; /** Number of packets dropped because they were IP fragments. */ net_stats_t fragerr; /** Number of packets dropped due to IP checksum errors. */ net_stats_t chkerr; /** Number of packets dropped because they were neither ICMP, * UDP nor TCP. */ net_stats_t protoerr; }; struct net_stats_icmp { /** Number of received ICMP packets. */ net_stats_t recv; /** Number of sent ICMP packets. */ net_stats_t sent; /** Number of dropped ICMP packets. */ net_stats_t drop; /** Number of ICMP packets with a wrong type. */ net_stats_t typeerr; /** Number of ICMP packets with a bad checksum. */ net_stats_t chkerr; }; struct net_stats_tcp { /** Number of recived TCP segments. */ net_stats_t recv; /** Number of sent TCP segments. */ net_stats_t sent; /** Number of dropped TCP segments. */ net_stats_t drop; /** Number of TCP segments with a bad checksum. */ net_stats_t chkerr; /** Number of TCP segments with a bad ACK number. */ net_stats_t ackerr; /** Number of received TCP RST (reset) segments. */ net_stats_t rst; /** Number of retransmitted TCP segments. */ net_stats_t rexmit; /** Number of dropped SYNs because too few connections were * available. */ net_stats_t syndrop; /** Number of SYNs for closed ports, triggering a RST. */ net_stats_t synrst; }; struct net_stats_udp { /** Number of dropped UDP segments. */ net_stats_t drop; /** Number of recived UDP segments. */ net_stats_t recv; /** Number of sent UDP segments. */ net_stats_t sent; /** Number of UDP segments with a bad checksum. */ net_stats_t chkerr; }; struct net_stats_ipv6_nd { net_stats_t drop; net_stats_t recv; net_stats_t sent; }; struct net_stats_rpl_dis { /** Number of received DIS packets. */ net_stats_t recv; /** Number of sent DIS packets. */ net_stats_t sent; /** Number of dropped DIS packets. */ net_stats_t drop; }; struct net_stats_rpl_dio { /** Number of received DIO packets. */ net_stats_t recv; /** Number of sent DIO packets. */ net_stats_t sent; /** Number of dropped DIO packets. */ net_stats_t drop; /** Number of DIO intervals. */ net_stats_t interval; }; struct net_stats_rpl_dao { /** Number of received DAO packets. */ net_stats_t recv; /** Number of sent DAO packets. */ net_stats_t sent; /** Number of dropped DAO packets. */ net_stats_t drop; /** Number of forwarded DAO packets. */ net_stats_t forwarded; }; struct net_stats_rpl_dao_ack { /** Number of received DAO-ACK packets. */ net_stats_t recv; /** Number of sent DAO-ACK packets. */ net_stats_t sent; /** Number of dropped DAO-ACK packets. */ net_stats_t drop; }; struct net_stats_rpl { uint16_t mem_overflows; uint16_t local_repairs; uint16_t global_repairs; uint16_t malformed_msgs; uint16_t resets; uint16_t parent_switch; uint16_t forward_errors; uint16_t loop_errors; uint16_t loop_warnings; uint16_t root_repairs; struct net_stats_rpl_dis dis; struct net_stats_rpl_dio dio; struct net_stats_rpl_dao dao; struct net_stats_rpl_dao_ack dao_ack; }; struct net_stats { net_stats_t processing_error; struct net_stats_ip_errors ip_errors; #if defined(CONFIG_NET_STATISTICS_IPV6) struct net_stats_ip ipv6; #endif #if defined(CONFIG_NET_STATISTICS_IPV4) struct net_stats_ip ipv4; #endif #if defined(CONFIG_NET_STATISTICS_ICMP) struct net_stats_icmp icmp; #endif #if defined(CONFIG_NET_STATISTICS_TCP) struct net_stats_tcp tcp; #endif #if defined(CONFIG_NET_STATISTICS_UDP) struct net_stats_udp udp; #endif #if defined(CONFIG_NET_STATISTICS_IPV6_ND) struct net_stats_ipv6_nd ipv6_nd; #endif #if defined(CONFIG_NET_STATISTICS_RPL) struct net_stats_rpl rpl; #endif }; #if defined(CONFIG_NET_STATISTICS_USER_API) /* Management part definitions */ #include #define _NET_STATS_LAYER NET_MGMT_LAYER_L3 #define _NET_STATS_CODE 0x101 #define _NET_STATS_BASE (NET_MGMT_LAYER(_NET_STATS_LAYER) | \ NET_MGMT_LAYER_CODE(_NET_STATS_CODE)) enum net_request_stats_cmd { NET_REQUEST_STATS_CMD_GET_ALL = 1, NET_REQUEST_STATS_CMD_GET_PROCESSING_ERROR, NET_REQUEST_STATS_CMD_GET_IP_ERRORS, NET_REQUEST_STATS_CMD_GET_IPV4, NET_REQUEST_STATS_CMD_GET_IPV6, NET_REQUEST_STATS_CMD_GET_IPV6_ND, NET_REQUEST_STATS_CMD_GET_ICMP, NET_REQUEST_STATS_CMD_GET_UDP, NET_REQUEST_STATS_CMD_GET_TCP, NET_REQUEST_STATS_CMD_GET_RPL, }; #define NET_REQUEST_STATS_GET_ALL \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_ALL) //NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_ALL); #define NET_REQUEST_STATS_GET_PROCESSING_ERROR \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_PROCESSING_ERROR) //NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_PROCESSING_ERROR); #define NET_REQUEST_STATS_GET_IP_ERRORS \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IP_ERRORS) //NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IP_ERRORS); #if defined(CONFIG_NET_STATISTICS_IPV4) #define NET_REQUEST_STATS_GET_IPV4 \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV4) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV4); #endif /* CONFIG_NET_STATISTICS_IPV4 */ #if defined(CONFIG_NET_STATISTICS_IPV6) #define NET_REQUEST_STATS_GET_IPV6 \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV6) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV6); #endif /* CONFIG_NET_STATISTICS_IPV6 */ #if defined(CONFIG_NET_STATISTICS_IPV6_ND) #define NET_REQUEST_STATS_GET_IPV6_ND \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_IPV6_ND) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_IPV6_ND); #endif /* CONFIG_NET_STATISTICS_IPV6_ND */ #if defined(CONFIG_NET_STATISTICS_ICMP) #define NET_REQUEST_STATS_GET_ICMP \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_ICMP) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_ICMP); #endif /* CONFIG_NET_STATISTICS_ICMP */ #if defined(CONFIG_NET_STATISTICS_UDP) #define NET_REQUEST_STATS_GET_UDP \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_UDP) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_UDP); #endif /* CONFIG_NET_STATISTICS_UDP */ #if defined(CONFIG_NET_STATISTICS_TCP) #define NET_REQUEST_STATS_GET_TCP \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_TCP) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_TCP); #endif /* CONFIG_NET_STATISTICS_TCP */ #if defined(CONFIG_NET_STATISTICS_RPL) #define NET_REQUEST_STATS_GET_RPL \ (_NET_STATS_BASE | NET_REQUEST_STATS_CMD_GET_RPL) NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_STATS_GET_RPL); #endif /* CONFIG_NET_STATISTICS_RPL */ #endif /* CONFIG_NET_STATISTICS_USER_API */ #ifdef __cplusplus } #endif #endif /* __NET_STATS_H */