nl80211: send event when CMD_FRAME duration expires
authorJames Prestwood <james.prestwood@linux.intel.com>
Wed, 12 Jun 2019 19:35:09 +0000 (12:35 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 14 Jun 2019 14:08:28 +0000 (16:08 +0200)
commit1c38c7f22068b54a7ba5f026a45663c6727ab84c
tree3fceb580014f80d9ffdfc3e452d18b96383eab8b
parent5a7bb7ce26a98d52190086ae6174becedf03bf43
nl80211: send event when CMD_FRAME duration expires

cfg80211_remain_on_channel_expired is used to notify userspace when
the remain on channel duration expired by sending an event. There is
no such equivalent to CMD_FRAME, where if offchannel and a duration
is provided, the card will go offchannel for that duration. Currently
there is no way for userspace to tell when that duration expired
apart from setting an independent timeout. This timeout is quite
erroneous as the kernel may not immediately send out the frame
because of scheduling or work queue delays. In testing, it was found
this timeout had to be quite large to accomidate any potential delays.

A better solution is to have the kernel send an event when this
duration has expired. There is already NL80211_CMD_FRAME_WAIT_CANCEL
which can be used to cancel a NL80211_CMD_FRAME offchannel. Using this
command matches perfectly to how NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL
works, where its both used to cancel and notify if the duration has
expired.

Signed-off-by: James Prestwood <james.prestwood@linux.intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
net/wireless/nl80211.c
net/wireless/trace.h