📄 wlc_key.h
字号:
/* * Key management related declarations * and exported functions for * Broadcom 802.11abg Networking Device Driver * * Copyright 2005-2006, Broadcom Corporation * All Rights Reserved. * * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE. * * $Id$ */#ifndef _wlc_key_h_#define _wlc_key_h_struct scb;struct wlc_info;struct wlc_bsscfg;/* Maximum # of keys that wl driver supports in S/W. * Keys supported in H/W is less than or equal to WSEC_MAX_KEYS. */#define WSEC_MAX_KEYS 54 /* Max # of keys (50 + 4 default keys) */#define WLC_DEFAULT_KEYS 4 /* Default # of keys *//** Max # of keys currently supported:** s/w keys if WSEC_SW(wlc->wsec).* h/w keys otherwise.*/#define WLC_MAX_WSEC_KEYS(wlc) WSEC_MAX_KEYS/* number of 802.11 default (non-paired, group keys) */#define WSEC_MAX_DEFAULT_KEYS 4 /* # of default keys *//* SHM offset to default rxkeys */#define WSEC_RXKEYOFF (WSEC_MAX_DEFAULT_KEYS*D11_MAX_KEY_SIZE)/* Max # of hardware keys supported */#define WLC_MAX_WSEC_HW_KEYS(wlc) ((D11REV_GE((wlc)->pub.corerev, 5)) ? \ WSEC_MAX_RCMTA_KEYS : WSEC_MAX_SEC_KEYS)/* index of key in key table */#define WSEC_KEY_INDEX(wlc, key) ((key)->idx)/* get a key, non-NULL only if key allocated and not clear */#define WSEC_KEY(wlc, i) (((wlc)->wsec_keys[i] && (wlc)->wsec_keys[i]->len) ? \ (wlc)->wsec_keys[i] : NULL)/* default key */#define WSEC_BSS_DEFAULT_KEY(bsscfg) (((bsscfg)->wsec_index == -1) ? NULL : \ (bsscfg)->bss_def_keys[(bsscfg)->wsec_index])typedef struct wsec_iv { uint32 hi; /* upper 32 bits of IV */ uint16 lo; /* lower 16 bits of IV */} wsec_iv_t;#define WLC_NUMRXIVS 16 /* # rx IVs (one per 802.11e TID) */typedef struct wsec_key { struct ether_addr ea; /* per station */ uint8 idx; /* key index in wsec_keys array */ uint8 id; /* key ID [0-3] */ uint8 algo; /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */ uint8 flags; /* misc flags */ uint8 algo_hw; /* cache for hw register */ uint8 aes_mode; /* cache for hw register */ int8 iv_len; /* IV length */ int8 icv_len; /* ICV length */ uint32 len; /* key length..don't move this var */ /* data is 4byte aligned */ uint8 data[DOT11_MAX_KEY_SIZE]; /* key data */ wsec_iv_t rxiv[WLC_NUMRXIVS]; /* Rx IV (one per TID) */ wsec_iv_t txiv; /* Tx IV */} wsec_key_t;typedef struct { uint8 vec[WSEC_MAX_KEYS/NBBY]; /* bitvec of wsec_key indexes */} wsec_key_vec_t;/* For use with wsec_key_t.flags */#define WSEC_BS_UPDATE (1 << 0) /* Indicates hw needs key update on BS switch */#define WSEC_PRIMARY_KEY (1 << 1) /* Indicates this key is the primary (ie tx) key */#define WSEC_TKIP_ERROR (1 << 2) /* Provoke deliberate MIC error */#define WSEC_REPLAY_ERROR (1 << 3) /* Provoke deliberate replay */extern int wlc_key_insert(struct wlc_info *wlc, struct wlc_bsscfg *bsscfg, uint32 key_len, uint32 key_id, uint32 key_flags, uint32 key_algo, uint8 *key_data, struct ether_addr *key_ea, wsec_iv_t *initial_iv);extern void wlc_key_update(struct wlc_info *wlc, struct wlc_bsscfg *bsscfg, int i);extern void wlc_key_mssid_change(struct wlc_info *wlc, bool old_mssid, bool new_mssid);extern void wlc_key_remove(struct wlc_info *wlc, struct wlc_bsscfg *bsscfg, wl_wsec_key_t *remove);extern void wlc_key_remove_all(struct wlc_info *wlc);extern void wlc_key_delete(struct wlc_info *wlc, struct wlc_bsscfg *bsscfg, int index);extern void wlc_scb_key_delete(struct wlc_info *wlc, struct scb *scb);extern wsec_key_t* wlc_key_lookup(struct wlc_info *wlc, struct scb *scb, struct wlc_bsscfg *bsscfg, uint index, bool ismulti);extern void wlc_key_bsupdate(struct wlc_info *wlc);extern void wlc_key_hw_init_all(struct wlc_info *wlc);extern void wlc_key_hw_init(struct wlc_info *wlc, int i);extern void wlc_key_iv_update(struct wlc_info *wlc, struct wlc_bsscfg *bsscfg, wsec_key_t *key, uchar *buf, bool update);extern void wlc_key_iv_init(struct wlc_info *wlc, wsec_key_t *key, wsec_iv_t *initial_iv);extern uint32 wlc_key_defkeyflag(struct wlc_info *wlc);#endif /* _wlc_key_h_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -