Decouple the rate controller from Linux-specific Netlink calls to support other operating systems. This adds a macOS backend for interface statistics and an "observe-only" mode for platforms where traffic shaping is not yet implemented.
46 lines
1.0 KiB
Rust
46 lines
1.0 KiB
Rust
// SPDX-FileCopyrightText: 2022-Present Nils Andreas Svee mailto:contact@lochnair.net (github @Lochnair)
|
|
//
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
use rustix::fs::Timespec;
|
|
use rustix::time::{ClockId, clock_gettime};
|
|
|
|
pub struct Time {
|
|
time_s: u64,
|
|
time_ns: u64,
|
|
}
|
|
|
|
impl Time {
|
|
pub fn new(id: ClockId) -> Self {
|
|
let time: Timespec = clock_gettime(id);
|
|
Self {
|
|
time_s: time.tv_sec as u64,
|
|
time_ns: time.tv_nsec as u64,
|
|
}
|
|
}
|
|
|
|
pub fn get_time_since_midnight(&self) -> i64 {
|
|
(self.time_s as i64 % 86400 * 1000) + (self.time_ns as i64 / 1000000)
|
|
}
|
|
|
|
pub fn secs(&self) -> u64 {
|
|
self.time_s
|
|
}
|
|
|
|
pub fn nsecs(&self) -> u64 {
|
|
self.time_ns
|
|
}
|
|
|
|
pub fn as_nanos(&self) -> u64 {
|
|
self.time_s * 1_000_000_000 + self.time_ns
|
|
}
|
|
|
|
pub fn as_secs_f64(&self) -> f64 {
|
|
self.time_s as f64 + self.time_ns as f64 / 1_000_000_000.0
|
|
}
|
|
|
|
pub fn to_milliseconds(&self) -> u64 {
|
|
(self.time_s * 1000) + (self.time_ns / 1000000)
|
|
}
|
|
}
|