mpls: Packet stats
authorRobert Shearman <rshearma@brocade.com>
Mon, 16 Jan 2017 14:16:37 +0000 (14:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 17 Jan 2017 19:38:43 +0000 (14:38 -0500)
commit27d691056bde4a6feca5e83fd92b787332c46302
treee398b583d3fb116607b78a79337c2e3be5203cbe
parentaefb4d4ad83b608cb8e0cab8d3cd8e57d3f91feb
mpls: Packet stats

Having MPLS packet stats is useful for observing network operation and
for diagnosing network problems. In the absence of anything better,
RFC2863 and RFC3813 are used for guidance for which stats to expose
and the semantics of them. In particular rx_noroutes maps to in
unknown protos in RFC2863. The stats are exposed to userspace via
AF_MPLS attributes embedded in the IFLA_STATS_AF_SPEC attribute of
RTM_GETSTATS messages.

All the introduced fields are 64-bit, even error ones, to ensure no
overflow with long uptimes. Per-CPU counters are used to avoid
cache-line contention on the commonly used fields. The other fields
have also been made per-CPU for code to avoid performance problems in
error conditions on the assumption that on some platforms the cost of
atomic operations could be more expensive than sending the packet
(which is what would be done in the success case). If that's not the
case, we could instead not use per-CPU counters for these fields.

Only unicast and non-fragment are exposed at the moment, but other
counters can be exposed in the future either by adding to the end of
struct mpls_link_stats or by additional netlink attributes in the
AF_MPLS IFLA_STATS_AF_SPEC nested attribute.

Signed-off-by: Robert Shearman <rshearma@brocade.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/mpls.h
net/mpls/af_mpls.c
net/mpls/internal.h
net/mpls/mpls_iptunnel.c