DeviceImpl

Struct DeviceImpl 

Source
pub struct DeviceImpl { /* private fields */ }
Expand description

A TUN device using the TUN/TAP Linux driver.

Implementations§

Source§

impl DeviceImpl

Source

pub fn if_index(&self) -> Result<u32>

Retrieves the interface index for the network interface.

This function converts the interface name (obtained via self.name()) into a C-compatible string (CString) and then calls the libc function if_nametoindex to retrieve the corresponding interface index.

Source

pub fn addresses(&self) -> Result<Vec<IpAddr>>

Retrieves all IP addresses associated with the network interface.

This function calls getifaddrs with the interface name, then iterates over the returned list of interface addresses, extracting and collecting the IP addresses into a vector.

Source§

impl DeviceImpl

Source

pub fn name(&self) -> Result<String>

Retrieves the name of the network interface.

Source

pub fn set_associate_route(&self, associate_route: bool)

If false, the program will not modify or manage routes in any way, allowing the system to handle all routing natively. If true (default), the program will automatically add or remove routes to provide consistent routing behavior across all platforms. Set this to be false to obtain the platform’s default routing behavior.

Source

pub fn associate_route(&self) -> bool

Retrieve whether route is associated with the IP setting interface, see DeviceImpl::set_associate_route

Source

pub fn enabled(&self, value: bool) -> Result<()>

Enables or disables the network interface.

Source

pub fn mtu(&self) -> Result<u16>

Retrieves the current MTU (Maximum Transmission Unit) for the interface.

Source

pub fn set_mtu(&self, value: u16) -> Result<()>

Sets the MTU (Maximum Transmission Unit) for the interface.

§Note

The specified value must be less than or equal to 1500; it’s a limitation of NetBSD.

Source

pub fn set_network_address<IPv4: ToIpv4Address, Netmask: ToIpv4Netmask>( &self, address: IPv4, netmask: Netmask, destination: Option<IPv4>, ) -> Result<()>

Sets the IPv4 network address, netmask, and an optional destination address. Remove all previous set IPv4 addresses and set the specified address.

Source

pub fn add_address_v4<IPv4: ToIpv4Address, Netmask: ToIpv4Netmask>( &self, address: IPv4, netmask: Netmask, ) -> Result<()>

Add IPv4 network address, netmask

Source

pub fn remove_address(&self, addr: IpAddr) -> Result<()>

Removes an IP address from the interface.

Source

pub fn add_address_v6<IPv6: ToIpv6Address, Netmask: ToIpv6Netmask>( &self, addr: IPv6, netmask: Netmask, ) -> Result<()>

Adds an IPv6 address to the interface.

Source

pub fn set_mac_address(&self, eth_addr: [u8; 6]) -> Result<()>

Sets the MAC (hardware) address for the interface.

This function constructs an interface request and copies the provided MAC address into the hardware address field. It then applies the change via a system call. This operation is typically supported only for TAP devices.

Source

pub fn mac_address(&self) -> Result<[u8; 6]>

Retrieves the MAC (hardware) address of the interface.

This function queries the MAC address by the interface name using a helper function. An error is returned if the MAC address cannot be found.

Source

pub fn enable_tunsifhead(&self) -> Result<()>

In Layer3(i.e. TUN mode), we need to put the tun interface into “multi_af” mode, which will prepend the address family to all packets (same as FreeBSD). If this is not enabled, the kernel silently drops all IPv6 packets on output and gets confused on input.

Source

pub fn ignore_packet_info(&self) -> bool

Returns whether the TUN device is set to ignore packet information (PI).

When enabled, the device does not prepend the struct tun_pi header to packets, which can simplify packet processing in some cases.

§Returns
  • true - The TUN device ignores packet information.
  • false - The TUN device includes packet information.
§Note

Retrieve whether the packet is ignored for the TUN Device; The TAP device always returns false.

Source

pub fn set_ignore_packet_info(&self, ign: bool)

Sets whether the TUN device should ignore packet information (PI).

When ignore_packet_info is set to true, the TUN device does not prepend the struct tun_pi header to packets. This can be useful if the additional metadata is not needed.

§Parameters
  • ign
    • If true, the TUN device will ignore packet information.
    • If false, it will include packet information.
§Note

This only works for a TUN device; The invocation will be ignored if the device is a TAP.

Trait Implementations§

Source§

impl AsFd for DeviceImpl

Source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
Source§

impl AsRawFd for DeviceImpl

Source§

fn as_raw_fd(&self) -> RawFd

Extracts the raw file descriptor. Read more
Source§

impl Drop for DeviceImpl

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl FromRawFd for DeviceImpl

Source§

unsafe fn from_raw_fd(fd: RawFd) -> Self

Constructs a new instance of Self from the given raw file descriptor. Read more
Source§

impl IntoRawFd for DeviceImpl

Source§

fn into_raw_fd(self) -> RawFd

Consumes this object, returning the raw underlying file descriptor. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.