#ifndef APPLE80211_H #define APPLE80211_H /* * Apple80211 framework definitions * This is an undocumented interface and the definitions here are based on * information from MacStumbler (http://www.macstumbler.com/Apple80211.h) and * whatever related information can be found with google and experiments ;-). */ typedef struct __WirelessRef *WirelessRef; typedef SInt32 WirelessError; #define errWirelessNoError 0 typedef struct WirelessInfo { UInt16 link_qual; UInt16 comms_qual; UInt16 signal; UInt16 noise; UInt16 port_stat; UInt16 client_mode; UInt16 res1; UInt16 power; UInt16 res2; UInt8 bssID[6]; UInt8 ssid[34]; } WirelessInfo; typedef struct WirelessInfo2 { /* TODO - these are probably not in correct order or complete */ WirelessInfo info1; UInt8 macAddress[6]; } WirelessInfo2; typedef struct WirelessNetworkInfo { UInt16 channel; UInt16 noise; UInt16 signal; UInt8 bssid[6]; UInt16 beacon_int; UInt16 capability; UInt16 ssid_len; UInt8 ssid[32]; } WirelessNetworkInfo; typedef int wirelessKeyType; /* TODO */ int WirelessIsAvailable(void); WirelessError WirelessAttach(WirelessRef *ref, UInt32 res); WirelessError WirelessDetach(WirelessRef ref); WirelessError WirelessPrivate(WirelessRef ref, void *in_ptr, int in_bytes, void *out_ptr, int out_bytes); WirelessError WirelessSetEnabled(WirelessRef ref, UInt8 enabled); WirelessError WirelessGetEnabled(WirelessRef ref, UInt8 *enabled); WirelessError WirelessSetPower(WirelessRef ref, UInt8 power); WirelessError WirelessGetPower(WirelessRef ref, UInt8 *power); WirelessError WirelessGetInfo(WirelessRef ref, WirelessInfo *info); WirelessError WirelessGetInfo2(WirelessRef ref, WirelessInfo2 *info); WirelessError WirelessScan(WirelessRef ref, CFArrayRef *results, UInt32 strip_dups); WirelessError WirelessScanSplit(WirelessRef ref, CFArrayRef *ap_results, CFArrayRef *ibss_results, UInt32 strip_dups); WirelessError WirelessDirectedScan(WirelessRef ref, CFArrayRef *results, UInt32 strip_dups, CFStringRef ssid); WirelessError WirelessDirectedScan2(WirelessRef ref, CFDataRef ssid, UInt32 strip_dups, CFArrayRef *results); WirelessError WirelessJoin(WirelessRef ref, CFStringRef ssid); WirelessError WirelessJoinWEP(WirelessRef ref, CFStringRef ssid, CFStringRef passwd); WirelessError WirelessJoin8021x(WirelessRef ref, CFStringRef ssid); /* * Set WEP key * ref: wireless reference from WirelessAttach() * type: ? * key_idx: 0..3 * key_len: 13 for WEP-104 or 0 for clearing the key * key: Pointer to the key or %NULL if key_len = 0 */ WirelessError WirelessSetKey(WirelessRef ref, wirelessKeyType type, int key_idx, int key_len, const unsigned char *key); /* * Set WPA key (e.g., PMK for 4-way handshake) * ref: wireless reference from WirelessAttach() * type: 0..4; 1 = PMK * key_len: 16, 32, or 0 * key: Pointer to the key or %NULL if key_len = 0 */ WirelessError WirelessSetWPAKey(WirelessRef ref, wirelessKeyType type, int key_len, const unsigned char *key); WirelessError WirelessAssociate(WirelessRef ref, int type, CFDataRef ssid, CFStringRef key); WirelessError WirelessAssociate2(WirelessRef ref, CFDictionaryRef scan_res, CFStringRef key); WirelessError WirelessDisassociate(WirelessRef ref); /* * Get a copy of scan results for the given SSID * The returned dictionary includes following entries: * beaconInterval: CFNumber(kCFNumberSInt32Type) * SSID: CFData buffer of the SSID * isWPA: CFNumber(kCFNumberSInt32Type); 0 = not used, 1 = WPA, -128 = WPA2 * name: Name of the network (SSID string) * BSSID: CFData buffer of the BSSID * channel: CFNumber(kCFNumberSInt32Type) * signal: CFNumber(kCFNumberSInt32Type) * appleIE: CFData * WPSNOPINRequired: CFBoolean * noise: CFNumber(kCFNumberSInt32Type) * capability: CFNumber(kCFNumberSInt32Type) * uniCipher: CFArray of CFNumber(kCFNumberSInt32Type) * appleIE_Version: CFNumber(kCFNumberSInt32Type) * appleIE_Robust: CFBoolean * WPSConfigured: CFBoolean * scanWasDirected: CFBoolean * appleIE_Product: CFNumber(kCFNumberSInt32Type) * authModes: CFArray of CFNumber(kCFNumberSInt32Type) * multiCipher: CFNumber(kCFNumberSInt32Type) */ CFDictionaryRef WirelessSafeDirectedScanCopy(WirelessRef ref, CFDataRef ssid); /* * Get information about the current association * The returned dictionary includes following entries: * keyData: CFData buffer of the key (e.g., 32-octet PSK) * multiCipher: CFNumber(kCFNumberSInt32Type); 0 = none, 5 = CCMP? * channel: CFNumber(kCFNumberSInt32Type) * isIBSS: CFBoolean * authMode: CFNumber(kCFNumberSInt32Type); 2 = WPA-Personal; 3 = open, * 129 = WPA2-Enterprise * isWPA: CFNumber(kCFNumberSInt32Type); 0 = not used, 1 = WPA, -128 == WPA2 * SSID: CFData buffer of the SSID * cipherMode: CFNumber(kCFNumberSInt32Type); 0 = none, 4 = CCMP? */ CFDictionaryRef WirelessGetAssociationInfo(WirelessRef ref); WirelessError WirelessConfigure(WirelessRef ref); /* * Get ASP information * The returned dictionary includes following entries: * Version: version number (e.g., 3.0) * Channel: channel (e.g., 1) * Vendor: vendor (e.g., 2) */ CFDictionaryRef WirelessGetInfoASP(void); /* * Get a copy of the interface dictionary * The returned dictionary has a key,value pairs for wireless interfaces. * The key is the interface name and the value is the driver identifier, e.g., * en1: com.apple.driver.AirPort.Atheros */ CFDictionaryRef WirelessCopyInterfaceDict(void); #endif /* APPLE80211_H */