IP Statistics
The Linux kernel keeps several sets of statistics about
different events and conditions that can be useful for accounting, debugging, or
confirming compatibility with standards. In this chapter, we will only briefly see what
statistics are kept by the IP protocol layer (without touching on the SNMP infrastructure)
and how they are updated. In previous chapters, especially when describing the various
functions, we saw a few cases where macros such as IP_INC_STATS were used to update the value of some counters.
Let's start with the data structure that contains all of the counters associated with
the IP protocol. It is called ip_statistics and is
defined in net/ipv4/ip_input.c. It is a vector with
two pointers, each one pointing to a vector of ipstats_mib
[*] structures (defined in include/net/snmp.h), one per CPU. The allocation of such vectors is done in
init_ipv4_mibs in net/ipv4/af_inet.c.
static int _ _init init_ipv4_mibs(void)
{
...
ip_statistics[0] = alloc_percpu(struct ipstats_mib);
ip_statistics[1] = alloc_percpu(struct ipstats_mib);
...
}The ipstats_mib structure is simply declared as an
array of unsigned long fields of size _
_IPSTATS_MIB_MAX, which happens to be the size of the IPSTATS_MIB_
XXX enumeration list in include/linux/snmp.h.
Here is the meaning of the IPSTATS_MIB_
XXX values, classified into four groups. For a more detailed
description, you can refer to RFC 2011 for IPv4 and RFC 2465 for IPv6. The IPSTATS_MIX_
XXX counters that are not used by IPv4 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access