aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJonathan Doron <jond@wizery.com>2014-12-15 12:26:00 -0500
committerJohannes Berg <johannes.berg@intel.com>2014-12-17 05:49:55 -0500
commitb0d7aa59592b4270531de5ce65dcf18338a2d98c (patch)
tree85d54dba5117fedd4d5b605be70ddbf8451d7838 /include
parentad30ca2c03cecfb1b0749874bdceead269542de6 (diff)
cfg80211: allow wiphy specific regdomain management
Add a new regulatory flag that allows a driver to manage regdomain changes/updates for its own wiphy. A self-managed wiphys only employs regulatory information obtained from the FW and driver and does not use other cfg80211 sources like beacon-hints, country-code IEs and hints from other devices on the same system. Conversely, a self-managed wiphy does not share its regulatory hints with other devices in the system. If a system contains several devices, one or more of which are self-managed, there might be contradictory regulatory settings between them. Usage of flag is generally discouraged. Only use it if the FW/driver is incompatible with non-locally originated hints. A new API lets the driver send a complete regdomain, to be applied on its wiphy only. After a wiphy-specific regdomain change takes place, usermode will get a new type of change notification. The regulatory core also takes care enforce regulatory restrictions, in case some interfaces are on forbidden channels. Signed-off-by: Jonathan Doron <jonathanx.doron@intel.com> Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Reviewed-by: Luis R. Rodriguez <mcgrof@suse.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/net/cfg80211.h14
-rw-r--r--include/net/regulatory.h19
-rw-r--r--include/uapi/linux/nl80211.h6
3 files changed, 39 insertions, 0 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 4ebb816241fa..4bc1fc9971a5 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -3808,6 +3808,20 @@ const u8 *cfg80211_find_vendor_ie(unsigned int oui, u8 oui_type,
3808int regulatory_hint(struct wiphy *wiphy, const char *alpha2); 3808int regulatory_hint(struct wiphy *wiphy, const char *alpha2);
3809 3809
3810/** 3810/**
3811 * regulatory_set_wiphy_regd - set regdom info for self managed drivers
3812 * @wiphy: the wireless device we want to process the regulatory domain on
3813 * @rd: the regulatory domain informatoin to use for this wiphy
3814 *
3815 * Set the regulatory domain information for self-managed wiphys, only they
3816 * may use this function. See %REGULATORY_WIPHY_SELF_MANAGED for more
3817 * information.
3818 *
3819 * Return: 0 on success. -EINVAL, -EPERM
3820 */
3821int regulatory_set_wiphy_regd(struct wiphy *wiphy,
3822 struct ieee80211_regdomain *rd);
3823
3824/**
3811 * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain 3825 * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain
3812 * @wiphy: the wireless device we want to process the regulatory domain on 3826 * @wiphy: the wireless device we want to process the regulatory domain on
3813 * @regd: the custom regulatory domain to use for this wiphy 3827 * @regd: the custom regulatory domain to use for this wiphy
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index b776d72d84be..ebc5a2ed8631 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -147,6 +147,24 @@ struct regulatory_request {
147 * NL80211_IFTYPE_P2P_CLIENT, NL80211_IFTYPE_P2P_GO, 147 * NL80211_IFTYPE_P2P_CLIENT, NL80211_IFTYPE_P2P_GO,
148 * NL80211_IFTYPE_P2P_DEVICE. The flag will be set by default if a device 148 * NL80211_IFTYPE_P2P_DEVICE. The flag will be set by default if a device
149 * includes any modes unsupported for enforcement checking. 149 * includes any modes unsupported for enforcement checking.
150 * @REGULATORY_WIPHY_SELF_MANAGED: for devices that employ wiphy-specific
151 * regdom management. These devices will ignore all regdom changes not
152 * originating from their own wiphy.
153 * A self-managed wiphys only employs regulatory information obtained from
154 * the FW and driver and does not use other cfg80211 sources like
155 * beacon-hints, country-code IEs and hints from other devices on the same
156 * system. Conversely, a self-managed wiphy does not share its regulatory
157 * hints with other devices in the system. If a system contains several
158 * devices, one or more of which are self-managed, there might be
159 * contradictory regulatory settings between them. Usage of flag is
160 * generally discouraged. Only use it if the FW/driver is incompatible
161 * with non-locally originated hints.
162 * This flag is incompatible with the flags: %REGULATORY_CUSTOM_REG,
163 * %REGULATORY_STRICT_REG, %REGULATORY_COUNTRY_IE_FOLLOW_POWER,
164 * %REGULATORY_COUNTRY_IE_IGNORE and %REGULATORY_DISABLE_BEACON_HINTS.
165 * Mixing any of the above flags with this flag will result in a failure
166 * to register the wiphy. This flag implies
167 * %REGULATORY_DISABLE_BEACON_HINTS and %REGULATORY_COUNTRY_IE_IGNORE.
150 */ 168 */
151enum ieee80211_regulatory_flags { 169enum ieee80211_regulatory_flags {
152 REGULATORY_CUSTOM_REG = BIT(0), 170 REGULATORY_CUSTOM_REG = BIT(0),
@@ -156,6 +174,7 @@ enum ieee80211_regulatory_flags {
156 REGULATORY_COUNTRY_IE_IGNORE = BIT(4), 174 REGULATORY_COUNTRY_IE_IGNORE = BIT(4),
157 REGULATORY_ENABLE_RELAX_NO_IR = BIT(5), 175 REGULATORY_ENABLE_RELAX_NO_IR = BIT(5),
158 REGULATORY_IGNORE_STALE_KICKOFF = BIT(6), 176 REGULATORY_IGNORE_STALE_KICKOFF = BIT(6),
177 REGULATORY_WIPHY_SELF_MANAGED = BIT(7),
159}; 178};
160 179
161struct ieee80211_freq_range { 180struct ieee80211_freq_range {
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 2d384d041224..fb58e654f523 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -782,6 +782,10 @@
782 * peer given by %NL80211_ATTR_MAC. Both peers must be on the base channel 782 * peer given by %NL80211_ATTR_MAC. Both peers must be on the base channel
783 * when this command completes. 783 * when this command completes.
784 * 784 *
785 * @NL80211_CMD_WIPHY_REG_CHANGE: Similar to %NL80211_CMD_REG_CHANGE, but used
786 * as an event to indicate changes for devices with wiphy-specific regdom
787 * management.
788 *
785 * @NL80211_CMD_MAX: highest used command number 789 * @NL80211_CMD_MAX: highest used command number
786 * @__NL80211_CMD_AFTER_LAST: internal use 790 * @__NL80211_CMD_AFTER_LAST: internal use
787 */ 791 */
@@ -966,6 +970,8 @@ enum nl80211_commands {
966 NL80211_CMD_TDLS_CHANNEL_SWITCH, 970 NL80211_CMD_TDLS_CHANNEL_SWITCH,
967 NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, 971 NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
968 972
973 NL80211_CMD_WIPHY_REG_CHANGE,
974
969 /* add new commands above here */ 975 /* add new commands above here */
970 976
971 /* used to define NL80211_CMD_MAX below */ 977 /* used to define NL80211_CMD_MAX below */