Log "Set" Actions in Tun (Linux)

I've used the log library and its info method.

I've also added but not used env-logger.
This commit is contained in:
Sam Poder 2023-06-21 15:46:39 +00:00 committed by Conrad Kramer
parent 32e4e9d1d7
commit da065b503f
5 changed files with 90 additions and 29 deletions

58
Cargo.lock generated
View file

@ -20,6 +20,15 @@ dependencies = [
"opaque-debug", "opaque-debug",
] ]
[[package]]
name = "aho-corasick"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "anstream" name = "anstream"
version = "0.3.2" version = "0.3.2"
@ -143,6 +152,8 @@ version = "0.1.0"
dependencies = [ dependencies = [
"caps", "caps",
"clap", "clap",
"env_logger",
"log",
"nix", "nix",
"tokio", "tokio",
"tun", "tun",
@ -368,6 +379,19 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "env_logger"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
dependencies = [
"humantime",
"is-terminal",
"log",
"regex",
"termcolor",
]
[[package]] [[package]]
name = "errno" name = "errno"
version = "0.3.1" version = "0.3.1"
@ -599,6 +623,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "hyper" name = "hyper"
version = "0.14.26" version = "0.14.26"
@ -754,12 +784,9 @@ checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.17" version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
@ -1032,6 +1059,8 @@ version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
dependencies = [ dependencies = [
"aho-corasick",
"memchr",
"regex-syntax", "regex-syntax",
] ]
@ -1292,6 +1321,15 @@ dependencies = [
"windows-sys 0.45.0", "windows-sys 0.45.0",
] ]
[[package]]
name = "termcolor"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
dependencies = [
"winapi-util",
]
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.40" version = "1.0.40"
@ -1437,6 +1475,7 @@ dependencies = [
"lazy_static", "lazy_static",
"libc", "libc",
"libloading", "libloading",
"log",
"nix", "nix",
"reqwest", "reqwest",
"socket2", "socket2",
@ -1642,6 +1681,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "winapi-x86_64-pc-windows-gnu" name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0" version = "0.4.0"

View file

@ -1,6 +1,2 @@
[workspace] [workspace]
members = [ members = ["burrow", "tun-async", "tun"]
"burrow",
"tun-async",
"tun"
]

View file

@ -10,6 +10,8 @@ crate-type = ["lib", "staticlib"]
tokio = { version = "1.21", features = ["rt", "macros"] } tokio = { version = "1.21", features = ["rt", "macros"] }
tun = { version = "0.1", path = "../tun" } tun = { version = "0.1", path = "../tun" }
clap = { version = "4.3.2", features = ["derive"] } clap = { version = "4.3.2", features = ["derive"] }
env_logger = "0.10"
log = "0.4"
[target.'cfg(target_os = "linux")'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
caps = "0.5.5" caps = "0.5.5"

View file

@ -10,13 +10,17 @@ nix = { version = "0.26", features = ["ioctl"] }
socket2 = "0.4" socket2 = "0.4"
tokio = { version = "1.28", features = [] } tokio = { version = "1.28", features = [] }
byteorder = "1.4" byteorder = "1.4"
log = "0.4"
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]
lazy_static = "1.4" lazy_static = "1.4"
libloading = "0.7" libloading = "0.7"
tempfile = "3.5" tempfile = "3.5"
widestring = "1.0" widestring = "1.0"
windows = { version = "0.48", features = ["Win32_Foundation", "Win32_NetworkManagement_IpHelper"] } windows = { version = "0.48", features = [
"Win32_Foundation",
"Win32_NetworkManagement_IpHelper",
] }
[target.'cfg(windows)'.build-dependencies] [target.'cfg(windows)'.build-dependencies]
anyhow = "1.0" anyhow = "1.0"

View file

@ -4,10 +4,12 @@ use socket2::{Domain, SockAddr, Socket, Type};
use std::fs::OpenOptions; use std::fs::OpenOptions;
use std::io::{Error, Write}; use std::io::{Error, Write};
use std::mem; use std::mem;
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6}; use std::net::{Ipv4Addr, Ipv6Addr, SocketAddrV4};
use std::os::fd::RawFd; use std::os::fd::RawFd;
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd}; use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd};
use log::info;
use libc::in6_ifreq; use libc::in6_ifreq;
use super::{ifname_to_string, string_to_ifname}; use super::{ifname_to_string, string_to_ifname};
@ -73,23 +75,7 @@ impl TunInterface {
let mut iff = self.ifreq()?; let mut iff = self.ifreq()?;
iff.ifr_ifru.ifru_addr = unsafe { *addr.as_ptr() }; iff.ifr_ifru.ifru_addr = unsafe { *addr.as_ptr() };
self.perform(|fd| unsafe { sys::if_set_addr(fd, &iff) })?; self.perform(|fd| unsafe { sys::if_set_addr(fd, &iff) })?;
} info!("ipv4_addr_set: {:?} (fd: {:?})", addr, self.as_raw_fd())
#[throws]
pub fn set_mtu(&self, mtu: i32) {
let mut iff = self.ifreq()?;
iff.ifr_ifru.ifru_mtu = mtu;
self.perform(|fd| unsafe { sys::if_set_mtu(fd, &iff) })?;
}
#[throws]
pub fn set_netmask(&self, addr: Ipv4Addr) {
let addr = SockAddr::from(SocketAddrV4::new(addr, 0));
let mut iff = self.ifreq()?;
iff.ifr_ifru.ifru_netmask = unsafe { *addr.as_ptr() };
self.perform(|fd| unsafe { sys::if_set_netmask(fd, &iff) })?;
} }
#[throws] #[throws]
@ -105,6 +91,15 @@ impl TunInterface {
let mut iff = self.in6_ifreq()?; let mut iff = self.in6_ifreq()?;
iff.ifr6_addr.s6_addr = addr.octets(); iff.ifr6_addr.s6_addr = addr.octets();
self.perform6(|fd| unsafe { sys::if_set_addr6(fd, &iff) })?; self.perform6(|fd| unsafe { sys::if_set_addr6(fd, &iff) })?;
info!("ipv6_addr_set: {:?} (fd: {:?})", addr, self.as_raw_fd())
}
#[throws]
pub fn set_mtu(&self, mtu: i32) {
let mut iff = self.ifreq()?;
iff.ifr_ifru.ifru_mtu = mtu;
self.perform(|fd| unsafe { sys::if_set_mtu(fd, &iff) })?;
info!("mtu_set: {:?} (fd: {:?})", mtu, self.as_raw_fd())
} }
#[throws] #[throws]
@ -116,6 +111,22 @@ impl TunInterface {
mtu mtu
} }
#[throws]
pub fn set_netmask(&self, addr: Ipv4Addr) {
let addr = SockAddr::from(SocketAddrV4::new(addr, 0));
let mut iff = self.ifreq()?;
iff.ifr_ifru.ifru_netmask = unsafe { *addr.as_ptr() };
self.perform(|fd| unsafe { sys::if_set_netmask(fd, &iff) })?;
info!(
"netmask_set: {:?} (fd: {:?})",
unsafe { iff.ifr_ifru.ifru_netmask },
self.as_raw_fd()
)
}
#[throws] #[throws]
pub fn netmask(&self) -> Ipv4Addr { pub fn netmask(&self) -> Ipv4Addr {
let mut iff = self.ifreq()?; let mut iff = self.ifreq()?;