mirror of
https://github.com/threefoldtech/mycelium.git
synced 2026-10-23 14:02:21 +00:00
Improved error messages when using wrong TUN name
This commit is contained in:
1 parent
c39238a2a2
commit
57f7e85004
2 files changed
+129
-11
No files matched your search
+16
-11
@@ -82,6 +82,7 @@ pub async fn new(
|
||||
),
|
||||
Box<dyn std::error::Error>,
|
||||
> {
|
||||
println!("TUN NAME FROM CONFIG: {}", tun_config.name);
|
||||
let tun_name = find_available_utun_name(&tun_config.name)?;
|
||||
|
||||
let mut tun = match create_tun_interface(&tun_name) {
|
||||
@@ -89,7 +90,7 @@ pub async fn new(
|
||||
Err(e) => {
|
||||
error!(
|
||||
"Could not create tun device named \"{}\", make sure the name is not yet in use, and you have sufficient privileges to create a network device",
|
||||
tun_config.name,
|
||||
tun_name,
|
||||
);
|
||||
return Err(e);
|
||||
}
|
||||
@@ -172,21 +173,23 @@ fn validate_utun_name(input: &str) -> bool {
|
||||
}
|
||||
|
||||
/// Find an available utun interface name
|
||||
fn find_available_utun_name(preferred_name: &str) -> Result<String, Box<dyn std::error::Error>> {
|
||||
fn find_available_utun_name(preferred_name: &str) -> Result<String, io::Error> {
|
||||
let interfaces = datalink::interfaces();
|
||||
let utun_interfaces: Vec<_> = interfaces
|
||||
.iter()
|
||||
.filter(|iface| iface.name.starts_with("utun"))
|
||||
.collect();
|
||||
|
||||
if !preferred_name.is_empty() && validate_utun_name(preferred_name) {
|
||||
if !utun_interfaces
|
||||
.iter()
|
||||
.any(|iface| iface.name == preferred_name)
|
||||
{
|
||||
return Ok(preferred_name.to_string());
|
||||
}
|
||||
error!("Preferred utun name '{}' is already in use", preferred_name);
|
||||
if !preferred_name.is_empty() {
|
||||
if !validate_utun_name(preferred_name) {
|
||||
error!("Invalid TUN name: {preferred_name}. Name must start with 'utun' followed by digits");
|
||||
return Err(io::Error::new(io::ErrorKind::InvalidInput, "Invalid TUN name"));
|
||||
}
|
||||
if interfaces.iter().any(|iface| iface.name == preferred_name) {
|
||||
error!("TUN name {preferred_name} already in use");
|
||||
return Err(io::Error::new(io::ErrorKind::AlreadyExists, "TUN name already in use"));
|
||||
}
|
||||
return Ok(preferred_name.to_string());
|
||||
}
|
||||
|
||||
let max_utun_number = utun_interfaces
|
||||
@@ -199,9 +202,11 @@ fn find_available_utun_name(preferred_name: &str) -> Result<String, Box<dyn std:
|
||||
let new_utun_name = format!("utun{}", new_utun_number);
|
||||
|
||||
if validate_utun_name(&new_utun_name) {
|
||||
info!("Automatically assigned TUN name: {new_utun_name}");
|
||||
Ok(new_utun_name)
|
||||
} else {
|
||||
Err("Could not find an available utun interface name".into())
|
||||
error!("No available TUN name found");
|
||||
Err(io::Error::new(io::ErrorKind::Other, "No available TUN name"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Generated
+113
@@ -909,6 +909,12 @@ version = "0.28.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||
|
||||
[[package]]
|
||||
name = "h2"
|
||||
version = "0.4.5"
|
||||
@@ -1101,6 +1107,15 @@ version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
|
||||
|
||||
[[package]]
|
||||
name = "ipnetwork"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-terminal"
|
||||
version = "0.4.12"
|
||||
@@ -1313,6 +1328,7 @@ dependencies = [
|
||||
"libc",
|
||||
"netdev",
|
||||
"nix 0.29.0",
|
||||
"pnet",
|
||||
"quinn",
|
||||
"rand",
|
||||
"rcgen",
|
||||
@@ -1516,6 +1532,12 @@ dependencies = [
|
||||
"memoffset",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "no-std-net"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65"
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
@@ -1731,6 +1753,97 @@ version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
|
||||
[[package]]
|
||||
name = "pnet"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "682396b533413cc2e009fbb48aadf93619a149d3e57defba19ff50ce0201bd0d"
|
||||
dependencies = [
|
||||
"ipnetwork",
|
||||
"pnet_base",
|
||||
"pnet_datalink",
|
||||
"pnet_packet",
|
||||
"pnet_sys",
|
||||
"pnet_transport",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_base"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7"
|
||||
dependencies = [
|
||||
"no-std-net",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_datalink"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7"
|
||||
dependencies = [
|
||||
"ipnetwork",
|
||||
"libc",
|
||||
"pnet_base",
|
||||
"pnet_sys",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_macros"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
"syn 2.0.66",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_macros_support"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab"
|
||||
dependencies = [
|
||||
"pnet_base",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_packet"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f"
|
||||
dependencies = [
|
||||
"glob",
|
||||
"pnet_base",
|
||||
"pnet_macros",
|
||||
"pnet_macros_support",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_sys"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pnet_transport"
|
||||
version = "0.35.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f604d98bc2a6591cf719b58d3203fd882bdd6bf1db696c4ac97978e9f4776bf"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"pnet_base",
|
||||
"pnet_packet",
|
||||
"pnet_sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "polyval"
|
||||
version = "0.6.2"
|
||||
|
||||
Reference in new issue
Block a user