Question

What does statistics in /proc/net/protocols in Linux OS mean?

cat /proc/net/protocols
protocol  size sockets  memory press maxhdr  slab module     cl co di ac io in de sh ss gs se re sp bi br ha uh gp em
PACKET     888      0      -1   NI       0   no   kernel      n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n
UNIX       752     40      -1   NI       0   yes  kernel      n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n
UDP-Lite   816      0      -1   NI       0   yes  kernel      y  y  y  n  y  y  y  n  y  y  y  y  y  n  y  y  y  y  n
RAW        792      0      -1   NI       0   yes  kernel      y  y  y  n  y  y  y  n  y  y  y  y  n  y  y  y  y  n  n
UDP        816      4       2   NI       0   yes  kernel      y  y  y  n  y  n  y  n  y  y  y  y  y  n  y  y  y  y  n
TCP       1656     29       1   no     272   yes  kernel      y  y  y  y  y  y  y  y  y  y  n  y  n  n  y  y  y  y  y
NETLINK    752      1      -1   NI       0   no   kernel      n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n  n
Was it helpful?

Solution

It has some statistics for each protocol and the summary methods of each protocol in Linux.

Unfortunatelly man 5 proc on RHEL 6.5 does not say anything about /proc/net/protocols. So I took a look at the source: http://lxr.free-electrons.com/source/net/core/sock.c?v=2.6.29#L2202 and http://lxr.free-electrons.com/source/include/net/sock.h#L924.

2169 static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
2170 {
2171         seq_printf(seq, "%-9s %4u %6d  %6d   %-3s %6u   %-3s  %-10s "
2172                         "%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
2173                    proto->name,
2174                    proto->obj_size,
2175                    sock_prot_inuse_get(seq_file_net(seq), proto),
2176                    proto->memory_allocated != NULL ? atomic_read(proto->memory_allocated) : -1,
2177                    proto->memory_pressure != NULL ? *proto->memory_pressure ? "yes" : "no" : "NI",
2178                    proto->max_header,
2179                    proto->slab == NULL ? "no" : "yes",
2180                    module_name(proto->owner),
2181                    proto_method_implemented(proto->close),
2182                    proto_method_implemented(proto->connect),
2183                    proto_method_implemented(proto->disconnect),
2184                    proto_method_implemented(proto->accept),
2185                    proto_method_implemented(proto->ioctl),
2186                    proto_method_implemented(proto->init),
2187                    proto_method_implemented(proto->destroy),
2188                    proto_method_implemented(proto->shutdown),
2189                    proto_method_implemented(proto->setsockopt),
2190                    proto_method_implemented(proto->getsockopt),
2191                    proto_method_implemented(proto->sendmsg),
2192                    proto_method_implemented(proto->recvmsg),
2193                    proto_method_implemented(proto->sendpage),
2194                    proto_method_implemented(proto->bind),
2195                    proto_method_implemented(proto->backlog_rcv),
2196                    proto_method_implemented(proto->hash),
2197                    proto_method_implemented(proto->unhash),
2198                    proto_method_implemented(proto->get_port),
2199                    proto_method_implemented(proto->enter_memory_pressure));
2200 }

So this is information that each protocol provides about itself.

Lets start with the final sections that have lots of "y" and "n".

2164 static char proto_method_implemented(const void *method)
2165 {
2166         return method == NULL ? 'n' : 'y';
2167 }

So it is just information if a particular method is implemented in protocol or not. For example the "cl" column is for close method. For example since TCP has "y" is the "close" column so TCP protocol implements close() and its proto strcut has a non null pointer in 'close' member:

924 struct proto {
925         void                    (*close)(struct sock *sk,
926                                         long timeout);

Some of the first columns in the outpit:

  1. Protocol name
  2. Size of protocol specific socket structure
  3. sockets - how many sockets there are now of that type
  4. memory - Current allocated memory
  5. press - memory_pressure - it is a flag that indicates working under memory pressure

and so far, you can look at the source yourself

Useful links:

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top