lkml.org 
[lkml]   [2021]   [Sep]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.13 131/219] mac80211: Fix monitor MTU limit so that A-MSDUs get through
    Date
    From: Johan Almbladh <johan.almbladh@anyfinetworks.com>

    [ Upstream commit 79f5962baea74ce1cd4e5949598944bff854b166 ]

    The maximum MTU was set to 2304, which is the maximum MSDU size. While
    this is valid for normal WLAN interfaces, it is too low for monitor
    interfaces. A monitor interface may receive and inject MPDU frames, and
    the maximum MPDU frame size is larger than 2304. The MPDU may also
    contain an A-MSDU frame, in which case the size may be much larger than
    the MTU limit. Since the maximum size of an A-MSDU depends on the PHY
    mode of the transmitting STA, it is not possible to set an exact MTU
    limit for a monitor interface. Now the maximum MTU for a monitor
    interface is unrestricted.

    Signed-off-by: Johan Almbladh <johan.almbladh@anyfinetworks.com>
    Link: https://lore.kernel.org/r/20210628123246.2070558-1-johan.almbladh@anyfinetworks.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/mac80211/iface.c | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
    index 137fa4c50e07..8df7ab34911c 100644
    --- a/net/mac80211/iface.c
    +++ b/net/mac80211/iface.c
    @@ -1985,9 +1985,16 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,

    netdev_set_default_ethtool_ops(ndev, &ieee80211_ethtool_ops);

    - /* MTU range: 256 - 2304 */
    + /* MTU range is normally 256 - 2304, where the upper limit is
    + * the maximum MSDU size. Monitor interfaces send and receive
    + * MPDU and A-MSDU frames which may be much larger so we do
    + * not impose an upper limit in that case.
    + */
    ndev->min_mtu = 256;
    - ndev->max_mtu = local->hw.max_mtu;
    + if (type == NL80211_IFTYPE_MONITOR)
    + ndev->max_mtu = 0;
    + else
    + ndev->max_mtu = local->hw.max_mtu;

    ret = cfg80211_register_netdevice(ndev);
    if (ret) {
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-09-09 14:25    [W:4.078 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site