1 /* 2 * Copyright (c) 2010 Broadcom Corporation 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef _WLC_BSSCFG_H_ 18 #define _WLC_BSSCFG_H_ 19 20 /* Check if a particular BSS config is AP or STA */ 21 #define BSSCFG_AP(cfg) (0) 22 #define BSSCFG_STA(cfg) (1) 23 24 #define BSSCFG_IBSS(cfg) (!(cfg)->BSS) 25 26 #define NTXRATE 64 /* # tx MPDUs rate is reported for */ 27 #define MAXMACLIST 64 /* max # source MAC matches */ 28 #define BCN_TEMPLATE_COUNT 2 29 30 /* Iterator for "associated" STA bss configs: 31 (struct wlc_info *wlc, int idx, struct wlc_bsscfg *cfg) */ 32 #define FOREACH_AS_STA(wlc, idx, cfg) \ 33 for (idx = 0; (int) idx < WLC_MAXBSSCFG; idx++) \ 34 if ((cfg = (wlc)->bsscfg[idx]) && BSSCFG_STA(cfg) && cfg->associated) 35 36 /* As above for all non-NULL BSS configs */ 37 #define FOREACH_BSS(wlc, idx, cfg) \ 38 for (idx = 0; (int) idx < WLC_MAXBSSCFG; idx++) \ 39 if ((cfg = (wlc)->bsscfg[idx])) 40 41 /* BSS configuration state */ 42 struct wlc_bsscfg { 43 struct wlc_info *wlc; /* wlc to which this bsscfg belongs to. */ 44 bool up; /* is this configuration up operational */ 45 bool enable; /* is this configuration enabled */ 46 bool associated; /* is BSS in ASSOCIATED state */ 47 bool BSS; /* infraustructure or adhac */ 48 bool dtim_programmed; 49 50 u8 SSID_len; /* the length of SSID */ 51 u8 SSID[IEEE80211_MAX_SSID_LEN]; /* SSID string */ 52 struct scb *bcmc_scb[MAXBANDS]; /* one bcmc_scb per band */ 53 s8 _idx; /* the index of this bsscfg, 54 * assigned at wlc_bsscfg_alloc() 55 */ 56 /* MAC filter */ 57 uint nmac; /* # of entries on maclist array */ 58 int macmode; /* allow/deny stations on maclist array */ 59 struct ether_addr *maclist; /* list of source MAC addrs to match */ 60 61 /* security */ 62 u32 wsec; /* wireless security bitvec */ 63 s16 auth; /* 802.11 authentication: Open, Shared Key, WPA */ 64 s16 openshared; /* try Open auth first, then Shared Key */ 65 bool wsec_restrict; /* drop unencrypted packets if wsec is enabled */ 66 bool eap_restrict; /* restrict data until 802.1X auth succeeds */ 67 u16 WPA_auth; /* WPA: authenticated key management */ 68 bool wpa2_preauth; /* default is true, wpa_cap sets value */ 69 bool wsec_portopen; /* indicates keys are plumbed */ 70 wsec_iv_t wpa_none_txiv; /* global txiv for WPA_NONE, tkip and aes */ 71 int wsec_index; /* 0-3: default tx key, -1: not set */ 72 wsec_key_t *bss_def_keys[WLC_DEFAULT_KEYS]; /* default key storage */ 73 74 /* TKIP countermeasures */ 75 bool tkip_countermeasures; /* flags TKIP no-assoc period */ 76 u32 tk_cm_dt; /* detect timer */ 77 u32 tk_cm_bt; /* blocking timer */ 78 u32 tk_cm_bt_tmstmp; /* Timestamp when TKIP BT is activated */ 79 bool tk_cm_activate; /* activate countermeasures after EAPOL-Key sent */ 80 81 u8 BSSID[ETH_ALEN]; /* BSSID (associated) */ 82 u8 cur_etheraddr[ETH_ALEN]; /* h/w address */ 83 u16 bcmc_fid; /* the last BCMC FID queued to TX_BCMC_FIFO */ 84 u16 bcmc_fid_shm; /* the last BCMC FID written to shared mem */ 85 86 u32 flags; /* WLC_BSSCFG flags; see below */ 87 88 u8 *bcn; /* AP beacon */ 89 uint bcn_len; /* AP beacon length */ 90 bool ar_disassoc; /* disassociated in associated recreation */ 91 92 int auth_atmptd; /* auth type (open/shared) attempted */ 93 94 pmkid_cand_t pmkid_cand[MAXPMKID]; /* PMKID candidate list */ 95 uint npmkid_cand; /* num PMKID candidates */ 96 pmkid_t pmkid[MAXPMKID]; /* PMKID cache */ 97 uint npmkid; /* num cached PMKIDs */ 98 99 wlc_bss_info_t *current_bss; /* BSS parms in ASSOCIATED state */ 100 101 /* PM states */ 102 bool PMawakebcn; /* bcn recvd during current waking state */ 103 bool PMpending; /* waiting for tx status with PM indicated set */ 104 bool priorPMstate; /* Detecting PM state transitions */ 105 bool PSpoll; /* whether there is an outstanding PS-Poll frame */ 106 107 /* BSSID entry in RCMTA, use the wsec key management infrastructure to 108 * manage the RCMTA entries. 109 */ 110 wsec_key_t *rcmta; 111 112 /* 'unique' ID of this bsscfg, assigned at bsscfg allocation */ 113 u16 ID; 114 115 uint txrspecidx; /* index into tx rate circular buffer */ 116 ratespec_t txrspec[NTXRATE][2]; /* circular buffer of prev MPDUs tx rates */ 117 }; 118 119 #define WLC_BSSCFG_11N_DISABLE 0x1000 /* Do not advertise .11n IEs for this BSS */ 120 #define WLC_BSSCFG_HW_BCN 0x20 /* The BSS is generating beacons in HW */ 121 122 #define HWBCN_ENAB(cfg) (((cfg)->flags & WLC_BSSCFG_HW_BCN) != 0) 123 #define HWPRB_ENAB(cfg) (((cfg)->flags & WLC_BSSCFG_HW_PRB) != 0) 124 125 extern void wlc_bsscfg_ID_assign(struct wlc_info *wlc, 126 struct wlc_bsscfg *bsscfg); 127 128 /* Extend N_ENAB to per-BSS */ 129 #define BSS_N_ENAB(wlc, cfg) \ 130 (N_ENAB((wlc)->pub) && !((cfg)->flags & WLC_BSSCFG_11N_DISABLE)) 131 132 #define MBSS_BCN_ENAB(cfg) 0 133 #define MBSS_PRB_ENAB(cfg) 0 134 #define SOFTBCN_ENAB(pub) (0) 135 #define SOFTPRB_ENAB(pub) (0) 136 #define wlc_bsscfg_tx_check(a) do { } while (0); 137 138 #endif /* _WLC_BSSCFG_H_ */ 139