Intel AX210 AP mode?

G’day,

Anybody got Intel AX210 wifi working please? I’m trying to set them up in AP mode.

I don’t think this is actually a NixOS issue, more a Intel AX210 issue.

I’ve found a bunch of stuff related to this issue, but no solution :frowning:

https://bugzilla.kernel.org/show_bug.cgi?id=206469#c2

I’ve got a bunch of Intel AX210s

[das@l2:~]$ lspci | grep -i ax210
23:00.0 Network controller: Intel Corporation Wi-Fi 6E(802.11ax) AX210/AX1675* 2x2 [Typhoon Peak] (rev 1a)
41:00.0 Network controller: Intel Corporation Wi-Fi 6E(802.11ax) AX210/AX1675* 2x2 [Typhoon Peak] (rev 1a)
42:00.0 Network controller: Intel Corporation Wi-Fi 6E(802.11ax) AX210/AX1675* 2x2 [Typhoon Peak] (rev 1a)
61:00.0 Network controller: Intel Corporation Wi-Fi 6E(802.11ax) AX210/AX1675* 2x2 [Typhoon Peak] (rev 1a)

I have tried really hard to get these cards to use US regulatory wifi, but it’s stuck in DFS-UNSET.

[das@l2:~]$ iw reg get
global
country US: DFS-FCC
        (902 - 904 @ 2), (N/A, 30), (N/A)
        (904 - 920 @ 16), (N/A, 30), (N/A)
        (920 - 928 @ 8), (N/A, 30), (N/A)
        (2400 - 2472 @ 40), (N/A, 30), (N/A)
        (5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
        (5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
        (5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
        (5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
        (5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW, PASSIVE-SCAN
        (5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR, PASSIVE-SCAN
        (57240 - 71000 @ 2160), (N/A, 40), (N/A)

phy#3 (self-managed)
country 00: DFS-UNSET
        (2402 - 2437 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
        (2422 - 2462 @ 40), (6, 22), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ
        (2447 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
        (5170 - 5190 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5190 - 5210 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5210 - 5230 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5230 - 5250 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5250 - 5270 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5270 - 5290 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5290 - 5310 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5310 - 5330 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5490 - 5510 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5510 - 5530 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5530 - 5550 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5550 - 5570 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5570 - 5590 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5590 - 5610 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5610 - 5630 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5630 - 5650 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5650 - 5670 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5670 - 5690 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5690 - 5710 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5710 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5735 - 5755 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5755 - 5775 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5775 - 5795 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5795 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5815 - 5835 @ 40), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-80MHZ, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN

phy#2 (self-managed)
country 00: DFS-UNSET
        (2402 - 2437 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
        (2422 - 2462 @ 40), (6, 22), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ
        (2447 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
        (5170 - 5190 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5190 - 5210 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5210 - 5230 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5230 - 5250 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5250 - 5270 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5270 - 5290 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5290 - 5310 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5310 - 5330 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5490 - 5510 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5510 - 5530 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5530 - 5550 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5550 - 5570 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5570 - 5590 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5590 - 5610 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5610 - 5630 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5630 - 5650 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5650 - 5670 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5670 - 5690 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5690 - 5710 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5710 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5735 - 5755 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5755 - 5775 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5775 - 5795 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5795 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5815 - 5835 @ 40), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-80MHZ, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN

phy#1 (self-managed)
country 00: DFS-UNSET
        (2402 - 2437 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
        (2422 - 2462 @ 40), (6, 22), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ
        (2447 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
        (5170 - 5190 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5190 - 5210 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5210 - 5230 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5230 - 5250 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5250 - 5270 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5270 - 5290 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5290 - 5310 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5310 - 5330 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5490 - 5510 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5510 - 5530 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5530 - 5550 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5550 - 5570 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5570 - 5590 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5590 - 5610 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5610 - 5630 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5630 - 5650 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5650 - 5670 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5670 - 5690 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5690 - 5710 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5710 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5735 - 5755 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5755 - 5775 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5775 - 5795 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5795 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5815 - 5835 @ 40), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-80MHZ, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN

phy#0 (self-managed)
country 00: DFS-UNSET
        (2402 - 2437 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
        (2422 - 2462 @ 40), (6, 22), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ
        (2447 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
        (5170 - 5190 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5190 - 5210 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5210 - 5230 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5230 - 5250 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5250 - 5270 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5270 - 5290 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5290 - 5310 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5310 - 5330 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5490 - 5510 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5510 - 5530 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5530 - 5550 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5550 - 5570 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5570 - 5590 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5590 - 5610 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5610 - 5630 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-320MHZ, PASSIVE-SCAN
        (5630 - 5650 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-320MHZ, PASSIVE-SCAN
        (5650 - 5670 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5670 - 5690 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5690 - 5710 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5710 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5735 - 5755 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5755 - 5775 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5775 - 5795 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5795 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN
        (5815 - 5835 @ 40), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-80MHZ, NO-160MHZ, NO-320MHZ, PASSIVE-SCAN


[das@l2:~]$

Thanks,
Dave

flake.nix

#
# l2/flake.nix
#
{
  description = "l2 Flake";

  # https://nix.dev/manual/nix/2.24/command-ref/new-cli/nix3-flake.html#flake-inputs
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    # https://nixos-and-flakes.thiscute.world/nixos-with-flakes/start-using-home-manager
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, home-manager, ... }:
    let
      system = "x86_64-linux";
      pkgs = import nixpkgs {
        inherit system;
        config = {
          allowUnfree = true;
        };
      };
      lib = nixpkgs.lib;
    in {
    nixosConfigurations = {
      l2 = lib.nixosSystem rec {
        inherit system;
        modules = [
          ./configuration.nix
          home-manager.nixosModules.home-manager
          {
            home-manager.useUserPackages = true;
            home-manager.users.das = { config, pkgs, ... }: {
              imports = [ ./home.nix ];
            };
          }
        ];
      };
    };
  };
}

configuration.nix

please note the “initrd.preDeviceCommands” and “extraModprobeConfig” configs here:

#
#
# l2/configuration.nix
#

{
  inputs,
  config,
  pkgs,
  lib,
  ...
}:

{
  # https://nixos.wiki/wiki/NixOS_modules
  # https://nixos-and-flakes.thiscute.world/nixos-with-flakes/start-using-home-manager
  imports =
    [
      ./hardware-configuration.nix
      #./hardware-graphics.nix
      ./sysctl.nix
      #./wireless_desktop.nix
      ./locale.nix
      ./hosts.nix
      ./firewall.nix
      #./systemdSystem.nix
      ./systemPackages.nix
      # home manager is imported in the flake
      #./home.nix
      ./nodeExporter.nix
      ./prometheus.nix
      ./grafana.nix
      # clickhouse
      #./docker-compose.nix
      ./docker-daemon.nix
      #./smokeping.nix
      #./distributed-builds.nix
      #./hyprland.nix
      #./hostapd.nix
      ./hostapd-multi.nix
    ];

  boot = {
    loader.systemd-boot = {
      enable = true;
      consoleMode = "max";
      memtest86.enable = true;
      configurationLimit = 20;
    };

    loader.efi.canTouchEfiVariables = true;

    # https://nixos.wiki/wiki/Linux_kernel
    #kernelPackages = pkgs.linuxPackages;
    kernelPackages = pkgs.linuxPackages_latest;

    initrd.kernelModules = [
      "amdgpu"
    ];

    blacklistedKernelModules = [
      "nouveau"
      #"i915"
    ];

    initrd.preDeviceCommands = ''
      echo "Loading regulatory database early"
      cp ${pkgs.wireless-regdb}/lib/firmware/regulatory.db /lib/firmware/
      cp ${pkgs.wireless-regdb}/lib/firmware/regulatory.db.p7s /lib/firmware/
    '';

    # cat /proc/cmdline
    # cat /etc/modprobe.d/nixos.conf
    extraModprobeConfig = ''
      options cfg80211 ieee80211_regdom=US
      options iwlwifi lar_disable=1
    '';

  };

  # https://fzakaria.com/2025/02/26/nix-pragmatism-nix-ld-and-envfs
  # Enable nix-ld for better compatibility with non-Nix binaries
  programs.nix-ld = {
    enable = true;
    # Add commonly needed libraries
    libraries = with pkgs; [
      stdenv.cc.cc.lib
      zlib
      libxml2
    ];
  };

  # Enable envfs for better compatibility with FHS expectations
  services.envfs = {
    enable = true;
  };

  nix = {
    settings = {
      auto-optimise-store = true;
      experimental-features = [ "nix-command" "flakes" ];
      download-buffer-size = "500000000";
      # https://nix.dev/manual/nix/2.28/command-ref/conf-file#conf-max-jobs
      max-jobs = 12; # default = 1.  Setting this to 1/2 my cores
      http-connections = 100; # default 25
      # https://nix.dev/manual/nix/2.28/command-ref/conf-file#conf-max-substitution-jobs
      max-substitution-jobs = 64; # default 16
    };
    gc = {
      automatic = true;                  # Enable automatic execution of the task
      dates = "daily";                   # Schedule the task to run daily
      options = "--delete-older-than 10d";  # Specify options for the task: delete files older than 10 days
      randomizedDelaySec = "14m";        # Introduce a randomized delay of up to 14 minutes before executing the task
    };
  };

  # https://nixos.wiki/wiki/Networking
  networking.hostName = "l2";

  time.timeZone = "America/Los_Angeles";

  systemd.services.systemd-udev-settle.enable = false;

  services.openssh.enable = true;
  programs.ssh.extraConfig = ''
  Host hp4.home
    PubkeyAcceptedKeyTypes ssh-ed25519
    ServerAliveInterval 60
    IPQoS throughput
  '';

  services.lldpd.enable = true;
  services.timesyncd.enable = true;
  services.fstrim.enable = true;

  services.avahi = {
    enable = true;
    nssmdns4 = true;
    ipv4 = true;
    ipv6 = true;
    openFirewall = true;
  };

  # environment.variables defined in hardware-graphics.nix
  environment.sessionVariables = {
    TERM = "xterm-256color";
    #MY_VARIABLE = "my-value";
  };

  users.users.das = {
    isNormalUser = true;
    description = "das";
    extraGroups = [ "wheel" "networkmanager" "kvm" "libvirtd" "docker" "video" ];
    packages = with pkgs; [
    ];
    # https://nixos.wiki/wiki/SSH_public_key_authentication
    openssh.authorizedKeys.keys = [
      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGMCFUMSCFJX95eLfm7P9r72NBp9I1FiXwNwJ+x/HGPV das@t"
    ];
  };

  programs.gnupg.agent = {
     enable = true;
     enableSSHSupport = true;
  };

  # https://nixos.wiki/wiki/Virt-manager
  virtualisation.libvirtd.enable = true;
  #programs.virt-manager.enable = true;
  virtualisation.spiceUSBRedirection.enable = true;

  virtualisation.containers = {
    ociSeccompBpfHook.enable = true;
  };

  # guest
  # services.qemuGuest.enable = true;
  # services.spice-vdagentd.enable = true;

  # https://wiki.nixos.org/wiki/Laptop

  system.stateVersion = "24.11";

  nixpkgs.config = {
    allowUnfree = true;
  };

}

# end

The hostapd-multi.nix.

Please note the “hardware”, “systemd.tmpfiles.rules”, “systemd.services.set-regdom” all attempts to set make the regulartory stuff work. The hostapd config has the "countryCode = “US” set.

#
# l2/hostapd-multi.nix
#

{ config, lib, pkgs, ... }:

let
  radioIfaces = {
    # non-DFS channels
    wlp35s0 = 36;
    wlp65s0 = 40;
    wlp66s0 = 44;
    wlp97s0 = 48;
  };

  commonSettings = {
    bridge = "br0";
    ieee80211w = 2;

    # WMM tuning
    wmm_ac_be_aifs = 1;
    wmm_ac_be_cwmin = 4;
    wmm_ac_be_cwmax = 4;
    wmm_ac_be_txop_limit = 32;
    wmm_ac_be_acm = 0;
  };

  commonAuth = {
    mode = "wpa3-sae";
    saePasswords = [{ password = "strongpassword"; }];
  };

  genRadio = iface: channel: {
    countryCode = "US";
    band = "2g";
    # 5g isn't working for some reason.  Can't set the region to US.
    #band = "5g";
    channel = channel;
    # settings = {
    #   country_code = "US";
    #   ieee80211d = true;
    #   ieee80211h = false;
    #   # he_su_beamformer = 1;
    #   # he_su_beamformee = 1;
    #   # he_bss_color = 8;
    # };

    networks.${iface} = {
      ssid = "myssid";
      authentication = commonAuth;
      settings = commonSettings;
    };
  };

in {

  # AX210 kernel bug
  # https://bugzilla.kernel.org/show_bug.cgi?id=206469#c2

  # Moved to configuration.nix
  #boot.initrd.preDeviceCommands = ''
  #  echo "Loading regulatory database early"
  #  cp ${pkgs.wireless-regdb}/lib/firmware/regulatory.db /lib/firmware/
  #  cp ${pkgs.wireless-regdb}/lib/firmware/regulatory.db.p7s /lib/firmware/
  #'';

  # This is now set in the configuration.nix
  # boot.extraModprobeConfig = ''
  #   options cfg80211 ieee80211_regdom=US
  #   options iwlwifi lar_disable=1
  # '';

  # install the firmware for the wireless interface
  # ls /lib/firmware/regulatory.db
  # see also: https://discourse.nixos.org/t/direct-firmware-load-for-regulatory-db-failed/16317
  hardware = {
    enableAllFirmware = true;
    enableRedistributableFirmware = true;
    wirelessRegulatoryDatabase = true;
    #firmware = with pkgs; [ wireless-regdb ];
  };

  systemd.tmpfiles.rules = [
    "L+ /lib/firmware/regulatory.db - - - - ${pkgs.wireless-regdb}/lib/firmware/regulatory.db"
    "L+ /lib/firmware/regulatory.db.p7s - - - - ${pkgs.wireless-regdb}/lib/firmware/regulatory.db.p7s"
  ];

  systemd.services.set-regdom = {
    description = "Force regulatory domain before hostapd";
    wantedBy = [ "multi-user.target" ];
    after = [ "network-pre.target" "sysinit.target" ]; # Ensure network stack and devices are ready
    before = [ "hostapd.service" "network-online.target" ]; # Run before hostapd and general network comes up
    serviceConfig = {
      Type = "oneshot";
      ExecStart = "${pkgs.iw}/bin/iw reg set US";
      ExecStopPost = "${pkgs.iw}/bin/iw reg get";
    };
  };

  # systemctl status hostapd
  services.hostapd.enable = true;
  services.hostapd.radios = lib.genAttrs (builtins.attrNames radioIfaces)
    (iface: genRadio iface radioIfaces.${iface});

  # systemctl status kea-dhcp4-server.service
  services.kea = {
    dhcp4 = {
      enable = true;
      settings = {
        valid-lifetime = 3600;
        renew-timer = 900;
        rebind-timer = 1800;
        interfaces-config.interfaces = [ "br0" ];
        lease-database = {
          type = "memfile";
          persist = true;
          name = "/var/lib/kea/dhcp4.leases";
        };
        subnet4 = [
          {
            id = 1;
            subnet = "192.168.1.0/24";
            pools = [{ pool = "192.168.1.100 - 192.168.1.200"; }];
            option-data = [
              { name = "routers"; data = "192.168.1.1"; }
              { name = "domain-name-servers"; data = "192.168.1.1"; }
            ];
          }
        ];
      };
    };
  };
  # services.prometheus.exporters.kea = {
  #   enable = true;
  #   openFirewall = true;
  #   #port = 9547; # default port ( https://mynixos.com/nixpkgs/option/services.prometheus.exporters.kea.port )
  #   targets = [ "/run/kea/kea-dhcp4.socket" ];
  # };

  # PowerDNS Recursor
  # sudo lsof -i :53
  # systemctl status pdns-recursor
  services.pdns-recursor = {
    enable = true;
    dns.address = [ "127.0.0.1" "::1" "192.168.1.1" "fd00::1" ];
    dns.allowFrom = [ "127.0.0.1/32" "::1/128" "192.168.1.0/24" "fd00::/64" ];
    yaml-settings = {
      recursor = {
        serve_rfc1918 = true;
      };
    };
  };

  # IPv6 SLAAC via radvd
  # systemctl status radvd
  services.radvd = {
    enable = true;
    config = ''
      interface br0 {
        AdvSendAdvert on;
        prefix fd00::/64 {
          AdvOnLink on;
          AdvAutonomous on;
        };
        RDNSS fd00::1 {
          AdvRDNSSLifetime 600;
        };
      };
    '';
  };

  # https://nixos.wiki/wiki/Systemd-networkd
  networking.useNetworkd = true;
  networking.useDHCP = false;
  systemd.network.enable = true;

  #https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
  systemd.network.netdevs = {
    "br0" = {
      netdevConfig = {
        Kind = "bridge";
        Name = "br0";
      };
    };
  };

  # add dummy0 to force br0 up
  systemd.network.netdevs."dummy0" = {
    netdevConfig = {
      Kind = "dummy";
      Name = "dummy0";
    };
  };

systemd.network.networks."dummy0" = {
  matchConfig.Name = "dummy0";
  networkConfig = {
    Bridge = "br0";
  };
};

  # https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
  systemd.network.networks = {
    "enp1s0" = {
      matchConfig.Name = "enp1s0";
      networkConfig = {
        DHCP = "ipv4";
        IPv6AcceptRA = true;
        IPv6PrivacyExtensions = true;
        #IPMasquerade = true;
        LLDP = true;
        EmitLLDP = true;
      };
    };

    "br0" = {
      matchConfig.Name = "br0";
      networkConfig = {
        Address = [
          "192.168.1.1/24"
          "fd00::1/64"
        ];
        ConfigureWithoutCarrier = true;
      };
      linkConfig = {
        ActivationPolicy = "always-up";
      };
      cakeConfig = {
        Bandwidth = "1000M";  # Set your desired bandwidth
        OverheadBytes = 8;
        CompensationMode = "ptm";  # e.g. for DSL, change as needed
        NAT = true;
        FlowIsolationMode = "triple";
        PriorityQueueingPreset = "besteffort";
      };
    };

    "wlan" = {
      matchConfig.Type = "wlan";
      linkConfig = {
        Unmanaged = true;
      };
    };
  };

  # # Networking setup
  # networking = {

  #   networkmanager.enable = false;

  #   # useNetworkd = true;

  #   # useDHCP = false;

  #   # # Need an interface to bring it up, to allow the IP assignment
  #   # bridges.br0.interfaces = [ ];

  #   # interfaces.br0 = {
  #   #   ipv4.addresses = [{
  #   #     address = "192.168.1.1";
  #   #     prefixLength = 24;
  #   #   }];
  #   #   ipv6.addresses = [{
  #   #     address = "fd00::1";
  #   #     prefixLength = 64;
  #   #   }];
  #   # };

  #   # interfaces.enp1s0.useDHCP = true;

  #   nat = {
  #     enable = true;
  #     externalInterface = "enp1s0";
  #     internalInterfaces = [ "br0" ];
  #   };
  # };

  # Disable conflicting resolvers and provide local one
  services.resolved.enable = false;
  networking.nameservers = [ "127.0.0.1" "::1" ];

  environment.etc."resolv.conf".text = ''
    # dnsmasq
    nameserver 127.0.0.1
    nameserver ::1
    # emergency cloudflare
    nameserver 1.1.1.1
    nameserver 2606:4700:4700::1111
  '';
}

#systemctl status kea
#systemctl status pdns-recursor
#systemctl status radvd

# end

systemctl status hostapd

[das@l2:~]$ systemctl status hostapd
● hostapd.service - IEEE 802.11 Host Access-Point Daemon
     Loaded: loaded (/etc/systemd/system/hostapd.service; enabled; preset: ignored)
     Active: active (running) since Wed 2025-06-25 18:17:48 PDT; 6s ago
 Invocation: b7bdf468daea469a9dfc13b8a7708af5
    Process: 5671 ExecStartPre=/nix/store/jfcdsmhd3pcbs8dpqxvv21g258pma4g9-unit-script-hostapd-pre-start/bin/hostapd-pre-start (code=exited, status=0/SUCCESS)
   Main PID: 5722 (hostapd)
         IP: 0B in, 0B out
         IO: 0B read, 0B written
      Tasks: 1 (limit: 154218)
     Memory: 1.5M (peak: 5.5M)
        CPU: 168ms
     CGroup: /system.slice/hostapd.service
             └─5722 /nix/store/pm0apjrl59hda8ibxfqf411slqxwfrqx-hostapd-2.11/bin/hostapd /run/hostapd/wlp35s0.hostapd.conf /run/hostapd/wlp65s0.hostapd.conf /run/hostapd/wlp66s0.hostapd.conf /run/hostapd/wlp97s0.ho>

Jun 25 18:17:48 l2 systemd[1]: hostapd.service: Scheduled restart job, restart counter is at 59.
Jun 25 18:17:48 l2 systemd[1]: Starting IEEE 802.11 Host Access-Point Daemon...
Jun 25 18:17:48 l2 systemd[1]: Started IEEE 802.11 Host Access-Point Daemon.
Jun 25 18:17:52 l2 hostapd[5722]: wlp35s0: interface state UNINITIALIZED->COUNTRY_UPDATE

[das@l2:~]$
[das@l2:~]$ sudo cat /run/hostapd/wlp35s0.hostapd.conf
[sudo] password for das:
# Radio base configuration: wlp35s0
################################

channel=36
country_code=US
driver=nl80211
ht_capab=[HT40][SHORT-GI-20][SHORT-GI-40]
hw_mode=g
ieee80211ac=1
ieee80211d=1
ieee80211h=1
ieee80211n=1
noscan=0
require_ht=0
require_vht=0
vht_capab=
vht_oper_chwidth=0


# BSS 0: wlp35s0
################################

interface=wlp35s0
ap_isolate=0
auth_algs=1
bridge=br0
ctrl_interface=/run/hostapd
ctrl_interface_group=wheel
ieee80211w=2
ignore_broadcast_ssid=0
logger_stdout=-1
logger_stdout_level=2
logger_syslog=-1
logger_syslog_level=2
macaddr_acl=0
rsn_pairwise=CCMP
sae_pwe=2
sae_require_mfp=1
ssid=myssid
transition_disable=0x01
utf8_ssid=1
wmm_ac_be_acm=0
wmm_ac_be_aifs=1
wmm_ac_be_cwmax=4
wmm_ac_be_cwmin=4
wmm_ac_be_txop_limit=32
wmm_enabled=1
wpa=2
wpa_key_mgmt=SAE
wpa_pairwise=CCMP
sae_password=strongpassword

[das@l2:~]$
[das@l2:~]$ uname -a
Linux l2 6.15.3 #1-NixOS SMP PREEMPT_DYNAMIC Thu Jun 19 13:41:08 UTC 2025 x86_64 GNU/Linux
[das@l2:~]$ journalctl -u hostapd -f -n 30
Jun 25 18:19:06 l2 hostapd[5950]: wlp35s0: AP-DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp35s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:06 l2 hostapd[5950]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:06 l2 hostapd[5950]: hostapd_free_hapd_data: Interface wlp35s0 wasn't started
Jun 25 18:19:06 l2 hostapd[5950]: nl80211: deinit ifname=wlp35s0 disabled_11b_rates=0
Jun 25 18:19:06 l2 hostapd[5950]: wlp65s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp65s0: AP-DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp65s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:06 l2 hostapd[5950]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:06 l2 hostapd[5950]: hostapd_free_hapd_data: Interface wlp65s0 wasn't started
Jun 25 18:19:06 l2 hostapd[5950]: nl80211: deinit ifname=wlp65s0 disabled_11b_rates=0
Jun 25 18:19:06 l2 hostapd[5950]: wlp66s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp66s0: AP-DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp66s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:06 l2 hostapd[5950]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:06 l2 hostapd[5950]: hostapd_free_hapd_data: Interface wlp66s0 wasn't started
Jun 25 18:19:06 l2 hostapd[5950]: nl80211: deinit ifname=wlp66s0 disabled_11b_rates=0
Jun 25 18:19:06 l2 hostapd[5950]: wlp97s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp97s0: AP-DISABLED
Jun 25 18:19:06 l2 hostapd[5950]: wlp97s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:06 l2 hostapd[5950]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:06 l2 hostapd[5950]: hostapd_free_hapd_data: Interface wlp97s0 wasn't started
Jun 25 18:19:06 l2 hostapd[5950]: nl80211: deinit ifname=wlp97s0 disabled_11b_rates=0
Jun 25 18:19:06 l2 systemd[1]: hostapd.service: Deactivated successfully.
Jun 25 18:19:07 l2 systemd[1]: hostapd.service: Scheduled restart job, restart counter is at 64.
Jun 25 18:19:07 l2 systemd[1]: Starting IEEE 802.11 Host Access-Point Daemon...
Jun 25 18:19:07 l2 systemd[1]: Started IEEE 802.11 Host Access-Point Daemon.
Jun 25 18:19:11 l2 hostapd[6005]: wlp35s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 25 18:19:14 l2 hostapd[6005]: wlp65s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 25 18:19:18 l2 hostapd[6005]: wlp66s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 25 18:19:22 l2 hostapd[6005]: wlp97s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 25 18:19:22 l2 hostapd[6005]: Could not determine operating frequency
Jun 25 18:19:22 l2 hostapd[6005]: wlp35s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp35s0: AP-DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp35s0: interface state DISABLED->DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp35s0: AP-DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp35s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:22 l2 hostapd[6005]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:22 l2 hostapd[6005]: hostapd_free_hapd_data: Interface wlp35s0 wasn't started
Jun 25 18:19:22 l2 hostapd[6005]: nl80211: deinit ifname=wlp35s0 disabled_11b_rates=0
Jun 25 18:19:22 l2 hostapd[6005]: wlp65s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp65s0: AP-DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp65s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:22 l2 hostapd[6005]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:22 l2 hostapd[6005]: hostapd_free_hapd_data: Interface wlp65s0 wasn't started
Jun 25 18:19:22 l2 hostapd[6005]: nl80211: deinit ifname=wlp65s0 disabled_11b_rates=0
Jun 25 18:19:22 l2 hostapd[6005]: wlp66s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp66s0: AP-DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp66s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:22 l2 hostapd[6005]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:22 l2 hostapd[6005]: hostapd_free_hapd_data: Interface wlp66s0 wasn't started
Jun 25 18:19:22 l2 hostapd[6005]: nl80211: deinit ifname=wlp66s0 disabled_11b_rates=0
Jun 25 18:19:22 l2 hostapd[6005]: wlp97s0: interface state COUNTRY_UPDATE->DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp97s0: AP-DISABLED
Jun 25 18:19:22 l2 hostapd[6005]: wlp97s0: CTRL-EVENT-TERMINATING
Jun 25 18:19:22 l2 hostapd[6005]: rmdir[ctrl_interface=/run/hostapd]: Device or resource busy
Jun 25 18:19:22 l2 hostapd[6005]: hostapd_free_hapd_data: Interface wlp97s0 wasn't started
Jun 25 18:19:22 l2 hostapd[6005]: nl80211: deinit ifname=wlp97s0 disabled_11b_rates=0
Jun 25 18:19:22 l2 systemd[1]: hostapd.service: Deactivated successfully.
Jun 25 18:19:22 l2 systemd[1]: hostapd.service: Scheduled restart job, restart counter is at 65.
Jun 25 18:19:22 l2 systemd[1]: Starting IEEE 802.11 Host Access-Point Daemon...
Jun 25 18:19:22 l2 systemd[1]: Started IEEE 802.11 Host Access-Point Daemon.
^C

[das@l2:~]$
[das@l2:~]$ ls /lib/firmware/
regulatory.db  regulatory.db.p7s
[das@l2:~]$ cat /sys/module/firmware_class/parameters/path
/nix/store/6l9k87z99j5vlbn21fpf64aamc4xqv0z-firmware/lib/firmware

[das@l2:~]$ ls /nix/store/6l9k87z99j5vlbn21fpf64aamc4xqv0z-firmware/lib/firmware
3com                             dvb-usb-avertv-a800-02.fw.zst                iwlwifi-bz-b0-fm-c0-98.ucode.zst   iwlwifi-ty-a0-gf-a0-86.ucode.zst   TAS2XXX0C96.bin.zst
a300_pfp.fw.zst                  dvb-usb-az6027-03.fw.zst                     iwlwifi-bz-b0-fm-c0.pnvm.zst       iwlwifi-ty-a0-gf-a0-89.ucode.zst   TAS2XXX0C97.bin.zst
a300_pm4.fw.zst                  dvb-usb-bluebird-01.fw.zst                   iwlwifi-bz-b0-gf-a0-92.ucode.zst   iwlwifi-ty-a0-gf-a0.pnvm.zst       TAS2XXX103C8DE8-0.bin.zst
acenic                           dvb-usb-bluebird-02.fw.zst                   iwlwifi-bz-b0-gf-a0-94.ucode.zst   ixp4xx                             TAS2XXX103C8DE80.bin.zst
adaptec                          dvb-usb-dib0700-1.20.fw.zst                  iwlwifi-bz-b0-gf-a0-96.ucode.zst   kaweth                             TAS2XXX103C8DE8-1.bin.zst
advansys                         dvb-usb-dibusb-5.0.0.11.fw.zst               iwlwifi-bz-b0-gf-a0-97.ucode.zst   keyspan                            TAS2XXX103C8DE81.bin.zst
aeonsemi                         dvb-usb-dibusb-6.0.0.8.fw.zst                iwlwifi-bz-b0-gf-a0-98.ucode.zst   keyspan_pda                        TAS2XXX103C8DE9-0.bin.zst
af9005.fw.zst                    dvb-usb-dtt200u-01.fw.zst                    iwlwifi-bz-b0-gf-a0.pnvm.zst       korg                               TAS2XXX103C8DE90.bin.zst
agere_ap_fw.bin.zst              dvb-usb-dw2101.fw.zst                        iwlwifi-bz-b0-hr-b0-96.ucode.zst   lbtf_usb.bin.zst                   TAS2XXX103C8DE9-1.bin.zst
agere_sta_fw.bin.zst             dvb-usb-dw2102.fw.zst                        iwlwifi-bz-b0-hr-b0-98.ucode.zst   lgs8g75.fw.zst                     TAS2XXX103C8DE91.bin.zst
aica_firmware.bin.zst            dvb-usb-dw2104.fw.zst                        iwlwifi-bz-b0-hr-b0.pnvm.zst       libertas                           TAS2XXX10A40.bin.zst
airoha                           dvb-usb-dw3101.fw.zst                        iwlwifi-cc-a0-50.ucode.zst         liquidio                           TAS2XXX10A41.bin.zst
amd                              dvb-usb-ec168.fw.zst                         iwlwifi-cc-a0-59.ucode.zst         lt9611uxc_fw.bin.zst               TAS2XXX11540.bin.zst
amdgpu                           dvb-usb-gp8psk-01.fw.zst                     iwlwifi-cc-a0-66.ucode.zst         matrox                             TAS2XXX11541.bin.zst
amdnpu                           dvb-usb-gp8psk-02.fw.zst                     iwlwifi-cc-a0-72.ucode.zst         mediatek                           TAS2XXX12040.bin.zst
amdtee                           dvb-usb-hauppauge-hvr930c-drxk.fw.zst        iwlwifi-cc-a0-73.ucode.zst         mellanox                           TAS2XXX12041.bin.zst
amd-ucode                        dvb-usb-id5230.fw.zst                        iwlwifi-cc-a0-74.ucode.zst         meson                              TAS2XXX12140.bin.zst
amlogic                          dvb-usb-id5301.fw.zst                        iwlwifi-cc-a0-77.ucode.zst         microchip                          TAS2XXX12141.bin.zst
amphion                          dvb-usb-id5520se.fw.zst                      iwlwifi-gl-c0-fm-c0-83.ucode.zst   mixart                             TAS2XXX1EB30.bin.zst
ar3k                             dvb-usb-id5530.fw.zst                        iwlwifi-gl-c0-fm-c0-86.ucode.zst   moxa                               TAS2XXX1EB31.bin.zst
ar5523.bin.zst                   dvb-usb-id5580.fw.zst                        iwlwifi-gl-c0-fm-c0-90.ucode.zst   mrvl                               TAS2XXX1EB3.bin.zst
ar7010_1_1.fw.zst                dvb-usb-id5930.fw.zst                        iwlwifi-gl-c0-fm-c0-92.ucode.zst   mt7601u.bin.zst                    TAS2XXX2234.bin.zst
ar7010.fw.zst                    dvb-usb-id5931.fw.zst                        iwlwifi-gl-c0-fm-c0-94.ucode.zst   mt7650.bin.zst                     TAS2XXX2326.bin.zst
ar9170-1.fw.zst                  dvb-usb-it9135-01.fw.zst                     iwlwifi-gl-c0-fm-c0-96.ucode.zst   mt7662.bin.zst                     TAS2XXX3870.bin.zst
ar9170-2.fw.zst                  dvb-usb-it9135-02.fw.zst                     iwlwifi-gl-c0-fm-c0-97.ucode.zst   mt7662_rom_patch.bin.zst           TAS2XXX387D.bin.zst
ar9271.fw.zst                    dvb-usb-it9137-01.fw.zst                     iwlwifi-gl-c0-fm-c0-98.ucode.zst   mts_cdma.fw.zst                    TAS2XXX387E.bin.zst
arm                              dvb-usb-it9303-01.fw.zst                     iwlwifi-gl-c0-fm-c0.pnvm.zst       mts_edge.fw.zst                    TAS2XXX387F.bin.zst
as102_data1_st.hex.zst           dvb-usb-lme2510c-rs2000.fw.zst               iwlwifi-ma-b0-gf4-a0-83.ucode.zst  mts_gsm.fw.zst                     TAS2XXX3880.bin.zst
as102_data2_st.hex.zst           dvb-usb-nova-t-usb2-02.fw.zst                iwlwifi-ma-b0-gf4-a0-86.ucode.zst  mts_mt9234mu.fw.zst                TAS2XXX3881.bin.zst
asihpi                           dvb-usb-p1100.fw.zst                         iwlwifi-ma-b0-gf4-a0-89.ucode.zst  mts_mt9234zba.fw.zst               TAS2XXX3882.bin.zst
ath10k                           dvb-usb-p7500.fw.zst                         iwlwifi-ma-b0-gf4-a0.pnvm.zst      multiface_firmware.bin.zst         TAS2XXX3884.bin.zst
ath11k                           dvb-usb-pctv-400e-01.fw.zst                  iwlwifi-ma-b0-gf-a0-83.ucode.zst   multiface_firmware_rev11.bin.zst   TAS2XXX3886.bin.zst
ath12k                           dvb-usb-s630.fw.zst                          iwlwifi-ma-b0-gf-a0-86.ucode.zst   mwl8k                              TAS2XXX38A5.bin.zst
ath3k-1.fw.zst                   dvb-usb-s660.fw.zst                          iwlwifi-ma-b0-gf-a0-89.ucode.zst   mwlwifi                            TAS2XXX38A7.bin.zst
ath6k                            dvb-usb-SkyStar_USB_HD_FW_v17_63.HEX.fw.zst  iwlwifi-ma-b0-gf-a0.pnvm.zst       myri10ge_eth_big_z8e.dat.zst       TAS2XXX38A8.bin.zst
ath9k_htc                        dvb-usb-tb5520-01.fw.zst                     iwlwifi-ma-b0-hr-b0-83.ucode.zst   myri10ge_ethp_big_z8e.dat.zst      TAS2XXX38B8.bin.zst
atmel                            dvb-usb-tbs5520-01.fw.zst                    iwlwifi-ma-b0-hr-b0-86.ucode.zst   myri10ge_ethp_z8e.dat.zst          TAS2XXX38B9.bin.zst
atusb                            dvb-usb-tbsqbox-dvbc.fw.zst                  iwlwifi-ma-b0-hr-b0-89.ucode.zst   myri10ge_eth_z8e.dat.zst           TAS2XXX38BA.bin.zst
av7110                           dvb-usb-tbsqbox-id2601.fw.zst                iwlwifi-Qu-b0-hr-b0-50.ucode.zst   myri10ge_rss_eth_big_z8e.dat.zst   TAS2XXX38BB.bin.zst
b43                              dvb-usb-tbsqbox-id5220.fw.zst                iwlwifi-Qu-b0-hr-b0-59.ucode.zst   myri10ge_rss_ethp_big_z8e.dat.zst  TAS2XXX38BE.bin.zst
bmi260-init-data.fw.zst          dvb-usb-tbsqbox-id5520.fw.zst                iwlwifi-Qu-b0-hr-b0-66.ucode.zst   myri10ge_rss_ethp_z8e.dat.zst      TAS2XXX38BF.bin.zst
bnx2                             dvb-usb-tbsqbox-id5521.fw.zst                iwlwifi-Qu-b0-hr-b0-72.ucode.zst   myri10ge_rss_eth_z8e.dat.zst       TAS2XXX38C3.bin.zst
bnx2x                            dvb-usb-tbsqbox-id5680.fw.zst                iwlwifi-Qu-b0-hr-b0-73.ucode.zst   myricom                            TAS2XXX38CB.bin.zst
bootcode.bin.zst                 dvb-usb-tbsqbox-id5880.fw.zst                iwlwifi-Qu-b0-hr-b0-74.ucode.zst   netronome                          TAS2XXX38CD.bin.zst
brcm                             dvb-usb-tbsqbox-id5881.fw.zst                iwlwifi-Qu-b0-hr-b0-77.ucode.zst   ngene_15.fw.zst                    TAS2XXX38D3.bin.zst
cadence                          dvb-usb-tbsqbox-id5910.fw.zst                iwlwifi-Qu-b0-jf-b0-50.ucode.zst   ngene_16.fw.zst                    TAS2XXX38D4.bin.zst
carl9170-1.fw.zst                dvb-usb-tbsqbox-id5920.fw.zst                iwlwifi-Qu-b0-jf-b0-59.ucode.zst   ngene_17.fw.zst                    TAS2XXX38D5.bin.zst
cavium                           dvb-usb-tbsqbox-id5921.fw.zst                iwlwifi-Qu-b0-jf-b0-66.ucode.zst   ngene_18.fw.zst                    TAS2XXX38D6.bin.zst
cbfw-3.2.5.1.bin.zst             dvb-usb-tbsqbox-id5922.fw.zst                iwlwifi-Qu-b0-jf-b0-72.ucode.zst   nvidia                             TAS2XXX38DF.bin.zst
cirrus                           dvb-usb-tbsqbox-id5923.fw.zst                iwlwifi-Qu-b0-jf-b0-73.ucode.zst   nxp                                TAS2XXX38E0.bin.zst
cis                              dvb-usb-tbsqbox-id5925.fw.zst                iwlwifi-Qu-b0-jf-b0-74.ucode.zst   NXP7164-2010-03-10.1.fw.zst        TAS2XXX38FD.bin.zst
cmmb_vega_12mhz.inp.zst          dvb-usb-tbsqbox-id5927.fw.zst                iwlwifi-Qu-b0-jf-b0-77.ucode.zst   NXP7164-2010-04-01.1.fw.zst        TAS2XXX391F.bin.zst
cmmb_venice_12mhz.inp.zst        dvb-usb-tbsqbox-id5928.fw.zst                iwlwifi-Qu-c0-hr-b0-50.ucode.zst   ositech                            TAS2XXX3920.bin.zst
cnm                              dvb-usb-tbsqbox-id5980.fw.zst                iwlwifi-Qu-c0-hr-b0-59.ucode.zst   pcxhr                              TAS2XXX3E300.bin.zst
cpia2                            dvb-usb-terratec-h5-drxk.fw.zst              iwlwifi-Qu-c0-hr-b0-66.ucode.zst   phanfw.bin.zst                     TAS2XXX3E301.bin.zst
cs42l43.bin.zst                  dvb-usb-terratec-h7-az6007.fw.zst            iwlwifi-Qu-c0-hr-b0-72.ucode.zst   powervr                            TAS2XXX3EE00.bin.zst
cs46xx                           dvb-usb-terratec-h7-drxk.fw.zst              iwlwifi-Qu-c0-hr-b0-73.ucode.zst   qat_402xx.bin.zst                  TAS2XXX3EE01.bin.zst
ct2fw-3.2.5.1.bin.zst            dvb-usb-terratec-htc-stick-drxk.fw.zst       iwlwifi-Qu-c0-hr-b0-74.ucode.zst   qat_402xx_mmp.bin.zst              TAS2XXX3EF00.bin.zst
ctefx.bin.zst                    dvb-usb-tt-s2400-01.fw.zst                   iwlwifi-Qu-c0-hr-b0-77.ucode.zst   qat_420xx.bin.zst                  TAS2XXX3EF01.bin.zst
ctefx-desktop.bin.zst            dvb-usb-tvwalkert.fw.zst                     iwlwifi-Qu-c0-jf-b0-50.ucode.zst   qat_420xx_mmp.bin.zst              TAS2XXX3F000.bin.zst
ctefx-r3di.bin.zst               dvb-usb-umt-010-02.fw.zst                    iwlwifi-Qu-c0-jf-b0-59.ucode.zst   qat_4xxx.bin.zst                   TAS2XXX3F001.bin.zst
ctfw-3.2.5.1.bin.zst             dvb-usb-vp7045-01.fw.zst                     iwlwifi-Qu-c0-jf-b0-66.ucode.zst   qat_4xxx_mmp.bin.zst               TAS2XXX3F100.bin.zst
ctspeq.bin.zst                   dvb-usb-wt220u-02.fw.zst                     iwlwifi-Qu-c0-jf-b0-72.ucode.zst   qat_895xcc.bin.zst                 TAS2XXX3F101.bin.zst
cxgb3                            dvb-usb-wt220u-fc03.fw.zst                   iwlwifi-Qu-c0-jf-b0-73.ucode.zst   qat_895xcc_mmp.bin.zst             TAS2XXX3F200.bin.zst
cxgb4                            dvb-usb-wt220u-miglia-01.fw.zst              iwlwifi-Qu-c0-jf-b0-74.ucode.zst   qat_c3xxx.bin.zst                  TAS2XXX3F201.bin.zst
cypress                          dvb-usb-wt220u-zl0353-01.fw.zst              iwlwifi-Qu-c0-jf-b0-77.ucode.zst   qat_c3xxx_mmp.bin.zst              TAS2XXX3F300.bin.zst
dabusb                           e100                                         iwlwifi-QuZ-a0-hr-b0-50.ucode.zst  qat_c62x.bin.zst                   TAS2XXX3F301.bin.zst
digiface_firmware.bin.zst        ea                                           iwlwifi-QuZ-a0-hr-b0-59.ucode.zst  qat_c62x_mmp.bin.zst               TAS2XXX8DE80.bin.zst
digiface_firmware_rev11.bin.zst  edgeport                                     iwlwifi-QuZ-a0-hr-b0-66.ucode.zst  qat_mmp.bin.zst                    TAS2XXX8DE81.bin.zst
dpaa2                            emi26                                        iwlwifi-QuZ-a0-hr-b0-72.ucode.zst  qca                                TAS2XXX8DE8.bin.zst
drxd-a2-1.1.fw.zst               emi62                                        iwlwifi-QuZ-a0-hr-b0-73.ucode.zst  qcom                               TAS2XXX8DE90.bin.zst
drxd-b1-1.1.fw.zst               emu                                          iwlwifi-QuZ-a0-hr-b0-74.ucode.zst  qed                                TAS2XXX8DE91.bin.zst
drxk_a3.mc.zst                   ene-ub6250                                   iwlwifi-QuZ-a0-hr-b0-77.ucode.zst  ql2100_fw.bin.zst                  TAS2XXX8DE9.bin.zst
dsp56k                           ess                                          iwlwifi-QuZ-a0-jf-b0-50.ucode.zst  ql2200_fw.bin.zst                  tdmb_nova_12mhz.inp.zst
dspbootcode.bin.zst              f2255usb.bin.zst                             iwlwifi-QuZ-a0-jf-b0-59.ucode.zst  ql2300_fw.bin.zst                  tehuti
dvb-demod-avl6882.fw.zst         facetimehd                                   iwlwifi-QuZ-a0-jf-b0-66.ucode.zst  ql2322_fw.bin.zst                  ti
dvb-demod-drxk-01.fw.zst         go7007                                       iwlwifi-QuZ-a0-jf-b0-72.ucode.zst  ql2400_fw.bin.zst                  ti_3410.fw.zst
dvb-demod-drxk-pctv.fw.zst       hfi1_dc8051.fw.zst                           iwlwifi-QuZ-a0-jf-b0-73.ucode.zst  ql2500_fw.bin.zst                  ti_5052.fw.zst
dvb-demod-gx1503B.fw.zst         hfi1_fabric.fw.zst                           iwlwifi-QuZ-a0-jf-b0-74.ucode.zst  qlogic                             TIAS2781RCA2.bin.zst
dvb-demod-m88ds3103b.fw.zst      hfi1_pcie.fw.zst                             iwlwifi-QuZ-a0-jf-b0-77.ucode.zst  r128                               TIAS2781RCA4.bin.zst
dvb-demod-m88ds3103.fw.zst       hfi1_sbus.fw.zst                             iwlwifi-so-a0-gf4-a0-72.ucode.zst  r8a779x_usb3_v1.dlmem.zst          ti-connectivity
dvb-demod-m88rs6000.fw.zst       htc_7010.fw.zst                              iwlwifi-so-a0-gf4-a0-73.ucode.zst  r8a779x_usb3_v2.dlmem.zst          tigon
dvb-demod-m88rs6060.fw.zst       htc_9271.fw.zst                              iwlwifi-so-a0-gf4-a0-74.ucode.zst  r8a779x_usb3_v3.dlmem.zst          ti-keystone
dvb-demod-mn88472-02.fw.zst      i915                                         iwlwifi-so-a0-gf4-a0-77.ucode.zst  radeon                             tlg2300_firmware.bin.zst
dvb-demod-mn88473-01.fw.zst      imx                                          iwlwifi-so-a0-gf4-a0-78.ucode.zst  realtek                            tsse_firmware.bin.zst
dvb-demod-mxl692.fw.zst          inside-secure                                iwlwifi-so-a0-gf4-a0-79.ucode.zst  regulatory.db.p7s.zst              ttusb-budget
dvb-demod-si2168-01.fw.zst       INT8866RCA2.bin.zst                          iwlwifi-so-a0-gf4-a0-81.ucode.zst  regulatory.db.zst                  TXNW2781RCA0.bin.zst
dvb-demod-si2168-02.fw.zst       intel                                        iwlwifi-so-a0-gf4-a0-83.ucode.zst  rockchip                           TXNW2781RCA1.bin.zst
dvb-demod-si2168-a20-01.fw.zst   ipw2200-bss.fw.zst                           iwlwifi-so-a0-gf4-a0-84.ucode.zst  rp2.fw.zst                         TXNW2781RCA2.bin.zst
dvb-demod-si2168-a30-01.fw.zst   ipw2200-ibss.fw.zst                          iwlwifi-so-a0-gf4-a0-86.ucode.zst  rpm_firmware.bin.zst               TXNW2781RCA4.bin.zst
dvb-demod-si2168-b40-01.fw.zst   ipw2200-sniffer.fw.zst                       iwlwifi-so-a0-gf4-a0-89.ucode.zst  rsi                                ueagle-atm
dvb-demod-si2168-d60-01.fw.zst   isci                                         iwlwifi-so-a0-gf4-a0.pnvm.zst      rsi_91x.fw.zst                     usbduxfast_firmware.bin.zst
dvb-demod-si2183-b60-01.fw.zst   isdbt_nova_12mhz_b0.inp.zst                  iwlwifi-so-a0-gf-a0-72.ucode.zst   rt2561.bin.zst                     usbdux_firmware.bin.zst
dvb_driver_si2157_rom50.fw.zst   isdbt_nova_12mhz.inp.zst                     iwlwifi-so-a0-gf-a0-73.ucode.zst   rt2561s.bin.zst                    usbduxsigma_firmware.bin.zst
dvb-fe-af9013.fw.zst             isdbt_rio.inp.zst                            iwlwifi-so-a0-gf-a0-74.ucode.zst   rt2661.bin.zst                     v4l-cx231xx-avcore-01.fw.zst
dvb-fe-avl6211.fw.zst            iwlwifi-1000-5.ucode.zst                     iwlwifi-so-a0-gf-a0-77.ucode.zst   rt2860.bin.zst                     v4l-cx23418-apu.fw.zst
dvb-fe-bcm3510-01.fw.zst         iwlwifi-100-5.ucode.zst                      iwlwifi-so-a0-gf-a0-78.ucode.zst   rt2870.bin.zst                     v4l-cx23418-cpu.fw.zst
dvb-fe-cx24116.fw.zst            iwlwifi-105-6.ucode.zst                      iwlwifi-so-a0-gf-a0-79.ucode.zst   rt3070.bin.zst                     v4l-cx23418-dig.fw.zst
dvb-fe-cx24117.fw.zst            iwlwifi-135-6.ucode.zst                      iwlwifi-so-a0-gf-a0-81.ucode.zst   rt3071.bin.zst                     v4l-cx2341x-dec.fw.zst
dvb-fe-cx24120-1.20.58.2.fw.zst  iwlwifi-2000-6.ucode.zst                     iwlwifi-so-a0-gf-a0-83.ucode.zst   rt3090.bin.zst                     v4l-cx2341x-enc.fw.zst
dvb-fe-drxj-mc-1.0.8.fw.zst      iwlwifi-2030-6.ucode.zst                     iwlwifi-so-a0-gf-a0-84.ucode.zst   rt3290.bin.zst                     v4l-cx2341x-init.mpg.zst
dvb-fe-ds3000.fw.zst             iwlwifi-3160-17.ucode.zst                    iwlwifi-so-a0-gf-a0-86.ucode.zst   rt5677_elf_vad.zst                 v4l-cx23885-avcore-01.fw.zst
dvb-fe-mn88436-atsc.fw.zst       iwlwifi-3168-29.ucode.zst                    iwlwifi-so-a0-gf-a0-89.ucode.zst   rt73.bin.zst                       v4l-cx23885-enc.fw.zst
dvb-fe-mn88436-pseq.fw.zst       iwlwifi-3945-2.ucode.zst                     iwlwifi-so-a0-gf-a0.pnvm.zst       rtl_bt                             v4l-cx25840.fw.zst
dvb-fe-mxl58x.fw.zst             iwlwifi-4965-2.ucode.zst                     iwlwifi-so-a0-hr-b0-72.ucode.zst   rtl_nic                            v4l-pvrusb2-24xxx-01.fw.zst
dvb-fe-mxl5xx.fw.zst             iwlwifi-5000-5.ucode.zst                     iwlwifi-so-a0-hr-b0-73.ucode.zst   rtlwifi                            v4l-pvrusb2-29xxx-01.fw.zst
dvb-fe-nxt2004.fw.zst            iwlwifi-5150-2.ucode.zst                     iwlwifi-so-a0-hr-b0-74.ucode.zst   rtw88                              v4l-pvrusb2-73xxx-01.fw.zst
dvb-fe-or51132-qam.fw.zst        iwlwifi-6000-4.ucode.zst                     iwlwifi-so-a0-hr-b0-77.ucode.zst   rtw89                              vicam
dvb-fe-or51132-vsb.fw.zst        iwlwifi-6000g2a-6.ucode.zst                  iwlwifi-so-a0-hr-b0-79.ucode.zst   s2250.fw.zst                       vntwusb.fw.zst
dvb-fe-or51211.fw.zst            iwlwifi-6000g2b-6.ucode.zst                  iwlwifi-so-a0-hr-b0-81.ucode.zst   s2250_loader.fw.zst                vpu_d.bin.zst
dvb-fe-tda10045.fw.zst           iwlwifi-6050-5.ucode.zst                     iwlwifi-so-a0-hr-b0-83.ucode.zst   s5p-mfc.fw.zst                     vpu_p.bin.zst
dvb-fe-tda10046.fw.zst           iwlwifi-7260-17.ucode.zst                    iwlwifi-so-a0-hr-b0-84.ucode.zst   s5p-mfc-v12.fw.zst                 vx
dvb-fe-tda10048-1.0.fw.zst       iwlwifi-7265-17.ucode.zst                    iwlwifi-so-a0-hr-b0-86.ucode.zst   s5p-mfc-v6.fw.zst                  vxge
dvb-fe-tda10071.fw.zst           iwlwifi-7265D-29.ucode.zst                   iwlwifi-so-a0-hr-b0-89.ucode.zst   s5p-mfc-v6-v2.fw.zst               wfx
dvb-fe-xc4000-1.4.1.fw.zst       iwlwifi-8000C-34.ucode.zst                   iwlwifi-so-a0-jf-b0-72.ucode.zst   s5p-mfc-v7.fw.zst                  whiteheat.fw.zst
dvb-fe-xc4000-1.4.fw.zst         iwlwifi-8000C-36.ucode.zst                   iwlwifi-so-a0-jf-b0-73.ucode.zst   s5p-mfc-v8.fw.zst                  whiteheat_loader.fw.zst
dvb-fe-xc5000-1.6.114.fw.zst     iwlwifi-8265-34.ucode.zst                    iwlwifi-so-a0-jf-b0-74.ucode.zst   sb16                               wil6210.brd.zst
dvb-fe-xc5000c-4.1.30.7.fw.zst   iwlwifi-8265-36.ucode.zst                    iwlwifi-so-a0-jf-b0-77.ucode.zst   sdd_sagrad_1091_1098.bin.zst       wil6210.fw.zst
dvb_nova_12mhz_b0.inp.zst        iwlwifi-9000-pu-b0-jf-b0-34.ucode.zst        iwlwifi-ty-a0-gf-a0-59.ucode.zst   slicoss                            wsm_22.bin.zst
dvb_nova_12mhz.inp.zst           iwlwifi-9000-pu-b0-jf-b0-38.ucode.zst        iwlwifi-ty-a0-gf-a0-66.ucode.zst   sms1xxx-hcw-55xxx-dvbt-01.fw.zst   xc3028L-v36.fw.zst
dvb_rio.inp.zst                  iwlwifi-9000-pu-b0-jf-b0-46.ucode.zst        iwlwifi-ty-a0-gf-a0-72.ucode.zst   sms1xxx-hcw-55xxx-dvbt-02.fw.zst   xc3028-v24.fw.zst
dvb-ttpci-01.fw.zst              iwlwifi-9260-th-b0-jf-b0-34.ucode.zst        iwlwifi-ty-a0-gf-a0-73.ucode.zst   sms1xxx-hcw-55xxx-isdbt-02.fw.zst  xc3028-v27.fw.zst
dvb-tuner-si2141-a10-01.fw.zst   iwlwifi-9260-th-b0-jf-b0-38.ucode.zst        iwlwifi-ty-a0-gf-a0-74.ucode.zst   sms1xxx-nova-a-dvbt-01.fw.zst      xc4000-1.4.fw.zst
dvb-tuner-si2157-a30-01.fw.zst   iwlwifi-9260-th-b0-jf-b0-46.ucode.zst        iwlwifi-ty-a0-gf-a0-77.ucode.zst   sms1xxx-nova-b-dvbt-01.fw.zst      xe
dvb-tuner-si2158-a20-01.fw.zst   iwlwifi-bz-b0-fm-c0-92.ucode.zst             iwlwifi-ty-a0-gf-a0-78.ucode.zst   sms1xxx-stellar-dvbt-01.fw.zst     xow_dongle_045e_02e6.bin.zst
dvb-usb-af9015.fw.zst            iwlwifi-bz-b0-fm-c0-93.ucode.zst             iwlwifi-ty-a0-gf-a0-79.ucode.zst   sun                                xow_dongle.bin.zst
dvb-usb-af9035-02.fw.zst         iwlwifi-bz-b0-fm-c0-94.ucode.zst             iwlwifi-ty-a0-gf-a0-81.ucode.zst   sxg                                yam
dvb-usb-af9035-03.fw.zst         iwlwifi-bz-b0-fm-c0-96.ucode.zst             iwlwifi-ty-a0-gf-a0-83.ucode.zst   TAS2XXX0C94.bin.zst                yamaha
dvb-usb-af9035-04.fw.zst         iwlwifi-bz-b0-fm-c0-97.ucode.zst             iwlwifi-ty-a0-gf-a0-84.ucode.zst   TAS2XXX0C95.bin.zst                zd1211

[das@l2:~]$

Thanks in advance,
Dave

[das@l2:~]$ cat /etc/modprobe.d/nixos.conf
blacklist firewire_core
blacklist firewire_ohci
blacklist firewire_sbp2
blacklist nouveau

options cfg80211 ieee80211_regdom=US
options iwlwifi lar_disable=1



[das@l2:~]$

Intel cards are not suitable for AP mode, believe me because I had to use one. If you’re trying to build a wireless access point or router I suggest to buy a better card, it’s not really worth the trouble.

Even if you can bypass the idiotic country restriction, you’re still limited to:

  1. a single band (it’s “dual band” but can only do one at a time)

  2. a single VAP, so you can’t create separate VLANs like for guests and IoT

  3. subpar signal, paticularly with the crappy antennas that come with most motherboards.

That said, here’s my configuration for an AX200 if you want to waste some spare time try:

{ config, lib, ... }:

{

  nixpkgs.overlays = lib.singleton (self: super:
    { # tweak hostapd to deal with LAR
      hostapd = super.hostapd.overrideDerivation (old:
        { patches = lib.singleton (self.fetchpatch
            { url = "https://tildearrow.org/storage/hostapd-2.10-lar.patch";
              sha256 = "USiHBZH5QcUJfZSxGoFwUefq3ARc4S/KliwUm8SqvoI=";
            });
        });
    });

  networking.wlanInterfaces.wlan5 =
    { device = "wlan5";
      mac = "PUT_A_BSSID_HERE";
    };

  hardware.wirelessRegulatoryDatabase = true;

  services.hostapd.enable = true;
  services.hostapd.radios.wlan5 =
    { band = "5g";
      channel = 149;
      countryCode = "PA";  # country with less restrictions
                           # this will only work if you have another AP
                           # set to this country nearby, of course
      wifi4.capabilities =
        [ "HT40+" "LDPC" "SHORT-GI-20" "SHORT-GI-40"
          "TX-STBC" "RX-STBC1" "DSSS_CCK-40" "MAX-AMSDU-7935" ];
      wifi5.capabilities =
        [ "MAX-MPDU-11454" "VHT160" "RXLDPC" "SHORT-GI-80"
          "SHORT-GI-160" "TX-STBC-2BY1" "RX-STBC-1"
          "SU-BEAMFORMEE" "MU-BEAMFORMEE" ];
      networks.wlan5 =
        { ssid  = "home";
          bssid = config.networking.wlanInterfaces.wlan5.mac;
          authentication.mode = "wpa3-sae-transition";
          authentication.wpaPasswordFile = "PATH_TO_WPA2_PASSWORD_FILE";
          authentication.saePasswordsFile = "PATH_TO_WPA3_PASSWORD_FILE";
          settings.bridge = "home";
          # 802.11r setup
          settings.wpa_key_mgmt = lib.mkForce "WPA-PSK-SHA256 FT-PSK SAE FT-SAE";
          settings.ft_over_ds = false;
          settings.mobility_domain = "bb53";
          settings.nas_identifier = "home.wlan5";
          settings.r0kh = "ff:ff:ff:ff:ff:ff * PUT_FT_SECRET_HERE";
          settings.r1kh = "00:00:00:00:00:00 00:00:00:00:00:00 PUT_FT_SECRET_HERE";
        };
    };

}
1 Like

@rnhmjoj Thank you!!

Ok, wow. So I saw this blog about the issue, and figured that it was from 2022 ( about ~3 years ago ), and guess this would be resolved now. I guess not. I wonder why this hasn’t been put into hostapd?

Blog:

Do you recommend any other cards?

Thanks again,
Dave

I think it will never be upstreamed: it’s essentially a hack and the cards are not really good anyways.

With Wifi 6 I don’t know. I’d look for cards that are known to work with openWRT.

Look into this one:

It’s the card used for WiFi 6 in the turris omnia, so I assume it should work well on openwrt an hence Linux in general.

Thanks again @rnhmjoj

It’s working! :rocket: :pray:

[das@l2:~/nixos/desktop/l2]$ journalctl -u hostapd -f -n 30
Jun 27 12:04:16 l2 systemd[1]: Started IEEE 802.11 Host Access-Point Daemon.
Jun 27 12:04:16 l2 hostapd[493515]: wlp35s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 27 12:04:27 l2 hostapd[493515]: wlp35s0: interface state COUNTRY_UPDATE->ENABLED
Jun 27 12:04:27 l2 hostapd[493515]: wlp35s0: AP-ENABLED
Jun 27 12:04:27 l2 hostapd[493515]: wlp65s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 27 12:04:38 l2 hostapd[493515]: wlp65s0: interface state COUNTRY_UPDATE->ENABLED
Jun 27 12:04:38 l2 hostapd[493515]: wlp65s0: AP-ENABLED
Jun 27 12:04:38 l2 hostapd[493515]: wlp66s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 27 12:04:49 l2 hostapd[493515]: wlp66s0: interface state COUNTRY_UPDATE->ENABLED
Jun 27 12:04:49 l2 hostapd[493515]: wlp66s0: AP-ENABLED
Jun 27 12:04:49 l2 hostapd[493515]: wlp97s0: interface state UNINITIALIZED->COUNTRY_UPDATE
Jun 27 12:05:00 l2 hostapd[493515]: wlp97s0: interface state COUNTRY_UPDATE->ENABLED
Jun 27 12:05:00 l2 hostapd[493515]: wlp97s0: AP-ENABLED
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: STA 8e:e0:57:51:77:cd IEEE 802.11: associated (aid 1)
Jun 27 12:06:55 l2 hostapd[493515]: wlp35s0: Prune association for 8e:e0:57:51:77:cd
Jun 27 12:06:55 l2 hostapd[493515]: wlp66s0: Prune association for 8e:e0:57:51:77:cd
Jun 27 12:06:55 l2 hostapd[493515]: wlp97s0: Prune association for 8e:e0:57:51:77:cd
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: STA 8e:e0:57:51:77:cd IEEE 802.11: associated (aid 1)
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: AP-STA-CONNECTED 8e:e0:57:51:77:cd
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: STA 8e:e0:57:51:77:cd RADIUS: starting accounting session 4AF6D6F1D2B4FA3E
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: STA 8e:e0:57:51:77:cd WPA: pairwise key handshake completed (RSN)
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: EAPOL-4WAY-HS-COMPLETED 8e:e0:57:51:77:cd
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: STA 8e:e0:57:51:77:cd RADIUS: starting accounting session 4AF6D6F1D2B4FA3E
Jun 27 12:06:55 l2 hostapd[493515]: wlp65s0: STA 8e:e0:57:51:77:cd WPA: pairwise key handshake completed (RSN)
Jun 27 12:07:25 l2 hostapd[493515]: wlp35s0: STA 8e:e0:57:51:77:cd IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Jun 27 12:07:25 l2 hostapd[493515]: wlp35s0: STA 8e:e0:57:51:77:cd IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Jun 27 12:07:25 l2 hostapd[493515]: wlp66s0: STA 8e:e0:57:51:77:cd IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Jun 27 12:07:25 l2 hostapd[493515]: wlp97s0: STA 8e:e0:57:51:77:cd IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Jun 27 12:07:25 l2 hostapd[493515]: wlp66s0: STA 8e:e0:57:51:77:cd IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Jun 27 12:07:25 l2 hostapd[493515]: wlp97s0: STA 8e:e0:57:51:77:cd IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
^A^C

[das@l2:~/nixos/desktop/l2]$
[das@l2:~/nixos/desktop/l2]$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.ae3c24422ba4       no              dummy0
                                                        wlp35s0
                                                        wlp65s0
                                                        wlp66s0
                                                        wlp97s0
docker0         8000.6ab3e6e8773a       no

[das@l2:~/nixos/desktop/l2]$ 

For anyone else, this is the flake that overlays the hostapd 2.10 and applies the patch.

I also copied the patch to this repo, in case anything ever happens to https://tildearrow.org/
GitHub - randomizedcoder/tildearrow_hostapd_patch: tildearrow.org/storage/hostapd-2.10-lar.patch

#
# l2/flake.nix
#
{
  description = "l2 Flake";

  # https://nix.dev/manual/nix/2.24/command-ref/new-cli/nix3-flake.html#flake-inputs
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    # https://nixos-and-flakes.thiscute.world/nixos-with-flakes/start-using-home-manager
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, home-manager, ... }:
    let
      system = "x86_64-linux";

      lib = nixpkgs.lib;

      overlays = {
        default = final: prev: {
          hostapd = prev.hostapd.overrideDerivation (old: {
            version = "2.10";
            src = final.fetchurl {
              url = "https://w1.fi/releases/hostapd-2.10.tar.gz";
              sha256 = "0pcik0a6yin9nib02frjhaglmg44hwik086iwg1751b7kdwpqvi0";
              # nix-prefetch-url https://w1.fi/releases/hostapd-2.10.tar.gz
            };
            patches = [
              (final.fetchpatch {
                url = "https://tildearrow.org/storage/hostapd-2.10-lar.patch";
                sha256 = "USiHBZH5QcUJfZSxGoFwUefq3ARc4S/KliwUm8SqvoI=";
              })
            ];
          });
        };
      };

      pkgs = import nixpkgs {
        inherit system;
        overlays = [ overlays.default ];
        config.allowUnfree = true;
      };

    in {
      nixosConfigurations = {
        l2 = lib.nixosSystem {

          inherit system;

          modules = [
            ./configuration.nix
            {
              nixpkgs.pkgs = pkgs;
            }
            home-manager.nixosModules.home-manager
            {
              home-manager.useUserPackages = true;
              home-manager.users.das = { config, pkgs, ... }: {
                imports = [ ./home.nix ];
              };
            }
          ];
        };
      };
    };
}

# end
2 Likes