2 #include "utils/mono-networkinterfaces.h"
8 /* FIXME: bsds untested */
11 * mono_networkinterface_list:
12 * @size: a pointer to a location where the size of the returned array is stored
14 * Return an array of names for the interfaces currently on the system.
15 * The size of the array is stored in @size.
18 mono_networkinterface_list (int *size
)
26 f
= fopen ("/proc/net/dev", "r");
30 if (!fgets (buf
, sizeof (buf
) / sizeof (char), f
))
33 if (!fgets (buf
, sizeof (buf
) / sizeof (char), f
))
36 while (fgets (buf
, sizeof (buf
), f
) != NULL
) {
38 buf
[sizeof(buf
) - 1] = 0;
39 if ((ptr
= strchr (buf
, ':')) == NULL
|| (*ptr
++ = 0, sscanf (buf
, "%s", name
) != 1))
49 nilist
= g_realloc (nilist
, count
* sizeof (void*));
50 nilist
[i
++] = g_strdup (name
);
59 nilist
= g_malloc (sizeof (void*));
65 * mono_network_get_data:
66 * @name: name of the interface
67 * @data: description of data to return
69 * Return a data item of a network adapter like bytes sent per sec, etc
70 * according to the @data argumet.
73 mono_network_get_data (char* name
, MonoNetworkData data
, MonoNetworkError
*error
)
80 unsigned long rx_bytes
, rx_packets
, rx_errs
, rx_drops
,
81 rx_fifo
, rx_frame
, tx_bytes
, tx_packets
, tx_errs
, tx_drops
,
82 tx_fifo
, tx_colls
, tx_carrier
, rx_multi
;
84 *error
= MONO_NETWORK_ERROR_OTHER
;
86 f
= fopen ("/proc/net/dev", "r");
90 if (!fgets (buf
, sizeof (buf
) / sizeof (char), f
))
93 if (!fgets (buf
, sizeof (buf
) / sizeof (char), f
))
96 while (fgets (buf
, sizeof (buf
), f
) != NULL
) {
99 buf
[sizeof (buf
) - 1] = 0;
100 /* FIXME: This might potentially cause a buffer overflow for cname. */
101 if ((ptr
= strchr (buf
, ':')) == NULL
||
102 (*ptr
++ = 0, sscanf (buf
, "%s", cname
) != 1))
105 if (strcmp (name
, cname
) != 0) continue;
107 if (sscanf (ptr
, "%ld%ld%ld%ld%ld%ld%ld%*d%ld%ld%ld%ld%ld%ld%ld",
108 &rx_bytes
, &rx_packets
, &rx_errs
, &rx_drops
,
109 &rx_fifo
, &rx_frame
, &rx_multi
,
110 &tx_bytes
, &tx_packets
, &tx_errs
, &tx_drops
,
111 &tx_fifo
, &tx_colls
, &tx_carrier
) != 14)
115 case MONO_NETWORK_BYTESSENT
:
117 *error
= MONO_NETWORK_ERROR_NONE
;
119 case MONO_NETWORK_BYTESREC
:
121 *error
= MONO_NETWORK_ERROR_NONE
;
123 case MONO_NETWORK_BYTESTOTAL
:
124 val
= rx_bytes
+ tx_bytes
;
125 *error
= MONO_NETWORK_ERROR_NONE
;