blob: 3b8d71970f3f10825d0e3ba4dd94c4d6bd4db5e4 [file] [log] [blame]
// SPDX-License-Identifier: MIT
//! Traits for implementing generic netlink family
/// Provide the definition for generic netlink family
///
/// Family payload type should implement this trait to provide necessary
/// informations in order to build the packet headers (`nlmsghdr` and
/// `genlmsghdr`).
///
/// If you are looking for an example implementation, you can refer to the
/// [`crate::ctrl`] module.
pub trait GenlFamily {
/// Return the unique family name registered in the kernel
///
/// Let the resolver lookup the dynamically assigned ID
fn family_name() -> &'static str;
/// Return the assigned family ID
///
/// # Note
/// The implementation of generic family should assign the ID to
/// `GENL_ID_GENERATE` (0x0). So the controller can dynamically assign
/// the family ID.
///
/// Regarding to the reason above, you should not have to implement the
/// function unless the family uses static ID.
fn family_id(&self) -> u16 {
0
}
/// Return the command type of the current message
fn command(&self) -> u8;
/// Indicate the protocol version
fn version(&self) -> u8;
}