Commit ccf7dd94 authored by Johannes Berg's avatar Johannes Berg

wifi: nl80211: refactor nl80211_send_mlme_event() arguments

This function has so many arguments already, before adding
yet another one, refactor it to take a struct instead.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 756b3120
...@@ -17736,21 +17736,29 @@ void nl80211_common_reg_change_event(enum nl80211_commands cmd_id, ...@@ -17736,21 +17736,29 @@ void nl80211_common_reg_change_event(enum nl80211_commands cmd_id,
nlmsg_free(msg); nlmsg_free(msg);
} }
struct nl80211_mlme_event {
enum nl80211_commands cmd;
const u8 *buf;
size_t buf_len;
int uapsd_queues;
const u8 *req_ies;
size_t req_ies_len;
bool reconnect;
};
static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev,
struct net_device *netdev, struct net_device *netdev,
const u8 *buf, size_t len, const struct nl80211_mlme_event *event,
enum nl80211_commands cmd, gfp_t gfp, gfp_t gfp)
int uapsd_queues, const u8 *req_ies,
size_t req_ies_len, bool reconnect)
{ {
struct sk_buff *msg; struct sk_buff *msg;
void *hdr; void *hdr;
msg = nlmsg_new(100 + len + req_ies_len, gfp); msg = nlmsg_new(100 + event->buf_len + event->req_ies_len, gfp);
if (!msg) if (!msg)
return; return;
hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); hdr = nl80211hdr_put(msg, 0, 0, 0, event->cmd);
if (!hdr) { if (!hdr) {
nlmsg_free(msg); nlmsg_free(msg);
return; return;
...@@ -17758,22 +17766,24 @@ static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, ...@@ -17758,22 +17766,24 @@ static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev,
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) ||
nla_put(msg, NL80211_ATTR_FRAME, len, buf) || nla_put(msg, NL80211_ATTR_FRAME, event->buf_len, event->buf) ||
(req_ies && (event->req_ies &&
nla_put(msg, NL80211_ATTR_REQ_IE, req_ies_len, req_ies))) nla_put(msg, NL80211_ATTR_REQ_IE, event->req_ies_len,
event->req_ies)))
goto nla_put_failure; goto nla_put_failure;
if (reconnect && nla_put_flag(msg, NL80211_ATTR_RECONNECT_REQUESTED)) if (event->reconnect &&
nla_put_flag(msg, NL80211_ATTR_RECONNECT_REQUESTED))
goto nla_put_failure; goto nla_put_failure;
if (uapsd_queues >= 0) { if (event->uapsd_queues >= 0) {
struct nlattr *nla_wmm = struct nlattr *nla_wmm =
nla_nest_start_noflag(msg, NL80211_ATTR_STA_WME); nla_nest_start_noflag(msg, NL80211_ATTR_STA_WME);
if (!nla_wmm) if (!nla_wmm)
goto nla_put_failure; goto nla_put_failure;
if (nla_put_u8(msg, NL80211_STA_WME_UAPSD_QUEUES, if (nla_put_u8(msg, NL80211_STA_WME_UAPSD_QUEUES,
uapsd_queues)) event->uapsd_queues))
goto nla_put_failure; goto nla_put_failure;
nla_nest_end(msg, nla_wmm); nla_nest_end(msg, nla_wmm);
...@@ -17793,37 +17803,60 @@ void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev, ...@@ -17793,37 +17803,60 @@ void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev,
struct net_device *netdev, const u8 *buf, struct net_device *netdev, const u8 *buf,
size_t len, gfp_t gfp) size_t len, gfp_t gfp)
{ {
nl80211_send_mlme_event(rdev, netdev, buf, len, struct nl80211_mlme_event event = {
NL80211_CMD_AUTHENTICATE, gfp, -1, NULL, 0, .cmd = NL80211_CMD_AUTHENTICATE,
false); .buf = buf,
.buf_len = len,
.uapsd_queues = -1,
};
nl80211_send_mlme_event(rdev, netdev, &event, gfp);
} }
void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev, void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev,
struct net_device *netdev, struct net_device *netdev,
struct cfg80211_rx_assoc_resp_data *data) struct cfg80211_rx_assoc_resp_data *data)
{ {
nl80211_send_mlme_event(rdev, netdev, data->buf, data->len, struct nl80211_mlme_event event = {
NL80211_CMD_ASSOCIATE, GFP_KERNEL, .cmd = NL80211_CMD_ASSOCIATE,
data->uapsd_queues, .buf = data->buf,
data->req_ies, data->req_ies_len, false); .buf_len = data->len,
.uapsd_queues = data->uapsd_queues,
.req_ies = data->req_ies,
.req_ies_len = data->req_ies_len,
};
nl80211_send_mlme_event(rdev, netdev, &event, GFP_KERNEL);
} }
void nl80211_send_deauth(struct cfg80211_registered_device *rdev, void nl80211_send_deauth(struct cfg80211_registered_device *rdev,
struct net_device *netdev, const u8 *buf, struct net_device *netdev, const u8 *buf,
size_t len, bool reconnect, gfp_t gfp) size_t len, bool reconnect, gfp_t gfp)
{ {
nl80211_send_mlme_event(rdev, netdev, buf, len, struct nl80211_mlme_event event = {
NL80211_CMD_DEAUTHENTICATE, gfp, -1, NULL, 0, .cmd = NL80211_CMD_DEAUTHENTICATE,
reconnect); .buf = buf,
.buf_len = len,
.reconnect = reconnect,
.uapsd_queues = -1,
};
nl80211_send_mlme_event(rdev, netdev, &event, gfp);
} }
void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
struct net_device *netdev, const u8 *buf, struct net_device *netdev, const u8 *buf,
size_t len, bool reconnect, gfp_t gfp) size_t len, bool reconnect, gfp_t gfp)
{ {
nl80211_send_mlme_event(rdev, netdev, buf, len, struct nl80211_mlme_event event = {
NL80211_CMD_DISASSOCIATE, gfp, -1, NULL, 0, .cmd = NL80211_CMD_DISASSOCIATE,
reconnect); .buf = buf,
.buf_len = len,
.reconnect = reconnect,
.uapsd_queues = -1,
};
nl80211_send_mlme_event(rdev, netdev, &event, gfp);
} }
void cfg80211_rx_unprot_mlme_mgmt(struct net_device *dev, const u8 *buf, void cfg80211_rx_unprot_mlme_mgmt(struct net_device *dev, const u8 *buf,
...@@ -17833,28 +17866,31 @@ void cfg80211_rx_unprot_mlme_mgmt(struct net_device *dev, const u8 *buf, ...@@ -17833,28 +17866,31 @@ void cfg80211_rx_unprot_mlme_mgmt(struct net_device *dev, const u8 *buf,
struct wiphy *wiphy = wdev->wiphy; struct wiphy *wiphy = wdev->wiphy;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
const struct ieee80211_mgmt *mgmt = (void *)buf; const struct ieee80211_mgmt *mgmt = (void *)buf;
u32 cmd; struct nl80211_mlme_event event = {
.buf = buf,
.buf_len = len,
.uapsd_queues = -1,
};
if (WARN_ON(len < 2)) if (WARN_ON(len < 2))
return; return;
if (ieee80211_is_deauth(mgmt->frame_control)) { if (ieee80211_is_deauth(mgmt->frame_control)) {
cmd = NL80211_CMD_UNPROT_DEAUTHENTICATE; event.cmd = NL80211_CMD_UNPROT_DEAUTHENTICATE;
} else if (ieee80211_is_disassoc(mgmt->frame_control)) { } else if (ieee80211_is_disassoc(mgmt->frame_control)) {
cmd = NL80211_CMD_UNPROT_DISASSOCIATE; event.cmd = NL80211_CMD_UNPROT_DISASSOCIATE;
} else if (ieee80211_is_beacon(mgmt->frame_control)) { } else if (ieee80211_is_beacon(mgmt->frame_control)) {
if (wdev->unprot_beacon_reported && if (wdev->unprot_beacon_reported &&
elapsed_jiffies_msecs(wdev->unprot_beacon_reported) < 10000) elapsed_jiffies_msecs(wdev->unprot_beacon_reported) < 10000)
return; return;
cmd = NL80211_CMD_UNPROT_BEACON; event.cmd = NL80211_CMD_UNPROT_BEACON;
wdev->unprot_beacon_reported = jiffies; wdev->unprot_beacon_reported = jiffies;
} else { } else {
return; return;
} }
trace_cfg80211_rx_unprot_mlme_mgmt(dev, buf, len); trace_cfg80211_rx_unprot_mlme_mgmt(dev, buf, len);
nl80211_send_mlme_event(rdev, dev, buf, len, cmd, GFP_ATOMIC, -1, nl80211_send_mlme_event(rdev, dev, &event, GFP_ATOMIC);
NULL, 0, false);
} }
EXPORT_SYMBOL(cfg80211_rx_unprot_mlme_mgmt); EXPORT_SYMBOL(cfg80211_rx_unprot_mlme_mgmt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment