pub struct NetlinkHeader { /* private fields */ }
Expand description
A Netlink header representation.
A netlink header has the following structure:
0 8 16 24 32
+----------------+----------------+----------------+----------------+
| packet length (including header) |
+----------------+----------------+----------------+----------------+
| message type | flags |
+----------------+----------------+----------------+----------------+
| sequence number |
+----------------+----------------+----------------+----------------+
| port number (formerly known as PID) |
+----------------+----------------+----------------+----------------+
§Example: parsing a netlink header
extern crate netlink_packet;
use netlink_packet::{NetlinkBuffer, NetlinkHeader, Parseable};
use netlink_packet::constants::{RTM_GETLINK, NLM_F_ROOT, NLM_F_REQUEST, NLM_F_MATCH};
// a packet captured with tcpdump that was sent when running `ip link show`
static PKT: [u8; 40] = [
0x28, 0x00, 0x00, 0x00, // length = 40
0x12, 0x00, // message type = 18 (RTM_GETLINK)
0x01, 0x03, // flags = Request + Specify Tree Root + Return All Matching
0x34, 0x0e, 0xf9, 0x5a, // sequence number = 1526271540
0x00, 0x00, 0x00, 0x00, // port id = 0
// payload
0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x1d, 0x00, 0x01, 0x00, 0x00, 0x00];
fn main() {
let pkt: NetlinkHeader = NetlinkBuffer::new_checked(&PKT[..]).unwrap().parse().unwrap();
assert_eq!(pkt.length(), 40);
assert_eq!(pkt.message_type(), RTM_GETLINK);
assert_eq!(pkt.sequence_number(), 1_526_271_540);
assert_eq!(pkt.port_number(), 0);
assert_eq!(u16::from(pkt.flags()), NLM_F_ROOT | NLM_F_REQUEST | NLM_F_MATCH);
}
§Example: emitting a netlink header
extern crate netlink_packet;
use netlink_packet::{NetlinkBuffer, NetlinkHeader, NetlinkFlags, Emitable};
use netlink_packet::constants::{RTM_GETLINK, NLM_F_ROOT, NLM_F_REQUEST, NLM_F_MATCH};
// a packet captured with tcpdump that was sent when running `ip link show`
static PKT: [u8; 40] = [
0x28, 0x00, 0x00, 0x00, // length = 40
0x12, 0x00, // message type = 18 (RTM_GETLINK)
0x01, 0x03, // flags = Request + Specify Tree Root + Return All Matching
0x34, 0x0e, 0xf9, 0x5a, // sequence number = 1526271540
0x00, 0x00, 0x00, 0x00, // port id = 0
// payload
0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x1d, 0x00, 0x01, 0x00, 0x00, 0x00];
fn main() {
let flags = NetlinkFlags::from(NLM_F_ROOT | NLM_F_REQUEST | NLM_F_MATCH);
let pkt = NetlinkHeader::new(40, RTM_GETLINK, flags, 0x5af9_0e34, 0);
assert_eq!(pkt.buffer_len(), 16);
let mut buf = vec![0; 16];
pkt.emit(&mut buf[..]);
assert_eq!(&buf[..], &PKT[..16]);
}
Implementations§
Source§impl NetlinkHeader
impl NetlinkHeader
Sourcepub fn new(
length: u32,
message_type: u16,
flags: NetlinkFlags,
sequence_number: u32,
port_number: u32,
) -> Self
pub fn new( length: u32, message_type: u16, flags: NetlinkFlags, sequence_number: u32, port_number: u32, ) -> Self
Create a new header, initialized with the given values
Sourcepub fn length_mut(&mut self) -> &mut u32
pub fn length_mut(&mut self) -> &mut u32
Get a mutable reference to the length field
Sourcepub fn set_length(&mut self, value: u32) -> &mut Self
pub fn set_length(&mut self, value: u32) -> &mut Self
Setter for the length field
Sourcepub fn message_type(&self) -> u16
pub fn message_type(&self) -> u16
Get the message type field
Sourcepub fn message_type_mut(&mut self) -> &mut u16
pub fn message_type_mut(&mut self) -> &mut u16
Get a mutable reference to the message type field
Sourcepub fn set_message_type(&mut self, value: u16) -> &mut Self
pub fn set_message_type(&mut self, value: u16) -> &mut Self
Setter for the message_type field
Sourcepub fn flags(&self) -> NetlinkFlags
pub fn flags(&self) -> NetlinkFlags
Get the flags field
Sourcepub fn flags_mut(&mut self) -> &mut NetlinkFlags
pub fn flags_mut(&mut self) -> &mut NetlinkFlags
Get a mutable reference to the flags field
Sourcepub fn set_flags(&mut self, value: NetlinkFlags) -> &mut Self
pub fn set_flags(&mut self, value: NetlinkFlags) -> &mut Self
Setter for the flags field
Sourcepub fn sequence_number(&self) -> u32
pub fn sequence_number(&self) -> u32
Get the sequence number field
Sourcepub fn sequence_number_mut(&mut self) -> &mut u32
pub fn sequence_number_mut(&mut self) -> &mut u32
Get a mutable reference to the sequence number field
Sourcepub fn set_sequence_number(&mut self, value: u32) -> &mut Self
pub fn set_sequence_number(&mut self, value: u32) -> &mut Self
Setter for the sequence number field
Sourcepub fn port_number(&self) -> u32
pub fn port_number(&self) -> u32
Get the port number field
Sourcepub fn port_number_mut(&mut self) -> &mut u32
pub fn port_number_mut(&mut self) -> &mut u32
Get a mutable reference to the port number field
Sourcepub fn set_port_number(&mut self, value: u32) -> &mut Self
pub fn set_port_number(&mut self, value: u32) -> &mut Self
Setter for the port number field
Trait Implementations§
Source§impl Clone for NetlinkHeader
impl Clone for NetlinkHeader
Source§fn clone(&self) -> NetlinkHeader
fn clone(&self) -> NetlinkHeader
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for NetlinkHeader
impl Debug for NetlinkHeader
Source§impl Default for NetlinkHeader
impl Default for NetlinkHeader
Source§fn default() -> NetlinkHeader
fn default() -> NetlinkHeader
Returns the “default value” for a type. Read more
Source§impl Emitable for NetlinkHeader
impl Emitable for NetlinkHeader
Source§impl Hash for NetlinkHeader
impl Hash for NetlinkHeader
Source§impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NetlinkHeader> for NetlinkBuffer<&'a T>
impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NetlinkHeader> for NetlinkBuffer<&'a T>
Source§fn parse(&self) -> Result<NetlinkHeader, DecodeError>
fn parse(&self) -> Result<NetlinkHeader, DecodeError>
Deserialize the current type.
Source§impl PartialEq for NetlinkHeader
impl PartialEq for NetlinkHeader
impl Copy for NetlinkHeader
impl Eq for NetlinkHeader
impl StructuralPartialEq for NetlinkHeader
Auto Trait Implementations§
impl Freeze for NetlinkHeader
impl RefUnwindSafe for NetlinkHeader
impl Send for NetlinkHeader
impl Sync for NetlinkHeader
impl Unpin for NetlinkHeader
impl UnwindSafe for NetlinkHeader
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
Mutably borrows from an owned value. Read more