home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.pdx.edu / 2014.02.ftp.ee.pdx.edu.tar / ftp.ee.pdx.edu / pub / mobile / wi.44.patches / if_wavelan_ieee.h next >
C/C++ Source or Header  |  2002-01-17  |  14KB  |  380 lines

  1. /*
  2.  * Copyright (c) 1997, 1998, 1999
  3.  *    Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by Bill Paul.
  16.  * 4. Neither the name of the author nor the names of any co-contributors
  17.  *    may be used to endorse or promote products derived from this software
  18.  *    without specific prior written permission.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
  21.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
  24.  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  30.  * THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * $FreeBSD: src/sys/i386/include/if_wavelan_ieee.h,v 1.5.2.1 2001/07/04 00:12:34 brooks Exp $
  33.  */
  34.  
  35. #ifndef _IF_WAVELAN_IEEE_H
  36. #define _IF_WAVELAN_IEEE_H
  37.  
  38. /*
  39.  * This header defines a simple command interface to the FreeBSD
  40.  * WaveLAN/IEEE driver (wi) driver, which is used to set certain
  41.  * device-specific parameters which can't be easily managed through
  42.  * ifconfig(8). No, sysctl(2) is not the answer. I said a _simple_
  43.  * interface, didn't I.
  44.  */
  45.  
  46. #ifndef SIOCSWAVELAN
  47. #define SIOCSWAVELAN    SIOCSIFGENERIC
  48. #endif
  49.  
  50. #ifndef SIOCGWAVELAN
  51. #define SIOCGWAVELAN    SIOCGIFGENERIC
  52. #endif
  53.  
  54. /*
  55.  * Technically I don't think there's a limit to a record
  56.  * length. The largest record is the one that contains the CIS
  57.  * data, which is 240 words long, so 256 should be a safe
  58.  * value.
  59.  */
  60. #define WI_MAX_DATALEN    512
  61.  
  62. struct wi_req {
  63.     u_int16_t    wi_len;
  64.     u_int16_t    wi_type;
  65.     u_int16_t    wi_val[WI_MAX_DATALEN];
  66. };
  67.  
  68. /*
  69.  * Private LTV records (interpreted only by the driver). This is
  70.  * a minor kludge to allow reading the interface statistics from
  71.  * the driver.
  72.  */
  73. #define WI_RID_IFACE_STATS    0x0100
  74. #define WI_RID_MGMT_XMIT    0x0200
  75. #ifdef WICACHE
  76. #define WI_RID_ZERO_CACHE    0x0300
  77. #define WI_RID_READ_CACHE    0x0400
  78. #endif
  79. #define WI_RID_MONITOR_MODE    0x0500
  80. #define WI_RID_SCAN_APS        0x0600
  81. #define WI_RID_READ_APS        0x0700
  82.  
  83. /*
  84.  * Turn monitoring off.
  85.  */
  86. #define        WI_MONITOR_OFF          0x0000
  87.  
  88. /*
  89.  * Type of header to attach to the monitoring packets.
  90.  */
  91. #define  WI_MONITOR_HTYPE        0x0003
  92. #define  WI_MONITOR_ETHER        0x0001
  93. #define  WI_MONITOR_80211        0x0002
  94. #define  WI_MONITOR_WAVELAN      0x0003
  95.  
  96. /*
  97.  * Type of packets to monitor.
  98.  */
  99. #define WI_MONITOR_PTYPE        0x003C
  100. #define WI_MONITOR_MGMT         0x0004
  101. #define WI_MONITOR_CTRL         0x0008
  102. #define WI_MONITOR_DATA         0x0010
  103. #define WI_MONITOR_BEACONS      0x0020
  104. #define WI_MONITOR_ALL          0x003C
  105.  
  106. /* Just something for now */
  107. #define        DLT_WAVELAN_HEADER      121
  108.  
  109.  
  110. struct wi_80211_hdr {
  111.     u_int16_t        frame_ctl;
  112.     u_int16_t        dur_id;
  113.     u_int8_t        addr1[6];
  114.     u_int8_t        addr2[6];
  115.     u_int8_t        addr3[6];
  116.     u_int16_t        seq_ctl;
  117.     u_int8_t        addr4[6];
  118. };
  119.  
  120. #define WI_FCTL_VERS        0x0002
  121. #define WI_FCTL_FTYPE        0x000C
  122. #define WI_FCTL_STYPE        0x00F0
  123. #define WI_FCTL_TODS        0x0100
  124. #define WI_FCTL_FROMDS        0x0200
  125. #define WI_FCTL_MOREFRAGS    0x0400
  126. #define WI_FCTL_RETRY        0x0800
  127. #define WI_FCTL_PM        0x1000
  128. #define WI_FCTL_MOREDATA    0x2000
  129. #define WI_FCTL_WEP        0x4000
  130. #define WI_FCTL_ORDER        0x8000
  131.  
  132. #define WI_FTYPE_MGMT        0x0000
  133. #define WI_FTYPE_CTL        0x0004
  134. #define WI_FTYPE_DATA        0x0008
  135.  
  136. #define WI_STYPE_MGMT_ASREQ    0x0000    /* association request */
  137. #define WI_STYPE_MGMT_ASRESP    0x0010    /* association response */
  138. #define WI_STYPE_MGMT_REASREQ    0x0020    /* reassociation request */
  139. #define WI_STYPE_MGMT_REASRESP    0x0030    /* reassociation response */
  140. #define WI_STYPE_MGMT_PROBEREQ    0x0040    /* probe request */
  141. #define WI_STYPE_MGMT_PROBERESP    0x0050    /* probe response */
  142. #define WI_STYPE_MGMT_BEACON    0x0080    /* beacon */
  143. #define WI_STYPE_MGMT_ATIM    0x0090    /* announcement traffic ind msg */
  144. #define WI_STYPE_MGMT_DISAS    0x00A0    /* disassociation */
  145. #define WI_STYPE_MGMT_AUTH    0x00B0    /* authentication */
  146. #define WI_STYPE_MGMT_DEAUTH    0x00C0    /* deauthentication */
  147.  
  148. #define WI_STYPE_CTL_PSPOLL     0x00A0
  149. #define WI_STYPE_CTL_RTS        0x00B0
  150. #define WI_STYPE_CTL_CTS        0x00C0
  151. #define WI_STYPE_CTL_ACK        0x00D0
  152. #define WI_STYPE_CTL_CFEND      0x00E0
  153. #define WI_STYPE_CTL_CFENDACK   0x00F0
  154.  
  155.  
  156. struct wi_mgmt_hdr {
  157.     u_int16_t        frame_ctl;
  158.     u_int16_t        duration;
  159.     u_int8_t        dst_addr[6];
  160.     u_int8_t        src_addr[6];
  161.     u_int8_t        bssid[6];
  162.     u_int16_t        seq_ctl;
  163. };
  164.  
  165. /* 
  166.  * Lucent/wavelan IEEE signal strength cache
  167.  *
  168.  * driver keeps cache of last
  169.  * MAXWICACHE packets to arrive including signal strength info.
  170.  * daemons may read this via ioctl
  171.  *
  172.  * Each entry in the wi_sigcache has a unique macsrc.
  173.  */
  174. #ifdef WICACHE
  175. #define    MAXWICACHE    10
  176.  
  177. struct wi_sigcache {
  178.     char    macsrc[6];    /* unique MAC address for entry */
  179.     int    ipsrc;        /* ip address associated with packet */
  180.     int    signal;        /* signal strength of the packet */
  181.     int    noise;        /* noise value */
  182.     int    quality;    /* quality of the packet */
  183. };
  184. #endif
  185.  
  186. #ifndef _KERNEL
  187. struct wi_counters {
  188.     u_int32_t        wi_tx_unicast_frames;
  189.     u_int32_t        wi_tx_multicast_frames;
  190.     u_int32_t        wi_tx_fragments;
  191.     u_int32_t        wi_tx_unicast_octets;
  192.     u_int32_t        wi_tx_multicast_octets;
  193.     u_int32_t        wi_tx_deferred_xmits;
  194.     u_int32_t        wi_tx_single_retries;
  195.     u_int32_t        wi_tx_multi_retries;
  196.     u_int32_t        wi_tx_retry_limit;
  197.     u_int32_t        wi_tx_discards;
  198.     u_int32_t        wi_rx_unicast_frames;
  199.     u_int32_t        wi_rx_multicast_frames;
  200.     u_int32_t        wi_rx_fragments;
  201.     u_int32_t        wi_rx_unicast_octets;
  202.     u_int32_t        wi_rx_multicast_octets;
  203.     u_int32_t        wi_rx_fcs_errors;
  204.     u_int32_t        wi_rx_discards_nobuf;
  205.     u_int32_t        wi_tx_discards_wrong_sa;
  206.     u_int32_t        wi_rx_WEP_cant_decrypt;
  207.     u_int32_t        wi_rx_msg_in_msg_frags;
  208.     u_int32_t        wi_rx_msg_in_bad_msg_frags;
  209. };
  210. #endif
  211.  
  212.  
  213. /*
  214.  * This is the access point info obtained from scans.
  215.  */
  216. #define MAXAPINFO      30
  217.  
  218. struct wi_apinfo {
  219.     char    bssid[6];       /* unique BSSID (mac address) */
  220.     int     channel;        /* channel */
  221.     int     signal;         /* signal strength */
  222.     int     noise;          /* noise strength */
  223.     int     quality;        /* quality */
  224.     int     namelen;        /* length of essid string */
  225.     char    name[32];       /* essid string */
  226.     int     capinfo;    /* capability info */ 
  227.     int     interval;    /* beacon xmit interval */
  228. };
  229.  
  230. /*
  231.  * These are all the LTV record types that we can read or write
  232.  * from the WaveLAN. Not all of them are temendously useful, but I
  233.  * list as many as I know about here for completeness.
  234.  */
  235.  
  236. #define WI_RID_DNLD_BUF        0xFD01
  237. #define WI_RID_MEMSZ        0xFD02
  238. #define WI_RID_DOMAINS        0xFD11
  239. #define WI_RID_CIS        0xFD13
  240. #define WI_RID_COMMQUAL        0xFD43
  241. #define WI_RID_SCALETHRESH    0xFD46
  242. #define WI_RID_PCF        0xFD87
  243.  
  244. /*
  245.  * Network parameters, static configuration entities.
  246.  */
  247. #define WI_RID_PORTTYPE        0xFC00 /* Connection control characteristics */
  248. #define WI_RID_MAC_NODE        0xFC01 /* MAC address of this station */
  249. #define WI_RID_DESIRED_SSID    0xFC02 /* Service Set ID for connection */
  250. #define WI_RID_OWN_CHNL        0xFC03 /* Comm channel for BSS creation */
  251. #define WI_RID_OWN_SSID        0xFC04 /* IBSS creation ID */
  252. #define WI_RID_OWN_ATIM_WIN    0xFC05 /* ATIM window time for IBSS creation */
  253. #define WI_RID_SYSTEM_SCALE    0xFC06 /* scale that specifies AP density */
  254. #define WI_RID_MAX_DATALEN    0xFC07 /* Max len of MAC frame body data */
  255. #define WI_RID_MAC_WDS        0xFC08 /* MAC addr of corresponding WDS node */
  256. #define WI_RID_PM_ENABLED    0xFC09 /* ESS power management enable */
  257. #define WI_RID_PM_EPS        0xFC0A /* PM EPS/PS mode */
  258. #define WI_RID_MCAST_RX        0xFC0B /* ESS PM mcast reception */
  259. #define WI_RID_MAX_SLEEP    0xFC0C /* max sleep time for ESS PM */
  260. #define WI_RID_HOLDOVER        0xFC0D /* holdover time for ESS PM */
  261. #define WI_RID_NODENAME        0xFC0E /* ID name of this node for diag */
  262. #define WI_RID_DTIM_PERIOD    0xFC10 /* beacon interval between DTIMs */
  263. #define WI_RID_WDS_ADDR1    0xFC11 /* port 1 MAC of WDS link node */
  264. #define WI_RID_WDS_ADDR2    0xFC12 /* port 1 MAC of WDS link node */
  265. #define WI_RID_WDS_ADDR3    0xFC13 /* port 1 MAC of WDS link node */
  266. #define WI_RID_WDS_ADDR4    0xFC14 /* port 1 MAC of WDS link node */
  267. #define WI_RID_WDS_ADDR5    0xFC15 /* port 1 MAC of WDS link node */
  268. #define WI_RID_WDS_ADDR6    0xFC16 /* port 1 MAC of WDS link node */
  269. #define WI_RID_MCAST_PM_BUF    0xFC17 /* PM buffering of mcast */
  270. #define WI_RID_ENCRYPTION    0xFC20 /* enable/disable WEP */
  271. #define WI_RID_AUTHTYPE        0xFC21 /* specify authentication type */
  272.  
  273. /*
  274.  * Network parameters, dynamic configuration entities
  275.  */
  276. #define WI_RID_MCAST_LIST    0xFC80 /* list of multicast addrs */
  277. #define WI_RID_CREATE_IBSS    0xFC81 /* create IBSS */
  278. #define WI_RID_FRAG_THRESH    0xFC82 /* frag len, unicast msg xmit */
  279. #define WI_RID_RTS_THRESH    0xFC83 /* frame len for RTS/CTS handshake */
  280. #define WI_RID_TX_RATE        0xFC84 /* data rate for message xmit */
  281. #define WI_RID_PROMISC        0xFC85 /* enable promisc mode */
  282. #define WI_RID_FRAG_THRESH0    0xFC90
  283. #define WI_RID_FRAG_THRESH1    0xFC91
  284. #define WI_RID_FRAG_THRESH2    0xFC92
  285. #define WI_RID_FRAG_THRESH3    0xFC93
  286. #define WI_RID_FRAG_THRESH4    0xFC94
  287. #define WI_RID_FRAG_THRESH5    0xFC95
  288. #define WI_RID_FRAG_THRESH6    0xFC96
  289. #define WI_RID_RTS_THRESH0    0xFC97
  290. #define WI_RID_RTS_THRESH1    0xFC98
  291. #define WI_RID_RTS_THRESH2    0xFC99
  292. #define WI_RID_RTS_THRESH3    0xFC9A
  293. #define WI_RID_RTS_THRESH4    0xFC9B
  294. #define WI_RID_RTS_THRESH5    0xFC9C
  295. #define WI_RID_RTS_THRESH6    0xFC9D
  296. #define WI_RID_TX_RATE0        0xFC9E
  297. #define WI_RID_TX_RATE1        0xFC9F
  298. #define WI_RID_TX_RATE2        0xFCA0
  299. #define WI_RID_TX_RATE3        0xFCA1
  300. #define WI_RID_TX_RATE4        0xFCA2
  301. #define WI_RID_TX_RATE5        0xFCA3
  302. #define WI_RID_TX_RATE6        0xFCA4
  303. #define WI_RID_DEFLT_CRYPT_KEYS    0xFCB0
  304. #define WI_RID_TX_CRYPT_KEY    0xFCB1
  305. #define WI_RID_TICK_TIME    0xFCE0
  306.  
  307. #ifndef _KERNEL
  308. struct wi_key {
  309.     u_int16_t        wi_keylen;
  310.     u_int8_t        wi_keydat[14];
  311. };
  312.  
  313. struct wi_ltv_keys {
  314.     u_int16_t        wi_len;
  315.     u_int16_t        wi_type;
  316.     struct wi_key        wi_keys[4];
  317. };
  318. #endif
  319.  
  320. /*
  321.  * NIC information
  322.  */
  323. #define WI_RID_FIRM_ID        0xFD02 /* Primary func firmware ID. */
  324. #define WI_RID_PRI_SUP_RANGE    0xFD03 /* primary supplier compatibility */
  325. #define WI_RID_CIF_ACT_RANGE    0xFD04 /* controller sup. compatibility */
  326. #define WI_RID_SERIALNO        0xFD0A /* card serial number */
  327. #define WI_RID_CARD_ID        0xFD0B /* card identification */
  328. #define WI_RID_MFI_SUP_RANGE    0xFD0C /* modem supplier compatibility */
  329. #define WI_RID_CFI_SUP_RANGE    0xFD0D /* controller sup. compatibility */
  330. #define WI_RID_CHANNEL_LIST    0xFD10 /* allowd comm. frequencies. */
  331. #define WI_RID_REG_DOMAINS    0xFD11 /* list of intendted regulatory doms */
  332. #define WI_RID_TEMP_TYPE    0xFD12 /* hw temp range code */
  333. #define WI_RID_CIS        0xFD13 /* PC card info struct */
  334. #define WI_RID_STA_IDENEITY    0xFD20 /* station funcs firmware ident */
  335. #define WI_RID_STA_SUP_RANGE    0xFD21 /* station supplier compat */
  336. #define WI_RID_MFI_ACT_RANGE    0xFD22
  337. #define WI_RID_CFI_ACT_RANGE    0xFD33
  338.  
  339. /*
  340.  * MAC information
  341.  */
  342. #define WI_RID_PORT_STAT    0xFD40 /* actual MAC port con control stat */
  343. #define WI_RID_CURRENT_SSID    0xFD41 /* ID of actually connected SS */
  344. #define WI_RID_CURRENT_BSSID    0xFD42 /* ID of actually connected BSS */
  345. #define WI_RID_COMMS_QUALITY    0xFD43 /* quality of BSS connection */
  346. #define WI_RID_CUR_TX_RATE    0xFD44 /* current TX rate */
  347. #define WI_RID_OWN_BEACON_INT    0xFD45 /* beacon xmit time for BSS creation */
  348. #define WI_RID_CUR_SCALE_THRESH    0xFD46 /* actual system scane thresh setting */
  349. #define WI_RID_PROT_RESP_TIME    0xFD47 /* time to wait for resp to req msg */
  350. #define WI_RID_SHORT_RTR_LIM    0xFD48 /* max tx attempts for short frames */
  351. #define WI_RID_LONG_RTS_LIM    0xFD49 /* max tx attempts for long frames */
  352. #define WI_RID_MAX_TX_LIFE    0xFD4A /* max tx frame handling duration */
  353. #define WI_RID_MAX_RX_LIFE    0xFD4B /* max rx frame handling duration */
  354. #define WI_RID_CF_POLL        0xFD4C /* contention free pollable ind */
  355. #define WI_RID_AUTH_ALGS    0xFD4D /* auth algorithms available */
  356. #define WI_RID_AUTH_TYPE    0xFD4E /* availanle auth types */
  357. #define WI_RID_WEP_AVAIL    0xFD4F /* WEP privacy option available */
  358. #define WI_RID_CUR_TX_RATE1    0xFD80
  359. #define WI_RID_CUR_TX_RATE2    0xFD81
  360. #define WI_RID_CUR_TX_RATE3    0xFD82
  361. #define WI_RID_CUR_TX_RATE4    0xFD83
  362. #define WI_RID_CUR_TX_RATE5    0xFD84
  363. #define WI_RID_CUR_TX_RATE6    0xFD85
  364. #define WI_RID_OWN_MAC        0xFD86 /* unique local MAC addr */
  365. #define WI_RID_PCI_INFO        0xFD87 /* point coordination func cap */
  366.  
  367. /*
  368.  * Modem information
  369.  */
  370. #define WI_RID_PHY_TYPE        0xFDC0 /* phys layer type indication */
  371. #define WI_RID_CURRENT_CHAN    0xFDC1 /* current frequency */
  372. #define WI_RID_PWR_STATE    0xFDC2 /* pwr consumption status */
  373. #define WI_RID_CCA_MODE        0xFDC3 /* clear chan assess mode indication */
  374. #define WI_RID_CCA_TIME        0xFDC4 /* clear chan assess time */
  375. #define WI_RID_MAC_PROC_DELAY    0xFDC5 /* MAC processing delay time */
  376. #define WI_RID_DATA_RATES    0xFDC6 /* supported data rates */
  377.  
  378.  
  379. #endif
  380.