diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index da485346..956c7935 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -15,6 +15,8 @@ All notable changes to the project are documented in this file. backhaul between each other without cabling - Add band steering for dual-band access points, nudging dual-band clients onto the faster 5/6 GHz band +- Add `legacy-rates` option to re-enable 802.11b rates on 2.4 GHz for + old IoT devices (disabled by default) [wifi]: wifi.md diff --git a/doc/wifi.md b/doc/wifi.md index 14b4e18d..01fad606 100644 --- a/doc/wifi.md +++ b/doc/wifi.md @@ -156,6 +156,11 @@ admin@example:/config/hardware/component/radio0/wifi-radio/> leave - `channel-width`: AP channel bandwidth. Supported values are `auto`, `20MHz`, `40MHz`, `80MHz`, and `160MHz`. Wider channels require matching hardware, regulatory approval, and are only available on 5GHz/6GHz where supported. +- `legacy-rates`: Allow legacy 802.11b rates (1, 2, 5.5, 11 Mbps) on 2.4GHz + (default: disabled). Slow 802.11b clients consume excessive airtime and + degrade throughput for all stations, so the rates are normally suppressed. + Enable only when old 2.4GHz-only IoT devices need them to associate. No + effect on 5GHz/6GHz. - `probe-timeout`: Seconds to wait for PHY detection at boot (default: 0). Set to a non-zero value (e.g., 30) for USB WiFi dongles that are slow to initialize due to firmware loading @@ -165,6 +170,69 @@ admin@example:/config/hardware/component/radio0/wifi-radio/> leave > constraints and hardware capabilities. Channel width can now be set > explicitly for AP mode, or left at `auto` to let the driver choose. +### Bands and Channels + +Each band strikes a different balance between range and capacity. The +`country-code` decides which channels are legal in your location; the +lists below are the common allocations, and your regulatory domain may +allow fewer. + +**2.4 GHz** + +Channels 1-13 are available in most of the world, 1-11 in the US and +Canada, and 14 in Japan (802.11b only). At 20 MHz only three channels +avoid overlap: 1, 6, and 11. A 40 MHz channel takes up most of the +band, so it is seldom worth using here. + +Drawbacks: + +- This is the most crowded band. It is shared with Bluetooth, Zigbee, + cordless phones, microwave ovens, and most of the neighboring Wi-Fi. +- Narrow channels and constant contention hold real throughput well + below 5 and 6 GHz. +- The upside is range: 2.4 GHz reaches further and passes through walls + better, which keeps it useful for distant clients and 2.4 GHz-only + IoT devices. + +**5 GHz** + +UNII-1 (channels 36-48) and UNII-3 (149-165) need no radar checks. +UNII-2 (channels 52-64 and 100-144) shares spectrum with radar and +requires DFS. ETSI regions such as the EU do not include UNII-3, so the +only non-DFS 5 GHz channels there are 36-48. This band supports 20, 40, +80, and 160 MHz, so it is the one to use for wide, fast channels. + +Drawbacks: + +- Shorter range than 2.4 GHz, and a weaker signal through walls and + floors. +- A DFS channel must be monitored for radar for 60 seconds (up to 10 + minutes near some weather radars) before the AP may transmit, which + delays start-up. If radar appears later, the AP has to leave the + channel within 10 seconds and avoid it for 30 minutes, dropping + clients during the move. +- The widest 80 and 160 MHz channels almost always sit on DFS spectrum, + so the same radar rules apply to them. + +**6 GHz** + +The FCC regions open 59 channels (1, 5, 9 ... 233) across 5925-7125 MHz. +ETSI regions, including the EU, currently open only the lower part, +5945-6425 MHz (channels 1-93), for indoor use. Clients find networks on +the 15 Preferred Scanning Channels (5, 21, 37 ... 229) spaced every +80 MHz, and `auto` selects channel 37. There is no DFS in 6 GHz, so +there is no radar start-up delay. + +Drawbacks: + +- The shortest range and the weakest wall penetration of the three + bands. +- Only Wi-Fi 6E and newer clients can use it; older phones and IoT + devices cannot see the band at all. +- AP operation requires WPA3-Personal (SAE) with management frame + protection, so WPA2-only and open networks are rejected. +- Indoor power limits cap coverage further. + ### WiFi 6 Support WiFi 6 (802.11ax) is always enabled in AP mode on all bands, providing improved diff --git a/src/confd/src/hardware.c b/src/confd/src/hardware.c index 03eaed55..06629d36 100644 --- a/src/confd/src/hardware.c +++ b/src/confd/src/hardware.c @@ -871,11 +871,13 @@ static void wifi_gen_radio_config(FILE *hostapd, const char *radio_name, char ht_capab[512], vht_capab[512]; int chwidth = 0; /* 0=20/40, 1=80, 2=160 */ int ch = 0; + bool legacy_rates; country = lydx_get_cattr(radio_node, "country-code"); band = lydx_get_cattr(radio_node, "band"); channel = lydx_get_cattr(radio_node, "channel"); width = lydx_get_cattr(radio_node, "channel-width"); + legacy_rates = lydx_is_enabled(radio_node, "legacy-rates"); if (channel && strcmp(channel, "auto")) ch = atoi(channel); @@ -908,13 +910,18 @@ static void wifi_gen_radio_config(FILE *hostapd, const char *radio_name, fprintf(hostapd, "hw_mode=g\n"); /* - * Disable legacy 802.11b rates (1, 2, 5.5, 11 Mbps). - * Slow clients using these rates consume excessive - * airtime, degrading performance for all clients. + * Disable legacy 802.11b rates (1, 2, 5.5, 11 Mbps) + * unless explicitly enabled via 'legacy-rates'. Slow + * 802.11b clients consume excessive airtime, degrading + * performance for all clients. When enabled, hostapd + * keeps its default rate set so old 2.4GHz-only IoT + * devices can still associate. * Rates in 0.5 Mbps units: 60=6M, 90=9M, etc. */ - fprintf(hostapd, "supported_rates=60 90 120 180 240 360 480 540\n"); - fprintf(hostapd, "basic_rates=60 120 240\n"); + if (!legacy_rates) { + fprintf(hostapd, "supported_rates=60 90 120 180 240 360 480 540\n"); + fprintf(hostapd, "basic_rates=60 120 240\n"); + } } else if (!strcmp(band, "5GHz") || !strcmp(band, "6GHz")) { /* hw_mode=a: 5GHz/6GHz with 802.11a (OFDM) as baseline */ fprintf(hostapd, "hw_mode=a\n"); diff --git a/src/confd/yang/confd/infix-hardware.yang b/src/confd/yang/confd/infix-hardware.yang index 930d1229..b73f9a68 100644 --- a/src/confd/yang/confd/infix-hardware.yang +++ b/src/confd/yang/confd/infix-hardware.yang @@ -345,6 +345,20 @@ module infix-hardware { Only applicable in Access Point mode."; } + leaf legacy-rates { + type boolean; + default false; + description + "Allow legacy 802.11b rates (1, 2, 5.5, 11 Mbps) on 2.4 GHz. + + Disabled by default: slow 802.11b clients consume excessive + airtime and degrade throughput for all associated stations. + Enable only when old 2.4 GHz-only IoT devices require these + rates to associate. + + No effect on 5 GHz or 6 GHz radios."; + } + leaf probe-timeout { type uint8; description