Xinqi Bao's Git
cd47daec4b2aec112808fd78bb13732d4579f313
1 /* See LICENSE file for copyright and license details. */
11 netspeed_rx(const char *interface
)
14 static uint64_t rxbytes
= 0;
15 extern const unsigned int interval
;
20 snprintf(path
, sizeof(path
),
21 "/sys/class/net/%s/statistics/rx_bytes", interface
);
22 if (pscanf(path
, "%llu", &rxbytes
) != 1) {
26 return oldrxbytes
? fmt_scaled((rxbytes
- oldrxbytes
) /
27 interval
* 1000) : NULL
;
31 netspeed_tx(const char *interface
)
34 static uint64_t txbytes
= 0;
35 extern const unsigned int interval
;
40 snprintf(path
, sizeof(path
),
41 "/sys/class/net/%s/statistics/tx_bytes", interface
);
42 if (pscanf(path
, "%llu", &txbytes
) != 1) {
46 return oldtxbytes
? fmt_scaled((txbytes
- oldtxbytes
) /
47 interval
* 1000) : NULL
;
49 #elif defined(__OpenBSD__)
52 #include <sys/types.h>
53 #include <sys/socket.h>
57 netspeed_rx(const char *interface
)
59 struct ifaddrs
*ifal
, *ifa
;
62 static uint64_t rxbytes
= 0;
63 extern const unsigned int interval
;
66 if (getifaddrs(&ifal
) == -1) {
67 warn("getifaddrs failed");
70 for (ifa
= ifal
; ifa
; ifa
= ifa
->ifa_next
) {
71 if (!strcmp(ifa
->ifa_name
, interface
) &&
72 (ifd
= (struct if_data
*)ifa
->ifa_data
)) {
73 rxbytes
+= ifd
->ifi_ibytes
, if_ok
= 1;
78 warn("reading 'if_data' failed");
82 return oldrxbytes
? fmt_scaled((rxbytes
- oldrxbytes
) /
83 interval
* 1000) : NULL
;
87 netspeed_tx(const char *interface
)
89 struct ifaddrs
*ifal
, *ifa
;
92 static uint64_t txbytes
= 0;
93 extern const unsigned int interval
;
96 if (getifaddrs(&ifal
) == -1) {
97 warn("getifaddrs failed");
100 for (ifa
= ifal
; ifa
; ifa
= ifa
->ifa_next
) {
101 if (!strcmp(ifa
->ifa_name
, interface
) &&
102 (ifd
= (struct if_data
*)ifa
->ifa_data
)) {
103 txbytes
+= ifd
->ifi_obytes
, if_ok
= 1;
108 warn("reading 'if_data' failed");
112 return oldtxbytes
? fmt_scaled((txbytes
- oldtxbytes
) /
113 interval
* 1000) : NULL
;