-
Bridge WiFi parameters (band, channel, htmode) are selected dynamically via
cross-endpoint negotiation. The scripts/wifi_negotiate.py module receives
capabilities from both AP and STA endpoints and computes the optimal shared
config. NEVER hardcode band/channel for bridge containers.
-
The negotiation play in site.yml runs between provision and configure:
- Collects capabilities from each bridge container via
wifi_setup.sh capabilities
- Runs
wifi_negotiate.py on the controller to compute shared band/channel/htmode
- Stores results as
wifi_negotiated_* facts on bridge hosts
- The configure role reads these facts; falls back to
auto for standalone scenarios
-
Intel AX210 iwlwifi self-managed regulatory (LAR) blocks 5GHz AP mode
(PASSIVE-SCAN on all 5GHz channels). The lar_disable module parameter does
NOT exist in kernel 6.17+. However, 6GHz channels ARE AP-capable with
self-managed regulatory. A sysfs rebind (tasks/sysfs_wifi_rebind.yml)
in proxmox_pci_passthrough reinitializes the firmware regulatory state,
enabling AP-capable 6GHz channels. NEVER use modprobe -r — use sysfs
unbind + PCI rescan + explicit bind instead.
-
wifi_setup.sh now has a capabilities subcommand that outputs structured
KEY=value data: supported bands, AP-capable channels, DFS channels, maximum
widths, HE/VHT support, WDS support, and WPA3 support. This output is parsed
by wifi_negotiate.py via parse_capabilities().
-
Band priority: 6GHz > 5GHz > 2.4GHz. The negotiation selects the highest
common band with AP-capable channels on both endpoints. 2.4GHz width is
capped at 40MHz. Non-DFS channels are preferred.
-
Performance tuning is applied automatically during wifi_setup.sh configure:
WiFi power save disabled, coexistence scanning disabled (noscan=1), DTIM
period set to 3 for WDS. These are critical for dedicated backhaul links.
-
Previous bug: AX210 5GHz AP mode failed with PASSIVE-SCAN channels (LAR).
5GHz remains blocked by self-managed regulatory. Negotiation correctly falls
through to 6GHz (AP-capable) or 2.4GHz (always AP-capable). Module reload
enables 6GHz AP channels on AX210.
-
Mesh containers (non-bridge) auto-detect correctly because their hardware
(Centrino N 105, etc.) typically only supports 2.4GHz. The wifi_setup.sh
dynamic probing handles this without negotiation.
Every broadcast frame (ARP, DHCP, mDNS) loops infinitely, saturating the entire household LAN and WiFi. STP on OpenWrt's br-lan does NOT prevent this because the loop spans multiple external bridges (two Proxmox vmbr0 instances + physical switch) that don't participate in the same STP domain.
This ensures no L2 loop: the WiFi link is the ONLY path between vmbr0 (via bridge-1) and vmbr1 (via bridge-2).