18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef APPLE80211_H 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define APPLE80211_H 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Apple80211 framework definitions 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This is an undocumented interface and the definitions here are based on 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * information from MacStumbler (http://www.macstumbler.com/Apple80211.h) and 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * whatever related information can be found with google and experiments ;-). 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef struct __WirelessRef *WirelessRef; 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef SInt32 WirelessError; 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define errWirelessNoError 0 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef struct WirelessInfo { 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 link_qual; 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 comms_qual; 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 signal; 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 noise; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 port_stat; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 client_mode; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 res1; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 power; 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 res2; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt8 bssID[6]; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt8 ssid[34]; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} WirelessInfo; 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef struct WirelessInfo2 { 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* TODO - these are probably not in correct order or complete */ 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WirelessInfo info1; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt8 macAddress[6]; 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} WirelessInfo2; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef struct WirelessNetworkInfo { 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 channel; 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 noise; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 signal; 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt8 bssid[6]; 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 beacon_int; 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 capability; 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt16 ssid_len; 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt8 ssid[32]; 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} WirelessNetworkInfo; 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef int wirelessKeyType; /* TODO */ 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint WirelessIsAvailable(void); 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessAttach(WirelessRef *ref, UInt32 res); 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessDetach(WirelessRef ref); 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessPrivate(WirelessRef ref, void *in_ptr, int in_bytes, 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *out_ptr, int out_bytes); 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessSetEnabled(WirelessRef ref, UInt8 enabled); 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessGetEnabled(WirelessRef ref, UInt8 *enabled); 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessSetPower(WirelessRef ref, UInt8 power); 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessGetPower(WirelessRef ref, UInt8 *power); 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessGetInfo(WirelessRef ref, WirelessInfo *info); 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessGetInfo2(WirelessRef ref, WirelessInfo2 *info); 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessScan(WirelessRef ref, CFArrayRef *results, 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt32 strip_dups); 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessScanSplit(WirelessRef ref, CFArrayRef *ap_results, 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt CFArrayRef *ibss_results, UInt32 strip_dups); 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessDirectedScan(WirelessRef ref, CFArrayRef *results, 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt32 strip_dups, CFStringRef ssid); 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessDirectedScan2(WirelessRef ref, CFDataRef ssid, 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt UInt32 strip_dups, CFArrayRef *results); 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessJoin(WirelessRef ref, CFStringRef ssid); 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessJoinWEP(WirelessRef ref, CFStringRef ssid, 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt CFStringRef passwd); 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessJoin8021x(WirelessRef ref, CFStringRef ssid); 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Set WEP key 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ref: wireless reference from WirelessAttach() 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * type: ? 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key_idx: 0..3 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key_len: 13 for WEP-104 or 0 for clearing the key 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key: Pointer to the key or %NULL if key_len = 0 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessSetKey(WirelessRef ref, wirelessKeyType type, 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_idx, int key_len, 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const unsigned char *key); 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Set WPA key (e.g., PMK for 4-way handshake) 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ref: wireless reference from WirelessAttach() 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * type: 0..4; 1 = PMK 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key_len: 16, 32, or 0 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key: Pointer to the key or %NULL if key_len = 0 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessSetWPAKey(WirelessRef ref, wirelessKeyType type, 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_len, const unsigned char *key); 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessAssociate(WirelessRef ref, int type, CFDataRef ssid, 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt CFStringRef key); 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessAssociate2(WirelessRef ref, CFDictionaryRef scan_res, 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt CFStringRef key); 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessDisassociate(WirelessRef ref); 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Get a copy of scan results for the given SSID 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * The returned dictionary includes following entries: 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * beaconInterval: CFNumber(kCFNumberSInt32Type) 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * SSID: CFData buffer of the SSID 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * isWPA: CFNumber(kCFNumberSInt32Type); 0 = not used, 1 = WPA, -128 = WPA2 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * name: Name of the network (SSID string) 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * BSSID: CFData buffer of the BSSID 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * channel: CFNumber(kCFNumberSInt32Type) 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * signal: CFNumber(kCFNumberSInt32Type) 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * appleIE: CFData 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPSNOPINRequired: CFBoolean 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * noise: CFNumber(kCFNumberSInt32Type) 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * capability: CFNumber(kCFNumberSInt32Type) 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uniCipher: CFArray of CFNumber(kCFNumberSInt32Type) 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * appleIE_Version: CFNumber(kCFNumberSInt32Type) 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * appleIE_Robust: CFBoolean 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPSConfigured: CFBoolean 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * scanWasDirected: CFBoolean 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * appleIE_Product: CFNumber(kCFNumberSInt32Type) 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authModes: CFArray of CFNumber(kCFNumberSInt32Type) 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * multiCipher: CFNumber(kCFNumberSInt32Type) 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtCFDictionaryRef WirelessSafeDirectedScanCopy(WirelessRef ref, CFDataRef ssid); 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Get information about the current association 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * The returned dictionary includes following entries: 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * keyData: CFData buffer of the key (e.g., 32-octet PSK) 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * multiCipher: CFNumber(kCFNumberSInt32Type); 0 = none, 5 = CCMP? 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * channel: CFNumber(kCFNumberSInt32Type) 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * isIBSS: CFBoolean 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * authMode: CFNumber(kCFNumberSInt32Type); 2 = WPA-Personal; 3 = open, 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 129 = WPA2-Enterprise 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * isWPA: CFNumber(kCFNumberSInt32Type); 0 = not used, 1 = WPA, -128 == WPA2 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * SSID: CFData buffer of the SSID 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cipherMode: CFNumber(kCFNumberSInt32Type); 0 = none, 4 = CCMP? 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtCFDictionaryRef WirelessGetAssociationInfo(WirelessRef ref); 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtWirelessError WirelessConfigure(WirelessRef ref); 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Get ASP information 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * The returned dictionary includes following entries: 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Version: version number (e.g., 3.0) 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Channel: channel (e.g., 1) 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Vendor: vendor (e.g., 2) 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtCFDictionaryRef WirelessGetInfoASP(void); 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Get a copy of the interface dictionary 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * The returned dictionary has a key,value pairs for wireless interfaces. 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * The key is the interface name and the value is the driver identifier, e.g., 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * en1: com.apple.driver.AirPort.Atheros 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtCFDictionaryRef WirelessCopyInterfaceDict(void); 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* APPLE80211_H */ 157