mnl_sys/
bindings.rs

1use core::option::Option;
2use libc::{c_char, c_int, c_uint, c_void, nlattr, nlmsghdr, pid_t, socklen_t, FILE};
3
4pub const MNL_SOCKET_AUTOPID: c_int = 0;
5pub const MNL_ALIGNTO: c_int = 4;
6
7pub const MNL_CB_ERROR: c_int = -1;
8pub const MNL_CB_STOP: c_int = 0;
9pub const MNL_CB_OK: c_int = 1;
10
11pub const MNL_TYPE_UNSPEC: mnl_attr_data_type = 0;
12pub const MNL_TYPE_U8: mnl_attr_data_type = 1;
13pub const MNL_TYPE_U16: mnl_attr_data_type = 2;
14pub const MNL_TYPE_U32: mnl_attr_data_type = 3;
15pub const MNL_TYPE_U64: mnl_attr_data_type = 4;
16pub const MNL_TYPE_STRING: mnl_attr_data_type = 5;
17pub const MNL_TYPE_FLAG: mnl_attr_data_type = 6;
18pub const MNL_TYPE_MSECS: mnl_attr_data_type = 7;
19pub const MNL_TYPE_NESTED: mnl_attr_data_type = 8;
20pub const MNL_TYPE_NESTED_COMPAT: mnl_attr_data_type = 9;
21pub const MNL_TYPE_NUL_STRING: mnl_attr_data_type = 10;
22pub const MNL_TYPE_BINARY: mnl_attr_data_type = 11;
23pub const MNL_TYPE_MAX: mnl_attr_data_type = 12;
24
25pub type mnl_attr_data_type = u32;
26
27pub type mnl_attr_cb_t =
28    Option<unsafe extern "C" fn(attr: *const nlattr, data: *mut c_void) -> c_int>;
29
30pub type mnl_cb_t = Option<unsafe extern "C" fn(nlh: *const nlmsghdr, data: *mut c_void) -> c_int>;
31
32#[repr(C)]
33pub struct mnl_socket(c_void);
34
35#[repr(C)]
36pub struct mnl_nlmsg_batch(c_void);
37
38extern "C" {
39    pub fn mnl_socket_open(bus: c_int) -> *mut mnl_socket;
40
41    #[cfg(feature = "mnl-1-0-4")]
42    pub fn mnl_socket_open2(bus: c_int, flags: c_int) -> *mut mnl_socket;
43
44    #[cfg(feature = "mnl-1-0-4")]
45    pub fn mnl_socket_fdopen(fd: c_int) -> *mut mnl_socket;
46
47    pub fn mnl_socket_bind(nl: *mut mnl_socket, groups: c_uint, pid: pid_t) -> c_int;
48
49    pub fn mnl_socket_close(nl: *mut mnl_socket) -> c_int;
50
51    pub fn mnl_socket_get_fd(nl: *const mnl_socket) -> c_int;
52
53    pub fn mnl_socket_get_portid(nl: *const mnl_socket) -> c_uint;
54
55    pub fn mnl_socket_sendto(nl: *const mnl_socket, req: *const c_void, siz: usize) -> isize;
56
57    pub fn mnl_socket_recvfrom(nl: *const mnl_socket, buf: *mut c_void, siz: usize) -> isize;
58
59    pub fn mnl_socket_setsockopt(
60        nl: *const mnl_socket,
61        type_: c_int,
62        buf: *mut c_void,
63        len: socklen_t,
64    ) -> c_int;
65
66    pub fn mnl_socket_getsockopt(
67        nl: *const mnl_socket,
68        type_: c_int,
69        buf: *mut c_void,
70        len: *mut socklen_t,
71    ) -> c_int;
72
73    pub fn mnl_nlmsg_size(len: usize) -> usize;
74
75    pub fn mnl_nlmsg_get_payload_len(nlh: *const nlmsghdr) -> usize;
76
77    pub fn mnl_nlmsg_put_header(buf: *mut c_void) -> *mut nlmsghdr;
78
79    pub fn mnl_nlmsg_put_extra_header(nlh: *mut nlmsghdr, size: usize) -> *mut c_void;
80
81    pub fn mnl_nlmsg_ok(nlh: *const nlmsghdr, len: c_int) -> bool;
82
83    pub fn mnl_nlmsg_next(nlh: *const nlmsghdr, len: *mut c_int) -> *mut nlmsghdr;
84
85    pub fn mnl_nlmsg_seq_ok(nlh: *const nlmsghdr, seq: c_uint) -> bool;
86
87    pub fn mnl_nlmsg_portid_ok(nlh: *const nlmsghdr, portid: c_uint) -> bool;
88
89    pub fn mnl_nlmsg_get_payload(nlh: *const nlmsghdr) -> *mut c_void;
90
91    pub fn mnl_nlmsg_get_payload_offset(nlh: *const nlmsghdr, offset: usize) -> *mut c_void;
92
93    pub fn mnl_nlmsg_get_payload_tail(nlh: *const nlmsghdr) -> *mut c_void;
94
95    pub fn mnl_nlmsg_fprintf(
96        fd: *mut FILE,
97        data: *const c_void,
98        datalen: usize,
99        extra_header_size: usize,
100    );
101
102    pub fn mnl_nlmsg_batch_start(buf: *mut c_void, bufsiz: usize) -> *mut mnl_nlmsg_batch;
103
104    pub fn mnl_nlmsg_batch_next(b: *mut mnl_nlmsg_batch) -> bool;
105
106    pub fn mnl_nlmsg_batch_stop(b: *mut mnl_nlmsg_batch);
107
108    pub fn mnl_nlmsg_batch_size(b: *mut mnl_nlmsg_batch) -> usize;
109
110    pub fn mnl_nlmsg_batch_reset(b: *mut mnl_nlmsg_batch);
111
112    pub fn mnl_nlmsg_batch_head(b: *mut mnl_nlmsg_batch) -> *mut c_void;
113
114    pub fn mnl_nlmsg_batch_current(b: *mut mnl_nlmsg_batch) -> *mut c_void;
115
116    pub fn mnl_nlmsg_batch_is_empty(b: *mut mnl_nlmsg_batch) -> bool;
117
118    pub fn mnl_attr_get_type(attr: *const nlattr) -> u16;
119
120    pub fn mnl_attr_get_len(attr: *const nlattr) -> u16;
121
122    pub fn mnl_attr_get_payload_len(attr: *const nlattr) -> u16;
123
124    pub fn mnl_attr_get_payload(attr: *const nlattr) -> *mut c_void;
125
126    pub fn mnl_attr_get_u8(attr: *const nlattr) -> u8;
127
128    pub fn mnl_attr_get_u16(attr: *const nlattr) -> u16;
129
130    pub fn mnl_attr_get_u32(attr: *const nlattr) -> u32;
131
132    pub fn mnl_attr_get_u64(attr: *const nlattr) -> u64;
133
134    pub fn mnl_attr_get_str(attr: *const nlattr) -> *const c_char;
135
136    pub fn mnl_attr_put(nlh: *mut nlmsghdr, type_: u16, len: usize, data: *const c_void);
137
138    pub fn mnl_attr_put_u8(nlh: *mut nlmsghdr, type_: u16, data: u8);
139
140    pub fn mnl_attr_put_u16(nlh: *mut nlmsghdr, type_: u16, data: u16);
141
142    pub fn mnl_attr_put_u32(nlh: *mut nlmsghdr, type_: u16, data: u32);
143
144    pub fn mnl_attr_put_u64(nlh: *mut nlmsghdr, type_: u16, data: u64);
145
146    pub fn mnl_attr_put_str(nlh: *mut nlmsghdr, type_: u16, data: *const c_char);
147
148    pub fn mnl_attr_put_strz(nlh: *mut nlmsghdr, type_: u16, data: *const c_char);
149
150    pub fn mnl_attr_put_check(
151        nlh: *mut nlmsghdr,
152        buflen: usize,
153        type_: u16,
154        len: usize,
155        data: *const c_void,
156    ) -> bool;
157
158    pub fn mnl_attr_put_u8_check(nlh: *mut nlmsghdr, buflen: usize, type_: u16, data: u8) -> bool;
159
160    pub fn mnl_attr_put_u16_check(nlh: *mut nlmsghdr, buflen: usize, type_: u16, data: u16)
161        -> bool;
162
163    pub fn mnl_attr_put_u32_check(nlh: *mut nlmsghdr, buflen: usize, type_: u16, data: u32)
164        -> bool;
165
166    pub fn mnl_attr_put_u64_check(nlh: *mut nlmsghdr, buflen: usize, type_: u16, data: u64)
167        -> bool;
168
169    pub fn mnl_attr_put_str_check(
170        nlh: *mut nlmsghdr,
171        buflen: usize,
172        type_: u16,
173        data: *const c_char,
174    ) -> bool;
175
176    pub fn mnl_attr_put_strz_check(
177        nlh: *mut nlmsghdr,
178        buflen: usize,
179        type_: u16,
180        data: *const c_char,
181    ) -> bool;
182
183    pub fn mnl_attr_nest_start(nlh: *mut nlmsghdr, type_: u16) -> *mut nlattr;
184
185    pub fn mnl_attr_nest_start_check(nlh: *mut nlmsghdr, buflen: usize, type_: u16) -> *mut nlattr;
186
187    pub fn mnl_attr_nest_end(nlh: *mut nlmsghdr, start: *mut nlattr);
188
189    pub fn mnl_attr_nest_cancel(nlh: *mut nlmsghdr, start: *mut nlattr);
190
191    pub fn mnl_attr_type_valid(attr: *const nlattr, maxtype: u16) -> c_int;
192
193    pub fn mnl_attr_validate(attr: *const nlattr, type_: mnl_attr_data_type) -> c_int;
194
195    pub fn mnl_attr_validate2(attr: *const nlattr, type_: mnl_attr_data_type, len: usize) -> c_int;
196
197    pub fn mnl_attr_ok(attr: *const nlattr, len: c_int) -> bool;
198
199    pub fn mnl_attr_next(attr: *const nlattr) -> *mut nlattr;
200
201    pub fn mnl_attr_parse(
202        nlh: *const nlmsghdr,
203        offset: c_uint,
204        cb: mnl_attr_cb_t,
205        data: *mut c_void,
206    ) -> c_int;
207
208    pub fn mnl_attr_parse_nested(
209        attr: *const nlattr,
210        cb: mnl_attr_cb_t,
211        data: *mut c_void,
212    ) -> c_int;
213
214    pub fn mnl_attr_parse_payload(
215        payload: *const c_void,
216        payload_len: usize,
217        cb: mnl_attr_cb_t,
218        data: *mut c_void,
219    ) -> c_int;
220
221    pub fn mnl_cb_run(
222        buf: *const c_void,
223        numbytes: usize,
224        seq: c_uint,
225        portid: c_uint,
226        cb_data: mnl_cb_t,
227        data: *mut c_void,
228    ) -> c_int;
229
230    pub fn mnl_cb_run2(
231        buf: *const c_void,
232        numbytes: usize,
233        seq: c_uint,
234        portid: c_uint,
235        cb_data: mnl_cb_t,
236        data: *mut c_void,
237        cb_ctl_array: *mut mnl_cb_t,
238        cb_ctl_array_len: c_uint,
239    ) -> c_int;
240}