summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--Cargo.lock1
-rw-r--r--mullvad-platform-metadata/Cargo.toml1
-rw-r--r--mullvad-platform-metadata/src/linux.rs28
4 files changed, 31 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cda39a08d0..f9b6278deb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -35,6 +35,8 @@ Line wrap the file at 100 chars. Th
#### Linux
- Improved compatiblitiy with newer versions of systemd-resolved.
+- Add version data to problem reports for the following software: the kernel, NetworkManager,
+ WireGuard kernel module.
### Fixed
#### Linux
diff --git a/Cargo.lock b/Cargo.lock
index 1232303077..66de6efc0b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1327,6 +1327,7 @@ name = "mullvad-platform-metadata"
version = "0.1.0"
dependencies = [
"rs-release",
+ "talpid-dbus",
]
[[package]]
diff --git a/mullvad-platform-metadata/Cargo.toml b/mullvad-platform-metadata/Cargo.toml
index d1ba2f6a14..fa33efb362 100644
--- a/mullvad-platform-metadata/Cargo.toml
+++ b/mullvad-platform-metadata/Cargo.toml
@@ -10,3 +10,4 @@ publish = false
[target.'cfg(target_os = "linux")'.dependencies]
rs-release = "0.1.7"
+talpid-dbus = { path = "../talpid-dbus" }
diff --git a/mullvad-platform-metadata/src/linux.rs b/mullvad-platform-metadata/src/linux.rs
index 484d2eaaf8..573426104f 100644
--- a/mullvad-platform-metadata/src/linux.rs
+++ b/mullvad-platform-metadata/src/linux.rs
@@ -58,5 +58,31 @@ fn parse_lsb_release() -> Option<String> {
}
pub fn extra_metadata() -> impl Iterator<Item = (String, String)> {
- std::iter::empty()
+ [kernel_version, nm_version, wg_version]
+ .iter()
+ .filter_map(|f| f())
+}
+
+/// `uname -r` outputs a single line containing only the kernel version:
+/// > 5.9.15
+fn kernel_version() -> Option<(String, String)> {
+ let kernel = command_stdout_lossy("uname", &["-r"])?;
+ Some(("kernel".to_string(), kernel))
+}
+
+/// NetworkManager's version is returned as a numeric version string
+/// > 1.26.0
+fn nm_version() -> Option<(String, String)> {
+ let nm = talpid_dbus::network_manager::NetworkManager::new().ok()?;
+ Some(("nm".to_string(), nm.version().ok()?))
+}
+
+/// `/sys/module/wireguard/version` contains only a numeric version string
+/// > 1.0.0
+fn wg_version() -> Option<(String, String)> {
+ let wireguard_version = std::fs::read_to_string("/sys/module/wireguard/version")
+ .ok()?
+ .trim()
+ .to_string();
+ Some(("wireguard".to_string(), wireguard_version))
}