Struct NetlinkMessage

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

Represent a netlink message.

A netlink message is made of a header (represented by NetlinkHeader) and message (represented by NetlinkPayload):

0                8                16              24               32
+----------------+----------------+----------------+----------------+
|                 packet length (including header)                  |   \
+----------------+----------------+----------------+----------------+    |
|          message type           |              flags              |    |
+----------------+----------------+----------------+----------------+    | NetlinkHeader
|                           sequence number                         |    |
+----------------+----------------+----------------+----------------+    |
|                   port number (formerly known as PID)             |   /
+----------------+----------------+----------------+----------------+   
|                               payload                             |   \
|                          (variable length)                        |    |  NetlinkPayload
|                                                                   |    |
|                                                                   |   /
+----------------+----------------+----------------+----------------+

Implementations§

Source§

impl NetlinkMessage

Source

pub fn new(header: NetlinkHeader, payload: NetlinkPayload) -> Self

Source

pub fn into_parts(self) -> (NetlinkHeader, NetlinkPayload)

Source

pub fn payload(&self) -> &NetlinkPayload

Source

pub fn payload_mut(&mut self) -> &mut NetlinkPayload

Source

pub fn header(&self) -> &NetlinkHeader

Source

pub fn header_mut(&mut self) -> &mut NetlinkHeader

Source

pub fn to_bytes(&mut self, buffer: &mut [u8]) -> Result<usize, EncodeError>

Safely serialize the message. Under the hood, this calls Emitable::emit(), but unlike emit(), this method does not panic if the message is malformed or if the destination buffer is too small. Instead, an error is returned.

Source

pub fn from_bytes(buffer: &[u8]) -> Result<Self, DecodeError>

Try to parse a message from a buffer

Source

pub fn is_done(&self) -> bool

Check if the payload is a NLMSG_DONE message (Rtnl::Done)

Source

pub fn is_noop(&self) -> bool

Check if the payload is a NLMSG_NOOP message (Rtnl::Noop)

Source

pub fn is_overrun(&self) -> bool

Check if the payload is a NLMSG_OVERRUN message (Rtnl::Overrun)

Source

pub fn is_error(&self) -> bool

Check if the payload is a NLMSG_ERROR message with a negative error code (Rtnl::Error)

Source

pub fn is_ack(&self) -> bool

Check if the payload is a NLMSG_ERROR message with a non-negative error code (Rtnl::Ack)

Source

pub fn finalize(&mut self)

Ensure the header (NetlinkHeader) is consistent with the payload (NetlinkPayload):

  • compute the payload length and set the header’s length field
  • check the payload type and set the header’s message type field accordingly

If you are not 100% sure the header is correct, this method should be called before calling Emitable::emit() or to_bytes(). emit() could panic if the header is inconsistent with the rest of the message, and to_bytes() would return an error.

Trait Implementations§

Source§

impl Clone for NetlinkMessage

Source§

fn clone(&self) -> NetlinkMessage

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NetlinkMessage

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Emitable for NetlinkMessage

Source§

fn buffer_len(&self) -> usize

Return the length of the serialized data.
Source§

fn emit(&self, buffer: &mut [u8])

Serialize this types and write the serialized data into the given buffer. Read more
Source§

impl From<NetlinkPayload> for NetlinkMessage

Source§

fn from(payload: NetlinkPayload) -> Self

Converts to this type from the input type.
Source§

impl<'buffer, T: AsRef<[u8]> + 'buffer> Parseable<NetlinkMessage> for NetlinkBuffer<&'buffer T>

Source§

fn parse(&self) -> Result<NetlinkMessage, DecodeError>

Deserialize the current type.
Source§

impl PartialEq for NetlinkMessage

Source§

fn eq(&self, other: &NetlinkMessage) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for NetlinkMessage

Source§

impl StructuralPartialEq for NetlinkMessage

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.