Provided by: libstatgrab-dev_0.92.1-1.2build1_amd64 bug

NAME

       sg_get_network_iface_stats,           sg_get_network_iface_stats_r,          sg_free_network_iface_stats,
       sg_network_iface_compare_name - get network interface statistics

SYNOPSIS

       #include <statgrab.h>

       sg_network_iface_stats *sg_get_network_iface_stats (size_t *entries);

       sg_network_iface_stats *sg_get_network_iface_stats_r (size_t *entries);

       sg_error sg_free_network_iface_stats (sg_network_iface_stats *data);

       int sg_network_iface_compare_name (const void *va, const void *vb);

DESCRIPTION

       The functions sg_get_network_iface_stats() and sg_get_network_iface_stats_r() return statistics about the
       network interfaces in the machine. Specifically, they return the  speed  of  the  interface,  the  duplex
       state,  and  whether  it is currently up. Both functions take an optional entries parameter, which points
       (when given) to a size_t to take the number of returned vector entries.

       API Shortcut
       ┌──────────────────────────────┬──────────────────────────┬────────────────────────────┐
       │ function                     │ returns                  │ data owner                 │
       ├──────────────────────────────┼──────────────────────────┼────────────────────────────┤
       │ sg_get_network_iface_stats   │ sg_network_iface_stats * │ libstatgrab (thread local) │
       ├──────────────────────────────┼──────────────────────────┼────────────────────────────┤
       │ sg_get_network_iface_stats_r │ sg_network_iface_stats * │ caller                     │
       └──────────────────────────────┴──────────────────────────┴────────────────────────────┘

       The sg_network_iface_stats vectors received  from  sg_get_network_iface_stats_r()  must  be  freed  using
       sg_free_network_iface_stats() when not needed any more. The caller is responsible for doing it.

       Additionally a support function for qsort(3) in available: sg_network_iface_compare_name().

       Sort Example

       size_t entries;
       sg_network_iface_stats *network_iface_stats = NULL;
       while( NULL != ( network_iface_stats = sg_get_network_iface_stats(&entries) ) ) {
           /* order entries alphabetically using the mountpoint */
           qsort( network_iface_stats, entries, sizeof(network_iface_stats[0]), &sg_network_iface_compare_name );
           show_network_iface_stats( network_iface_stats );
       }

RETURN VALUES

       The sg_get_network_iface_stats returns a pointer to a structure of type sg_network_iface_stats.

       typedef enum{
               SG_IFACE_DUPLEX_FULL,
               SG_IFACE_DUPLEX_HALF,
               SG_IFACE_DUPLEX_UNKNOWN
       }sg_iface_duplex;

       Note: The SG_IFACE_DUPLEX_UNKNOWN value could mean that duplex hasn't been negotiated yet.

       typedef struct {
               char *interface_name;
               int speed;
               sg_iface_duplex duplex;
               int up;
               time_t systime;
       } sg_network_iface_stats;

       interface_name
              The name known to the operating system.  (eg. on linux it might be eth0)

       speed  The speed of the interface, in megabits/sec.

       duplex The duplex state the interface is in. See sg_iface_duplex for permitted values.

       up     Whether the interface is up.

       systime
              The timestamp when the above stats where collected in seconds since epoch

BUGS

       Getting  specific details may require elevated privileges, eg. on Linux the interface speed isn't visible
       to non-privileged processes.

       The compare functions exist rather for backward compatibility than for functionality enhancements. Limit‐
       ed flexibility (e.g. reverse order) and lack of optimising opportunities for the compiler  leads  to  the
       recommendation to implement the required compare routines locally.

SEE ALSO

       statgrab(3)

WEBSITE

       ⟨https://libstatgrab.org/⟩

libstatgrab                                        2019-03-08                      sg_get_network_iface_stats(3)