Files
OpenUniFi/src/sysinfo.h
T
Koda b37e0d6bce
Validate source documentation / generated-wiki (pull_request) Failing after 10s
refactor #1 + adding documentation
2026-07-19 20:25:12 +00:00

99 lines
3.4 KiB
C

#ifndef OPENUF_SYSINFO_H
#define OPENUF_SYSINFO_H
/*
* openuf - sysinfo.h
*
* Reads system statistics (CPU, RAM, interfaces, radios).
* All readings come directly from the Linux kernel:
*
* /proc/stat → CPU usage (deltas between two snapshots)
* /proc/meminfo → total/free/buffer/cache memory
* /proc/net/dev → rx/tx counters per interface
* /sys/class/net/ → speed, duplex, operstate, MAC
* iw dev <if> info → current channel, TX power
* iw dev <if> survey dump → channel utilization
*/
#include <stdbool.h>
/* ── Memory ─────────────────────────────────────────────────────── */
typedef struct {
long total_kb;
long free_kb;
long buffer_kb;
long cached_kb;
} mem_stats_t;
int sysinfo_mem(mem_stats_t *out);
/* ── CPU ─────────────────────────────────────────────────────────── */
/* Returns % CPU usage (0-100). The first call returns 0 (takes a snapshot).
* Subsequent calls compute the delta relative to the previous one.
* With a 10s interval this gives a good average of usage. */
int sysinfo_cpu_percent(void);
/* ── Network interface ─────────────────────────────────────────────── */
typedef struct {
char name[32];
char mac[32];
char ip[64];
bool up;
int speed; /* Mbps: 10/100/1000; -1 if not available */
bool full_duplex;
long long rx_bytes;
long long tx_bytes;
long long rx_packets;
long long tx_packets;
long long rx_errors;
long long tx_errors;
long long rx_dropped;
long long tx_dropped;
long long rx_frame;
long long rx_multicast;
} iface_stats_t;
int sysinfo_iface(const char *ifname, iface_stats_t *out);
/* ── Radio WiFi ─────────────────────────────────────────────────── */
typedef struct {
char name[32];
char iface[32];
int channel;
int tx_power;
int cu_total; /* % total channel usage */
int cu_self_tx; /* % time spent transmitting */
int cu_self_rx; /* % time spent receiving */
int num_sta;
int noise; /* dBm */
int nss; /* usable spatial streams */
int tx_antennas; /* configured TX chains */
int rx_antennas; /* configured RX chains */
long long tx_packets;
long long tx_retries;
long long tx_failed;
long long tx_duration; /* microseconds */
long long rx_duration; /* microseconds */
} radio_stats_t;
/* iface: "wlan0", "wlan1" */
int sysinfo_radio(const char *iface, radio_stats_t *out);
#define MAX_SCAN_RESULTS 128
typedef struct {
char bssid[32];
char essid[64];
int frequency;
int channel;
int signal; /* dBm */
int rssi; /* controller-compatible quality, 0-100 */
int age; /* seconds since last seen */
bool secured;
} wifi_scan_t;
/* Read the kernel's cached BSS list without starting a disruptive scan. */
int sysinfo_wifi_scan_cache(const char *iface, wifi_scan_t *out, int max_out);
#endif /* OPENUF_SYSINFO_H */