tun: Enable setting/getting of MTU
Works similarly to getting and setting IP addresses, can pretty much be copy-pasted for the rest of the settings.
This commit is contained in:
parent
4b0965b846
commit
a13b2243e6
2 changed files with 19 additions and 0 deletions
|
|
@ -68,6 +68,13 @@ impl TunInterface {
|
||||||
self.perform(|fd| unsafe { sys::if_set_addr(fd, &iff) })?;
|
self.perform(|fd| unsafe { sys::if_set_addr(fd, &iff) })?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[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]
|
#[throws]
|
||||||
pub fn ipv4_addr(&self) -> Ipv4Addr {
|
pub fn ipv4_addr(&self) -> Ipv4Addr {
|
||||||
let mut iff = self.ifreq()?;
|
let mut iff = self.ifreq()?;
|
||||||
|
|
@ -76,6 +83,15 @@ impl TunInterface {
|
||||||
Ipv4Addr::from(u32::from_be(addr.sin_addr.s_addr))
|
Ipv4Addr::from(u32::from_be(addr.sin_addr.s_addr))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[throws]
|
||||||
|
pub fn mtu(&self) -> i32 {
|
||||||
|
let mut iff = self.ifreq()?;
|
||||||
|
self.perform(|fd| unsafe { sys::if_get_mtu(fd, &mut iff) })?;
|
||||||
|
let mtu = unsafe { iff.ifr_ifru.ifru_mtu };
|
||||||
|
|
||||||
|
mtu
|
||||||
|
}
|
||||||
|
|
||||||
#[throws]
|
#[throws]
|
||||||
fn perform<R>(&self, perform: impl FnOnce(RawFd) -> Result<R, nix::Error>) -> R {
|
fn perform<R>(&self, perform: impl FnOnce(RawFd) -> Result<R, nix::Error>) -> R {
|
||||||
let socket = Socket::new(Domain::IPV4, Type::DGRAM, None)?;
|
let socket = Socket::new(Domain::IPV4, Type::DGRAM, None)?;
|
||||||
|
|
|
||||||
|
|
@ -16,4 +16,7 @@ ioctl_read_bad!(
|
||||||
);
|
);
|
||||||
ioctl_read_bad!(if_get_index, libc::SIOCGIFINDEX, libc::ifreq);
|
ioctl_read_bad!(if_get_index, libc::SIOCGIFINDEX, libc::ifreq);
|
||||||
ioctl_read_bad!(if_get_addr, libc::SIOCGIFADDR, libc::ifreq);
|
ioctl_read_bad!(if_get_addr, libc::SIOCGIFADDR, libc::ifreq);
|
||||||
|
ioctl_read_bad!(if_get_mtu, libc::SIOCGIFMTU, libc::ifreq);
|
||||||
|
|
||||||
ioctl_write_ptr_bad!(if_set_addr, libc::SIOCSIFADDR, libc::ifreq);
|
ioctl_write_ptr_bad!(if_set_addr, libc::SIOCSIFADDR, libc::ifreq);
|
||||||
|
ioctl_write_ptr_bad!(if_set_mtu, libc::SIOCSIFMTU, libc::ifreq);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue