PERFORCE change 145536 for review
Sam Leffler
sam at FreeBSD.org
Mon Jul 21 05:26:50 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=145536
Change 145536 by sam at sam_ebb on 2008/07/21 05:26:48
don't use the key index to identify when the driver has been
asked to allocate a key slot, use an explicit flag; allows
drivers to force s/w fallback for entries in the global table
Affected files ...
.. //depot/projects/vap/sys/net80211/ieee80211_crypto.c#18 edit
.. //depot/projects/vap/sys/net80211/ieee80211_crypto.h#18 edit
Differences ...
==== //depot/projects/vap/sys/net80211/ieee80211_crypto.c#18 (text+ko) ====
@@ -372,7 +372,7 @@
* cipher template. Note also that when using software
* crypto we also call the driver to give us a key index.
*/
- if (key->wk_keyix == IEEE80211_KEYIX_NONE) {
+ if ((key->wk_flags & IEEE80211_KEY_DEVKEY) == 0) {
if (!dev_key_alloc(vap, key, &keyix, &rxkeyix)) {
/*
* Driver has no room; fallback to doing crypto
@@ -402,6 +402,7 @@
}
key->wk_keyix = keyix;
key->wk_rxkeyix = rxkeyix;
+ key->wk_flags |= IEEE80211_KEY_DEVKEY;
}
return 1;
}
@@ -412,8 +413,6 @@
static int
_ieee80211_crypto_delkey(struct ieee80211vap *vap, struct ieee80211_key *key)
{
- ieee80211_keyix keyix;
-
KASSERT(key->wk_cipher != NULL, ("No cipher!"));
IEEE80211_DPRINTF(vap, IEEE80211_MSG_CRYPTO,
@@ -423,8 +422,7 @@
key->wk_keyrsc[IEEE80211_NONQOS_TID], key->wk_keytsc,
key->wk_keylen);
- keyix = key->wk_keyix;
- if (keyix != IEEE80211_KEYIX_NONE) {
+ if (key->wk_flags & IEEE80211_KEY_DEVKEY) {
/*
* Remove hardware entry.
*/
@@ -432,7 +430,7 @@
if (!dev_key_delete(vap, key)) {
IEEE80211_DPRINTF(vap, IEEE80211_MSG_CRYPTO,
"%s: driver did not delete key index %u\n",
- __func__, keyix);
+ __func__, key->wk_keyix);
vap->iv_stats.is_crypto_delkey++;
/* XXX recovery? */
}
@@ -492,6 +490,14 @@
key->wk_keyrsc[IEEE80211_NONQOS_TID], key->wk_keytsc,
key->wk_keylen);
+ if ((key->wk_flags & IEEE80211_KEY_DEVKEY) == 0) {
+ /* XXX nothing allocated, should not happen */
+ IEEE80211_DPRINTF(vap, IEEE80211_MSG_CRYPTO,
+ "%s: no device key setup done; should not happen!\n",
+ __func__);
+ vap->iv_stats.is_crypto_setkey_nokey++;
+ return 0;
+ }
/*
* Give cipher a chance to validate key contents.
* XXX should happen before modifying state.
@@ -504,13 +510,6 @@
vap->iv_stats.is_crypto_setkey_cipher++;
return 0;
}
- if (key->wk_keyix == IEEE80211_KEYIX_NONE) {
- /* XXX nothing allocated, should not happen */
- IEEE80211_DPRINTF(vap, IEEE80211_MSG_CRYPTO,
- "%s: no key index; should not happen!\n", __func__);
- vap->iv_stats.is_crypto_setkey_nokey++;
- return 0;
- }
return dev_key_set(vap, key);
}
@@ -619,7 +618,7 @@
if (vap->iv_state != IEEE80211_S_RUN)
return;
k = &ni->ni_ucastkey;
- if (k->wk_keyix != IEEE80211_KEYIX_NONE)
+ if (k->wk_flags & IEEE80211_KEY_DEVKEY)
dev_key_set(vap, k);
}
@@ -643,7 +642,7 @@
continue;
for (i = 0; i < IEEE80211_WEP_NKID; i++) {
const struct ieee80211_key *k = &vap->iv_nw_keys[i];
- if (k->wk_keyix != IEEE80211_KEYIX_NONE)
+ if (k->wk_flags & IEEE80211_KEY_DEVKEY)
dev_key_set(vap, k);
}
}
==== //depot/projects/vap/sys/net80211/ieee80211_crypto.h#18 (text+ko) ====
@@ -75,13 +75,14 @@
uint8_t wk_keylen; /* key length in bytes */
uint8_t wk_pad;
uint16_t wk_flags;
-#define IEEE80211_KEY_XMIT 0x01 /* key used for xmit */
-#define IEEE80211_KEY_RECV 0x02 /* key used for recv */
-#define IEEE80211_KEY_GROUP 0x04 /* key used for WPA group operation */
-#define IEEE80211_KEY_SWENCRYPT 0x10 /* host-based encrypt */
-#define IEEE80211_KEY_SWDECRYPT 0x20 /* host-based decrypt */
-#define IEEE80211_KEY_SWENMIC 0x40 /* host-based enmic */
-#define IEEE80211_KEY_SWDEMIC 0x80 /* host-based demic */
+#define IEEE80211_KEY_XMIT 0x0001 /* key used for xmit */
+#define IEEE80211_KEY_RECV 0x0002 /* key used for recv */
+#define IEEE80211_KEY_GROUP 0x0004 /* key used for WPA group operation */
+#define IEEE80211_KEY_SWENCRYPT 0x0010 /* host-based encrypt */
+#define IEEE80211_KEY_SWDECRYPT 0x0020 /* host-based decrypt */
+#define IEEE80211_KEY_SWENMIC 0x0040 /* host-based enmic */
+#define IEEE80211_KEY_SWDEMIC 0x0080 /* host-based demic */
+#define IEEE80211_KEY_DEVKEY 0x0100 /* device key request completed */
ieee80211_keyix wk_keyix; /* h/w key index */
ieee80211_keyix wk_rxkeyix; /* optional h/w rx key index */
uint8_t wk_key[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
More information about the p4-projects
mailing list