Xinqi Bao's Git
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
;
68 if (getifaddrs(&ifal
) == -1) {
69 warn("getifaddrs failed");
73 for (ifa
= ifal
; ifa
; ifa
= ifa
->ifa_next
) {
74 if (!strcmp(ifa
->ifa_name
, interface
) &&
75 (ifd
= (struct if_data
*)ifa
->ifa_data
)) {
76 rxbytes
+= ifd
->ifi_ibytes
, if_ok
= 1;
81 warn("reading 'if_data' failed");
85 return oldrxbytes
? fmt_scaled((rxbytes
- oldrxbytes
) /
86 interval
* 1000) : NULL
;
90 netspeed_tx(const char *interface
)
92 struct ifaddrs
*ifal
, *ifa
;
95 static uint64_t txbytes
= 0;
96 extern const unsigned int interval
;
101 if (getifaddrs(&ifal
) == -1) {
102 warn("getifaddrs failed");
106 for (ifa
= ifal
; ifa
; ifa
= ifa
->ifa_next
) {
107 if (!strcmp(ifa
->ifa_name
, interface
) &&
108 (ifd
= (struct if_data
*)ifa
->ifa_data
)) {
109 txbytes
+= ifd
->ifi_obytes
, if_ok
= 1;
114 warn("reading 'if_data' failed");
118 return oldtxbytes
? fmt_scaled((txbytes
- oldtxbytes
) /
119 interval
* 1000) : NULL
;