[PATCH] ieee80211: in-tree driver updates to sync with latest ieee80211 series
authorJames Ketrenos <jketreno@linux.intel.com>
Thu, 22 Sep 2005 10:34:15 +0000 (10:34 +0000)
committerJeff Garzik <jgarzik@pobox.com>
Thu, 22 Sep 2005 19:40:59 +0000 (15:40 -0400)
Changed crypto method from requiring a struct ieee80211_device reference
to the init handler.  Instead we now have a get/set flags method for
each crypto component.

Setting of TKIP countermeasures can now be done via
set_flags(IEEE80211_CRYPTO_TKIP_COUNTERMEASURES)

Signed-off-by: James Ketrenos <jketreno@linux.intel.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
include/net/ieee80211.h
include/net/ieee80211_crypt.h
net/ieee80211/ieee80211_crypt.c
net/ieee80211/ieee80211_crypt_ccmp.c
net/ieee80211/ieee80211_crypt_tkip.c
net/ieee80211/ieee80211_crypt_wep.c
net/ieee80211/ieee80211_module.c
net/ieee80211/ieee80211_wx.c

index 4a381a0..4851756 100644 (file)
@@ -876,7 +876,6 @@ struct ieee80211_device {
        /* WPA data */
        int wpa_enabled;
        int drop_unencrypted;
-       int tkip_countermeasures;
        int privacy_invoked;
        size_t wpa_ie_len;
        u8 *wpa_ie;
index daf3b2c..0c9d859 100644 (file)
 
 #include <linux/skbuff.h>
 
+enum {
+       IEEE80211_CRYPTO_TKIP_COUNTERMEASURES = (1<<0),
+};
+
 struct ieee80211_crypto_ops {
        const char *name;
 
        /* init new crypto context (e.g., allocate private data space,
         * select IV, etc.); returns NULL on failure or pointer to allocated
         * private data on success */
-       void *(*init) (struct ieee80211_device * ieee, int keyidx);
+       void *(*init) (int keyidx);
 
        /* deinitialize crypto context and free allocated private data */
        void (*deinit) (void *priv);
@@ -60,6 +64,10 @@ struct ieee80211_crypto_ops {
         * statistics */
        char *(*print_stats) (char *p, void *priv);
 
+       /* Crypto specific flag get/set for configuration settings */
+       unsigned long (*get_flags)(void *priv);
+       unsigned long (*set_flags)(unsigned long flags, void *priv);
+
        /* maximum number of bytes added by encryption; encrypt buf is
         * allocated with extra_prefix_len bytes, copy of in_buf, and
         * extra_postfix_len; encrypt need not use all this space, but
index e26bcc9..f3b6aa3 100644 (file)
@@ -202,8 +202,7 @@ struct ieee80211_crypto_ops *ieee80211_get_crypto_ops(const char *name)
                return NULL;
 }
 
-static void *ieee80211_crypt_null_init(struct ieee80211_device *ieee,
-                                      int keyidx)
+static void *ieee80211_crypt_null_init(int keyidx)
 {
        return (void *)1;
 }
index 081d857..05a853c 100644 (file)
@@ -74,7 +74,7 @@ static void ieee80211_ccmp_aes_encrypt(struct crypto_tfm *tfm,
        crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN);
 }
 
-static void *ieee80211_ccmp_init(struct ieee80211_device *ieee, int key_idx)
+static void *ieee80211_ccmp_init(int key_idx)
 {
        struct ieee80211_ccmp_data *priv;
 
index e073305..2e34f29 100644 (file)
@@ -60,10 +60,24 @@ struct ieee80211_tkip_data {
        /* scratch buffers for virt_to_page() (crypto API) */
        u8 rx_hdr[16], tx_hdr[16];
 
-       struct ieee80211_device *ieee;
+       unsigned long flags;
 };
 
-static void *ieee80211_tkip_init(struct ieee80211_device *ieee, int key_idx)
+static unsigned long ieee80211_tkip_set_flags(unsigned long flags, void *priv)
+{
+       struct ieee80211_tkip_data *_priv = priv;
+       unsigned long old_flags = _priv->flags;
+       _priv->flags = flags;
+       return old_flags;
+}
+
+static unsigned long ieee80211_tkip_get_flags(void *priv)
+{
+       struct ieee80211_tkip_data *_priv = priv;
+       return _priv->flags;
+}
+
+static void *ieee80211_tkip_init(int key_idx)
 {
        struct ieee80211_tkip_data *priv;
 
@@ -72,8 +86,6 @@ static void *ieee80211_tkip_init(struct ieee80211_device *ieee, int key_idx)
                goto fail;
        memset(priv, 0, sizeof(*priv));
 
-       priv->ieee = ieee;
-
        priv->key_idx = key_idx;
 
        priv->tfm_arc4 = crypto_alloc_tfm("arc4", 0);
@@ -315,13 +327,13 @@ static int ieee80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
        u8 *pos;
        struct scatterlist sg;
 
-       if (tkey->ieee->tkip_countermeasures) {
+       if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) {
                if (net_ratelimit()) {
                        struct ieee80211_hdr_4addr *hdr =
                            (struct ieee80211_hdr_4addr *)skb->data;
-                       printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
+                       printk(KERN_DEBUG "TKIP countermeasures: dropped "
                               "TX packet to " MAC_FMT "\n",
-                              tkey->ieee->dev->name, MAC_ARG(hdr->addr1));
+                              MAC_ARG(hdr->addr1));
                }
                return -1;
        }
@@ -366,11 +378,11 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
 
        hdr = (struct ieee80211_hdr_4addr *)skb->data;
 
-       if (tkey->ieee->tkip_countermeasures) {
+       if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) {
                if (net_ratelimit()) {
-                       printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
+                       printk(KERN_DEBUG "TKIP countermeasures: dropped "
                               "received packet from " MAC_FMT "\n",
-                              tkey->ieee->dev->name, MAC_ARG(hdr->addr2));
+                              MAC_ARG(hdr->addr2));
                }
                return -1;
        }
@@ -694,6 +706,8 @@ static struct ieee80211_crypto_ops ieee80211_crypt_tkip = {
        .extra_mpdu_prefix_len = 4 + 4, /* IV + ExtIV */
        .extra_mpdu_postfix_len = 4,    /* ICV */
        .extra_msdu_postfix_len = 8,    /* MIC */
+       .get_flags = ieee80211_tkip_get_flags,
+       .set_flags = ieee80211_tkip_set_flags,
        .owner = THIS_MODULE,
 };
 
index 2aaeac1..7c08ed2 100644 (file)
@@ -37,7 +37,7 @@ struct prism2_wep_data {
        struct crypto_tfm *tfm;
 };
 
-static void *prism2_wep_init(struct ieee80211_device *ieee, int keyidx)
+static void *prism2_wep_init(int keyidx)
 {
        struct prism2_wep_data *priv;
 
index 3193125..5714692 100644 (file)
@@ -155,7 +155,6 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
        spin_lock_init(&ieee->lock);
 
        ieee->wpa_enabled = 0;
-       ieee->tkip_countermeasures = 0;
        ieee->drop_unencrypted = 0;
        ieee->privacy_invoked = 0;
 
index 3dd2bba..ee7a70a 100644 (file)
@@ -355,7 +355,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                }
 
                if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
-                       new_crypt->priv = new_crypt->ops->init(ieee, key);
+                       new_crypt->priv = new_crypt->ops->init(key);
 
                if (!new_crypt->ops || !new_crypt->priv) {
                        kfree(new_crypt);
@@ -598,7 +598,7 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
                memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
                new_crypt->ops = ops;
                if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
-                       new_crypt->priv = new_crypt->ops->init(ieee, idx);
+                       new_crypt->priv = new_crypt->ops->init(idx);
                if (new_crypt->priv == NULL) {
                        kfree(new_crypt);
                        ret = -EINVAL;