Provided by: libstatgrab-dev_0.17-0ubuntu1_amd64 bug


       sg_get_network_io_stats, sg_get_network_io_stats_diff - get network statistics


       #include <statgrab.h>

       sg_network_io_stats *sg_get_network_io_stats(int *entries);

       sg_network_io_stats *sg_get_network_io_stats_diff(int *entries);


       Both  calls  take a pointer to an int, entries, which is filled with the number of network
       interfaces the machine has. This is needed to know how many sg_network_io_stats structures
       have been returned. A pointer is returned to the first sg_network_io_stats.

       sg_get_network_io_stats  returns  the network traffic stored in the kernel which holds the
       amount of data transferred since bootup. On some platforms, such as Solaris 7, this  value
       is  stored  in  a 32bit int, so wraps around when it reaches 4GB. Other platforms, such as
       Solaris 8, hold the value in a 64bit int, which wraps somewhere near 17 million terabytes.

       sg_get_network_io_stats also returns the number of packets  sent  and  received,  and  the
       number of errors that have occured. It also makes the number of collisions available.

       sg_get_network_io_stats_diff  is the same as sg_get_network_io_stats except it will return
       the   difference   since   the   last   call.    So,    for    instance    a    call    to
       sg_get_network_io_stats_diff is made, and called again 5 seconds later. Over that time, 20
       bytes of traffic was transmitted and 10 bytes received. Tx will store 20, rx will store 10
       and  systime  will  store 5. This function copes with wrap arounds by the O/S so should be
       seemless to use.


       All network statistics return a pointer to a structure of type sg_network_io_stats.

       typedef struct{
               char *interface_name;
               long long tx;
               long long rx;
               long long ipackets;
               long long opackets;
               long long ierrors;
               long long oerrors;
               long long collisions;
               time_t systime;

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

       tx     The number of bytes transmitted.

       rx     The number of bytes received.

              The number of packets received.

              The number of packets transmitted.

              The number of receive errors.

              The number of transmit errors.

              The number of collisions.

              The time period over which tx and rx were transferred.


       On  the  very  first  call  sg_get_network_io_stats_diff   will   return   the   same   as
       sg_get_network_io_stats. After the first call it will always return the difference.

       On  operating  system  that hold only 32bits of data there is a problem if the values wrap
       twice. For example, on Solaris 7 if 9GB is transferred and the operating system  wraps  at
       4GB, the sg_get_network_io_stats_diff function will return 5GB.