401 lines
8.7 KiB
C
401 lines
8.7 KiB
C
/*
|
|
* Copyright (c) 2016 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef __NET_STATS_H__
|
|
#define __NET_STATS_H__
|
|
|
|
#if defined(CONFIG_NET_STATISTICS)
|
|
|
|
#include <net/net_ip.h>
|
|
#include <net/net_stats.h>
|
|
|
|
extern struct net_stats net_stats;
|
|
|
|
#define GET_STAT(s) net_stats.s
|
|
|
|
/* Core stats */
|
|
|
|
static inline void net_stats_update_processing_error(void)
|
|
{
|
|
net_stats.processing_error++;
|
|
}
|
|
|
|
static inline void net_stats_update_ip_errors_protoerr(void)
|
|
{
|
|
net_stats.ip_errors.protoerr++;
|
|
}
|
|
|
|
static inline void net_stats_update_ip_errors_vhlerr(void)
|
|
{
|
|
net_stats.ip_errors.vhlerr++;
|
|
}
|
|
|
|
static inline void net_stats_update_bytes_recv(u32_t bytes)
|
|
{
|
|
net_stats.bytes.received += bytes;
|
|
}
|
|
|
|
static inline void net_stats_update_bytes_sent(u32_t bytes)
|
|
{
|
|
net_stats.bytes.sent += bytes;
|
|
}
|
|
#else
|
|
#define net_stats_update_processing_error()
|
|
#define net_stats_update_ip_errors_protoerr()
|
|
#define net_stats_update_ip_errors_vhlerr()
|
|
#define net_stats_update_bytes_recv(...)
|
|
#define net_stats_update_bytes_sent(...)
|
|
#endif /* CONFIG_NET_STATISTICS */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_IPV6)
|
|
/* IPv6 stats */
|
|
|
|
static inline void net_stats_update_ipv6_sent(void)
|
|
{
|
|
net_stats.ipv6.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv6_recv(void)
|
|
{
|
|
net_stats.ipv6.recv++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv6_drop(void)
|
|
{
|
|
net_stats.ipv6.drop++;
|
|
}
|
|
#else
|
|
#define net_stats_update_ipv6_drop()
|
|
#define net_stats_update_ipv6_sent()
|
|
#define net_stats_update_ipv6_recv()
|
|
#endif /* CONFIG_NET_STATISTICS_IPV6 */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_IPV6_ND)
|
|
/* IPv6 Neighbor Discovery stats*/
|
|
|
|
static inline void net_stats_update_ipv6_nd_sent(void)
|
|
{
|
|
net_stats.ipv6_nd.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv6_nd_recv(void)
|
|
{
|
|
net_stats.ipv6_nd.recv++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv6_nd_drop(void)
|
|
{
|
|
net_stats.ipv6_nd.drop++;
|
|
}
|
|
#else
|
|
#define net_stats_update_ipv6_nd_sent()
|
|
#define net_stats_update_ipv6_nd_recv()
|
|
#define net_stats_update_ipv6_nd_drop()
|
|
#endif /* CONFIG_NET_STATISTICS_IPV6_ND */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_IPV4)
|
|
/* IPv4 stats */
|
|
|
|
static inline void net_stats_update_ipv4_drop(void)
|
|
{
|
|
net_stats.ipv4.drop++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv4_sent(void)
|
|
{
|
|
net_stats.ipv4.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv4_recv(void)
|
|
{
|
|
net_stats.ipv4.recv++;
|
|
}
|
|
#else
|
|
#define net_stats_update_ipv4_drop()
|
|
#define net_stats_update_ipv4_sent()
|
|
#define net_stats_update_ipv4_recv()
|
|
#endif /* CONFIG_NET_STATISTICS_IPV4 */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_ICMP)
|
|
/* Common ICMPv4/ICMPv6 stats */
|
|
static inline void net_stats_update_icmp_sent(void)
|
|
{
|
|
net_stats.icmp.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_icmp_recv(void)
|
|
{
|
|
net_stats.icmp.recv++;
|
|
}
|
|
|
|
static inline void net_stats_update_icmp_drop(void)
|
|
{
|
|
net_stats.icmp.drop++;
|
|
}
|
|
#else
|
|
#define net_stats_update_icmp_sent()
|
|
#define net_stats_update_icmp_recv()
|
|
#define net_stats_update_icmp_drop()
|
|
#endif /* CONFIG_NET_STATISTICS_ICMP */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_UDP)
|
|
/* UDP stats */
|
|
static inline void net_stats_update_udp_sent(void)
|
|
{
|
|
net_stats.udp.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_udp_recv(void)
|
|
{
|
|
net_stats.udp.recv++;
|
|
}
|
|
|
|
static inline void net_stats_update_udp_drop(void)
|
|
{
|
|
net_stats.udp.drop++;
|
|
}
|
|
|
|
static inline void net_stats_update_udp_chkerr(void)
|
|
{
|
|
net_stats.udp.chkerr++;
|
|
}
|
|
#else
|
|
#define net_stats_update_udp_sent()
|
|
#define net_stats_update_udp_recv()
|
|
#define net_stats_update_udp_drop()
|
|
#define net_stats_update_udp_chkerr()
|
|
#endif /* CONFIG_NET_STATISTICS_UDP */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_TCP)
|
|
/* TCP stats */
|
|
static inline void net_stats_update_tcp_sent(u32_t bytes)
|
|
{
|
|
net_stats.tcp.bytes.sent += bytes;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_recv(u32_t bytes)
|
|
{
|
|
net_stats.tcp.bytes.received += bytes;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_resent(u32_t bytes)
|
|
{
|
|
net_stats.tcp.resent += bytes;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_sent(void)
|
|
{
|
|
net_stats.tcp.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_recv(void)
|
|
{
|
|
net_stats.tcp.recv++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_drop(void)
|
|
{
|
|
net_stats.tcp.drop++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_rst(void)
|
|
{
|
|
net_stats.tcp.rst++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_conndrop(void)
|
|
{
|
|
net_stats.tcp.conndrop++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_connrst(void)
|
|
{
|
|
net_stats.tcp.connrst++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_chkerr(void)
|
|
{
|
|
net_stats.tcp.chkerr++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_ackerr(void)
|
|
{
|
|
net_stats.tcp.ackerr++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_rsterr(void)
|
|
{
|
|
net_stats.tcp.rsterr++;
|
|
}
|
|
|
|
static inline void net_stats_update_tcp_seg_rexmit(void)
|
|
{
|
|
net_stats.tcp.rexmit++;
|
|
}
|
|
#else
|
|
#define net_stats_update_tcp_sent(...)
|
|
#define net_stats_update_tcp_resent(...)
|
|
#define net_stats_update_tcp_recv(...)
|
|
#define net_stats_update_tcp_seg_sent()
|
|
#define net_stats_update_tcp_seg_recv()
|
|
#define net_stats_update_tcp_seg_drop()
|
|
#define net_stats_update_tcp_seg_rst()
|
|
#define net_stats_update_tcp_seg_conndrop()
|
|
#define net_stats_update_tcp_seg_connrst()
|
|
#define net_stats_update_tcp_seg_chkerr()
|
|
#define net_stats_update_tcp_seg_ackerr()
|
|
#define net_stats_update_tcp_seg_rsterr()
|
|
#define net_stats_update_tcp_seg_rexmit()
|
|
#endif /* CONFIG_NET_STATISTICS_TCP */
|
|
|
|
static inline void net_stats_update_per_proto_recv(enum net_ip_protocol proto)
|
|
{
|
|
if (IS_ENABLED(CONFIG_NET_UDP) && proto == IPPROTO_UDP) {
|
|
net_stats_update_udp_recv();
|
|
} else if (IS_ENABLED(CONFIG_NET_TCP) && proto == IPPROTO_TCP) {
|
|
net_stats_update_tcp_seg_recv();
|
|
}
|
|
}
|
|
|
|
static inline void net_stats_update_per_proto_drop(enum net_ip_protocol proto)
|
|
{
|
|
if (IS_ENABLED(CONFIG_NET_UDP) && proto == IPPROTO_UDP) {
|
|
net_stats_update_udp_drop();
|
|
} else if (IS_ENABLED(CONFIG_NET_TCP) && proto == IPPROTO_TCP) {
|
|
net_stats_update_tcp_seg_drop();
|
|
}
|
|
}
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_RPL)
|
|
/* RPL stats */
|
|
static inline void net_stats_update_rpl_resets(void)
|
|
{
|
|
net_stats.rpl.resets++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_mem_overflows(void)
|
|
{
|
|
net_stats.rpl.mem_overflows++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_parent_switch(void)
|
|
{
|
|
net_stats.rpl.parent_switch++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_local_repairs(void)
|
|
{
|
|
net_stats.rpl.local_repairs++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_global_repairs(void)
|
|
{
|
|
net_stats.rpl.global_repairs++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_root_repairs(void)
|
|
{
|
|
net_stats.rpl.root_repairs++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_malformed_msgs(void)
|
|
{
|
|
net_stats.rpl.malformed_msgs++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_forward_errors(void)
|
|
{
|
|
net_stats.rpl.forward_errors++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_loop_errors(void)
|
|
{
|
|
net_stats.rpl.loop_errors++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_loop_warnings(void)
|
|
{
|
|
net_stats.rpl.loop_warnings++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_dis_sent(void)
|
|
{
|
|
net_stats.rpl.dis.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_dio_sent(void)
|
|
{
|
|
net_stats.rpl.dio.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_dao_sent(void)
|
|
{
|
|
net_stats.rpl.dao.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_dao_forwarded(void)
|
|
{
|
|
net_stats.rpl.dao.forwarded++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_dao_ack_sent(void)
|
|
{
|
|
net_stats.rpl.dao_ack.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_rpl_dao_ack_recv(void)
|
|
{
|
|
net_stats.rpl.dao_ack.recv++;
|
|
}
|
|
#else
|
|
#define net_stats_update_rpl_resets()
|
|
#define net_stats_update_rpl_mem_overflows()
|
|
#define net_stats_update_rpl_parent_switch()
|
|
#define net_stats_update_rpl_local_repairs()
|
|
#define net_stats_update_rpl_global_repairs()
|
|
#define net_stats_update_rpl_root_repairs()
|
|
#define net_stats_update_rpl_malformed_msgs()
|
|
#define net_stats_update_rpl_forward_errors()
|
|
#define net_stats_update_rpl_loop_errors()
|
|
#define net_stats_update_rpl_loop_warnings()
|
|
#define net_stats_update_rpl_dis_sent()
|
|
#define net_stats_update_rpl_dio_sent()
|
|
#define net_stats_update_rpl_dao_sent()
|
|
#define net_stats_update_rpl_dao_forwarded()
|
|
#define net_stats_update_rpl_dao_ack_sent()
|
|
#define net_stats_update_rpl_dao_ack_recv()
|
|
#endif /* CONFIG_NET_STATISTICS_RPL */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_MLD)
|
|
static inline void net_stats_update_ipv6_mld_recv(void)
|
|
{
|
|
net_stats.ipv6_mld.recv++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv6_mld_sent(void)
|
|
{
|
|
net_stats.ipv6_mld.sent++;
|
|
}
|
|
|
|
static inline void net_stats_update_ipv6_mld_drop(void)
|
|
{
|
|
net_stats.ipv6_mld.drop++;
|
|
}
|
|
#else
|
|
#define net_stats_update_ipv6_mld_recv()
|
|
#define net_stats_update_ipv6_mld_sent()
|
|
#define net_stats_update_ipv6_mld_drop()
|
|
#endif /* CONFIG_NET_STATISTICS_MLD */
|
|
|
|
#if defined(CONFIG_NET_STATISTICS_PERIODIC_OUTPUT)
|
|
/* A simple periodic statistic printer, used only in net core */
|
|
void net_print_statistics(void);
|
|
#else
|
|
#define net_print_statistics()
|
|
#endif
|
|
|
|
#endif /* __NET_STATS_H__ */
|