aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/cfg80211.h
diff options
context:
space:
mode:
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>2013-02-08 12:16:19 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-02-15 03:40:18 -0500
commit04f39047af2a6df64b763ea5a271db24879d0391 (patch)
tree883a946e25f18e27abad2ed487a4ed4c88ff349c /include/net/cfg80211.h
parent2a0e047ed62f20664005881b8e7f9328f910316a (diff)
nl80211/cfg80211: add radar detection command/event
Add new NL80211_CMD_RADAR_DETECT, which starts the Channel Availability Check (CAC). This command will also notify the usermode about events (CAC finished, CAC aborted, radar detected, NOP finished). Once radar detection has started it should continuously monitor for radars as long as the channel is active. This patch enables DFS for AP mode in nl80211/cfg80211. Based on original patch by Victor Goldenshtein <victorg@ti.com> Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> [remove WIPHY_FLAG_HAS_RADAR_DETECT again -- my mistake] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include/net/cfg80211.h')
-rw-r--r--include/net/cfg80211.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 7e6569e1f16f..ee11a3db730b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -114,6 +114,9 @@ enum ieee80211_channel_flags {
114#define IEEE80211_CHAN_NO_HT40 \ 114#define IEEE80211_CHAN_NO_HT40 \
115 (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS) 115 (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
116 116
117#define IEEE80211_DFS_MIN_CAC_TIME_MS 60000
118#define IEEE80211_DFS_MIN_NOP_TIME_MS (30 * 60 * 1000)
119
117/** 120/**
118 * struct ieee80211_channel - channel definition 121 * struct ieee80211_channel - channel definition
119 * 122 *
@@ -134,6 +137,9 @@ enum ieee80211_channel_flags {
134 * to enable this, this is useful only on 5 GHz band. 137 * to enable this, this is useful only on 5 GHz band.
135 * @orig_mag: internal use 138 * @orig_mag: internal use
136 * @orig_mpwr: internal use 139 * @orig_mpwr: internal use
140 * @dfs_state: current state of this channel. Only relevant if radar is required
141 * on this channel.
142 * @dfs_state_entered: timestamp (jiffies) when the dfs state was entered.
137 */ 143 */
138struct ieee80211_channel { 144struct ieee80211_channel {
139 enum ieee80211_band band; 145 enum ieee80211_band band;
@@ -146,6 +152,8 @@ struct ieee80211_channel {
146 bool beacon_found; 152 bool beacon_found;
147 u32 orig_flags; 153 u32 orig_flags;
148 int orig_mag, orig_mpwr; 154 int orig_mag, orig_mpwr;
155 enum nl80211_dfs_state dfs_state;
156 unsigned long dfs_state_entered;
149}; 157};
150 158
151/** 159/**
@@ -569,6 +577,7 @@ struct cfg80211_acl_data {
569 * @p2p_opp_ps: P2P opportunistic PS 577 * @p2p_opp_ps: P2P opportunistic PS
570 * @acl: ACL configuration used by the drivers which has support for 578 * @acl: ACL configuration used by the drivers which has support for
571 * MAC address based access control 579 * MAC address based access control
580 * @radar_required: set if radar detection is required
572 */ 581 */
573struct cfg80211_ap_settings { 582struct cfg80211_ap_settings {
574 struct cfg80211_chan_def chandef; 583 struct cfg80211_chan_def chandef;
@@ -586,6 +595,7 @@ struct cfg80211_ap_settings {
586 u8 p2p_ctwindow; 595 u8 p2p_ctwindow;
587 bool p2p_opp_ps; 596 bool p2p_opp_ps;
588 const struct cfg80211_acl_data *acl; 597 const struct cfg80211_acl_data *acl;
598 bool radar_required;
589}; 599};
590 600
591/** 601/**
@@ -1909,6 +1919,8 @@ struct cfg80211_gtk_rekey_data {
1909 * this new list replaces the existing one. Driver has to clear its ACL 1919 * this new list replaces the existing one. Driver has to clear its ACL
1910 * when number of MAC addresses entries is passed as 0. Drivers which 1920 * when number of MAC addresses entries is passed as 0. Drivers which
1911 * advertise the support for MAC based ACL have to implement this callback. 1921 * advertise the support for MAC based ACL have to implement this callback.
1922 *
1923 * @start_radar_detection: Start radar detection in the driver.
1912 */ 1924 */
1913struct cfg80211_ops { 1925struct cfg80211_ops {
1914 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); 1926 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
@@ -2132,6 +2144,10 @@ struct cfg80211_ops {
2132 2144
2133 int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev, 2145 int (*set_mac_acl)(struct wiphy *wiphy, struct net_device *dev,
2134 const struct cfg80211_acl_data *params); 2146 const struct cfg80211_acl_data *params);
2147
2148 int (*start_radar_detection)(struct wiphy *wiphy,
2149 struct net_device *dev,
2150 struct cfg80211_chan_def *chandef);
2135}; 2151};
2136 2152
2137/* 2153/*
@@ -2715,6 +2731,8 @@ struct cfg80211_cached_keys;
2715 * beacons, 0 when not valid 2731 * beacons, 0 when not valid
2716 * @address: The address for this device, valid only if @netdev is %NULL 2732 * @address: The address for this device, valid only if @netdev is %NULL
2717 * @p2p_started: true if this is a P2P Device that has been started 2733 * @p2p_started: true if this is a P2P Device that has been started
2734 * @cac_started: true if DFS channel availability check has been started
2735 * @cac_start_time: timestamp (jiffies) when the dfs state was entered.
2718 */ 2736 */
2719struct wireless_dev { 2737struct wireless_dev {
2720 struct wiphy *wiphy; 2738 struct wiphy *wiphy;
@@ -2766,6 +2784,9 @@ struct wireless_dev {
2766 2784
2767 u32 ap_unexpected_nlportid; 2785 u32 ap_unexpected_nlportid;
2768 2786
2787 bool cac_started;
2788 unsigned long cac_start_time;
2789
2769#ifdef CONFIG_CFG80211_WEXT 2790#ifdef CONFIG_CFG80211_WEXT
2770 /* wext data */ 2791 /* wext data */
2771 struct { 2792 struct {
@@ -3755,6 +3776,31 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
3755 gfp_t gfp); 3776 gfp_t gfp);
3756 3777
3757/** 3778/**
3779 * cfg80211_radar_event - radar detection event
3780 * @wiphy: the wiphy
3781 * @chandef: chandef for the current channel
3782 * @gfp: context flags
3783 *
3784 * This function is called when a radar is detected on the current chanenl.
3785 */
3786void cfg80211_radar_event(struct wiphy *wiphy,
3787 struct cfg80211_chan_def *chandef, gfp_t gfp);
3788
3789/**
3790 * cfg80211_cac_event - Channel availability check (CAC) event
3791 * @netdev: network device
3792 * @event: type of event
3793 * @gfp: context flags
3794 *
3795 * This function is called when a Channel availability check (CAC) is finished
3796 * or aborted. This must be called to notify the completion of a CAC process,
3797 * also by full-MAC drivers.
3798 */
3799void cfg80211_cac_event(struct net_device *netdev,
3800 enum nl80211_radar_event event, gfp_t gfp);
3801
3802
3803/**
3758 * cfg80211_cqm_pktloss_notify - notify userspace about packetloss to peer 3804 * cfg80211_cqm_pktloss_notify - notify userspace about packetloss to peer
3759 * @dev: network device 3805 * @dev: network device
3760 * @peer: peer's MAC address 3806 * @peer: peer's MAC address