#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);
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.
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; }sg_network_io_stats;
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.