aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorAhmad Kholaif <akholaif@qca.qualcomm.com>2015-02-26 08:26:53 -0500
committerJohannes Berg <johannes.berg@intel.com>2015-03-03 09:56:05 -0500
commit6c09e791b21309a1ad71f9702b766dae12a3cb0a (patch)
treefe12e02d50c8f754bae60cfc0a4d8f55f724c9dd /net/wireless
parentffc1199122d83d60ad99f9c55df32feb650b7bff (diff)
cfg80211: Allow NL80211_ATTR_IFINDEX to be added to vendor events
This modifies cfg80211_vendor_event_alloc() with an additional argument struct wireless_dev *wdev. __cfg80211_alloc_event_skb() is modified to take in *wdev argument, if wdev != NULL, both the NL80211_ATTR_IFINDEX and wdev identifier are added to the vendor event. These changes make it easier for drivers to add ifindex indication in vendor events cleanly. This also updates all existing users of cfg80211_vendor_event_alloc() and __cfg80211_alloc_event_skb() in the kernel tree. Signed-off-by: Ahmad Kholaif <akholaif@qca.qualcomm.com> Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/nl80211.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 66666fdf1c8d..01874628ae00 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -7389,8 +7389,8 @@ static int nl80211_set_mcast_rate(struct sk_buff *skb, struct genl_info *info)
7389 7389
7390static struct sk_buff * 7390static struct sk_buff *
7391__cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev, 7391__cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev,
7392 int approxlen, u32 portid, u32 seq, 7392 struct wireless_dev *wdev, int approxlen,
7393 enum nl80211_commands cmd, 7393 u32 portid, u32 seq, enum nl80211_commands cmd,
7394 enum nl80211_attrs attr, 7394 enum nl80211_attrs attr,
7395 const struct nl80211_vendor_cmd_info *info, 7395 const struct nl80211_vendor_cmd_info *info,
7396 gfp_t gfp) 7396 gfp_t gfp)
@@ -7421,6 +7421,16 @@ __cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev,
7421 goto nla_put_failure; 7421 goto nla_put_failure;
7422 } 7422 }
7423 7423
7424 if (wdev) {
7425 if (nla_put_u64(skb, NL80211_ATTR_WDEV,
7426 wdev_id(wdev)))
7427 goto nla_put_failure;
7428 if (wdev->netdev &&
7429 nla_put_u32(skb, NL80211_ATTR_IFINDEX,
7430 wdev->netdev->ifindex))
7431 goto nla_put_failure;
7432 }
7433
7424 data = nla_nest_start(skb, attr); 7434 data = nla_nest_start(skb, attr);
7425 7435
7426 ((void **)skb->cb)[0] = rdev; 7436 ((void **)skb->cb)[0] = rdev;
@@ -7435,6 +7445,7 @@ __cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev,
7435} 7445}
7436 7446
7437struct sk_buff *__cfg80211_alloc_event_skb(struct wiphy *wiphy, 7447struct sk_buff *__cfg80211_alloc_event_skb(struct wiphy *wiphy,
7448 struct wireless_dev *wdev,
7438 enum nl80211_commands cmd, 7449 enum nl80211_commands cmd,
7439 enum nl80211_attrs attr, 7450 enum nl80211_attrs attr,
7440 int vendor_event_idx, 7451 int vendor_event_idx,
@@ -7460,7 +7471,7 @@ struct sk_buff *__cfg80211_alloc_event_skb(struct wiphy *wiphy,
7460 return NULL; 7471 return NULL;
7461 } 7472 }
7462 7473
7463 return __cfg80211_alloc_vendor_skb(rdev, approxlen, 0, 0, 7474 return __cfg80211_alloc_vendor_skb(rdev, wdev, approxlen, 0, 0,
7464 cmd, attr, info, gfp); 7475 cmd, attr, info, gfp);
7465} 7476}
7466EXPORT_SYMBOL(__cfg80211_alloc_event_skb); 7477EXPORT_SYMBOL(__cfg80211_alloc_event_skb);
@@ -9906,7 +9917,7 @@ struct sk_buff *__cfg80211_alloc_reply_skb(struct wiphy *wiphy,
9906 if (WARN_ON(!rdev->cur_cmd_info)) 9917 if (WARN_ON(!rdev->cur_cmd_info))
9907 return NULL; 9918 return NULL;
9908 9919
9909 return __cfg80211_alloc_vendor_skb(rdev, approxlen, 9920 return __cfg80211_alloc_vendor_skb(rdev, NULL, approxlen,
9910 rdev->cur_cmd_info->snd_portid, 9921 rdev->cur_cmd_info->snd_portid,
9911 rdev->cur_cmd_info->snd_seq, 9922 rdev->cur_cmd_info->snd_seq,
9912 cmd, attr, NULL, GFP_KERNEL); 9923 cmd, attr, NULL, GFP_KERNEL);