nl80211: Fix NL80211_CMD_FRAME to not try offchannel without driver support
authorJouni Malinen <jouni@qca.qualcomm.com>
Thu, 29 Dec 2011 12:15:31 +0000 (14:15 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 29 Dec 2011 12:15:31 +0000 (14:15 +0200)
The offchanok parameter is hardcoded to one in number of paths and that
added NL80211_ATTR_OFFCHANNEL_TX_OK attribute to NL80211_CMD_FRAME
unconditional. cfg80211 rejects this with EINVAL if the driver does not
indicate support for offchannel TX. Fix this by not requesting
offchannel TX depending on driver capabilities. Remain-on-channel
operation was used for those cases anyway, so the additional attribute
was not really needed for these in the first place.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

src/drivers/driver_nl80211.c

index 431c890..12bb4fd 100644 (file)
@@ -7876,7 +7876,7 @@ static int nl80211_send_frame_cmd(struct i802_bss *bss,
        NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);
        if (wait)
                NLA_PUT_U32(msg, NL80211_ATTR_DURATION, wait);
-       if (offchanok)
+       if (offchanok && (drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX))
                NLA_PUT_FLAG(msg, NL80211_ATTR_OFFCHANNEL_TX_OK);
        if (no_cck)
                NLA_PUT_FLAG(msg, NL80211_ATTR_TX_NO_CCK_RATE);