svn commit: r280068 - head/sys/dev/wpi
Adrian Chadd
adrian at FreeBSD.org
Sun Mar 15 20:33:14 UTC 2015
Author: adrian
Date: Sun Mar 15 20:33:13 2015
New Revision: 280068
URL: https://svnweb.freebsd.org/changeset/base/280068
Log:
Move key processing in wpi_tx_data.
(This is in preparation for further work to support hardware encryption.)
PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios at gmail.com>
Modified:
head/sys/dev/wpi/if_wpi.c
Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c Sun Mar 15 20:32:12 2015 (r280067)
+++ head/sys/dev/wpi/if_wpi.c Sun Mar 15 20:33:13 2015 (r280068)
@@ -2379,7 +2379,7 @@ wpi_tx_data(struct wpi_softc *sc, struct
uint32_t flags;
uint16_t qos;
uint8_t tid, type;
- int ac, error, rate, ismcast, totlen;
+ int ac, error, swcrypt, rate, ismcast, totlen;
wh = mtod(m, struct ieee80211_frame *);
type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
@@ -2422,6 +2422,8 @@ wpi_tx_data(struct wpi_softc *sc, struct
error = ENOBUFS;
goto fail;
}
+ swcrypt = k->wk_flags & IEEE80211_KEY_SWCRYPT;
+
/* 802.11 header may have moved. */
wh = mtod(m, struct ieee80211_frame *);
}
@@ -2508,6 +2510,19 @@ wpi_tx_data(struct wpi_softc *sc, struct
if (type != IEEE80211_FC0_TYPE_MGT)
tx.data_ntries = tp->maxretry;
+ if (k != NULL && !swcrypt) {
+ switch (k->wk_cipher->ic_cipher) {
+ case IEEE80211_CIPHER_AES_CCM:
+ tx.security = WPI_CIPHER_CCMP;
+ break;
+
+ default:
+ break;
+ }
+
+ memcpy(tx.key, k->wk_key, k->wk_keylen);
+ }
+
tx.len = htole16(totlen);
tx.flags = htole32(flags);
tx.plcp = rate2plcp(rate);
@@ -2517,13 +2532,6 @@ wpi_tx_data(struct wpi_softc *sc, struct
tx.cck_mask = 0x0f;
tx.rts_ntries = 7;
- if (k != NULL && k->wk_cipher->ic_cipher == IEEE80211_CIPHER_AES_CCM) {
- if (!(k->wk_flags & IEEE80211_KEY_SWCRYPT)) {
- tx.security = WPI_CIPHER_CCMP;
- memcpy(tx.key, k->wk_key, k->wk_keylen);
- }
- }
-
tx_data.data = &tx;
tx_data.ni = ni;
tx_data.m = m;
More information about the svn-src-all
mailing list