mac80211: Fix the MAX MTU calculation
A message that is not in the archive (sent off-list or not yet received): 201212211141.qBLBfZdq015078@chaitanya-desktop
PATCH 1/1 mac80211: Fix the MAX MTU calculation
Fix the Max MTU calculations.
Do not take headers in to account, only MAX MSDU size as per 802.11-2012(8.2.3) is enough.
ToDo: Add support for AMSDU in future.
Signed-off-by T Krishna Chaitanya <[email protected]>
---
net/mac80211/iface.c | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-)
net/mac80211/iface.c +16 -7
@@ -207,15 +207,24 @@ void ieee80211_recalc_idle(struct ieee80211_local *local)static int ieee80211_change_mtu (struct net_device *dev,int new_mtu) { -int meshhdrlen; -struct ieee80211_sub_if_data *sdata =IEEE80211_DEV_TO_SUB_IF (dev); - - meshhdrlen = (sdata->vif.type ==NL80211_IFTYPE_MESH_POINT ) ?5 :0 ; +/* 802.11-2012: 8.2.3: The maximum frame body size is determined by +1. The maximum MSDU size (2304 octets), +2. plus the length of the Mesh Control field (6, 12, or 18 octets) +if present, +3. the maximum unencrypted MMPDU size excluding the MAC header and +FCS (2304 octets) or +4. the maximum A- MSDU size (3839 or 7935 octets), +plus any overhead from security encapsulation. +Note1: IEEE80211_MAX_DATA_LEN doesnt include any headers (2304), +so it can be used directly+ Mesh HDR Len +Note2: In Other places (skb_alloc) its handled properly. + +ToDO: Make the MAX_DATA_LEN driver configurable through its +AMSDU capabilities. +*/ -/* FIX: what would be proper limits for MTU? -* This interface uses 802.3 frames. */ if (new_mtu <256 || - new_mtu >IEEE80211_MAX_DATA_LEN -24 -6 - meshhdrlen) { + new_mtu >IEEE80211_MAX_DATA_LEN ) {return -EINVAL ; }
Quoted 3 lines · Chaitanya
Fix the Max MTU calculations.
Do not take headers in to account, only MAX MSDU size as per 802.11-2012(8.2.3) is enough.
Applied, but I rewrote the changelog a bit,
Quoted 1 line
ToDo: Add support for AMSDU in future.
removed this (AMSDU is irrelevant here)
Quoted 9 lines
net/mac80211/iface.c +5
-4-int meshhdrlen; -struct ieee80211_sub_if_data *sdata =IEEE80211_DEV_TO_SUB_IF (dev); - - meshhdrlen = (sdata->vif.type ==NL80211_IFTYPE_MESH_POINT ) ?5 :0 ; +/* 802.11-2012: 8.2.3: The maximum frame body size is determined by +1. The maximum MSDU size (2304 octets), +2. plus the length of the Mesh Control field (6, 12, or 18 octets) +if present, +3. the maximum unencrypted MMPDU size excluding the MAC header and
net/mac80211/iface.c void ieee80211_recalc_idle(struct ieee80211_local *local) · line 224
Quoted 10 lines
net/mac80211/iface.c +10
-0+FCS (2304 octets) or +4. the maximum A- MSDU size (3839 or 7935 octets), +plus any overhead from security encapsulation. +Note1: IEEE80211_MAX_DATA_LEN doesnt include any headers (2304), +so it can be used directly+ Mesh HDR Len +Note2: In Other places (skb_alloc) its handled properly. + +ToDO: Make the MAX_DATA_LEN driver configurable through its +AMSDU capabilities. +*/
and I also removed the big comment that doesn't really apply
johannes