| // 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; |
| } |