diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-12-16 05:23:45 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-12-16 05:23:45 -0500 |
commit | c4de673b775e4db48cd2db6277e0c6714332ca0c (patch) | |
tree | 84f9e4728e6ccf257236d2ba063b6e784ec8b65d /net/wireless | |
parent | bafdc614a1f4f8be8cde41b8ab10ac17e67c1837 (diff) | |
parent | 55957fb7a0b61d8ab6ff3f04e279b8fc22b738fa (diff) |
Merge remote-tracking branch 'wireless-next/master' into mac80211-next
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/core.c | 9 | ||||
-rw-r--r-- | net/wireless/core.h | 6 | ||||
-rw-r--r-- | net/wireless/ibss.c | 18 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 266 | ||||
-rw-r--r-- | net/wireless/sysfs.h | 4 |
5 files changed, 152 insertions, 151 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index 1a92c6a0731f..d89dee2259b5 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
@@ -440,6 +440,15 @@ int wiphy_register(struct wiphy *wiphy) | |||
440 | int i; | 440 | int i; |
441 | u16 ifmodes = wiphy->interface_modes; | 441 | u16 ifmodes = wiphy->interface_modes; |
442 | 442 | ||
443 | /* support for 5/10 MHz is broken due to nl80211 API mess - disable */ | ||
444 | wiphy->flags &= ~WIPHY_FLAG_SUPPORTS_5_10_MHZ; | ||
445 | |||
446 | /* | ||
447 | * There are major locking problems in nl80211/mac80211 for CSA, | ||
448 | * disable for all drivers until this has been reworked. | ||
449 | */ | ||
450 | wiphy->flags &= ~WIPHY_FLAG_HAS_CHANNEL_SWITCH; | ||
451 | |||
443 | #ifdef CONFIG_PM | 452 | #ifdef CONFIG_PM |
444 | if (WARN_ON(wiphy->wowlan && | 453 | if (WARN_ON(wiphy->wowlan && |
445 | (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && | 454 | (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && |
diff --git a/net/wireless/core.h b/net/wireless/core.h index 453c6ed880f1..37ec16d7bb1a 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h | |||
@@ -232,10 +232,10 @@ struct cfg80211_beacon_registration { | |||
232 | }; | 232 | }; |
233 | 233 | ||
234 | /* free object */ | 234 | /* free object */ |
235 | extern void cfg80211_dev_free(struct cfg80211_registered_device *rdev); | 235 | void cfg80211_dev_free(struct cfg80211_registered_device *rdev); |
236 | 236 | ||
237 | extern int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, | 237 | int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, |
238 | char *newname); | 238 | char *newname); |
239 | 239 | ||
240 | void ieee80211_set_bitrate_flags(struct wiphy *wiphy); | 240 | void ieee80211_set_bitrate_flags(struct wiphy *wiphy); |
241 | 241 | ||
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c index f79105712949..730147ed8e65 100644 --- a/net/wireless/ibss.c +++ b/net/wireless/ibss.c | |||
@@ -262,7 +262,7 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, | |||
262 | 262 | ||
263 | /* try to find an IBSS channel if none requested ... */ | 263 | /* try to find an IBSS channel if none requested ... */ |
264 | if (!wdev->wext.ibss.chandef.chan) { | 264 | if (!wdev->wext.ibss.chandef.chan) { |
265 | wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; | 265 | struct ieee80211_channel *new_chan = NULL; |
266 | 266 | ||
267 | for (band = 0; band < IEEE80211_NUM_BANDS; band++) { | 267 | for (band = 0; band < IEEE80211_NUM_BANDS; band++) { |
268 | struct ieee80211_supported_band *sband; | 268 | struct ieee80211_supported_band *sband; |
@@ -278,18 +278,19 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, | |||
278 | continue; | 278 | continue; |
279 | if (chan->flags & IEEE80211_CHAN_DISABLED) | 279 | if (chan->flags & IEEE80211_CHAN_DISABLED) |
280 | continue; | 280 | continue; |
281 | wdev->wext.ibss.chandef.chan = chan; | 281 | new_chan = chan; |
282 | wdev->wext.ibss.chandef.center_freq1 = | ||
283 | chan->center_freq; | ||
284 | break; | 282 | break; |
285 | } | 283 | } |
286 | 284 | ||
287 | if (wdev->wext.ibss.chandef.chan) | 285 | if (new_chan) |
288 | break; | 286 | break; |
289 | } | 287 | } |
290 | 288 | ||
291 | if (!wdev->wext.ibss.chandef.chan) | 289 | if (!new_chan) |
292 | return -EINVAL; | 290 | return -EINVAL; |
291 | |||
292 | cfg80211_chandef_create(&wdev->wext.ibss.chandef, new_chan, | ||
293 | NL80211_CHAN_NO_HT); | ||
293 | } | 294 | } |
294 | 295 | ||
295 | /* don't join -- SSID is not there */ | 296 | /* don't join -- SSID is not there */ |
@@ -363,9 +364,8 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev, | |||
363 | return err; | 364 | return err; |
364 | 365 | ||
365 | if (chan) { | 366 | if (chan) { |
366 | wdev->wext.ibss.chandef.chan = chan; | 367 | cfg80211_chandef_create(&wdev->wext.ibss.chandef, chan, |
367 | wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; | 368 | NL80211_CHAN_NO_HT); |
368 | wdev->wext.ibss.chandef.center_freq1 = freq; | ||
369 | wdev->wext.ibss.channel_fixed = true; | 369 | wdev->wext.ibss.channel_fixed = true; |
370 | } else { | 370 | } else { |
371 | /* cfg80211_ibss_wext_join will pick one if needed */ | 371 | /* cfg80211_ibss_wext_join will pick one if needed */ |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 801e57da88b4..2d0c19c6133b 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -30,9 +30,9 @@ static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, | |||
30 | struct cfg80211_crypto_settings *settings, | 30 | struct cfg80211_crypto_settings *settings, |
31 | int cipher_limit); | 31 | int cipher_limit); |
32 | 32 | ||
33 | static int nl80211_pre_doit(struct genl_ops *ops, struct sk_buff *skb, | 33 | static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb, |
34 | struct genl_info *info); | 34 | struct genl_info *info); |
35 | static void nl80211_post_doit(struct genl_ops *ops, struct sk_buff *skb, | 35 | static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb, |
36 | struct genl_info *info); | 36 | struct genl_info *info); |
37 | 37 | ||
38 | /* the netlink family */ | 38 | /* the netlink family */ |
@@ -47,6 +47,25 @@ static struct genl_family nl80211_fam = { | |||
47 | .post_doit = nl80211_post_doit, | 47 | .post_doit = nl80211_post_doit, |
48 | }; | 48 | }; |
49 | 49 | ||
50 | /* multicast groups */ | ||
51 | enum nl80211_multicast_groups { | ||
52 | NL80211_MCGRP_CONFIG, | ||
53 | NL80211_MCGRP_SCAN, | ||
54 | NL80211_MCGRP_REGULATORY, | ||
55 | NL80211_MCGRP_MLME, | ||
56 | NL80211_MCGRP_TESTMODE /* keep last - ifdef! */ | ||
57 | }; | ||
58 | |||
59 | static const struct genl_multicast_group nl80211_mcgrps[] = { | ||
60 | [NL80211_MCGRP_CONFIG] = { .name = "config", }, | ||
61 | [NL80211_MCGRP_SCAN] = { .name = "scan", }, | ||
62 | [NL80211_MCGRP_REGULATORY] = { .name = "regulatory", }, | ||
63 | [NL80211_MCGRP_MLME] = { .name = "mlme", }, | ||
64 | #ifdef CONFIG_NL80211_TESTMODE | ||
65 | [NL80211_MCGRP_TESTMODE] = { .name = "testmode", } | ||
66 | #endif | ||
67 | }; | ||
68 | |||
50 | /* returns ERR_PTR values */ | 69 | /* returns ERR_PTR values */ |
51 | static struct wireless_dev * | 70 | static struct wireless_dev * |
52 | __cfg80211_wdev_from_attrs(struct net *netns, struct nlattr **attrs) | 71 | __cfg80211_wdev_from_attrs(struct net *netns, struct nlattr **attrs) |
@@ -2687,7 +2706,7 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info) | |||
2687 | hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, | 2706 | hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, |
2688 | NL80211_CMD_NEW_KEY); | 2707 | NL80211_CMD_NEW_KEY); |
2689 | if (!hdr) | 2708 | if (!hdr) |
2690 | return -ENOBUFS; | 2709 | goto nla_put_failure; |
2691 | 2710 | ||
2692 | cookie.msg = msg; | 2711 | cookie.msg = msg; |
2693 | cookie.idx = key_idx; | 2712 | cookie.idx = key_idx; |
@@ -5370,6 +5389,10 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) | |||
5370 | err = -EINVAL; | 5389 | err = -EINVAL; |
5371 | goto out_free; | 5390 | goto out_free; |
5372 | } | 5391 | } |
5392 | |||
5393 | if (!wiphy->bands[band]) | ||
5394 | continue; | ||
5395 | |||
5373 | err = ieee80211_get_ratemask(wiphy->bands[band], | 5396 | err = ieee80211_get_ratemask(wiphy->bands[band], |
5374 | nla_data(attr), | 5397 | nla_data(attr), |
5375 | nla_len(attr), | 5398 | nla_len(attr), |
@@ -6735,10 +6758,6 @@ __cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev, | |||
6735 | } | 6758 | } |
6736 | 6759 | ||
6737 | #ifdef CONFIG_NL80211_TESTMODE | 6760 | #ifdef CONFIG_NL80211_TESTMODE |
6738 | static struct genl_multicast_group nl80211_testmode_mcgrp = { | ||
6739 | .name = "testmode", | ||
6740 | }; | ||
6741 | |||
6742 | static int nl80211_testmode_do(struct sk_buff *skb, struct genl_info *info) | 6761 | static int nl80211_testmode_do(struct sk_buff *skb, struct genl_info *info) |
6743 | { | 6762 | { |
6744 | struct cfg80211_registered_device *rdev = info->user_ptr[0]; | 6763 | struct cfg80211_registered_device *rdev = info->user_ptr[0]; |
@@ -6884,8 +6903,8 @@ void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) | |||
6884 | 6903 | ||
6885 | nla_nest_end(skb, data); | 6904 | nla_nest_end(skb, data); |
6886 | genlmsg_end(skb, hdr); | 6905 | genlmsg_end(skb, hdr); |
6887 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), skb, 0, | 6906 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), skb, 0, |
6888 | nl80211_testmode_mcgrp.id, gfp); | 6907 | NL80211_MCGRP_TESTMODE, gfp); |
6889 | } | 6908 | } |
6890 | EXPORT_SYMBOL(cfg80211_testmode_event); | 6909 | EXPORT_SYMBOL(cfg80211_testmode_event); |
6891 | #endif | 6910 | #endif |
@@ -8973,7 +8992,7 @@ EXPORT_SYMBOL_GPL(cfg80211_vendor_cmd_reply); | |||
8973 | #define NL80211_FLAG_NEED_WDEV_UP (NL80211_FLAG_NEED_WDEV |\ | 8992 | #define NL80211_FLAG_NEED_WDEV_UP (NL80211_FLAG_NEED_WDEV |\ |
8974 | NL80211_FLAG_CHECK_NETDEV_UP) | 8993 | NL80211_FLAG_CHECK_NETDEV_UP) |
8975 | 8994 | ||
8976 | static int nl80211_pre_doit(struct genl_ops *ops, struct sk_buff *skb, | 8995 | static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb, |
8977 | struct genl_info *info) | 8996 | struct genl_info *info) |
8978 | { | 8997 | { |
8979 | struct cfg80211_registered_device *rdev; | 8998 | struct cfg80211_registered_device *rdev; |
@@ -9042,7 +9061,7 @@ static int nl80211_pre_doit(struct genl_ops *ops, struct sk_buff *skb, | |||
9042 | return 0; | 9061 | return 0; |
9043 | } | 9062 | } |
9044 | 9063 | ||
9045 | static void nl80211_post_doit(struct genl_ops *ops, struct sk_buff *skb, | 9064 | static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb, |
9046 | struct genl_info *info) | 9065 | struct genl_info *info) |
9047 | { | 9066 | { |
9048 | if (info->user_ptr[1]) { | 9067 | if (info->user_ptr[1]) { |
@@ -9059,7 +9078,7 @@ static void nl80211_post_doit(struct genl_ops *ops, struct sk_buff *skb, | |||
9059 | rtnl_unlock(); | 9078 | rtnl_unlock(); |
9060 | } | 9079 | } |
9061 | 9080 | ||
9062 | static struct genl_ops nl80211_ops[] = { | 9081 | static const struct genl_ops nl80211_ops[] = { |
9063 | { | 9082 | { |
9064 | .cmd = NL80211_CMD_GET_WIPHY, | 9083 | .cmd = NL80211_CMD_GET_WIPHY, |
9065 | .doit = nl80211_get_wiphy, | 9084 | .doit = nl80211_get_wiphy, |
@@ -9696,21 +9715,6 @@ static struct genl_ops nl80211_ops[] = { | |||
9696 | }, | 9715 | }, |
9697 | }; | 9716 | }; |
9698 | 9717 | ||
9699 | static struct genl_multicast_group nl80211_mlme_mcgrp = { | ||
9700 | .name = "mlme", | ||
9701 | }; | ||
9702 | |||
9703 | /* multicast groups */ | ||
9704 | static struct genl_multicast_group nl80211_config_mcgrp = { | ||
9705 | .name = "config", | ||
9706 | }; | ||
9707 | static struct genl_multicast_group nl80211_scan_mcgrp = { | ||
9708 | .name = "scan", | ||
9709 | }; | ||
9710 | static struct genl_multicast_group nl80211_regulatory_mcgrp = { | ||
9711 | .name = "regulatory", | ||
9712 | }; | ||
9713 | |||
9714 | /* notification functions */ | 9718 | /* notification functions */ |
9715 | 9719 | ||
9716 | void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev) | 9720 | void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev) |
@@ -9727,8 +9731,8 @@ void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev) | |||
9727 | return; | 9731 | return; |
9728 | } | 9732 | } |
9729 | 9733 | ||
9730 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 9734 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
9731 | nl80211_config_mcgrp.id, GFP_KERNEL); | 9735 | NL80211_MCGRP_CONFIG, GFP_KERNEL); |
9732 | } | 9736 | } |
9733 | 9737 | ||
9734 | static int nl80211_add_scan_req(struct sk_buff *msg, | 9738 | static int nl80211_add_scan_req(struct sk_buff *msg, |
@@ -9763,8 +9767,9 @@ static int nl80211_add_scan_req(struct sk_buff *msg, | |||
9763 | nla_put(msg, NL80211_ATTR_IE, req->ie_len, req->ie)) | 9767 | nla_put(msg, NL80211_ATTR_IE, req->ie_len, req->ie)) |
9764 | goto nla_put_failure; | 9768 | goto nla_put_failure; |
9765 | 9769 | ||
9766 | if (req->flags) | 9770 | if (req->flags && |
9767 | nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, req->flags); | 9771 | nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, req->flags)) |
9772 | goto nla_put_failure; | ||
9768 | 9773 | ||
9769 | return 0; | 9774 | return 0; |
9770 | nla_put_failure: | 9775 | nla_put_failure: |
@@ -9837,8 +9842,8 @@ void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, | |||
9837 | return; | 9842 | return; |
9838 | } | 9843 | } |
9839 | 9844 | ||
9840 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 9845 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
9841 | nl80211_scan_mcgrp.id, GFP_KERNEL); | 9846 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
9842 | } | 9847 | } |
9843 | 9848 | ||
9844 | void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, | 9849 | void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, |
@@ -9856,8 +9861,8 @@ void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, | |||
9856 | return; | 9861 | return; |
9857 | } | 9862 | } |
9858 | 9863 | ||
9859 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 9864 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
9860 | nl80211_scan_mcgrp.id, GFP_KERNEL); | 9865 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
9861 | } | 9866 | } |
9862 | 9867 | ||
9863 | void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, | 9868 | void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, |
@@ -9875,8 +9880,8 @@ void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, | |||
9875 | return; | 9880 | return; |
9876 | } | 9881 | } |
9877 | 9882 | ||
9878 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 9883 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
9879 | nl80211_scan_mcgrp.id, GFP_KERNEL); | 9884 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
9880 | } | 9885 | } |
9881 | 9886 | ||
9882 | void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, | 9887 | void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, |
@@ -9894,8 +9899,8 @@ void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, | |||
9894 | return; | 9899 | return; |
9895 | } | 9900 | } |
9896 | 9901 | ||
9897 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 9902 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
9898 | nl80211_scan_mcgrp.id, GFP_KERNEL); | 9903 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
9899 | } | 9904 | } |
9900 | 9905 | ||
9901 | void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, | 9906 | void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, |
@@ -9912,8 +9917,8 @@ void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, | |||
9912 | return; | 9917 | return; |
9913 | } | 9918 | } |
9914 | 9919 | ||
9915 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 9920 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
9916 | nl80211_scan_mcgrp.id, GFP_KERNEL); | 9921 | NL80211_MCGRP_SCAN, GFP_KERNEL); |
9917 | } | 9922 | } |
9918 | 9923 | ||
9919 | /* | 9924 | /* |
@@ -9967,8 +9972,8 @@ void nl80211_send_reg_change_event(struct regulatory_request *request) | |||
9967 | genlmsg_end(msg, hdr); | 9972 | genlmsg_end(msg, hdr); |
9968 | 9973 | ||
9969 | rcu_read_lock(); | 9974 | rcu_read_lock(); |
9970 | genlmsg_multicast_allns(msg, 0, nl80211_regulatory_mcgrp.id, | 9975 | genlmsg_multicast_allns(&nl80211_fam, msg, 0, |
9971 | GFP_ATOMIC); | 9976 | NL80211_MCGRP_REGULATORY, GFP_ATOMIC); |
9972 | rcu_read_unlock(); | 9977 | rcu_read_unlock(); |
9973 | 9978 | ||
9974 | return; | 9979 | return; |
@@ -10003,8 +10008,8 @@ static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, | |||
10003 | 10008 | ||
10004 | genlmsg_end(msg, hdr); | 10009 | genlmsg_end(msg, hdr); |
10005 | 10010 | ||
10006 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10011 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10007 | nl80211_mlme_mcgrp.id, gfp); | 10012 | NL80211_MCGRP_MLME, gfp); |
10008 | return; | 10013 | return; |
10009 | 10014 | ||
10010 | nla_put_failure: | 10015 | nla_put_failure: |
@@ -10091,8 +10096,8 @@ static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev, | |||
10091 | 10096 | ||
10092 | genlmsg_end(msg, hdr); | 10097 | genlmsg_end(msg, hdr); |
10093 | 10098 | ||
10094 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10099 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10095 | nl80211_mlme_mcgrp.id, gfp); | 10100 | NL80211_MCGRP_MLME, gfp); |
10096 | return; | 10101 | return; |
10097 | 10102 | ||
10098 | nla_put_failure: | 10103 | nla_put_failure: |
@@ -10147,8 +10152,8 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, | |||
10147 | 10152 | ||
10148 | genlmsg_end(msg, hdr); | 10153 | genlmsg_end(msg, hdr); |
10149 | 10154 | ||
10150 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10155 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10151 | nl80211_mlme_mcgrp.id, gfp); | 10156 | NL80211_MCGRP_MLME, gfp); |
10152 | return; | 10157 | return; |
10153 | 10158 | ||
10154 | nla_put_failure: | 10159 | nla_put_failure: |
@@ -10186,8 +10191,8 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev, | |||
10186 | 10191 | ||
10187 | genlmsg_end(msg, hdr); | 10192 | genlmsg_end(msg, hdr); |
10188 | 10193 | ||
10189 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10194 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10190 | nl80211_mlme_mcgrp.id, gfp); | 10195 | NL80211_MCGRP_MLME, gfp); |
10191 | return; | 10196 | return; |
10192 | 10197 | ||
10193 | nla_put_failure: | 10198 | nla_put_failure: |
@@ -10224,8 +10229,8 @@ void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, | |||
10224 | 10229 | ||
10225 | genlmsg_end(msg, hdr); | 10230 | genlmsg_end(msg, hdr); |
10226 | 10231 | ||
10227 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10232 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10228 | nl80211_mlme_mcgrp.id, GFP_KERNEL); | 10233 | NL80211_MCGRP_MLME, GFP_KERNEL); |
10229 | return; | 10234 | return; |
10230 | 10235 | ||
10231 | nla_put_failure: | 10236 | nla_put_failure: |
@@ -10258,8 +10263,8 @@ void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, | |||
10258 | 10263 | ||
10259 | genlmsg_end(msg, hdr); | 10264 | genlmsg_end(msg, hdr); |
10260 | 10265 | ||
10261 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10266 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10262 | nl80211_mlme_mcgrp.id, gfp); | 10267 | NL80211_MCGRP_MLME, gfp); |
10263 | return; | 10268 | return; |
10264 | 10269 | ||
10265 | nla_put_failure: | 10270 | nla_put_failure: |
@@ -10299,8 +10304,8 @@ void cfg80211_notify_new_peer_candidate(struct net_device *dev, const u8 *addr, | |||
10299 | 10304 | ||
10300 | genlmsg_end(msg, hdr); | 10305 | genlmsg_end(msg, hdr); |
10301 | 10306 | ||
10302 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10307 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10303 | nl80211_mlme_mcgrp.id, gfp); | 10308 | NL80211_MCGRP_MLME, gfp); |
10304 | return; | 10309 | return; |
10305 | 10310 | ||
10306 | nla_put_failure: | 10311 | nla_put_failure: |
@@ -10338,8 +10343,8 @@ void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, | |||
10338 | 10343 | ||
10339 | genlmsg_end(msg, hdr); | 10344 | genlmsg_end(msg, hdr); |
10340 | 10345 | ||
10341 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10346 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10342 | nl80211_mlme_mcgrp.id, gfp); | 10347 | NL80211_MCGRP_MLME, gfp); |
10343 | return; | 10348 | return; |
10344 | 10349 | ||
10345 | nla_put_failure: | 10350 | nla_put_failure: |
@@ -10391,8 +10396,8 @@ void nl80211_send_beacon_hint_event(struct wiphy *wiphy, | |||
10391 | genlmsg_end(msg, hdr); | 10396 | genlmsg_end(msg, hdr); |
10392 | 10397 | ||
10393 | rcu_read_lock(); | 10398 | rcu_read_lock(); |
10394 | genlmsg_multicast_allns(msg, 0, nl80211_regulatory_mcgrp.id, | 10399 | genlmsg_multicast_allns(&nl80211_fam, msg, 0, |
10395 | GFP_ATOMIC); | 10400 | NL80211_MCGRP_REGULATORY, GFP_ATOMIC); |
10396 | rcu_read_unlock(); | 10401 | rcu_read_unlock(); |
10397 | 10402 | ||
10398 | return; | 10403 | return; |
@@ -10437,8 +10442,8 @@ static void nl80211_send_remain_on_chan_event( | |||
10437 | 10442 | ||
10438 | genlmsg_end(msg, hdr); | 10443 | genlmsg_end(msg, hdr); |
10439 | 10444 | ||
10440 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10445 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10441 | nl80211_mlme_mcgrp.id, gfp); | 10446 | NL80211_MCGRP_MLME, gfp); |
10442 | return; | 10447 | return; |
10443 | 10448 | ||
10444 | nla_put_failure: | 10449 | nla_put_failure: |
@@ -10492,8 +10497,8 @@ void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, | |||
10492 | return; | 10497 | return; |
10493 | } | 10498 | } |
10494 | 10499 | ||
10495 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10500 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10496 | nl80211_mlme_mcgrp.id, gfp); | 10501 | NL80211_MCGRP_MLME, gfp); |
10497 | } | 10502 | } |
10498 | EXPORT_SYMBOL(cfg80211_new_sta); | 10503 | EXPORT_SYMBOL(cfg80211_new_sta); |
10499 | 10504 | ||
@@ -10522,8 +10527,8 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp) | |||
10522 | 10527 | ||
10523 | genlmsg_end(msg, hdr); | 10528 | genlmsg_end(msg, hdr); |
10524 | 10529 | ||
10525 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10530 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10526 | nl80211_mlme_mcgrp.id, gfp); | 10531 | NL80211_MCGRP_MLME, gfp); |
10527 | return; | 10532 | return; |
10528 | 10533 | ||
10529 | nla_put_failure: | 10534 | nla_put_failure: |
@@ -10558,8 +10563,8 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr, | |||
10558 | 10563 | ||
10559 | genlmsg_end(msg, hdr); | 10564 | genlmsg_end(msg, hdr); |
10560 | 10565 | ||
10561 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10566 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10562 | nl80211_mlme_mcgrp.id, gfp); | 10567 | NL80211_MCGRP_MLME, gfp); |
10563 | return; | 10568 | return; |
10564 | 10569 | ||
10565 | nla_put_failure: | 10570 | nla_put_failure: |
@@ -10720,8 +10725,8 @@ void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie, | |||
10720 | 10725 | ||
10721 | genlmsg_end(msg, hdr); | 10726 | genlmsg_end(msg, hdr); |
10722 | 10727 | ||
10723 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10728 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10724 | nl80211_mlme_mcgrp.id, gfp); | 10729 | NL80211_MCGRP_MLME, gfp); |
10725 | return; | 10730 | return; |
10726 | 10731 | ||
10727 | nla_put_failure: | 10732 | nla_put_failure: |
@@ -10769,8 +10774,8 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev, | |||
10769 | 10774 | ||
10770 | genlmsg_end(msg, hdr); | 10775 | genlmsg_end(msg, hdr); |
10771 | 10776 | ||
10772 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10777 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10773 | nl80211_mlme_mcgrp.id, gfp); | 10778 | NL80211_MCGRP_MLME, gfp); |
10774 | return; | 10779 | return; |
10775 | 10780 | ||
10776 | nla_put_failure: | 10781 | nla_put_failure: |
@@ -10814,8 +10819,8 @@ static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, | |||
10814 | 10819 | ||
10815 | genlmsg_end(msg, hdr); | 10820 | genlmsg_end(msg, hdr); |
10816 | 10821 | ||
10817 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10822 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10818 | nl80211_mlme_mcgrp.id, gfp); | 10823 | NL80211_MCGRP_MLME, gfp); |
10819 | return; | 10824 | return; |
10820 | 10825 | ||
10821 | nla_put_failure: | 10826 | nla_put_failure: |
@@ -10872,8 +10877,8 @@ nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev, | |||
10872 | 10877 | ||
10873 | genlmsg_end(msg, hdr); | 10878 | genlmsg_end(msg, hdr); |
10874 | 10879 | ||
10875 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10880 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10876 | nl80211_mlme_mcgrp.id, gfp); | 10881 | NL80211_MCGRP_MLME, gfp); |
10877 | return; | 10882 | return; |
10878 | 10883 | ||
10879 | nla_put_failure: | 10884 | nla_put_failure: |
@@ -10919,8 +10924,8 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, | |||
10919 | 10924 | ||
10920 | genlmsg_end(msg, hdr); | 10925 | genlmsg_end(msg, hdr); |
10921 | 10926 | ||
10922 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 10927 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10923 | nl80211_mlme_mcgrp.id, gfp); | 10928 | NL80211_MCGRP_MLME, gfp); |
10924 | return; | 10929 | return; |
10925 | 10930 | ||
10926 | nla_put_failure: | 10931 | nla_put_failure: |
@@ -10993,8 +10998,8 @@ void cfg80211_cqm_txe_notify(struct net_device *dev, | |||
10993 | 10998 | ||
10994 | genlmsg_end(msg, hdr); | 10999 | genlmsg_end(msg, hdr); |
10995 | 11000 | ||
10996 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11001 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
10997 | nl80211_mlme_mcgrp.id, gfp); | 11002 | NL80211_MCGRP_MLME, gfp); |
10998 | return; | 11003 | return; |
10999 | 11004 | ||
11000 | nla_put_failure: | 11005 | nla_put_failure: |
@@ -11042,8 +11047,8 @@ nl80211_radar_notify(struct cfg80211_registered_device *rdev, | |||
11042 | 11047 | ||
11043 | genlmsg_end(msg, hdr); | 11048 | genlmsg_end(msg, hdr); |
11044 | 11049 | ||
11045 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11050 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
11046 | nl80211_mlme_mcgrp.id, gfp); | 11051 | NL80211_MCGRP_MLME, gfp); |
11047 | return; | 11052 | return; |
11048 | 11053 | ||
11049 | nla_put_failure: | 11054 | nla_put_failure: |
@@ -11089,8 +11094,8 @@ void cfg80211_cqm_pktloss_notify(struct net_device *dev, | |||
11089 | 11094 | ||
11090 | genlmsg_end(msg, hdr); | 11095 | genlmsg_end(msg, hdr); |
11091 | 11096 | ||
11092 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11097 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
11093 | nl80211_mlme_mcgrp.id, gfp); | 11098 | NL80211_MCGRP_MLME, gfp); |
11094 | return; | 11099 | return; |
11095 | 11100 | ||
11096 | nla_put_failure: | 11101 | nla_put_failure: |
@@ -11129,8 +11134,8 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr, | |||
11129 | 11134 | ||
11130 | genlmsg_end(msg, hdr); | 11135 | genlmsg_end(msg, hdr); |
11131 | 11136 | ||
11132 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11137 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
11133 | nl80211_mlme_mcgrp.id, gfp); | 11138 | NL80211_MCGRP_MLME, gfp); |
11134 | return; | 11139 | return; |
11135 | 11140 | ||
11136 | nla_put_failure: | 11141 | nla_put_failure: |
@@ -11220,6 +11225,8 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev, | |||
11220 | struct nlattr *reasons; | 11225 | struct nlattr *reasons; |
11221 | 11226 | ||
11222 | reasons = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); | 11227 | reasons = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); |
11228 | if (!reasons) | ||
11229 | goto free_msg; | ||
11223 | 11230 | ||
11224 | if (wakeup->disconnect && | 11231 | if (wakeup->disconnect && |
11225 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) | 11232 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) |
@@ -11245,16 +11252,18 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev, | |||
11245 | wakeup->pattern_idx)) | 11252 | wakeup->pattern_idx)) |
11246 | goto free_msg; | 11253 | goto free_msg; |
11247 | 11254 | ||
11248 | if (wakeup->tcp_match) | 11255 | if (wakeup->tcp_match && |
11249 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH); | 11256 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH)) |
11257 | goto free_msg; | ||
11250 | 11258 | ||
11251 | if (wakeup->tcp_connlost) | 11259 | if (wakeup->tcp_connlost && |
11252 | nla_put_flag(msg, | 11260 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST)) |
11253 | NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST); | 11261 | goto free_msg; |
11254 | 11262 | ||
11255 | if (wakeup->tcp_nomoretokens) | 11263 | if (wakeup->tcp_nomoretokens && |
11256 | nla_put_flag(msg, | 11264 | nla_put_flag(msg, |
11257 | NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS); | 11265 | NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS)) |
11266 | goto free_msg; | ||
11258 | 11267 | ||
11259 | if (wakeup->packet) { | 11268 | if (wakeup->packet) { |
11260 | u32 pkt_attr = NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211; | 11269 | u32 pkt_attr = NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211; |
@@ -11281,8 +11290,8 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev, | |||
11281 | 11290 | ||
11282 | genlmsg_end(msg, hdr); | 11291 | genlmsg_end(msg, hdr); |
11283 | 11292 | ||
11284 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11293 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
11285 | nl80211_mlme_mcgrp.id, gfp); | 11294 | NL80211_MCGRP_MLME, gfp); |
11286 | return; | 11295 | return; |
11287 | 11296 | ||
11288 | free_msg: | 11297 | free_msg: |
@@ -11323,8 +11332,8 @@ void cfg80211_tdls_oper_request(struct net_device *dev, const u8 *peer, | |||
11323 | 11332 | ||
11324 | genlmsg_end(msg, hdr); | 11333 | genlmsg_end(msg, hdr); |
11325 | 11334 | ||
11326 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11335 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
11327 | nl80211_mlme_mcgrp.id, gfp); | 11336 | NL80211_MCGRP_MLME, gfp); |
11328 | return; | 11337 | return; |
11329 | 11338 | ||
11330 | nla_put_failure: | 11339 | nla_put_failure: |
@@ -11390,24 +11399,29 @@ void cfg80211_ft_event(struct net_device *netdev, | |||
11390 | return; | 11399 | return; |
11391 | 11400 | ||
11392 | hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FT_EVENT); | 11401 | hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FT_EVENT); |
11393 | if (!hdr) { | 11402 | if (!hdr) |
11394 | nlmsg_free(msg); | 11403 | goto out; |
11395 | return; | ||
11396 | } | ||
11397 | 11404 | ||
11398 | nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); | 11405 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || |
11399 | nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); | 11406 | nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || |
11400 | nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, ft_event->target_ap); | 11407 | nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, ft_event->target_ap)) |
11401 | if (ft_event->ies) | 11408 | goto out; |
11402 | nla_put(msg, NL80211_ATTR_IE, ft_event->ies_len, ft_event->ies); | 11409 | |
11403 | if (ft_event->ric_ies) | 11410 | if (ft_event->ies && |
11404 | nla_put(msg, NL80211_ATTR_IE_RIC, ft_event->ric_ies_len, | 11411 | nla_put(msg, NL80211_ATTR_IE, ft_event->ies_len, ft_event->ies)) |
11405 | ft_event->ric_ies); | 11412 | goto out; |
11413 | if (ft_event->ric_ies && | ||
11414 | nla_put(msg, NL80211_ATTR_IE_RIC, ft_event->ric_ies_len, | ||
11415 | ft_event->ric_ies)) | ||
11416 | goto out; | ||
11406 | 11417 | ||
11407 | genlmsg_end(msg, hdr); | 11418 | genlmsg_end(msg, hdr); |
11408 | 11419 | ||
11409 | genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, | 11420 | genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, |
11410 | nl80211_mlme_mcgrp.id, GFP_KERNEL); | 11421 | NL80211_MCGRP_MLME, GFP_KERNEL); |
11422 | return; | ||
11423 | out: | ||
11424 | nlmsg_free(msg); | ||
11411 | } | 11425 | } |
11412 | EXPORT_SYMBOL(cfg80211_ft_event); | 11426 | EXPORT_SYMBOL(cfg80211_ft_event); |
11413 | 11427 | ||
@@ -11456,33 +11470,11 @@ int nl80211_init(void) | |||
11456 | { | 11470 | { |
11457 | int err; | 11471 | int err; |
11458 | 11472 | ||
11459 | err = genl_register_family_with_ops(&nl80211_fam, | 11473 | err = genl_register_family_with_ops_groups(&nl80211_fam, nl80211_ops, |
11460 | nl80211_ops, ARRAY_SIZE(nl80211_ops)); | 11474 | nl80211_mcgrps); |
11461 | if (err) | 11475 | if (err) |
11462 | return err; | 11476 | return err; |
11463 | 11477 | ||
11464 | err = genl_register_mc_group(&nl80211_fam, &nl80211_config_mcgrp); | ||
11465 | if (err) | ||
11466 | goto err_out; | ||
11467 | |||
11468 | err = genl_register_mc_group(&nl80211_fam, &nl80211_scan_mcgrp); | ||
11469 | if (err) | ||
11470 | goto err_out; | ||
11471 | |||
11472 | err = genl_register_mc_group(&nl80211_fam, &nl80211_regulatory_mcgrp); | ||
11473 | if (err) | ||
11474 | goto err_out; | ||
11475 | |||
11476 | err = genl_register_mc_group(&nl80211_fam, &nl80211_mlme_mcgrp); | ||
11477 | if (err) | ||
11478 | goto err_out; | ||
11479 | |||
11480 | #ifdef CONFIG_NL80211_TESTMODE | ||
11481 | err = genl_register_mc_group(&nl80211_fam, &nl80211_testmode_mcgrp); | ||
11482 | if (err) | ||
11483 | goto err_out; | ||
11484 | #endif | ||
11485 | |||
11486 | err = netlink_register_notifier(&nl80211_netlink_notifier); | 11478 | err = netlink_register_notifier(&nl80211_netlink_notifier); |
11487 | if (err) | 11479 | if (err) |
11488 | goto err_out; | 11480 | goto err_out; |
diff --git a/net/wireless/sysfs.h b/net/wireless/sysfs.h index 65acbebd3711..b533ed71daff 100644 --- a/net/wireless/sysfs.h +++ b/net/wireless/sysfs.h | |||
@@ -1,8 +1,8 @@ | |||
1 | #ifndef __WIRELESS_SYSFS_H | 1 | #ifndef __WIRELESS_SYSFS_H |
2 | #define __WIRELESS_SYSFS_H | 2 | #define __WIRELESS_SYSFS_H |
3 | 3 | ||
4 | extern int wiphy_sysfs_init(void); | 4 | int wiphy_sysfs_init(void); |
5 | extern void wiphy_sysfs_exit(void); | 5 | void wiphy_sysfs_exit(void); |
6 | 6 | ||
7 | extern struct class ieee80211_class; | 7 | extern struct class ieee80211_class; |
8 | 8 | ||