sd_device_sys/
lib.rs

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