about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichele Guerini Rocco <rnhmjoj@users.noreply.github.com>2021-06-06 10:35:15 +0200
committerGitHub <noreply@github.com>2021-06-06 10:35:15 +0200
commit78d9a75d9e4877f712b26239900c97150ad97870 (patch)
tree0b0b18b7426c942ced58931bc2cbdd661d19cf4b
parentfb4023f046648ce248948ef229e0c23e48718458 (diff)
parent030a521adc9510207dd9f06b8d8b552ff7d999f9 (diff)
Merge pull request #125288 from rnhmjoj/wpa-race-fix
nixos/wireless: make wireless.interfaces mandatory
-rw-r--r--nixos/doc/manual/release-notes/rl-2105.xml9
-rw-r--r--nixos/modules/services/networking/wpa_supplicant.nix27
2 files changed, 19 insertions, 17 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2105.xml b/nixos/doc/manual/release-notes/rl-2105.xml
index 54abbb6e38e4a..bdc2386f24c85 100644
--- a/nixos/doc/manual/release-notes/rl-2105.xml
+++ b/nixos/doc/manual/release-notes/rl-2105.xml
@@ -183,6 +183,15 @@
 
    <listitem>
     <para>
+     Enabling wireless networking now requires specifying at least one network
+     interface using <xref linkend="opt-networking.wireless.interfaces"/>.
+     This is to avoid a race condition with the card initialisation (see
+     <link xlink:href="https://github.com/NixOS/nixpkgs/issues/101963">issue
+     #101963</link> for more information).
+    </para>
+   </listitem>
+   <listitem>
+    <para>
      If you are using <option>services.udev.extraRules</option> to assign
      custom names to network interfaces, this may stop working due to a change
      in the initialisation of dhcpcd and systemd networkd. To avoid this, either
diff --git a/nixos/modules/services/networking/wpa_supplicant.nix b/nixos/modules/services/networking/wpa_supplicant.nix
index 8a0685c3d96b2..d9308b37064a6 100644
--- a/nixos/modules/services/networking/wpa_supplicant.nix
+++ b/nixos/modules/services/networking/wpa_supplicant.nix
@@ -40,8 +40,7 @@ in {
         default = [];
         example = [ "wlan0" "wlan1" ];
         description = ''
-          The interfaces <command>wpa_supplicant</command> will use. If empty, it will
-          automatically use all wireless interfaces.
+          The interfaces <command>wpa_supplicant</command> will use.
         '';
       };
 
@@ -220,7 +219,14 @@ in {
   };
 
   config = mkIf cfg.enable {
-    assertions = flip mapAttrsToList cfg.networks (name: cfg: {
+    assertions = [
+      { assertion = cfg.interfaces != [];
+        message = ''
+          No network interfaces for wpa_supplicant have been configured.
+          Please, specify at least one using networking.wireless.interfaces.
+        '';
+      }
+    ] ++ flip mapAttrsToList cfg.networks (name: cfg: {
       assertion = with cfg; count (x: x != null) [ psk pskRaw auth ] <= 1;
       message = ''options networking.wireless."${name}".{psk,pskRaw,auth} are mutually exclusive'';
     });
@@ -255,20 +261,7 @@ in {
         then echo >&2 "<3>/etc/wpa_supplicant.conf present but ignored. Generated ${configFile} is used instead."
         fi
         iface_args="-s -u -D${cfg.driver} ${configStr}"
-        ${if ifaces == [] then ''
-          for i in $(cd /sys/class/net && echo *); do
-            DEVTYPE=
-            UEVENT_PATH=/sys/class/net/$i/uevent
-            if [ -e "$UEVENT_PATH" ]; then
-              source "$UEVENT_PATH"
-              if [ "$DEVTYPE" = "wlan" -o -e /sys/class/net/$i/wireless ]; then
-                args+="''${args:+ -N} -i$i $iface_args"
-              fi
-            fi
-          done
-        '' else ''
-          args="${concatMapStringsSep " -N " (i: "-i${i} $iface_args") ifaces}"
-        ''}
+        args="${concatMapStringsSep " -N " (i: "-i${i} $iface_args") ifaces}"
         exec wpa_supplicant $args
       '';
     };