2012-12-20 12:43:44

by Chaitanya

[permalink] [raw]
Subject: [RFC] mac80211: Fix MAX MTU Calculation

Fix the MTU calculation, we should check for data_len+ mesh hdr len
and shouldn't include any header lengths.

ToDo: Get the MAX_DATA_LEN based on driver's AMSDU capability.

Signed-off-by: T Krishna Chaitanya <[email protected]>

---

net/mac80211/iface.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 54fb7f9..da74ef9 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -214,8 +214,23 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)

/* FIX: what would be proper limits for MTU?
* This interface uses 802.3 frames. */
+ /* Fixed: MTU needn't worry about headers*/
+
+ /* 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 (like skb_alloc) its handled properly.
+ */
+
if (new_mtu < 256 ||
- new_mtu > IEEE80211_MAX_DATA_LEN - 24 - 6 - meshhdrlen) {
+ new_mtu > IEEE80211_MAX_DATA_LEN + meshhdrlen) {
return -EINVAL;
}







2012-12-20 13:17:51

by Chaitanya

[permalink] [raw]
Subject: Re: [RFC] mac80211: Fix MAX MTU Calculation

On Thursday 20 December 2012 06:37 PM, Johannes Berg wrote:
> On Thu, 2012-12-20 at 18:13 +0530, Chaitanya wrote:
>> Fix the MTU calculation, we should check for data_len+ mesh hdr len
>> and shouldn't include any header lengths.
>>
>> ToDo: Get the MAX_DATA_LEN based on driver's AMSDU capability.
>>
>> Signed-off-by: T Krishna Chaitanya <[email protected]>
>>
>> ---
>>
>> net/mac80211/iface.c | 17 ++++++++++++++++-
>> 1 files changed, 16 insertions(+), 1 deletions(-)
>>
>> diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
>> index 54fb7f9..da74ef9 100644
>> --- a/net/mac80211/iface.c
>> +++ b/net/mac80211/iface.c
>> @@ -214,8 +214,23 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
>>
>> /* FIX: what would be proper limits for MTU?
>> * This interface uses 802.3 frames. */
>> + /* Fixed: MTU needn't worry about headers*/
>> +
>> + /* 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 (like skb_alloc) its handled properly.
>> + */
>> +
> ok so the comment style is wrong, you shouldn't list changelog-type
> things in comments ("Fixed: ...") etc.
>
> I also don't understand why we should add the mesh length? It seems that
> this is really just the maximum MSDU size, i.e. 2304 octets.
>
> johannes
>
Ok, will change the comments. So shall i remove the comments
for FIX as well (or) should i retain them?

As for WLAN is concerned the mesh
header is part of data (MSDU) hence the standard says the MSDU
can be Maximum of 2304 + Any Mesh Control Field. (#2 above).



2012-12-20 13:07:32

by Johannes Berg

[permalink] [raw]
Subject: Re: [RFC] mac80211: Fix MAX MTU Calculation

On Thu, 2012-12-20 at 18:13 +0530, Chaitanya wrote:
> Fix the MTU calculation, we should check for data_len+ mesh hdr len
> and shouldn't include any header lengths.
>
> ToDo: Get the MAX_DATA_LEN based on driver's AMSDU capability.
>
> Signed-off-by: T Krishna Chaitanya <[email protected]>
>
> ---
>
> net/mac80211/iface.c | 17 ++++++++++++++++-
> 1 files changed, 16 insertions(+), 1 deletions(-)
>
> diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
> index 54fb7f9..da74ef9 100644
> --- a/net/mac80211/iface.c
> +++ b/net/mac80211/iface.c
> @@ -214,8 +214,23 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
>
> /* FIX: what would be proper limits for MTU?
> * This interface uses 802.3 frames. */
> + /* Fixed: MTU needn't worry about headers*/
> +
> + /* 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 (like skb_alloc) its handled properly.
> + */
> +

ok so the comment style is wrong, you shouldn't list changelog-type
things in comments ("Fixed: ...") etc.

I also don't understand why we should add the mesh length? It seems that
this is really just the maximum MSDU size, i.e. 2304 octets.

johannes