Skip to content
  • Roopa Prabhu's avatar
    rtnetlink: add new RTM_GETSTATS message to dump link stats · 10c9ead9
    Roopa Prabhu authored
    
    
    This patch adds a new RTM_GETSTATS message to query link stats via netlink
    from the kernel. RTM_NEWLINK also dumps stats today, but RTM_NEWLINK
    returns a lot more than just stats and is expensive in some cases when
    frequent polling for stats from userspace is a common operation.
    
    RTM_GETSTATS is an attempt to provide a light weight netlink message
    to explicity query only link stats from the kernel on an interface.
    The idea is to also keep it extensible so that new kinds of stats can be
    added to it in the future.
    
    This patch adds the following attribute for NETDEV stats:
    struct nla_policy ifla_stats_policy[IFLA_STATS_MAX + 1] = {
            [IFLA_STATS_LINK_64]  = { .len = sizeof(struct rtnl_link_stats64) },
    };
    
    Like any other rtnetlink message, RTM_GETSTATS can be used to get stats of
    a single interface or all interfaces with NLM_F_DUMP.
    
    Future possible new types of stat attributes:
    link af stats:
        - IFLA_STATS_LINK_IPV6  (nested. for ipv6 stats)
        - IFLA_STATS_LINK_MPLS  (nested. for mpls/mdev stats)
    extended stats:
        - IFLA_STATS_LINK_EXTENDED (nested. extended software netdev stats like bridge,
          vlan, vxlan etc)
        - IFLA_STATS_LINK_HW_EXTENDED (nested. extended hardware stats which are
          available via ethtool today)
    
    This patch also declares a filter mask for all stat attributes.
    User has to provide a mask of stats attributes to query. filter mask
    can be specified in the new hdr 'struct if_stats_msg' for stats messages.
    Other important field in the header is the ifindex.
    
    This api can also include attributes for global stats (eg tcp) in the future.
    When global stats are included in a stats msg, the ifindex in the header
    must be zero. A single stats message cannot contain both global and
    netdev specific stats. To easily distinguish them, netdev specific stat
    attributes name are prefixed with IFLA_STATS_LINK_
    
    Without any attributes in the filter_mask, no stats will be returned.
    
    This patch has been tested with mofified iproute2 ifstat.
    
    Suggested-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    10c9ead9