summary refs log tree commit diff
path: root/nixos/modules/tasks
diff options
context:
space:
mode:
authorUli Baum <xeji@cat3.de>2018-09-23 22:55:59 +0200
committerUli Baum <xeji@cat3.de>2018-09-23 23:08:19 +0200
commit27420636772da3301d8eed2af417869f7eceac4f (patch)
tree9e8141ea212381c1e9f2aa57602c546164b7cf4c /nixos/modules/tasks
parent7df10f388dabe9af3320fe91dd715fc84f4c7e8a (diff)
downloadnixlib-27420636772da3301d8eed2af417869f7eceac4f.tar
nixlib-27420636772da3301d8eed2af417869f7eceac4f.tar.gz
nixlib-27420636772da3301d8eed2af417869f7eceac4f.tar.bz2
nixlib-27420636772da3301d8eed2af417869f7eceac4f.tar.lz
nixlib-27420636772da3301d8eed2af417869f7eceac4f.tar.xz
nixlib-27420636772da3301d8eed2af417869f7eceac4f.tar.zst
nixlib-27420636772da3301d8eed2af417869f7eceac4f.zip
nixos/network-interfaces-scripted: fix container networking bug
When a bridge interface was reconfigured, running containers using
this bridge lost connectivity: restarting network-addresses-brN.service
triggered a restart of network-setup.service via a "partOf" relationship
introduced in 07e0c0e0a2f237639600f2a0d62f6eac748b1e6e.
This in turn restarted brN-netdev.service.
The bridge was thus destroyed and recreated with the same name but a new
interface id, causing attached veth interfaces to lose their connection.

This change removes the "partOf" relationship between
network-setup.service and network-addresses-brN.service for all bridges.
Diffstat (limited to 'nixos/modules/tasks')
-rw-r--r--nixos/modules/tasks/network-interfaces-scripted.nix3
1 files changed, 2 insertions, 1 deletions
diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix
index af61c95da0af..93dfefdce902 100644
--- a/nixos/modules/tasks/network-interfaces-scripted.nix
+++ b/nixos/modules/tasks/network-interfaces-scripted.nix
@@ -85,7 +85,8 @@ let
             after = [ "network-pre.target" "systemd-udevd.service" "systemd-sysctl.service" ];
             before = [ "network.target" "shutdown.target" ];
             wants = [ "network.target" ];
-            partOf = map (i: "network-addresses-${i.name}.service") interfaces;
+            # exclude bridges from the partOf relationship to fix container networking bug #47210
+            partOf = map (i: "network-addresses-${i.name}.service") (filter (i: !(hasAttr i.name cfg.bridges)) interfaces);
             conflicts = [ "shutdown.target" ];
             wantedBy = [ "multi-user.target" ] ++ optional hasDefaultGatewaySet "network-online.target";