Browse Source

[802.11] Fix maximum packet length

Previously the maximum packet length was computed using an erroneous
understanding of the role of the MIC field in TKIP-encrypted packets.
The field is actually considered to be part of the MSDU (encrypted and
fragmented data), not the MPDU (container for each encrypted
fragment). As such its size does not contribute to cryptographic
overhead outside the data field's size limitations. The net result is
that the previous maximum packet length value was 4 bytes too long;
fix it to the correct value of 2352.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
tags/v0.9.8
Joshua Oreman 14 years ago
parent
commit
0b3c88e035
1 changed files with 13 additions and 5 deletions
  1. 13
    5
      src/include/gpxe/ieee80211.h

+ 13
- 5
src/include/gpxe/ieee80211.h View File

@@ -31,11 +31,19 @@ FILE_LICENCE(GPL2_OR_LATER);
31 31
 /** Maximum cryptographic overhead before encrypted data */
32 32
 #define IEEE80211_MAX_CRYPTO_HEADER	8
33 33
 
34
-/** Maximum cryptographic overhead after encrypted data */
35
-#define IEEE80211_MAX_CRYPTO_TRAILER    12
34
+/** Maximum cryptographic overhead after encrypted data
35
+ *
36
+ * This does not count the MIC in TKIP frames, since that is
37
+ * considered to be part of the MSDU and thus contributes to the size
38
+ * of the data field.
39
+ *
40
+ * It @e does count the MIC in CCMP frames, which is considered part
41
+ * of the MPDU (outside the data field).
42
+ */
43
+#define IEEE80211_MAX_CRYPTO_TRAILER    8
36 44
 
37 45
 /** Total maximum cryptographic overhead */
38
-#define IEEE80211_MAX_CRYPTO_OVERHEAD	20
46
+#define IEEE80211_MAX_CRYPTO_OVERHEAD	16
39 47
 
40 48
 /** Bytes of network-layer data that can go into a regular data frame */
41 49
 #define IEEE80211_MAX_FRAME_DATA	2296
@@ -58,10 +66,10 @@ FILE_LICENCE(GPL2_OR_LATER);
58 66
 
59 67
 /** Maximum combined frame length
60 68
  *
61
- * The biggest frame will include 32 frame header bytes, 20 bytes of
69
+ * The biggest frame will include 32 frame header bytes, 16 bytes of
62 70
  * crypto overhead, and 2304 data bytes.
63 71
  */
64
-#define IEEE80211_MAX_FRAME_LEN         2356
72
+#define IEEE80211_MAX_FRAME_LEN         2352
65 73
 
66 74
 /** Maximum length of an ESSID */
67 75
 #define IEEE80211_MAX_SSID_LEN          32

Loading…
Cancel
Save