1 #ifndef APPLE80211_H 2 #define APPLE80211_H 3 4 /* 5 * Apple80211 framework definitions 6 * This is an undocumented interface and the definitions here are based on 7 * information from MacStumbler (http://www.macstumbler.com/Apple80211.h) and 8 * whatever related information can be found with google and experiments ;-). 9 */ 10 11 typedef struct __WirelessRef *WirelessRef; 12 typedef SInt32 WirelessError; 13 #define errWirelessNoError 0 14 15 typedef struct WirelessInfo { 16 UInt16 link_qual; 17 UInt16 comms_qual; 18 UInt16 signal; 19 UInt16 noise; 20 UInt16 port_stat; 21 UInt16 client_mode; 22 UInt16 res1; 23 UInt16 power; 24 UInt16 res2; 25 UInt8 bssID[6]; 26 UInt8 ssid[34]; 27 } WirelessInfo; 28 29 typedef struct WirelessInfo2 { 30 /* TODO - these are probably not in correct order or complete */ 31 WirelessInfo info1; 32 UInt8 macAddress[6]; 33 } WirelessInfo2; 34 35 typedef struct WirelessNetworkInfo { 36 UInt16 channel; 37 UInt16 noise; 38 UInt16 signal; 39 UInt8 bssid[6]; 40 UInt16 beacon_int; 41 UInt16 capability; 42 UInt16 ssid_len; 43 UInt8 ssid[32]; 44 } WirelessNetworkInfo; 45 46 typedef int wirelessKeyType; /* TODO */ 47 48 int WirelessIsAvailable(void); 49 WirelessError WirelessAttach(WirelessRef *ref, UInt32 res); 50 WirelessError WirelessDetach(WirelessRef ref); 51 WirelessError WirelessPrivate(WirelessRef ref, void *in_ptr, int in_bytes, 52 void *out_ptr, int out_bytes); 53 WirelessError WirelessSetEnabled(WirelessRef ref, UInt8 enabled); 54 WirelessError WirelessGetEnabled(WirelessRef ref, UInt8 *enabled); 55 WirelessError WirelessSetPower(WirelessRef ref, UInt8 power); 56 WirelessError WirelessGetPower(WirelessRef ref, UInt8 *power); 57 WirelessError WirelessGetInfo(WirelessRef ref, WirelessInfo *info); 58 WirelessError WirelessGetInfo2(WirelessRef ref, WirelessInfo2 *info); 59 WirelessError WirelessScan(WirelessRef ref, CFArrayRef *results, 60 UInt32 strip_dups); 61 WirelessError WirelessScanSplit(WirelessRef ref, CFArrayRef *ap_results, 62 CFArrayRef *ibss_results, UInt32 strip_dups); 63 WirelessError WirelessDirectedScan(WirelessRef ref, CFArrayRef *results, 64 UInt32 strip_dups, CFStringRef ssid); 65 WirelessError WirelessDirectedScan2(WirelessRef ref, CFDataRef ssid, 66 UInt32 strip_dups, CFArrayRef *results); 67 WirelessError WirelessJoin(WirelessRef ref, CFStringRef ssid); 68 WirelessError WirelessJoinWEP(WirelessRef ref, CFStringRef ssid, 69 CFStringRef passwd); 70 WirelessError WirelessJoin8021x(WirelessRef ref, CFStringRef ssid); 71 /* 72 * Set WEP key 73 * ref: wireless reference from WirelessAttach() 74 * type: ? 75 * key_idx: 0..3 76 * key_len: 13 for WEP-104 or 0 for clearing the key 77 * key: Pointer to the key or %NULL if key_len = 0 78 */ 79 WirelessError WirelessSetKey(WirelessRef ref, wirelessKeyType type, 80 int key_idx, int key_len, 81 const unsigned char *key); 82 /* 83 * Set WPA key (e.g., PMK for 4-way handshake) 84 * ref: wireless reference from WirelessAttach() 85 * type: 0..4; 1 = PMK 86 * key_len: 16, 32, or 0 87 * key: Pointer to the key or %NULL if key_len = 0 88 */ 89 WirelessError WirelessSetWPAKey(WirelessRef ref, wirelessKeyType type, 90 int key_len, const unsigned char *key); 91 WirelessError WirelessAssociate(WirelessRef ref, int type, CFDataRef ssid, 92 CFStringRef key); 93 WirelessError WirelessAssociate2(WirelessRef ref, CFDictionaryRef scan_res, 94 CFStringRef key); 95 WirelessError WirelessDisassociate(WirelessRef ref); 96 97 /* 98 * Get a copy of scan results for the given SSID 99 * The returned dictionary includes following entries: 100 * beaconInterval: CFNumber(kCFNumberSInt32Type) 101 * SSID: CFData buffer of the SSID 102 * isWPA: CFNumber(kCFNumberSInt32Type); 0 = not used, 1 = WPA, -128 = WPA2 103 * name: Name of the network (SSID string) 104 * BSSID: CFData buffer of the BSSID 105 * channel: CFNumber(kCFNumberSInt32Type) 106 * signal: CFNumber(kCFNumberSInt32Type) 107 * appleIE: CFData 108 * WPSNOPINRequired: CFBoolean 109 * noise: CFNumber(kCFNumberSInt32Type) 110 * capability: CFNumber(kCFNumberSInt32Type) 111 * uniCipher: CFArray of CFNumber(kCFNumberSInt32Type) 112 * appleIE_Version: CFNumber(kCFNumberSInt32Type) 113 * appleIE_Robust: CFBoolean 114 * WPSConfigured: CFBoolean 115 * scanWasDirected: CFBoolean 116 * appleIE_Product: CFNumber(kCFNumberSInt32Type) 117 * authModes: CFArray of CFNumber(kCFNumberSInt32Type) 118 * multiCipher: CFNumber(kCFNumberSInt32Type) 119 */ 120 CFDictionaryRef WirelessSafeDirectedScanCopy(WirelessRef ref, CFDataRef ssid); 121 122 /* 123 * Get information about the current association 124 * The returned dictionary includes following entries: 125 * keyData: CFData buffer of the key (e.g., 32-octet PSK) 126 * multiCipher: CFNumber(kCFNumberSInt32Type); 0 = none, 5 = CCMP? 127 * channel: CFNumber(kCFNumberSInt32Type) 128 * isIBSS: CFBoolean 129 * authMode: CFNumber(kCFNumberSInt32Type); 2 = WPA-Personal; 3 = open, 130 * 129 = WPA2-Enterprise 131 * isWPA: CFNumber(kCFNumberSInt32Type); 0 = not used, 1 = WPA, -128 == WPA2 132 * SSID: CFData buffer of the SSID 133 * cipherMode: CFNumber(kCFNumberSInt32Type); 0 = none, 4 = CCMP? 134 */ 135 CFDictionaryRef WirelessGetAssociationInfo(WirelessRef ref); 136 137 WirelessError WirelessConfigure(WirelessRef ref); 138 139 /* 140 * Get ASP information 141 * The returned dictionary includes following entries: 142 * Version: version number (e.g., 3.0) 143 * Channel: channel (e.g., 1) 144 * Vendor: vendor (e.g., 2) 145 */ 146 CFDictionaryRef WirelessGetInfoASP(void); 147 148 /* 149 * Get a copy of the interface dictionary 150 * The returned dictionary has a key,value pairs for wireless interfaces. 151 * The key is the interface name and the value is the driver identifier, e.g., 152 * en1: com.apple.driver.AirPort.Atheros 153 */ 154 CFDictionaryRef WirelessCopyInterfaceDict(void); 155 156 #endif /* APPLE80211_H */ 157