112 |
|
|
113 |
|
#ifdef ALLBSD |
114 |
|
if(getifaddrs(&net) != 0){ |
115 |
< |
sg_set_error(SG_ERROR_GETIFADDRS, NULL); |
115 |
> |
sg_set_error_with_errno(SG_ERROR_GETIFADDRS, NULL); |
116 |
|
return NULL; |
117 |
|
} |
118 |
|
|
244 |
|
#ifdef LINUX |
245 |
|
f=fopen("/proc/net/dev", "r"); |
246 |
|
if(f==NULL){ |
247 |
< |
sg_set_error(SG_ERROR_OPEN, "/proc/net/dev"); |
247 |
> |
sg_set_error_with_errno(SG_ERROR_OPEN, "/proc/net/dev"); |
248 |
|
return NULL; |
249 |
|
} |
250 |
|
/* read the 2 lines.. Its the title, so we dont care :) */ |
390 |
|
return diff; |
391 |
|
} |
392 |
|
|
393 |
+ |
int sg_network_io_compare_name(const void *va, const void *vb) { |
394 |
+ |
const sg_network_io_stats *a = (const sg_network_io_stats *)va; |
395 |
+ |
const sg_network_io_stats *b = (const sg_network_io_stats *)vb; |
396 |
+ |
|
397 |
+ |
return strcmp(a->interface_name, b->interface_name); |
398 |
+ |
} |
399 |
+ |
|
400 |
|
/* NETWORK INTERFACE STATS */ |
401 |
|
|
402 |
|
static void network_iface_stat_init(sg_network_iface_stats *s) { |
437 |
|
|
438 |
|
#ifdef ALLBSD |
439 |
|
if(getifaddrs(&net) != 0){ |
440 |
< |
sg_set_error(SG_ERROR_GETIFADDRS, NULL); |
440 |
> |
sg_set_error_with_errno(SG_ERROR_GETIFADDRS, NULL); |
441 |
|
return NULL; |
442 |
|
} |
443 |
|
|
545 |
|
} |
546 |
|
|
547 |
|
if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0) { |
548 |
< |
sg_set_error(SG_ERROR_SOCKET, NULL); |
548 |
> |
sg_set_error_with_errno(SG_ERROR_SOCKET, NULL); |
549 |
|
return NULL; |
550 |
|
} |
551 |
|
|
604 |
|
#ifdef LINUX |
605 |
|
f = fopen("/proc/net/dev", "r"); |
606 |
|
if(f == NULL){ |
607 |
< |
sg_set_error(SG_ERROR_OPEN, "/proc/net/dev"); |
607 |
> |
sg_set_error_with_errno(SG_ERROR_OPEN, "/proc/net/dev"); |
608 |
|
return NULL; |
609 |
|
} |
610 |
|
|
611 |
|
/* Setup stuff so we can do the ioctl to get the info */ |
612 |
|
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ |
613 |
< |
sg_set_error(SG_ERROR_SOCKET, NULL); |
613 |
> |
sg_set_error_with_errno(SG_ERROR_SOCKET, NULL); |
614 |
|
return NULL; |
615 |
|
} |
616 |
|
|
693 |
|
#endif |
694 |
|
*entries = ifaces; |
695 |
|
return network_iface_stats; |
696 |
+ |
} |
697 |
+ |
|
698 |
+ |
int sg_network_iface_compare_name(const void *va, const void *vb) { |
699 |
+ |
const sg_network_iface_stats *a = (const sg_network_iface_stats *)va; |
700 |
+ |
const sg_network_iface_stats *b = (const sg_network_iface_stats *)vb; |
701 |
+ |
|
702 |
+ |
return strcmp(a->interface_name, b->interface_name); |
703 |
|
} |
704 |
|
|