xref: /dflybsd-src/contrib/wpa_supplicant/src/drivers/driver_hostap.h (revision 3a84a4273475ed07d0ab1c2dfeffdfedef35d9cd)
16d49e1aeSJan Lentfer /*
23ff40c12SJohn Marino  * Driver interaction with Linux Host AP driver
33ff40c12SJohn Marino  * Copyright (c) 2002-2006, Jouni Malinen <j@w1.fi>
46d49e1aeSJan Lentfer  *
53ff40c12SJohn Marino  * This software may be distributed under the terms of the BSD license.
63ff40c12SJohn Marino  * See README for more details.
76d49e1aeSJan Lentfer  */
86d49e1aeSJan Lentfer 
96d49e1aeSJan Lentfer #ifndef HOSTAP_DRIVER_H
106d49e1aeSJan Lentfer #define HOSTAP_DRIVER_H
116d49e1aeSJan Lentfer 
123ff40c12SJohn Marino /* netdevice private ioctls (used, e.g., with iwpriv from user space) */
133ff40c12SJohn Marino 
143ff40c12SJohn Marino /* New wireless extensions API - SET/GET convention (even ioctl numbers are
153ff40c12SJohn Marino  * root only)
163ff40c12SJohn Marino  */
176d49e1aeSJan Lentfer #define PRISM2_IOCTL_PRISM2_PARAM (SIOCIWFIRSTPRIV + 0)
183ff40c12SJohn Marino #define PRISM2_IOCTL_GET_PRISM2_PARAM (SIOCIWFIRSTPRIV + 1)
193ff40c12SJohn Marino #define PRISM2_IOCTL_WRITEMIF (SIOCIWFIRSTPRIV + 2)
203ff40c12SJohn Marino #define PRISM2_IOCTL_READMIF (SIOCIWFIRSTPRIV + 3)
213ff40c12SJohn Marino #define PRISM2_IOCTL_MONITOR (SIOCIWFIRSTPRIV + 4)
226d49e1aeSJan Lentfer #define PRISM2_IOCTL_RESET (SIOCIWFIRSTPRIV + 6)
233ff40c12SJohn Marino #define PRISM2_IOCTL_INQUIRE (SIOCIWFIRSTPRIV + 8)
243ff40c12SJohn Marino #define PRISM2_IOCTL_WDS_ADD (SIOCIWFIRSTPRIV + 10)
253ff40c12SJohn Marino #define PRISM2_IOCTL_WDS_DEL (SIOCIWFIRSTPRIV + 12)
263ff40c12SJohn Marino #define PRISM2_IOCTL_SET_RID_WORD (SIOCIWFIRSTPRIV + 14)
273ff40c12SJohn Marino #define PRISM2_IOCTL_MACCMD (SIOCIWFIRSTPRIV + 16)
283ff40c12SJohn Marino #define PRISM2_IOCTL_ADDMAC (SIOCIWFIRSTPRIV + 18)
293ff40c12SJohn Marino #define PRISM2_IOCTL_DELMAC (SIOCIWFIRSTPRIV + 20)
303ff40c12SJohn Marino #define PRISM2_IOCTL_KICKMAC (SIOCIWFIRSTPRIV + 22)
313ff40c12SJohn Marino 
323ff40c12SJohn Marino /* following are not in SIOCGIWPRIV list; check permission in the driver code
333ff40c12SJohn Marino  */
343ff40c12SJohn Marino #define PRISM2_IOCTL_DOWNLOAD (SIOCDEVPRIVATE + 13)
356d49e1aeSJan Lentfer #define PRISM2_IOCTL_HOSTAPD (SIOCDEVPRIVATE + 14)
366d49e1aeSJan Lentfer 
373ff40c12SJohn Marino 
386d49e1aeSJan Lentfer /* PRISM2_IOCTL_PRISM2_PARAM ioctl() subtypes: */
396d49e1aeSJan Lentfer enum {
406d49e1aeSJan Lentfer 	/* PRISM2_PARAM_PTYPE = 1, */ /* REMOVED 2003-10-22 */
416d49e1aeSJan Lentfer 	PRISM2_PARAM_TXRATECTRL = 2,
426d49e1aeSJan Lentfer 	PRISM2_PARAM_BEACON_INT = 3,
436d49e1aeSJan Lentfer 	PRISM2_PARAM_PSEUDO_IBSS = 4,
446d49e1aeSJan Lentfer 	PRISM2_PARAM_ALC = 5,
456d49e1aeSJan Lentfer 	/* PRISM2_PARAM_TXPOWER = 6, */ /* REMOVED 2003-10-22 */
466d49e1aeSJan Lentfer 	PRISM2_PARAM_DUMP = 7,
476d49e1aeSJan Lentfer 	PRISM2_PARAM_OTHER_AP_POLICY = 8,
486d49e1aeSJan Lentfer 	PRISM2_PARAM_AP_MAX_INACTIVITY = 9,
496d49e1aeSJan Lentfer 	PRISM2_PARAM_AP_BRIDGE_PACKETS = 10,
506d49e1aeSJan Lentfer 	PRISM2_PARAM_DTIM_PERIOD = 11,
516d49e1aeSJan Lentfer 	PRISM2_PARAM_AP_NULLFUNC_ACK = 12,
526d49e1aeSJan Lentfer 	PRISM2_PARAM_MAX_WDS = 13,
536d49e1aeSJan Lentfer 	PRISM2_PARAM_AP_AUTOM_AP_WDS = 14,
546d49e1aeSJan Lentfer 	PRISM2_PARAM_AP_AUTH_ALGS = 15,
556d49e1aeSJan Lentfer 	PRISM2_PARAM_MONITOR_ALLOW_FCSERR = 16,
566d49e1aeSJan Lentfer 	PRISM2_PARAM_HOST_ENCRYPT = 17,
576d49e1aeSJan Lentfer 	PRISM2_PARAM_HOST_DECRYPT = 18,
586d49e1aeSJan Lentfer 	PRISM2_PARAM_BUS_MASTER_THRESHOLD_RX = 19,
596d49e1aeSJan Lentfer 	PRISM2_PARAM_BUS_MASTER_THRESHOLD_TX = 20,
606d49e1aeSJan Lentfer 	PRISM2_PARAM_HOST_ROAMING = 21,
616d49e1aeSJan Lentfer 	PRISM2_PARAM_BCRX_STA_KEY = 22,
626d49e1aeSJan Lentfer 	PRISM2_PARAM_IEEE_802_1X = 23,
636d49e1aeSJan Lentfer 	PRISM2_PARAM_ANTSEL_TX = 24,
646d49e1aeSJan Lentfer 	PRISM2_PARAM_ANTSEL_RX = 25,
656d49e1aeSJan Lentfer 	PRISM2_PARAM_MONITOR_TYPE = 26,
666d49e1aeSJan Lentfer 	PRISM2_PARAM_WDS_TYPE = 27,
676d49e1aeSJan Lentfer 	PRISM2_PARAM_HOSTSCAN = 28,
686d49e1aeSJan Lentfer 	PRISM2_PARAM_AP_SCAN = 29,
696d49e1aeSJan Lentfer 	PRISM2_PARAM_ENH_SEC = 30,
706d49e1aeSJan Lentfer 	PRISM2_PARAM_IO_DEBUG = 31,
716d49e1aeSJan Lentfer 	PRISM2_PARAM_BASIC_RATES = 32,
726d49e1aeSJan Lentfer 	PRISM2_PARAM_OPER_RATES = 33,
736d49e1aeSJan Lentfer 	PRISM2_PARAM_HOSTAPD = 34,
746d49e1aeSJan Lentfer 	PRISM2_PARAM_HOSTAPD_STA = 35,
756d49e1aeSJan Lentfer 	PRISM2_PARAM_WPA = 36,
766d49e1aeSJan Lentfer 	PRISM2_PARAM_PRIVACY_INVOKED = 37,
776d49e1aeSJan Lentfer 	PRISM2_PARAM_TKIP_COUNTERMEASURES = 38,
786d49e1aeSJan Lentfer 	PRISM2_PARAM_DROP_UNENCRYPTED = 39,
796d49e1aeSJan Lentfer 	PRISM2_PARAM_SCAN_CHANNEL_MASK = 40,
806d49e1aeSJan Lentfer };
816d49e1aeSJan Lentfer 
823ff40c12SJohn Marino enum { HOSTAP_ANTSEL_DO_NOT_TOUCH = 0, HOSTAP_ANTSEL_DIVERSITY = 1,
833ff40c12SJohn Marino        HOSTAP_ANTSEL_LOW = 2, HOSTAP_ANTSEL_HIGH = 3 };
843ff40c12SJohn Marino 
853ff40c12SJohn Marino 
863ff40c12SJohn Marino /* PRISM2_IOCTL_MACCMD ioctl() subcommands: */
873ff40c12SJohn Marino enum { AP_MAC_CMD_POLICY_OPEN = 0, AP_MAC_CMD_POLICY_ALLOW = 1,
883ff40c12SJohn Marino        AP_MAC_CMD_POLICY_DENY = 2, AP_MAC_CMD_FLUSH = 3,
893ff40c12SJohn Marino        AP_MAC_CMD_KICKALL = 4 };
903ff40c12SJohn Marino 
913ff40c12SJohn Marino 
923ff40c12SJohn Marino /* PRISM2_IOCTL_DOWNLOAD ioctl() dl_cmd: */
933ff40c12SJohn Marino enum {
943ff40c12SJohn Marino 	PRISM2_DOWNLOAD_VOLATILE = 1 /* RAM */,
953ff40c12SJohn Marino 	/* Note! Old versions of prism2_srec have a fatal error in CRC-16
963ff40c12SJohn Marino 	 * calculation, which will corrupt all non-volatile downloads.
973ff40c12SJohn Marino 	 * PRISM2_DOWNLOAD_NON_VOLATILE used to be 2, but it is now 3 to
983ff40c12SJohn Marino 	 * prevent use of old versions of prism2_srec for non-volatile
993ff40c12SJohn Marino 	 * download. */
1003ff40c12SJohn Marino 	PRISM2_DOWNLOAD_NON_VOLATILE = 3 /* FLASH */,
1013ff40c12SJohn Marino 	PRISM2_DOWNLOAD_VOLATILE_GENESIS = 4 /* RAM in Genesis mode */,
1023ff40c12SJohn Marino 	/* Persistent versions of volatile download commands (keep firmware
1033ff40c12SJohn Marino 	 * data in memory and automatically re-download after hw_reset */
1043ff40c12SJohn Marino 	PRISM2_DOWNLOAD_VOLATILE_PERSISTENT = 5,
1053ff40c12SJohn Marino 	PRISM2_DOWNLOAD_VOLATILE_GENESIS_PERSISTENT = 6,
1063ff40c12SJohn Marino };
1073ff40c12SJohn Marino 
1083ff40c12SJohn Marino struct prism2_download_param {
1093ff40c12SJohn Marino 	u32 dl_cmd;
1103ff40c12SJohn Marino 	u32 start_addr;
1113ff40c12SJohn Marino 	u32 num_areas;
1123ff40c12SJohn Marino 	struct prism2_download_area {
1133ff40c12SJohn Marino 		u32 addr; /* wlan card address */
1143ff40c12SJohn Marino 		u32 len;
1153ff40c12SJohn Marino 		caddr_t ptr; /* pointer to data in user space */
1163ff40c12SJohn Marino 	} data[0];
1173ff40c12SJohn Marino };
1183ff40c12SJohn Marino 
1193ff40c12SJohn Marino #define PRISM2_MAX_DOWNLOAD_AREA_LEN 131072
1203ff40c12SJohn Marino #define PRISM2_MAX_DOWNLOAD_LEN 262144
1213ff40c12SJohn Marino 
1223ff40c12SJohn Marino 
1236d49e1aeSJan Lentfer /* PRISM2_IOCTL_HOSTAPD ioctl() cmd: */
1246d49e1aeSJan Lentfer enum {
1256d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_FLUSH = 1,
1266d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_ADD_STA = 2,
1276d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_REMOVE_STA = 3,
1286d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_GET_INFO_STA = 4,
1296d49e1aeSJan Lentfer 	/* REMOVED: PRISM2_HOSTAPD_RESET_TXEXC_STA = 5, */
1306d49e1aeSJan Lentfer 	PRISM2_SET_ENCRYPTION = 6,
1316d49e1aeSJan Lentfer 	PRISM2_GET_ENCRYPTION = 7,
1326d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_SET_FLAGS_STA = 8,
1336d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_GET_RID = 9,
1346d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_SET_RID = 10,
1356d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_SET_ASSOC_AP_ADDR = 11,
1366d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_SET_GENERIC_ELEMENT = 12,
1376d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_MLME = 13,
1386d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_SCAN_REQ = 14,
1396d49e1aeSJan Lentfer 	PRISM2_HOSTAPD_STA_CLEAR_STATS = 15,
1406d49e1aeSJan Lentfer };
1416d49e1aeSJan Lentfer 
1426d49e1aeSJan Lentfer #define PRISM2_HOSTAPD_MAX_BUF_SIZE 1024
1436d49e1aeSJan Lentfer #define PRISM2_HOSTAPD_RID_HDR_LEN \
1446d49e1aeSJan Lentfer ((size_t) (&((struct prism2_hostapd_param *) 0)->u.rid.data))
1456d49e1aeSJan Lentfer #define PRISM2_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \
1466d49e1aeSJan Lentfer ((size_t) (&((struct prism2_hostapd_param *) 0)->u.generic_elem.data))
1476d49e1aeSJan Lentfer 
1486d49e1aeSJan Lentfer /* Maximum length for algorithm names (-1 for nul termination) used in ioctl()
1496d49e1aeSJan Lentfer  */
1506d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ALG_NAME_LEN 16
1516d49e1aeSJan Lentfer 
1526d49e1aeSJan Lentfer 
1536d49e1aeSJan Lentfer struct prism2_hostapd_param {
1546d49e1aeSJan Lentfer 	u32 cmd;
1556d49e1aeSJan Lentfer 	u8 sta_addr[ETH_ALEN];
1566d49e1aeSJan Lentfer 	union {
1576d49e1aeSJan Lentfer 		struct {
1586d49e1aeSJan Lentfer 			u16 aid;
1596d49e1aeSJan Lentfer 			u16 capability;
1606d49e1aeSJan Lentfer 			u8 tx_supp_rates;
1616d49e1aeSJan Lentfer 		} add_sta;
1626d49e1aeSJan Lentfer 		struct {
1636d49e1aeSJan Lentfer 			u32 inactive_sec;
1646d49e1aeSJan Lentfer 		} get_info_sta;
1656d49e1aeSJan Lentfer 		struct {
1666d49e1aeSJan Lentfer 			u8 alg[HOSTAP_CRYPT_ALG_NAME_LEN];
1676d49e1aeSJan Lentfer 			u32 flags;
1686d49e1aeSJan Lentfer 			u32 err;
1696d49e1aeSJan Lentfer 			u8 idx;
1706d49e1aeSJan Lentfer 			u8 seq[8]; /* sequence counter (set: RX, get: TX) */
1716d49e1aeSJan Lentfer 			u16 key_len;
1726d49e1aeSJan Lentfer 			u8 key[0];
1736d49e1aeSJan Lentfer 		} crypt;
1746d49e1aeSJan Lentfer 		struct {
1756d49e1aeSJan Lentfer 			u32 flags_and;
1766d49e1aeSJan Lentfer 			u32 flags_or;
1776d49e1aeSJan Lentfer 		} set_flags_sta;
1786d49e1aeSJan Lentfer 		struct {
1796d49e1aeSJan Lentfer 			u16 rid;
1806d49e1aeSJan Lentfer 			u16 len;
1816d49e1aeSJan Lentfer 			u8 data[0];
1826d49e1aeSJan Lentfer 		} rid;
1836d49e1aeSJan Lentfer 		struct {
1846d49e1aeSJan Lentfer 			u8 len;
1856d49e1aeSJan Lentfer 			u8 data[0];
1866d49e1aeSJan Lentfer 		} generic_elem;
1876d49e1aeSJan Lentfer 		struct {
1886d49e1aeSJan Lentfer #define MLME_STA_DEAUTH 0
1896d49e1aeSJan Lentfer #define MLME_STA_DISASSOC 1
1906d49e1aeSJan Lentfer 			u16 cmd;
1916d49e1aeSJan Lentfer 			u16 reason_code;
1926d49e1aeSJan Lentfer 		} mlme;
1936d49e1aeSJan Lentfer 		struct {
1946d49e1aeSJan Lentfer 			u8 ssid_len;
195*a1157835SDaniel Fojt 			u8 ssid[SSID_MAX_LEN];
1966d49e1aeSJan Lentfer 		} scan_req;
1976d49e1aeSJan Lentfer 	} u;
1986d49e1aeSJan Lentfer };
1996d49e1aeSJan Lentfer 
2003ff40c12SJohn Marino #define HOSTAP_CRYPT_FLAG_SET_TX_KEY BIT(0)
2013ff40c12SJohn Marino #define HOSTAP_CRYPT_FLAG_PERMANENT BIT(1)
2026d49e1aeSJan Lentfer 
2036d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ERR_UNKNOWN_ALG 2
2046d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ERR_UNKNOWN_ADDR 3
2056d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ERR_CRYPT_INIT_FAILED 4
2066d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ERR_KEY_SET_FAILED 5
2076d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ERR_TX_KEY_SET_FAILED 6
2086d49e1aeSJan Lentfer #define HOSTAP_CRYPT_ERR_CARD_CONF_FAILED 7
2096d49e1aeSJan Lentfer 
2106d49e1aeSJan Lentfer #endif /* HOSTAP_DRIVER_H */
211