summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorMichele Guerini Rocco <rnhmjoj@users.noreply.github.com>2023-01-30 13:32:58 +0100
committerGitHub <noreply@github.com>2023-01-30 13:32:58 +0100
commit72c6c848eee4c81b530e768a359e0947401568e0 (patch)
treec269f42a5d28e6504d42a903617ac657a529134a /nixos
parentfaaeee3b11d5b694c7c26d6301baef41c2b12b88 (diff)
parentfed3e4cc87ac65e2a2cf4231ccec937e5edc8d8c (diff)
Merge pull request #212685 from rnhmjoj/pr-connman
nixos/wireless: fix failure on missing config file
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/networking/wpa_supplicant.nix14
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/connman.nix77
3 files changed, 87 insertions, 5 deletions
diff --git a/nixos/modules/services/networking/wpa_supplicant.nix b/nixos/modules/services/networking/wpa_supplicant.nix
index 119575bdddb4..0595e9e6df23 100644
--- a/nixos/modules/services/networking/wpa_supplicant.nix
+++ b/nixos/modules/services/networking/wpa_supplicant.nix
@@ -121,11 +121,15 @@ let
''}
# substitute environment variables
- ${pkgs.gawk}/bin/awk '{
- for(varname in ENVIRON)
- gsub("@"varname"@", ENVIRON[varname])
- print
- }' "${configFile}" > "${finalConfig}"
+ if [ -f "${configFile}" ]; then
+ ${pkgs.gawk}/bin/awk '{
+ for(varname in ENVIRON)
+ gsub("@"varname"@", ENVIRON[varname])
+ print
+ }' "${configFile}" > "${finalConfig}"
+ else
+ touch "${finalConfig}"
+ fi
iface_args="-s ${optionalString cfg.dbusControlled "-u"} -D${cfg.driver} ${configStr}"
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 12e386f1c2d5..b4bd8ef3e0f2 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -135,6 +135,7 @@ in {
cntr = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cntr.nix {};
cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {};
collectd = handleTest ./collectd.nix {};
+ connman = handleTest ./connman.nix {};
consul = handleTest ./consul.nix {};
containers-bridge = handleTest ./containers-bridge.nix {};
containers-custom-pkgs.nix = handleTest ./containers-custom-pkgs.nix {};
diff --git a/nixos/tests/connman.nix b/nixos/tests/connman.nix
new file mode 100644
index 000000000000..348b2a895a63
--- /dev/null
+++ b/nixos/tests/connman.nix
@@ -0,0 +1,77 @@
+import ./make-test-python.nix ({ pkgs, lib, ...}:
+{
+ name = "connman";
+ meta = with lib.maintainers; {
+ maintainers = [ rnhmjoj ];
+ };
+
+ # Router running radvd on VLAN 1
+ nodes.router = { ... }: {
+ imports = [ ../modules/profiles/minimal.nix ];
+
+ virtualisation.vlans = [ 1 ];
+
+ boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = true;
+
+ networking = {
+ useDHCP = false;
+ interfaces.eth1.ipv6.addresses =
+ [ { address = "fd12::1"; prefixLength = 64; } ];
+ };
+
+ services.radvd = {
+ enable = true;
+ config = ''
+ interface eth1 {
+ AdvSendAdvert on;
+ AdvManagedFlag on;
+ AdvOtherConfigFlag on;
+ prefix fd12::/64 {
+ AdvAutonomous off;
+ };
+ };
+ '';
+ };
+ };
+
+ # Client running connman, connected to VLAN 1
+ nodes.client = { ... }: {
+ virtualisation.vlans = [ 1 ];
+
+ # add a virtual wlan interface
+ boot.kernelModules = [ "mac80211_hwsim" ];
+ boot.extraModprobeConfig = ''
+ options mac80211_hwsim radios=1
+ '';
+
+ # Note: the overrides are needed because the wifi is
+ # disabled with mkVMOverride in qemu-vm.nix.
+ services.connman.enable = lib.mkOverride 0 true;
+ services.connman.networkInterfaceBlacklist = [ "eth0" ];
+ networking.wireless.enable = lib.mkOverride 0 true;
+ networking.wireless.interfaces = [ "wlan0" ];
+ };
+
+ testScript =
+ ''
+ start_all()
+
+ with subtest("Router is ready"):
+ router.wait_for_unit("radvd.service")
+
+ with subtest("Daemons are running"):
+ client.wait_for_unit("wpa_supplicant-wlan0.service")
+ client.wait_for_unit("connman.service")
+ client.wait_until_succeeds("connmanctl state | grep -q ready")
+
+ with subtest("Wired interface is configured"):
+ client.wait_until_succeeds("ip -6 route | grep -q fd12::/64")
+ client.wait_until_succeeds("ping -c 1 fd12::1")
+
+ with subtest("Can set up a wireless access point"):
+ client.succeed("connmanctl enable wifi")
+ client.wait_until_succeeds("connmanctl tether wifi on nixos-test reproducibility | grep -q 'Enabled'")
+ client.wait_until_succeeds("iw wlan0 info | grep -q nixos-test")
+ '';
+})
+