DFS Development
This page recaps the approach to integrate DFS into Linux wireless presented and discussed at the Vancouver-2011 summit.
It is designated to serve as a discussion and documentation base during the concept and design phase. RLAN chipset manufacturers interested in getting their devices' supported by the proposed DFS module are invited to participate in this joint effort and assure that the taken approach will support their devices.
Participant | Company | Function | Contribution |
Kathy | Qualcomm/Atheros | Manager | coordinate Atheros' contribution |
Felix | Various | Developer | support design and implementing management component |
Assaf | TI | Manager | coordinate TI's contribution |
Eyal | TI | Developer | integrate TI's management module |
Ohad | TI | Developer | ? |
Zefir | Neratec AG | Developer | coordinate detector design, implement pattern detector for ETSI radars |
? | Intel | ? | |
? | Broadcom | ? | |
? | Ralink | ? | |
? | … | ? | |
? | ? | Developer | implement pattern detector for FCC radars |
? | ? | Developer | implement pattern detector for MKK radars |
? | … | ? |
To operate in DFS bands, RLAN master devices must not operate on channels that are used by radar devices. Therefore, they must be able to
The DFS management functionality is part of 802.11h, whereas the detection is outside the scope of the standard and specified by the regulatory bodies.
To prevent interferences with radar devices, RLAN master devices must
Radar patterns are defined as a series of pulses, where each pulse is defined by its
Two types of detector devices are supported by the DFS module:
The pattern matching algorithms to detect defined radar types must consider
The regulatory bodies define requirements for sensitivity only, i.e. an extremely sensitive detector might interpret any single pulse as radar and would perfectly pass DFS certification - with being perfectly useless for operations in DFS bands.
This renders the core challenge for pattern matching algorithms to be well balanced between sensitivity, tolerance and computational complexity. Note that by that principle there is no One Fits All detector: while the home PC has enough computational power to use some generic algorithms for indoor use, low-power embedded system working in harsh environments need less complex and differently balanced ones.
TBD
TBD
The chosen detector architecture provides support for both DFS device types. For type 2 devices it maintains flexibility for customized detectors by splitting radar detection into driver specific pulse detection and common pattern matching modules.
HW based detector drivers report the occurrence of a radar pattern on a channel. A radar event is passed to mac80211 and is forwarded to hostapd. hostapd handles DFS channel states based on the radar events and manages the spectrum (including initiating CSA, moving channel, etc.).
Type 2 devices detect pulse events to be matched for given patterns in SW. Pulse events are sent to mac80211 and fed to the wiphy's pattern detector instance. In case of a pattern match, mac80211 reports a radar event to hostapd. The interface to and processing in hostapd are identical to the previous case.
The common pattern detector available for mac80211 might not suffice requirements for specific environments that require a re-balance between sensitivity, tolerance, and complexity. Those specific detectors with custom usability can be implemented in user space. In those use cases mac80211 forwards the pulse events received from the driver to hostapd, which feeds the wiphy's pattern detector instance. The management functionality in hostapd after a radar detection remains unchanged.
#define DFS_DOMAIN_FCC 0 #define DFS_DOMAIN_MKK 1 #define DFS_DOMAIN_ETSI 2 enum dfs_capabilities { DFS_CAP_PULSE_DETECT_FCC = BIT(DFS_DOMAIN_FCC), DFS_CAP_PULSE_DETECT_MKK = BIT(DFS_DOMAIN_MKK), DFS_CAP_PULSE_DETECT_ETSI = BIT(DFS_DOMAIN_ETSI), DFS_CAP_RADAR_DETECT_FCC = BIT(8 + DFS_DOMAIN_FCC), DFS_CAP_RADAR_DETECT_MKK = BIT(8 + DFS_DOMAIN_MKK), DFS_CAP_RADAR_DETECT_ETSI = BIT(8 + DFS_DOMAIN_ETSI), };
/** * struct dfs_pulse_event - pulses detected by driver * * @ts: monotonic time stamp for start of pulse in [ns] * @width: pulse width in [ns] * @freq: channel frequency in [MHz] * @rssi: rssi value for the given pulse * @dfs_domain: DFS domain * */ struct dfs_pulse_event { u64 ts; u32 width; u16 freq; u8 rssi; u8 dfs_domain; };
Reporting pulses from driver to mac80211:
extern void ieee80211_add_radar_pulse(struct dfs_pulse_event *pulse);
struct dfs_radar_event { u16 freq; u8 dfs_domain; };
Reporting radars from driver to mac80211:
extern void ieee80211_radar_detected(struct dfs_radar_event *radar);