1 |
Network Statistics |
2 |
================== |
3 |
|
4 |
$Id$ |
5 |
|
6 |
Data Structure |
7 |
-------------- |
8 |
|
9 |
All network statistics return a structure of type network_stat_t that |
10 |
looks like this: |
11 |
|
12 |
typedef struct{ |
13 |
char *interface_name; |
14 |
long long tx; |
15 |
long long rx; |
16 |
time_t systime; |
17 |
}network_stat_t; |
18 |
|
19 |
interface_name is the name know to the operating system. |
20 |
(eg. on linux is might be eth0) |
21 |
tx is the number of bytes transmitted. |
22 |
rx is the number of bytes received. |
23 |
sysname is the time period over which tx and rx were |
24 |
transferred. |
25 |
|
26 |
Functions |
27 |
--------- |
28 |
|
29 |
network_stat_t *get_network_stats(int *entries); |
30 |
|
31 |
network_stat_t *get_network_stats_diff(int *entries); |
32 |
|
33 |
Both calls take a pointer to an int, "entries", which is filled with |
34 |
the number of network interfaces the machine has. This is needed to |
35 |
know how many network_stat_t structures have been returned. A pointer |
36 |
is returned to the first network_stat_t. |
37 |
|
38 |
get_network_stats returns the network traffic stored in the kernel |
39 |
which holds the amount of data transferred since bootup. On some |
40 |
platforms, such as Solaris 7, this value is stored in a 32bit int, so |
41 |
wraps around when it reaches 4GB. Other platforms, such as Solaris 8, |
42 |
hold the value in a 64bit int, which wraps somewhere near 17 million |
43 |
terabytes. |
44 |
|
45 |
get_network_stats_diff is the same as get_network_stats except it will |
46 |
return the difference since the last call. So, for instance a call to |
47 |
get_network_stats_diff is made, and called again 5 seconds later. Over that |
48 |
time, 20 bytes of traffic was transmitted and 10 bytes received. Tx will |
49 |
store 20, rx will store 10 and systime will store 5. This function copes |
50 |
with wrap arounds by the O/S so should be seemless to use. |
51 |
|
52 |
Bugs |
53 |
---- |
54 |
|
55 |
On the very first call get_network_stats_diff will return the same as |
56 |
get_network_stats. After the first call it will always return the |
57 |
difference. |
58 |
|
59 |
On operating system that hold only 32bits of data there is a problem if |
60 |
the values wrap twice. For example, on Solaris 7 if 9GB is transferred |
61 |
and the operating system wraps at 4GB, the get_network_stats_diff |
62 |
function will return 5GB. |
63 |
|
64 |
Example |
65 |
------- |
66 |
|
67 |
A very basic example can be found in examples/network_traffic.c |