diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-08-10 12:16:18 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-08-31 13:25:40 +0200 |
| commit | f33aecedd72c0067a6d48b4e87f1eb36cbe48272 (patch) | |
| tree | 427653a6482ba8d71390eebd3eab89d59a234a26 /talpid-wireguard/src/wireguard_kernel | |
| parent | 41b4f8021fd8401e535585c3b12ad5ac6f5c982a (diff) | |
| download | mullvadvpn-f33aecedd72c0067a6d48b4e87f1eb36cbe48272.tar.xz mullvadvpn-f33aecedd72c0067a6d48b4e87f1eb36cbe48272.zip | |
Hide implementation-specific wg stats parsers
Diffstat (limited to 'talpid-wireguard/src/wireguard_kernel')
| -rw-r--r-- | talpid-wireguard/src/wireguard_kernel/mod.rs | 1 | ||||
| -rw-r--r-- | talpid-wireguard/src/wireguard_kernel/stats.rs | 32 |
2 files changed, 33 insertions, 0 deletions
diff --git a/talpid-wireguard/src/wireguard_kernel/mod.rs b/talpid-wireguard/src/wireguard_kernel/mod.rs index 7a64ee3f65..15eaad4c24 100644 --- a/talpid-wireguard/src/wireguard_kernel/mod.rs +++ b/talpid-wireguard/src/wireguard_kernel/mod.rs @@ -18,6 +18,7 @@ use std::{ffi::CString, net::IpAddr}; use tokio_stream::StreamExt; mod parsers; +mod stats; pub mod wg_message; use wg_message::{DeviceMessage, DeviceNla}; diff --git a/talpid-wireguard/src/wireguard_kernel/stats.rs b/talpid-wireguard/src/wireguard_kernel/stats.rs new file mode 100644 index 0000000000..8604e8243f --- /dev/null +++ b/talpid-wireguard/src/wireguard_kernel/stats.rs @@ -0,0 +1,32 @@ +use super::wg_message::{DeviceMessage, DeviceNla, PeerNla}; +use crate::stats::{Stats, StatsMap}; + +impl Stats { + pub fn parse_device_message(message: &DeviceMessage) -> StatsMap { + let mut map = StatsMap::new(); + + for nla in &message.nlas { + if let DeviceNla::Peers(peers) = nla { + for msg in peers { + let mut tx_bytes = 0; + let mut rx_bytes = 0; + let mut pub_key = None; + + for nla in &msg.0 { + match nla { + PeerNla::TxBytes(bytes) => tx_bytes = *bytes, + PeerNla::RxBytes(bytes) => rx_bytes = *bytes, + PeerNla::PublicKey(key) => pub_key = Some(*key), + _ => continue, + } + } + if let Some(key) = pub_key { + map.insert(key, Stats { tx_bytes, rx_bytes }); + } + } + } + } + + map + } +} |
