nixos/wireless: make wireless.interfaces mandatory
This is the only way to solve issue #101963, for now.master
parent
36d3d4575d
commit
030a521adc
|
@ -192,6 +192,15 @@
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
|
<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>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
If you are using <option>services.udev.extraRules</option> to assign
|
If you are using <option>services.udev.extraRules</option> to assign
|
||||||
|
|
|
@ -40,8 +40,7 @@ in {
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "wlan0" "wlan1" ];
|
example = [ "wlan0" "wlan1" ];
|
||||||
description = ''
|
description = ''
|
||||||
The interfaces <command>wpa_supplicant</command> will use. If empty, it will
|
The interfaces <command>wpa_supplicant</command> will use.
|
||||||
automatically use all wireless interfaces.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -220,7 +219,14 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
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;
|
assertion = with cfg; count (x: x != null) [ psk pskRaw auth ] <= 1;
|
||||||
message = ''options networking.wireless."${name}".{psk,pskRaw,auth} are mutually exclusive'';
|
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."
|
then echo >&2 "<3>/etc/wpa_supplicant.conf present but ignored. Generated ${configFile} is used instead."
|
||||||
fi
|
fi
|
||||||
iface_args="-s -u -D${cfg.driver} ${configStr}"
|
iface_args="-s -u -D${cfg.driver} ${configStr}"
|
||||||
${if ifaces == [] then ''
|
args="${concatMapStringsSep " -N " (i: "-i${i} $iface_args") ifaces}"
|
||||||
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}"
|
|
||||||
''}
|
|
||||||
exec wpa_supplicant $args
|
exec wpa_supplicant $args
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue