sd_device_sys/
lib.rs

1#![allow(non_camel_case_types)]
2
3extern crate libc;
4
5use libc::{c_char, c_int, c_uchar, c_void, dev_t, size_t};
6
7/// Linux errno positive.
8pub const EINVAL: c_int = 22;
9
10#[repr(C)]
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
12pub struct sd_device {
13    _private: [u8; 0],
14    _marker: core::marker::PhantomData<*mut c_void>,
15}
16
17#[repr(C)]
18#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
19pub struct sd_device_enumerator {
20    _private: [u8; 0],
21    _marker: core::marker::PhantomData<*mut c_void>,
22}
23
24#[repr(C)]
25#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
26pub struct sd_device_monitor {
27    _private: [u8; 0],
28    _marker: core::marker::PhantomData<*mut c_void>,
29}
30
31#[repr(C)]
32#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
33pub struct sd_event {
34    _private: [u8; 0],
35    _marker: core::marker::PhantomData<*mut c_void>,
36}
37
38#[repr(C)]
39#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
40pub struct sd_event_source {
41    _private: [u8; 0],
42    _marker: core::marker::PhantomData<*mut c_void>,
43}
44
45#[repr(C)]
46pub union sd_id128 {
47    pub bytes: [c_uchar; 16],
48    pub qwords: [u64; 2],
49}
50
51pub type sd_id128_t = sd_id128;
52
53#[repr(i64)]
54#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
55pub enum sd_device_action_t {
56    SD_DEVICE_ADD = 0,
57    SD_DEVICE_REMOVE = 1,
58    SD_DEVICE_CHANGE = 2,
59    SD_DEVICE_MOVE = 3,
60    SD_DEVICE_ONLINE = 4,
61    SD_DEVICE_OFFLINE = 5,
62    SD_DEVICE_BIND = 6,
63    SD_DEVICE_UNBIND = 7,
64    _SD_DEVICE_ACTION_MAX = 8,
65    _SD_DEVICE_ACTION_INVALID = -(EINVAL as i64),
66    /// Used to force the underlying type size to 64-bit
67    _SD_ENUM_FORCE_S64_DEVICE_ACTION = i64::MAX,
68}
69
70pub type sd_device_monitor_handler_t = Option<
71    unsafe extern "C" fn(
72        m: *mut sd_device_monitor,
73        device: *mut sd_device,
74        userdata: *mut c_void,
75    ) -> c_int,
76>;
77
78unsafe extern "C" {
79    pub fn sd_device_ref(device: *mut sd_device) -> *mut sd_device;
80    pub fn sd_device_unref(device: *mut sd_device) -> *mut sd_device;
81
82    pub fn sd_device_new_from_syspath(ret: *mut *mut sd_device, syspath: *const c_char) -> c_int;
83    pub fn sd_device_new_from_devnum(
84        ret: *mut *mut sd_device,
85        type_: c_char,
86        devnum: dev_t,
87    ) -> c_int;
88    pub fn sd_device_new_from_subsystem_sysname(
89        ret: *mut *mut sd_device,
90        subsystem: *const c_char,
91        sysname: *const c_char,
92    ) -> c_int;
93    pub fn sd_device_new_from_device_id(ret: *mut *mut sd_device, id: *const c_char) -> c_int;
94    pub fn sd_device_new_from_stat_rdev(ret: *mut *mut sd_device, st: *const libc::stat) -> c_int;
95    pub fn sd_device_new_from_devname(ret: *mut *mut sd_device, devname: *const c_char) -> c_int;
96    pub fn sd_device_new_from_path(ret: *mut *mut sd_device, path: *const c_char) -> c_int;
97    pub fn sd_device_new_from_ifname(ret: *mut *mut sd_device, ifname: *const c_char) -> c_int;
98    pub fn sd_device_new_from_ifindex(ret: *mut *mut sd_device, ifindex: c_int) -> c_int;
99
100    pub fn sd_device_new_child(
101        ret: *mut *mut sd_device,
102        device: *mut sd_device,
103        suffix: *const c_char,
104    ) -> c_int;
105
106    /* parent */
107    pub fn sd_device_get_parent(device: *mut sd_device, ret: *mut *mut sd_device) -> c_int;
108    pub fn sd_device_get_parent_with_subsystem_devtype(
109        device: *mut sd_device,
110        subsystem: *const c_char,
111        devtype: *const c_char,
112        ret: *mut *mut sd_device,
113    ) -> c_int;
114
115    /* getters */
116    pub fn sd_device_get_syspath(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
117    pub fn sd_device_get_subsystem(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
118    pub fn sd_device_get_driver_subsystem(device: *mut sd_device, ret: *mut *const c_char)
119    -> c_int;
120    pub fn sd_device_get_devtype(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
121    pub fn sd_device_get_devnum(device: *mut sd_device, devnum: *mut dev_t) -> c_int;
122    pub fn sd_device_get_ifindex(device: *mut sd_device, ifindex: *mut c_int) -> c_int;
123    pub fn sd_device_get_driver(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
124    pub fn sd_device_get_devpath(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
125    pub fn sd_device_get_devname(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
126    pub fn sd_device_get_sysname(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
127    pub fn sd_device_get_sysnum(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
128    pub fn sd_device_get_action(device: *mut sd_device, ret: *mut sd_device_action_t) -> c_int;
129    pub fn sd_device_get_seqnum(device: *mut sd_device, ret: *mut u64) -> c_int;
130    pub fn sd_device_get_diskseq(device: *mut sd_device, ret: *mut u64) -> c_int;
131    pub fn sd_device_get_device_id(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
132
133    pub fn sd_device_get_is_initialized(device: *mut sd_device) -> c_int;
134    pub fn sd_device_get_usec_initialized(device: *mut sd_device, ret: *mut u64) -> c_int;
135    pub fn sd_device_get_usec_since_initialized(device: *mut sd_device, ret: *mut u64) -> c_int;
136
137    /* iterators */
138    pub fn sd_device_get_tag_first(device: *mut sd_device) -> *const c_char;
139    pub fn sd_device_get_tag_next(device: *mut sd_device) -> *const c_char;
140    pub fn sd_device_get_current_tag_first(device: *mut sd_device) -> *const c_char;
141    pub fn sd_device_get_current_tag_next(device: *mut sd_device) -> *const c_char;
142    pub fn sd_device_get_devlink_first(device: *mut sd_device) -> *const c_char;
143    pub fn sd_device_get_devlink_next(device: *mut sd_device) -> *const c_char;
144    pub fn sd_device_get_property_first(
145        device: *mut sd_device,
146        value: *mut *const c_char,
147    ) -> *const c_char;
148    pub fn sd_device_get_property_next(
149        device: *mut sd_device,
150        value: *mut *const c_char,
151    ) -> *const c_char;
152    pub fn sd_device_get_sysattr_first(device: *mut sd_device) -> *const c_char;
153    pub fn sd_device_get_sysattr_next(device: *mut sd_device) -> *const c_char;
154
155    pub fn sd_device_get_child_first(
156        device: *mut sd_device,
157        ret_suffix: *mut *const c_char,
158    ) -> *mut sd_device;
159    pub fn sd_device_get_child_next(
160        device: *mut sd_device,
161        ret_suffix: *mut *const c_char,
162    ) -> *mut sd_device;
163
164    /* queries */
165    pub fn sd_device_has_tag(device: *mut sd_device, tag: *const c_char) -> c_int;
166    pub fn sd_device_has_current_tag(device: *mut sd_device, tag: *const c_char) -> c_int;
167    pub fn sd_device_get_property_value(
168        device: *mut sd_device,
169        key: *const c_char,
170        value: *mut *const c_char,
171    ) -> c_int;
172
173    pub fn sd_device_get_trigger_uuid(device: *mut sd_device, ret: *mut sd_id128_t) -> c_int;
174
175    pub fn sd_device_get_sysattr_value_with_size(
176        device: *mut sd_device,
177        sysattr: *const c_char,
178        ret_value: *mut *const c_char,
179        ret_size: *mut size_t,
180    ) -> c_int;
181
182    pub fn sd_device_get_sysattr_value(
183        device: *mut sd_device,
184        sysattr: *const c_char,
185        ret_value: *mut *const c_char,
186    ) -> c_int;
187
188    pub fn sd_device_set_sysattr_value(
189        device: *mut sd_device,
190        sysattr: *const c_char,
191        value: *const c_char,
192    ) -> c_int;
193
194    pub fn sd_device_set_sysattr_valuef(
195        device: *mut sd_device,
196        sysattr: *const c_char,
197        format: *const c_char,
198        ...
199    ) -> c_int;
200
201    pub fn sd_device_trigger(device: *mut sd_device, action: sd_device_action_t) -> c_int;
202    pub fn sd_device_trigger_with_uuid(
203        device: *mut sd_device,
204        action: sd_device_action_t,
205        ret_uuid: *mut sd_id128_t,
206    ) -> c_int;
207
208    pub fn sd_device_open(device: *mut sd_device, flags: c_int) -> c_int;
209
210    /* enumerator */
211    pub fn sd_device_enumerator_new(ret: *mut *mut sd_device_enumerator) -> c_int;
212    pub fn sd_device_enumerator_ref(e: *mut sd_device_enumerator) -> *mut sd_device_enumerator;
213    pub fn sd_device_enumerator_unref(e: *mut sd_device_enumerator) -> *mut sd_device_enumerator;
214
215    pub fn sd_device_enumerator_get_device_first(e: *mut sd_device_enumerator) -> *mut sd_device;
216    pub fn sd_device_enumerator_get_device_next(e: *mut sd_device_enumerator) -> *mut sd_device;
217    pub fn sd_device_enumerator_get_subsystem_first(e: *mut sd_device_enumerator)
218    -> *mut sd_device;
219    pub fn sd_device_enumerator_get_subsystem_next(e: *mut sd_device_enumerator) -> *mut sd_device;
220
221    pub fn sd_device_enumerator_add_match_subsystem(
222        e: *mut sd_device_enumerator,
223        subsystem: *const c_char,
224        match_: c_int,
225    ) -> c_int;
226
227    pub fn sd_device_enumerator_add_match_sysattr(
228        e: *mut sd_device_enumerator,
229        sysattr: *const c_char,
230        value: *const c_char,
231        match_: c_int,
232    ) -> c_int;
233
234    pub fn sd_device_enumerator_add_match_property(
235        e: *mut sd_device_enumerator,
236        property: *const c_char,
237        value: *const c_char,
238    ) -> c_int;
239
240    pub fn sd_device_enumerator_add_match_property_required(
241        e: *mut sd_device_enumerator,
242        property: *const c_char,
243        value: *const c_char,
244    ) -> c_int;
245
246    pub fn sd_device_enumerator_add_match_sysname(
247        e: *mut sd_device_enumerator,
248        sysname: *const c_char,
249    ) -> c_int;
250    pub fn sd_device_enumerator_add_nomatch_sysname(
251        e: *mut sd_device_enumerator,
252        sysname: *const c_char,
253    ) -> c_int;
254    pub fn sd_device_enumerator_add_match_tag(
255        e: *mut sd_device_enumerator,
256        tag: *const c_char,
257    ) -> c_int;
258    pub fn sd_device_enumerator_add_match_parent(
259        e: *mut sd_device_enumerator,
260        parent: *mut sd_device,
261    ) -> c_int;
262    pub fn sd_device_enumerator_allow_uninitialized(e: *mut sd_device_enumerator) -> c_int;
263    pub fn sd_device_enumerator_add_all_parents(e: *mut sd_device_enumerator) -> c_int;
264
265    /* monitor */
266    pub fn sd_device_monitor_new(ret: *mut *mut sd_device_monitor) -> c_int;
267    pub fn sd_device_monitor_ref(m: *mut sd_device_monitor) -> *mut sd_device_monitor;
268    pub fn sd_device_monitor_unref(m: *mut sd_device_monitor) -> *mut sd_device_monitor;
269
270    pub fn sd_device_monitor_get_fd(m: *mut sd_device_monitor) -> c_int;
271    pub fn sd_device_monitor_get_events(m: *mut sd_device_monitor) -> c_int;
272    pub fn sd_device_monitor_get_timeout(m: *mut sd_device_monitor, ret: *mut u64) -> c_int;
273    pub fn sd_device_monitor_set_receive_buffer_size(
274        m: *mut sd_device_monitor,
275        size: size_t,
276    ) -> c_int;
277
278    pub fn sd_device_monitor_attach_event(m: *mut sd_device_monitor, event: *mut sd_event)
279    -> c_int;
280    pub fn sd_device_monitor_detach_event(m: *mut sd_device_monitor) -> c_int;
281    pub fn sd_device_monitor_get_event(m: *mut sd_device_monitor) -> *mut sd_event;
282    pub fn sd_device_monitor_get_event_source(m: *mut sd_device_monitor) -> *mut sd_event_source;
283
284    pub fn sd_device_monitor_set_description(
285        m: *mut sd_device_monitor,
286        description: *const c_char,
287    ) -> c_int;
288    pub fn sd_device_monitor_get_description(
289        m: *mut sd_device_monitor,
290        ret: *mut *const c_char,
291    ) -> c_int;
292
293    pub fn sd_device_monitor_is_running(m: *mut sd_device_monitor) -> c_int;
294
295    pub fn sd_device_monitor_start(
296        m: *mut sd_device_monitor,
297        callback: sd_device_monitor_handler_t,
298        userdata: *mut c_void,
299    ) -> c_int;
300
301    pub fn sd_device_monitor_stop(m: *mut sd_device_monitor) -> c_int;
302    pub fn sd_device_monitor_receive(m: *mut sd_device_monitor, ret: *mut *mut sd_device) -> c_int;
303
304    pub fn sd_device_monitor_filter_add_match_subsystem_devtype(
305        m: *mut sd_device_monitor,
306        subsystem: *const c_char,
307        devtype: *const c_char,
308    ) -> c_int;
309
310    pub fn sd_device_monitor_filter_add_match_tag(
311        m: *mut sd_device_monitor,
312        tag: *const c_char,
313    ) -> c_int;
314
315    pub fn sd_device_monitor_filter_add_match_sysattr(
316        m: *mut sd_device_monitor,
317        sysattr: *const c_char,
318        value: *const c_char,
319        match_: c_int,
320    ) -> c_int;
321
322    pub fn sd_device_monitor_filter_add_match_parent(
323        m: *mut sd_device_monitor,
324        device: *mut sd_device,
325        match_: c_int,
326    ) -> c_int;
327
328    pub fn sd_device_monitor_filter_update(m: *mut sd_device_monitor) -> c_int;
329    pub fn sd_device_monitor_filter_remove(m: *mut sd_device_monitor) -> c_int;
330}