Skip to main content

systemconfiguration/
raw_ffi.rs

1#![allow(non_camel_case_types, non_upper_case_globals)]
2
3use std::ffi::{c_char, c_void};
4
5pub type Boolean = u8;
6pub type CFAllocatorRef = *const c_void;
7pub type CFArrayRef = *const c_void;
8pub type CFDataRef = *const c_void;
9pub type CFDateRef = *const c_void;
10pub type CFDictionaryRef = *const c_void;
11pub type CFPropertyListRef = *const c_void;
12pub type CFRunLoopRef = *const c_void;
13pub type CFStringRef = *const c_void;
14pub type SCDynamicStoreRef = *const c_void;
15pub type SCNetworkInterfaceRef = *const c_void;
16pub type SCNetworkProtocolRef = *const c_void;
17pub type SCNetworkReachabilityRef = *const c_void;
18pub type SCNetworkServiceRef = *const c_void;
19pub type SCNetworkSetRef = *const c_void;
20pub type SCPreferencesRef = *const c_void;
21pub type SCNetworkReachabilityFlags = u32;
22
23pub const kSCNetworkReachabilityFlagsTransientConnection: SCNetworkReachabilityFlags = 1 << 0;
24pub const kSCNetworkReachabilityFlagsReachable: SCNetworkReachabilityFlags = 1 << 1;
25pub const kSCNetworkReachabilityFlagsConnectionRequired: SCNetworkReachabilityFlags = 1 << 2;
26pub const kSCNetworkReachabilityFlagsConnectionOnTraffic: SCNetworkReachabilityFlags = 1 << 3;
27pub const kSCNetworkReachabilityFlagsInterventionRequired: SCNetworkReachabilityFlags = 1 << 4;
28pub const kSCNetworkReachabilityFlagsConnectionOnDemand: SCNetworkReachabilityFlags = 1 << 5;
29pub const kSCNetworkReachabilityFlagsIsLocalAddress: SCNetworkReachabilityFlags = 1 << 16;
30pub const kSCNetworkReachabilityFlagsIsDirect: SCNetworkReachabilityFlags = 1 << 17;
31pub const kSCNetworkReachabilityFlagsIsWWAN: SCNetworkReachabilityFlags = 1 << 18;
32
33#[repr(C)]
34pub struct SCNetworkReachabilityContext {
35    pub version: isize,
36    pub info: *mut c_void,
37    pub retain: Option<unsafe extern "C" fn(info: *const c_void) -> *const c_void>,
38    pub release: Option<unsafe extern "C" fn(info: *const c_void)>,
39    pub copy_description: Option<unsafe extern "C" fn(info: *const c_void) -> CFStringRef>,
40}
41
42pub type SCNetworkReachabilityCallBack = Option<
43    unsafe extern "C" fn(
44        target: SCNetworkReachabilityRef,
45        flags: SCNetworkReachabilityFlags,
46        info: *mut c_void,
47    ),
48>;
49
50unsafe extern "C" {
51    pub static kCFBooleanTrue: *const c_void;
52    pub static kCFBooleanFalse: *const c_void;
53    pub static kCFRunLoopDefaultMode: *const c_void;
54
55    pub fn CFArrayCreate(
56        allocator: CFAllocatorRef,
57        values: *const *const c_void,
58        num_values: isize,
59        callbacks: *const c_void,
60    ) -> CFArrayRef;
61    pub fn CFArrayGetCount(the_array: CFArrayRef) -> isize;
62    pub fn CFArrayGetValueAtIndex(the_array: CFArrayRef, idx: isize) -> *const c_void;
63    pub fn CFCopyDescription(cf: *const c_void) -> CFStringRef;
64    pub fn CFRetain(cf: *const c_void) -> *const c_void;
65    pub fn CFRelease(cf: *const c_void);
66    pub fn CFRunLoopGetCurrent() -> CFRunLoopRef;
67    pub fn CFStringCreateWithCString(
68        allocator: CFAllocatorRef,
69        c_str: *const c_char,
70        encoding: u32,
71    ) -> CFStringRef;
72    pub fn CFStringGetLength(the_string: CFStringRef) -> isize;
73    pub fn CFStringGetMaximumSizeForEncoding(length: isize, encoding: u32) -> isize;
74    pub fn CFStringGetCString(
75        the_string: CFStringRef,
76        buffer: *mut c_char,
77        buffer_size: isize,
78        encoding: u32,
79    ) -> Boolean;
80
81    pub fn SCError() -> i32;
82    pub fn SCErrorString(status: i32) -> *const c_char;
83
84    pub fn SCDynamicStoreCreate(
85        allocator: CFAllocatorRef,
86        name: CFStringRef,
87        callout: *const c_void,
88        context: *const c_void,
89    ) -> SCDynamicStoreRef;
90    pub fn SCDynamicStoreCopyKeyList(store: SCDynamicStoreRef, pattern: CFStringRef) -> CFArrayRef;
91    pub fn SCDynamicStoreCopyValue(store: SCDynamicStoreRef, key: CFStringRef)
92        -> CFPropertyListRef;
93    pub fn SCDynamicStoreCopyMultiple(
94        store: SCDynamicStoreRef,
95        keys: CFArrayRef,
96        patterns: CFArrayRef,
97    ) -> CFDictionaryRef;
98    pub fn SCDynamicStoreAddValue(
99        store: SCDynamicStoreRef,
100        key: CFStringRef,
101        value: CFPropertyListRef,
102    ) -> Boolean;
103    pub fn SCDynamicStoreAddTemporaryValue(
104        store: SCDynamicStoreRef,
105        key: CFStringRef,
106        value: CFPropertyListRef,
107    ) -> Boolean;
108    pub fn SCDynamicStoreSetValue(
109        store: SCDynamicStoreRef,
110        key: CFStringRef,
111        value: CFPropertyListRef,
112    ) -> Boolean;
113    pub fn SCDynamicStoreRemoveValue(store: SCDynamicStoreRef, key: CFStringRef) -> Boolean;
114    pub fn SCDynamicStoreNotifyValue(store: SCDynamicStoreRef, key: CFStringRef) -> Boolean;
115    pub fn SCDynamicStoreSetNotificationKeys(
116        store: SCDynamicStoreRef,
117        keys: CFArrayRef,
118        patterns: CFArrayRef,
119    ) -> Boolean;
120    pub fn SCDynamicStoreCopyNotifiedKeys(store: SCDynamicStoreRef) -> CFArrayRef;
121    pub fn SCDynamicStoreCopyComputerName(
122        store: SCDynamicStoreRef,
123        encoding: *mut u32,
124    ) -> CFStringRef;
125    pub fn SCDynamicStoreCopyConsoleUser(
126        store: SCDynamicStoreRef,
127        uid: *mut libc::uid_t,
128        gid: *mut libc::gid_t,
129    ) -> CFStringRef;
130    pub fn SCDynamicStoreCopyLocalHostName(store: SCDynamicStoreRef) -> CFStringRef;
131    pub fn SCDynamicStoreCopyLocation(store: SCDynamicStoreRef) -> CFStringRef;
132    pub fn SCDynamicStoreCopyProxies(store: SCDynamicStoreRef) -> CFDictionaryRef;
133    pub fn SCDynamicStoreCopyDHCPInfo(
134        store: SCDynamicStoreRef,
135        service_id: CFStringRef,
136    ) -> CFDictionaryRef;
137    pub fn SCDynamicStoreKeyCreateNetworkGlobalEntity(
138        allocator: CFAllocatorRef,
139        domain: CFStringRef,
140        entity: CFStringRef,
141    ) -> CFStringRef;
142    pub fn SCDynamicStoreKeyCreateNetworkInterface(
143        allocator: CFAllocatorRef,
144        domain: CFStringRef,
145    ) -> CFStringRef;
146    pub fn SCDynamicStoreKeyCreateNetworkInterfaceEntity(
147        allocator: CFAllocatorRef,
148        domain: CFStringRef,
149        ifname: CFStringRef,
150        entity: CFStringRef,
151    ) -> CFStringRef;
152    pub fn SCDynamicStoreKeyCreateNetworkServiceEntity(
153        allocator: CFAllocatorRef,
154        domain: CFStringRef,
155        service_id: CFStringRef,
156        entity: CFStringRef,
157    ) -> CFStringRef;
158    pub fn SCDynamicStoreKeyCreateComputerName(allocator: CFAllocatorRef) -> CFStringRef;
159    pub fn SCDynamicStoreKeyCreateConsoleUser(allocator: CFAllocatorRef) -> CFStringRef;
160    pub fn SCDynamicStoreKeyCreateHostNames(allocator: CFAllocatorRef) -> CFStringRef;
161    pub fn SCDynamicStoreKeyCreateLocation(allocator: CFAllocatorRef) -> CFStringRef;
162    pub fn SCDynamicStoreKeyCreateProxies(allocator: CFAllocatorRef) -> CFStringRef;
163
164    pub fn SCPreferencesCreate(
165        allocator: CFAllocatorRef,
166        name: CFStringRef,
167        prefs_id: CFStringRef,
168    ) -> SCPreferencesRef;
169    pub fn SCPreferencesLock(prefs: SCPreferencesRef, wait: Boolean) -> Boolean;
170    pub fn SCPreferencesCommitChanges(prefs: SCPreferencesRef) -> Boolean;
171    pub fn SCPreferencesApplyChanges(prefs: SCPreferencesRef) -> Boolean;
172    pub fn SCPreferencesUnlock(prefs: SCPreferencesRef) -> Boolean;
173    pub fn SCPreferencesGetSignature(prefs: SCPreferencesRef) -> CFDataRef;
174    pub fn SCPreferencesCopyKeyList(prefs: SCPreferencesRef) -> CFArrayRef;
175    pub fn SCPreferencesGetValue(prefs: SCPreferencesRef, key: CFStringRef) -> CFPropertyListRef;
176    pub fn SCPreferencesAddValue(
177        prefs: SCPreferencesRef,
178        key: CFStringRef,
179        value: CFPropertyListRef,
180    ) -> Boolean;
181    pub fn SCPreferencesSetValue(
182        prefs: SCPreferencesRef,
183        key: CFStringRef,
184        value: CFPropertyListRef,
185    ) -> Boolean;
186    pub fn SCPreferencesRemoveValue(prefs: SCPreferencesRef, key: CFStringRef) -> Boolean;
187    pub fn SCPreferencesSynchronize(prefs: SCPreferencesRef);
188    pub fn SCPreferencesPathCreateUniqueChild(
189        prefs: SCPreferencesRef,
190        prefix: CFStringRef,
191    ) -> CFStringRef;
192    pub fn SCPreferencesPathGetValue(prefs: SCPreferencesRef, path: CFStringRef)
193        -> CFDictionaryRef;
194    pub fn SCPreferencesPathGetLink(prefs: SCPreferencesRef, path: CFStringRef) -> CFStringRef;
195    pub fn SCPreferencesPathSetValue(
196        prefs: SCPreferencesRef,
197        path: CFStringRef,
198        value: CFDictionaryRef,
199    ) -> Boolean;
200    pub fn SCPreferencesPathSetLink(
201        prefs: SCPreferencesRef,
202        path: CFStringRef,
203        link: CFStringRef,
204    ) -> Boolean;
205    pub fn SCPreferencesPathRemoveValue(prefs: SCPreferencesRef, path: CFStringRef) -> Boolean;
206    pub fn SCPreferencesSetComputerName(
207        prefs: SCPreferencesRef,
208        name: CFStringRef,
209        name_encoding: u32,
210    ) -> Boolean;
211    pub fn SCPreferencesSetLocalHostName(prefs: SCPreferencesRef, name: CFStringRef) -> Boolean;
212
213    pub fn SCNetworkInterfaceCopyAll() -> CFArrayRef;
214    pub fn SCNetworkInterfaceGetBSDName(interface: SCNetworkInterfaceRef) -> CFStringRef;
215    pub fn SCNetworkInterfaceGetConfiguration(interface: SCNetworkInterfaceRef) -> CFDictionaryRef;
216    pub fn SCNetworkInterfaceGetExtendedConfiguration(
217        interface: SCNetworkInterfaceRef,
218        extended_type: CFStringRef,
219    ) -> CFDictionaryRef;
220    pub fn SCNetworkInterfaceGetHardwareAddressString(
221        interface: SCNetworkInterfaceRef,
222    ) -> CFStringRef;
223    pub fn SCNetworkInterfaceGetInterface(
224        interface: SCNetworkInterfaceRef,
225    ) -> SCNetworkInterfaceRef;
226    pub fn SCNetworkInterfaceGetInterfaceType(interface: SCNetworkInterfaceRef) -> CFStringRef;
227    pub fn SCNetworkInterfaceGetLocalizedDisplayName(
228        interface: SCNetworkInterfaceRef,
229    ) -> CFStringRef;
230    pub fn SCNetworkInterfaceGetSupportedInterfaceTypes(
231        interface: SCNetworkInterfaceRef,
232    ) -> CFArrayRef;
233    pub fn SCNetworkInterfaceGetSupportedProtocolTypes(
234        interface: SCNetworkInterfaceRef,
235    ) -> CFArrayRef;
236    pub fn SCNetworkInterfaceCreateWithInterface(
237        interface: SCNetworkInterfaceRef,
238        interface_type: CFStringRef,
239    ) -> SCNetworkInterfaceRef;
240    pub fn SCNetworkInterfaceCopyMTU(
241        interface: SCNetworkInterfaceRef,
242        current: *mut i32,
243        minimum: *mut i32,
244        maximum: *mut i32,
245    ) -> Boolean;
246    pub fn SCNetworkInterfaceForceConfigurationRefresh(interface: SCNetworkInterfaceRef)
247        -> Boolean;
248
249    pub fn SCNetworkProtocolGetConfiguration(protocol: SCNetworkProtocolRef) -> CFDictionaryRef;
250    pub fn SCNetworkProtocolGetEnabled(protocol: SCNetworkProtocolRef) -> Boolean;
251    pub fn SCNetworkProtocolGetProtocolType(protocol: SCNetworkProtocolRef) -> CFStringRef;
252    pub fn SCNetworkProtocolSetConfiguration(
253        protocol: SCNetworkProtocolRef,
254        config: CFDictionaryRef,
255    ) -> Boolean;
256    pub fn SCNetworkProtocolSetEnabled(protocol: SCNetworkProtocolRef, enabled: Boolean)
257        -> Boolean;
258
259    pub fn SCNetworkServiceCopyAll(prefs: SCPreferencesRef) -> CFArrayRef;
260    pub fn SCNetworkServiceCopyProtocols(service: SCNetworkServiceRef) -> CFArrayRef;
261    pub fn SCNetworkServiceCopyProtocol(
262        service: SCNetworkServiceRef,
263        protocol_type: CFStringRef,
264    ) -> SCNetworkProtocolRef;
265    pub fn SCNetworkServiceAddProtocolType(
266        service: SCNetworkServiceRef,
267        protocol_type: CFStringRef,
268    ) -> Boolean;
269    pub fn SCNetworkServiceEstablishDefaultConfiguration(service: SCNetworkServiceRef) -> Boolean;
270    pub fn SCNetworkServiceGetEnabled(service: SCNetworkServiceRef) -> Boolean;
271    pub fn SCNetworkServiceGetInterface(service: SCNetworkServiceRef) -> SCNetworkInterfaceRef;
272    pub fn SCNetworkServiceGetName(service: SCNetworkServiceRef) -> CFStringRef;
273    pub fn SCNetworkServiceGetServiceID(service: SCNetworkServiceRef) -> CFStringRef;
274    pub fn SCNetworkServiceRemove(service: SCNetworkServiceRef) -> Boolean;
275    pub fn SCNetworkServiceRemoveProtocolType(
276        service: SCNetworkServiceRef,
277        protocol_type: CFStringRef,
278    ) -> Boolean;
279    pub fn SCNetworkServiceSetEnabled(service: SCNetworkServiceRef, enabled: Boolean) -> Boolean;
280    pub fn SCNetworkServiceSetName(service: SCNetworkServiceRef, name: CFStringRef) -> Boolean;
281
282    pub fn SCNetworkSetCopyAll(prefs: SCPreferencesRef) -> CFArrayRef;
283    pub fn SCNetworkSetCopyCurrent(prefs: SCPreferencesRef) -> SCNetworkSetRef;
284    pub fn SCNetworkSetCopyServices(set: SCNetworkSetRef) -> CFArrayRef;
285    pub fn SCNetworkSetGetName(set: SCNetworkSetRef) -> CFStringRef;
286    pub fn SCNetworkSetGetSetID(set: SCNetworkSetRef) -> CFStringRef;
287    pub fn SCNetworkSetGetServiceOrder(set: SCNetworkSetRef) -> CFArrayRef;
288    pub fn SCNetworkSetContainsInterface(
289        set: SCNetworkSetRef,
290        interface: SCNetworkInterfaceRef,
291    ) -> Boolean;
292    pub fn SCNetworkSetAddService(set: SCNetworkSetRef, service: SCNetworkServiceRef) -> Boolean;
293    pub fn SCNetworkSetRemove(set: SCNetworkSetRef) -> Boolean;
294    pub fn SCNetworkSetRemoveService(set: SCNetworkSetRef, service: SCNetworkServiceRef)
295        -> Boolean;
296    pub fn SCNetworkSetSetCurrent(set: SCNetworkSetRef) -> Boolean;
297    pub fn SCNetworkSetSetName(set: SCNetworkSetRef, name: CFStringRef) -> Boolean;
298    pub fn SCNetworkSetSetServiceOrder(set: SCNetworkSetRef, order: CFArrayRef) -> Boolean;
299
300    pub fn SCNetworkReachabilityCreateWithAddress(
301        allocator: CFAllocatorRef,
302        address: *const libc::sockaddr,
303    ) -> SCNetworkReachabilityRef;
304    pub fn SCNetworkReachabilityCreateWithAddressPair(
305        allocator: CFAllocatorRef,
306        local_address: *const libc::sockaddr,
307        remote_address: *const libc::sockaddr,
308    ) -> SCNetworkReachabilityRef;
309    pub fn SCNetworkReachabilityCreateWithName(
310        allocator: CFAllocatorRef,
311        nodename: *const c_char,
312    ) -> SCNetworkReachabilityRef;
313    pub fn SCNetworkReachabilityGetFlags(
314        target: SCNetworkReachabilityRef,
315        flags: *mut SCNetworkReachabilityFlags,
316    ) -> Boolean;
317    pub fn SCNetworkReachabilitySetCallback(
318        target: SCNetworkReachabilityRef,
319        callback: SCNetworkReachabilityCallBack,
320        context: *const SCNetworkReachabilityContext,
321    ) -> Boolean;
322    pub fn SCNetworkReachabilityScheduleWithRunLoop(
323        target: SCNetworkReachabilityRef,
324        run_loop: CFRunLoopRef,
325        run_loop_mode: CFStringRef,
326    ) -> Boolean;
327    pub fn SCNetworkReachabilityUnscheduleFromRunLoop(
328        target: SCNetworkReachabilityRef,
329        run_loop: CFRunLoopRef,
330        run_loop_mode: CFStringRef,
331    ) -> Boolean;
332
333    pub fn CNSetSupportedSSIDs(ssid_array: CFArrayRef) -> Boolean;
334    pub fn CNMarkPortalOnline(interface_name: CFStringRef) -> Boolean;
335    pub fn CNMarkPortalOffline(interface_name: CFStringRef) -> Boolean;
336    pub fn CNCopySupportedInterfaces() -> CFArrayRef;
337}