netlink_bindings/
traits.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum Protocol {
3 Raw {
5 protonum: u16,
7 request_type: u16,
9 },
10 Generic(&'static [u8]),
14}
15
16pub trait NetlinkRequest {
19 fn protocol(&self) -> Protocol;
21
22 fn flags(&self) -> u16;
24
25 fn payload(&self) -> &[u8];
27
28 type ReplyType<'buf>;
32 fn decode_reply(buf: &[u8]) -> Self::ReplyType<'_>;
33
34 fn lookup(
36 buf: &[u8],
37 offset: usize,
38 missing_type: Option<u16>,
39 ) -> (Vec<(&'static str, usize)>, Option<&'static str>) {
40 let _ = buf;
41 let _ = offset;
42 let _ = missing_type;
43 (Vec::new(), None)
44 }
45}
46
47pub type LookupFn =
49 fn(&[u8], usize, Option<u16>) -> (Vec<(&'static str, usize)>, Option<&'static str>);
50
51pub trait NetlinkChained {
53 fn protonum(&self) -> u16;
54
55 fn payload(&self) -> &[u8];
57
58 fn chain_len(&self) -> usize;
60
61 fn get_index(&self, seq: u32) -> Option<usize>;
62
63 fn name(&self, index: usize) -> &'static str;
64
65 fn lookup(&self, index: usize) -> LookupFn {
66 let _ = index;
67 |_, _, _| Default::default()
68 }
69
70 #[doc(hidden)]
75 fn supports_ack(&self, index: usize) -> Option<bool> {
76 let _ = index;
77 None
78 }
79}
80
81pub trait Pusher {
88 fn as_vec(&self) -> &Vec<u8>;
89 fn as_vec_mut(&mut self) -> &mut Vec<u8>;
90
91 #[deprecated = "Use .as_vec() instead (rec -> vec)"]
93 fn as_rec(&self) -> &Vec<u8> {
94 self.as_vec()
95 }
96 #[deprecated = "Use .as_vec_mut() instead (rec -> vec)"]
97 fn as_rec_mut(&mut self) -> &mut Vec<u8> {
98 self.as_vec_mut()
99 }
100}
101
102impl Pusher for Vec<u8> {
103 fn as_vec(&self) -> &Vec<u8> {
104 self
105 }
106 fn as_vec_mut(&mut self) -> &mut Vec<u8> {
107 self
108 }
109}
110
111impl Pusher for &mut Vec<u8> {
112 fn as_vec(&self) -> &Vec<u8> {
113 self
114 }
115 fn as_vec_mut(&mut self) -> &mut Vec<u8> {
116 self
117 }
118}