mac80211: move TX PN to public part of key struct
[cascardo/linux.git] / net / mac80211 / cfg.c
index bb9f836..02f48c8 100644 (file)
@@ -361,66 +361,25 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
                break;
        case WLAN_CIPHER_SUITE_CCMP:
        case WLAN_CIPHER_SUITE_CCMP_256:
-               if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
-                   !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
-                       drv_get_key_seq(sdata->local, key, &kseq);
-                       memcpy(seq, kseq.ccmp.pn, 6);
-               } else {
-                       pn64 = atomic64_read(&key->u.ccmp.tx_pn);
-                       seq[0] = pn64;
-                       seq[1] = pn64 >> 8;
-                       seq[2] = pn64 >> 16;
-                       seq[3] = pn64 >> 24;
-                       seq[4] = pn64 >> 32;
-                       seq[5] = pn64 >> 40;
-               }
-               params.seq = seq;
-               params.seq_len = 6;
-               break;
        case WLAN_CIPHER_SUITE_AES_CMAC:
        case WLAN_CIPHER_SUITE_BIP_CMAC_256:
-               if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
-                   !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
-                       drv_get_key_seq(sdata->local, key, &kseq);
-                       memcpy(seq, kseq.aes_cmac.pn, 6);
-               } else {
-                       pn64 = atomic64_read(&key->u.aes_cmac.tx_pn);
-                       seq[0] = pn64;
-                       seq[1] = pn64 >> 8;
-                       seq[2] = pn64 >> 16;
-                       seq[3] = pn64 >> 24;
-                       seq[4] = pn64 >> 32;
-                       seq[5] = pn64 >> 40;
-               }
-               params.seq = seq;
-               params.seq_len = 6;
-               break;
+               BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
+                            offsetof(typeof(kseq), aes_cmac));
        case WLAN_CIPHER_SUITE_BIP_GMAC_128:
        case WLAN_CIPHER_SUITE_BIP_GMAC_256:
-               if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
-                   !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
-                       drv_get_key_seq(sdata->local, key, &kseq);
-                       memcpy(seq, kseq.aes_gmac.pn, 6);
-               } else {
-                       pn64 = atomic64_read(&key->u.aes_gmac.tx_pn);
-                       seq[0] = pn64;
-                       seq[1] = pn64 >> 8;
-                       seq[2] = pn64 >> 16;
-                       seq[3] = pn64 >> 24;
-                       seq[4] = pn64 >> 32;
-                       seq[5] = pn64 >> 40;
-               }
-               params.seq = seq;
-               params.seq_len = 6;
-               break;
+               BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
+                            offsetof(typeof(kseq), aes_gmac));
        case WLAN_CIPHER_SUITE_GCMP:
        case WLAN_CIPHER_SUITE_GCMP_256:
+               BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
+                            offsetof(typeof(kseq), gcmp));
+
                if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
                    !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
                        drv_get_key_seq(sdata->local, key, &kseq);
-                       memcpy(seq, kseq.gcmp.pn, 6);
+                       memcpy(seq, kseq.ccmp.pn, 6);
                } else {
-                       pn64 = atomic64_read(&key->u.gcmp.tx_pn);
+                       pn64 = atomic64_read(&key->conf.tx_pn);
                        seq[0] = pn64;
                        seq[1] = pn64 >> 8;
                        seq[2] = pn64 >> 16;