diff options
author | James Ketrenos <jketreno@linux.intel.com> | 2005-09-21 12:54:53 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-09-21 23:02:31 -0400 |
commit | 1264fc0498e1e20f97b1ab690e523e7a7fc50eab (patch) | |
tree | 000b8528685f3ca250d0581df88abef03417941d /net/ieee80211/ieee80211_module.c | |
parent | 3f552bbf8614d2d26f488ca0d3e188bdec484bf4 (diff) |
[PATCH] ieee80211: Fix TKIP, repeated fragmentation problem, and payload_size reporting
tree 8428e9f510e6ad6c77baec89cb57374842abf733
parent d78bfd3ddae9c422dd350159110f9c4d7cfc50de
author Liu Hong <hong.liu@intel.com> 1124446520 -0500
committer James Ketrenos <jketreno@linux.intel.com> 1127313183 -0500
Fix TKIP, repeated fragmentation problem, and payload_size reporting
1. TKIP encryption
Originally, TKIP encryption issues msdu + mpdu encryption on every
fragment. Change the behavior to msdu encryption on the whole
packet, then mpdu encryption on every fragment.
2. Avoid repeated fragmentation when !host_encrypt.
We only need do fragmentation when using host encryption. Otherwise
we only need pass the whole packet to driver, letting driver do the
fragmentation.
3. change the txb->payload_size to correct value
FW will use this value to determine whether to do fragmentation. If
we pass the wrong value, fw may cut on the wrong bound which will
make decryption fail when we do host encryption.
NOTE: This requires changing drivers (hostap) that have
extra_prefix_len used within them (structure member name change).
Signed-off-by: Hong Liu <liu.hong@intel.com>
Signed-off-by: James Ketrenos <jketreno@linux.intel.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'net/ieee80211/ieee80211_module.c')
-rw-r--r-- | net/ieee80211/ieee80211_module.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/ieee80211/ieee80211_module.c b/net/ieee80211/ieee80211_module.c index 67d6bdd2e3f2..dddc61647390 100644 --- a/net/ieee80211/ieee80211_module.c +++ b/net/ieee80211/ieee80211_module.c | |||
@@ -133,6 +133,12 @@ struct net_device *alloc_ieee80211(int sizeof_priv) | |||
133 | /* Default to enabling full open WEP with host based encrypt/decrypt */ | 133 | /* Default to enabling full open WEP with host based encrypt/decrypt */ |
134 | ieee->host_encrypt = 1; | 134 | ieee->host_encrypt = 1; |
135 | ieee->host_decrypt = 1; | 135 | ieee->host_decrypt = 1; |
136 | /* Host fragementation in Open mode. Default is enabled. | ||
137 | * Note: host fragmentation is always enabled if host encryption | ||
138 | * is enabled. For cards can do hardware encryption, they must do | ||
139 | * hardware fragmentation as well. So we don't need a variable | ||
140 | * like host_enc_frag. */ | ||
141 | ieee->host_open_frag = 1; | ||
136 | ieee->ieee802_1x = 1; /* Default to supporting 802.1x */ | 142 | ieee->ieee802_1x = 1; /* Default to supporting 802.1x */ |
137 | 143 | ||
138 | INIT_LIST_HEAD(&ieee->crypt_deinit_list); | 144 | INIT_LIST_HEAD(&ieee->crypt_deinit_list); |
@@ -147,7 +153,6 @@ struct net_device *alloc_ieee80211(int sizeof_priv) | |||
147 | ieee->tkip_countermeasures = 0; | 153 | ieee->tkip_countermeasures = 0; |
148 | ieee->drop_unencrypted = 0; | 154 | ieee->drop_unencrypted = 0; |
149 | ieee->privacy_invoked = 0; | 155 | ieee->privacy_invoked = 0; |
150 | ieee->ieee802_1x = 1; | ||
151 | 156 | ||
152 | return dev; | 157 | return dev; |
153 | 158 | ||