From 35e2e83862e2ebc95c3c4c13541a38204019a805 Mon Sep 17 00:00:00 2001 From: drath Date: Sun, 10 May 2026 00:48:27 +0200 Subject: [PATCH] network added --- include/sys.h | 9 +++++++++ src/sys.c | 25 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/sys.h b/include/sys.h index 8c317ee..04242fe 100644 --- a/include/sys.h +++ b/include/sys.h @@ -19,6 +19,13 @@ struct disk_t { char mountpoint[256]; }; +struct network_t { + uint32_t download; + uint32_t upload; + char device[32]; +}; + + void sys_get_time(struct time_date_t *td); void sys_get_load_avg(double *load_avg); @@ -27,4 +34,6 @@ void sys_get_ram(struct memory_t *ram); void sys_get_disk(struct disk_t* disk); +void sys_get_network(struct network_t* network); + #endif //LINUXSMARTIE_SYS_H \ No newline at end of file diff --git a/src/sys.c b/src/sys.c index 754f9b2..95ff63c 100644 --- a/src/sys.c +++ b/src/sys.c @@ -1,5 +1,7 @@ #include "sys.h" +#include "utils.h" + #include #include #include @@ -42,4 +44,27 @@ void sys_get_disk(struct disk_t* disk) { disk->usage.free = diskData.f_bfree * diskData.f_frsize; disk->usage.used = (diskData.f_blocks - diskData.f_bfree) * diskData.f_frsize; disk->usage.total = diskData.f_blocks * diskData.f_frsize; +} + +void sys_get_network(struct network_t* network) { + struct _net_t { + struct timespec ts; + uint64_t rx; + uint64_t tx; + }; + + static char path[128]; + static char buf[32]; + static struct _net_t prev; + struct _net_t current = {}; + snprintf(path, sizeof(path), "/sys/class/net/%s/statistics", network->device); + + clock_gettime(CLOCK_MONOTONIC, ¤t.ts); + fast_read_num_u64(path, "rx_bytes", buf, ¤t.rx, 1); + fast_read_num_u64(path, "tx_bytes", buf, ¤t.rx, 1); + const double ts_diff = (current.ts.tv_sec - prev.ts.tv_sec) + (current.ts.tv_nsec - prev.ts.tv_nsec) / 1000000000.0; + network->download = (current.rx - prev.rx) / ts_diff; + network->upload = (current.tx - prev.tx) / ts_diff; + prev = current; + } \ No newline at end of file