Struct NlSocket

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

Low level access to a netlink socket.

Implementations§

Source§

impl NlSocket

Source

pub fn new(proto: NlFamily) -> Result<Self, Error>

Wrapper around socket() syscall filling in the netlink-specific information.

Source

pub fn connect( proto: NlFamily, pid: Option<u32>, groups: Groups, ) -> Result<Self, Error>

Equivalent of socket and bind calls.

Source

pub fn block(&self) -> Result<(), Error>

Set underlying socket file descriptor to be blocking.

Source

pub fn nonblock(&self) -> Result<(), Error>

Set underlying socket file descriptor to be non blocking.

Source

pub fn is_blocking(&self) -> Result<bool, Error>

Determines if underlying file descriptor is blocking.

Source

pub fn bind(&self, pid: Option<u32>, groups: Groups) -> Result<(), Error>

Use this function to bind to a netlink ID and subscribe to groups. See netlink(7) man pages for more information on netlink IDs and groups.

Source

pub fn set_recv_buffer_size(&self, size: usize) -> Result<(), Error>

Set the size of the receive buffer for the socket.

This can be useful when communicating with a service that sends a high volume of messages (especially multicast), and your application cannot process them fast enough, leading to the kernel dropping messages. A larger buffer may help mitigate this.

The value passed is a hint to the kernel to set the size of the receive buffer. The kernel will double the value provided to account for bookkeeping overhead. The doubled value is capped by the value in /proc/sys/net/core/rmem_max.

The default value is /proc/sys/net/core/rmem_default

See socket(7) documentation for SO_RCVBUF for more information.

Source

pub fn add_mcast_membership(&self, groups: Groups) -> Result<(), Error>

Join multicast groups for a socket.

Source

pub fn drop_mcast_membership(&self, groups: Groups) -> Result<(), Error>

Leave multicast groups for a socket.

Source

pub fn list_mcast_membership(&self) -> Result<NetlinkBitArray, Error>

List joined groups for a socket.

Source

pub fn send<B>(&self, buf: B, flags: Msg) -> Result<size_t, Error>
where B: AsRef<[u8]>,

Send message encoded as byte slice to the netlink ID specified in the netlink header Nlmsghdr

Source

pub fn recv<B>(&self, buf: B, flags: Msg) -> Result<(size_t, Groups), Error>
where B: AsMut<[u8]>,

Receive message encoded as byte slice from the netlink socket.

Source

pub fn pid(&self) -> Result<u32, Error>

Get the PID for this socket.

Source

pub fn enable_ext_ack(&self, enable: bool) -> Result<(), Error>

If true is passed in, enable extended ACKs for this socket. If false is passed in, disable extended ACKs for this socket.

Source

pub fn get_ext_ack_enabled(&self) -> Result<bool, Error>

Return true if an extended ACK is enabled for this socket.

Source

pub fn enable_strict_checking(&self, enable: bool) -> Result<(), Error>

If true is passed in, enable strict checking for this socket. If false is passed in, disable strict checking for for this socket. Only supported by NlFamily::Route sockets. Requires Linux >= 4.20.

Source

pub fn get_strict_checking_enabled(&self) -> Result<bool, Error>

Return true if strict checking is enabled for this socket. Only supported by NlFamily::Route sockets. Requires Linux >= 4.20.

Trait Implementations§

Source§

impl AsRawFd for NlSocket

Source§

fn as_raw_fd(&self) -> RawFd

Extracts the raw file descriptor. Read more
Source§

impl Drop for NlSocket

Source§

fn drop(&mut self)

Closes underlying file descriptor to avoid file descriptor leaks.

Source§

impl From<NlSocketHandle> for NlSocket

Source§

fn from(s: NlSocketHandle) -> Self

Converts to this type from the input type.
Source§

impl FromRawFd for NlSocket

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 NlSocket

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.