pub struct GenlMessage<F> {
pub header: GenlHeader,
pub payload: F,
/* private fields */
}
Expand description
Represent the generic netlink messages
This type can wrap data types F
which represents a generic family payload.
The message can be serialize/deserialize if the type F
implements
GenlFamily
, [Emitable
], and ParseableParametrized<[u8], GenlHeader>
.
Fields§
§header: GenlHeader
§payload: F
Implementations§
Source§impl<F> GenlMessage<F>where
F: Debug,
impl<F> GenlMessage<F>where
F: Debug,
Sourcepub fn new(header: GenlHeader, payload: F, family_id: u16) -> Self
pub fn new(header: GenlHeader, payload: F, family_id: u16) -> Self
Construct the message
Sourcepub fn from_parts(header: GenlHeader, payload: F) -> Self
pub fn from_parts(header: GenlHeader, payload: F) -> Self
Construct the message by the given header and payload
Sourcepub fn into_parts(self) -> (GenlHeader, F)
pub fn into_parts(self) -> (GenlHeader, F)
Consume this message and return its header and payload
Sourcepub fn resolved_family_id(&self) -> u16
pub fn resolved_family_id(&self) -> u16
Return the previously set resolved family ID in this message.
This value would be used to serialize the message only if
the (GenlFamily::family_id()
) return 0 in the underlying type.
Sourcepub fn set_resolved_family_id(&mut self, family_id: u16)
pub fn set_resolved_family_id(&mut self, family_id: u16)
Set the resolved dynamic family ID of the message, if the generic family uses dynamic generated ID by kernel.
This method is a interface to provide other high level library to set the resolved family ID before the message is serialized.
§Usage
Normally, you don’t have to call this function directly if you are using library which helps you handle the dynamic family id.
If you are the developer of some high level generic netlink library,
you can call this method to set the family id resolved by your resolver.
Without having to modify the message_type
field of the serialized
netlink packet header before sending it.
Source§impl<F> GenlMessage<F>where
F: GenlFamily + Debug,
impl<F> GenlMessage<F>where
F: GenlFamily + Debug,
Sourcepub fn from_payload(payload: F) -> Self
pub fn from_payload(payload: F) -> Self
Build the message from the payload
This function would automatically fill the header for you. You can
directly emit the message without having to call
finalize()
.
Sourcepub fn finalize(&mut self)
pub fn finalize(&mut self)
Ensure the header (GenlHeader
) is consistent with the payload (F: GenlFamily
):
- Fill the command and version number into the header
If you are not 100% sure the header is correct, this method should be
called before calling [Emitable::emit()
], as it could get error
result if the header is inconsistent with the message.
Sourcepub fn family_id(&self) -> u16
pub fn family_id(&self) -> u16
Return the resolved family ID which should be filled into the
message_type
field in NetlinkHeader
.
The implementation of NetlinkSerializable::message_type()
would use
this function’s result as its the return value. Thus, the family id can
be automatically filled into the message_type
during the call to
NetlinkMessage::finalize()
.
Trait Implementations§
Source§impl<F: Clone> Clone for GenlMessage<F>
impl<F: Clone> Clone for GenlMessage<F>
Source§fn clone(&self) -> GenlMessage<F>
fn clone(&self) -> GenlMessage<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<F: Debug> Debug for GenlMessage<F>
impl<F: Debug> Debug for GenlMessage<F>
Source§impl<F> Emitable for GenlMessage<F>where
F: GenlFamily + Emitable + Debug,
impl<F> Emitable for GenlMessage<F>where
F: GenlFamily + Emitable + Debug,
Source§impl<F> From<GenlMessage<F>> for NetlinkPayload<GenlMessage<F>>where
F: Debug,
impl<F> From<GenlMessage<F>> for NetlinkPayload<GenlMessage<F>>where
F: Debug,
Source§fn from(message: GenlMessage<F>) -> Self
fn from(message: GenlMessage<F>) -> Self
Source§impl<F> NetlinkDeserializable for GenlMessage<F>
impl<F> NetlinkDeserializable for GenlMessage<F>
type Error = DecodeError
Source§fn deserialize(
header: &NetlinkHeader,
payload: &[u8],
) -> Result<Self, Self::Error>
fn deserialize( header: &NetlinkHeader, payload: &[u8], ) -> Result<Self, Self::Error>
Self
.Source§impl<F> NetlinkSerializable for GenlMessage<F>where
F: GenlFamily + Emitable + Debug,
impl<F> NetlinkSerializable for GenlMessage<F>where
F: GenlFamily + Emitable + Debug,
fn message_type(&self) -> u16
Source§fn buffer_len(&self) -> usize
fn buffer_len(&self) -> usize
Source§fn serialize(&self, buffer: &mut [u8])
fn serialize(&self, buffer: &mut [u8])
buffer
’s length is exactly InnerMessage::buffer_len()
.
It means that if InnerMessage::buffer_len()
is buggy and does not
return the appropriate length, bad things can happen: Read moreSource§impl<'a, F, T> ParseableParametrized<GenlBuffer<&'a T>, u16> for GenlMessage<F>
impl<'a, F, T> ParseableParametrized<GenlBuffer<&'a T>, u16> for GenlMessage<F>
type Error = DecodeError
Source§fn parse_with_param(
buf: &GenlBuffer<&'a T>,
message_type: u16,
) -> Result<Self, DecodeError>
fn parse_with_param( buf: &GenlBuffer<&'a T>, message_type: u16, ) -> Result<Self, DecodeError>
Source§impl<F: PartialEq> PartialEq for GenlMessage<F>
impl<F: PartialEq> PartialEq for GenlMessage<F>
impl<F: Eq> Eq for GenlMessage<F>
impl<F> StructuralPartialEq for GenlMessage<F>
Auto Trait Implementations§
impl<F> Freeze for GenlMessage<F>where
F: Freeze,
impl<F> RefUnwindSafe for GenlMessage<F>where
F: RefUnwindSafe,
impl<F> Send for GenlMessage<F>where
F: Send,
impl<F> Sync for GenlMessage<F>where
F: Sync,
impl<F> Unpin for GenlMessage<F>where
F: Unpin,
impl<F> UnwindSafe for GenlMessage<F>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)