Loading nixos/modules/system/boot/networkd.nix +242 −0 Original line number Diff line number Diff line Loading @@ -582,6 +582,7 @@ let "VLAN" "IPVLAN" "MACVLAN" "MACVTAP" "VXLAN" "Tunnel" "MACsec" Loading Loading @@ -2504,6 +2505,15 @@ let ''; }; macvtap = mkOption { default = [ ]; type = types.listOf types.str; description = lib.mdDoc '' A list of macvtap interfaces to be added to the network section of the unit. See {manpage}`systemd.network(5)` for details. ''; }; vxlan = mkOption { default = [ ]; type = types.listOf types.str; Loading Loading @@ -2619,6 +2629,238 @@ let ${attrsToSection def.dhcpV6Config} ''; }; networkToUnit = name: def: { inherit (def) enable; text = commonMatchText def + optionalString (def.linkConfig != { }) '' [Link] ${attrsToSection def.linkConfig} '' + '' [Network] '' + attrsToSection def.networkConfig + optionalString (def.address != [ ]) '' ${concatStringsSep "\n" (map (s: "Address=${s}") def.address)} '' + optionalString (def.gateway != [ ]) '' ${concatStringsSep "\n" (map (s: "Gateway=${s}") def.gateway)} '' + optionalString (def.dns != [ ]) '' ${concatStringsSep "\n" (map (s: "DNS=${s}") def.dns)} '' + optionalString (def.ntp != [ ]) '' ${concatStringsSep "\n" (map (s: "NTP=${s}") def.ntp)} '' + optionalString (def.bridge != [ ]) '' ${concatStringsSep "\n" (map (s: "Bridge=${s}") def.bridge)} '' + optionalString (def.bond != [ ]) '' ${concatStringsSep "\n" (map (s: "Bond=${s}") def.bond)} '' + optionalString (def.vrf != [ ]) '' ${concatStringsSep "\n" (map (s: "VRF=${s}") def.vrf)} '' + optionalString (def.vlan != [ ]) '' ${concatStringsSep "\n" (map (s: "VLAN=${s}") def.vlan)} '' + optionalString (def.macvlan != [ ]) '' ${concatStringsSep "\n" (map (s: "MACVLAN=${s}") def.macvlan)} '' + optionalString (def.macvtap != [ ]) '' ${concatStringsSep "\n" (map (s: "MACVTAP=${s}") def.macvtap)} '' + optionalString (def.vxlan != [ ]) '' ${concatStringsSep "\n" (map (s: "VXLAN=${s}") def.vxlan)} '' + optionalString (def.tunnel != [ ]) '' ${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)} '' + optionalString (def.xfrm != [ ]) '' ${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)} '' + '' '' + flip concatMapStrings def.addresses (x: '' [Address] ${attrsToSection x.addressConfig} '') + flip concatMapStrings def.routingPolicyRules (x: '' [RoutingPolicyRule] ${attrsToSection x.routingPolicyRuleConfig} '') + flip concatMapStrings def.routes (x: '' [Route] ${attrsToSection x.routeConfig} '') + optionalString (def.dhcpV4Config != { }) '' [DHCPv4] ${attrsToSection def.dhcpV4Config} '' + optionalString (def.dhcpV6Config != { }) '' [DHCPv6] ${attrsToSection def.dhcpV6Config} '' + optionalString (def.dhcpPrefixDelegationConfig != { }) '' [DHCPPrefixDelegation] ${attrsToSection def.dhcpPrefixDelegationConfig} '' + optionalString (def.ipv6AcceptRAConfig != { }) '' [IPv6AcceptRA] ${attrsToSection def.ipv6AcceptRAConfig} '' + optionalString (def.dhcpServerConfig != { }) '' [DHCPServer] ${attrsToSection def.dhcpServerConfig} '' + optionalString (def.ipv6SendRAConfig != { }) '' [IPv6SendRA] ${attrsToSection def.ipv6SendRAConfig} '' + flip concatMapStrings def.ipv6Prefixes (x: '' [IPv6Prefix] ${attrsToSection x.ipv6PrefixConfig} '') + flip concatMapStrings def.ipv6RoutePrefixes (x: '' [IPv6RoutePrefix] ${attrsToSection x.ipv6RoutePrefixConfig} '') + flip concatMapStrings def.dhcpServerStaticLeases (x: '' [DHCPServerStaticLease] ${attrsToSection x.dhcpServerStaticLeaseConfig} '') + optionalString (def.bridgeConfig != { }) '' [Bridge] ${attrsToSection def.bridgeConfig} '' + flip concatMapStrings def.bridgeFDBs (x: '' [BridgeFDB] ${attrsToSection x.bridgeFDBConfig} '') + flip concatMapStrings def.bridgeMDBs (x: '' [BridgeMDB] ${attrsToSection x.bridgeMDBConfig} '') + optionalString (def.lldpConfig != { }) '' [LLDP] ${attrsToSection def.lldpConfig} '' + optionalString (def.canConfig != { }) '' [CAN] ${attrsToSection def.canConfig} '' + optionalString (def.ipoIBConfig != { }) '' [IPoIB] ${attrsToSection def.ipoIBConfig} '' + optionalString (def.qdiscConfig != { }) '' [QDisc] ${attrsToSection def.qdiscConfig} '' + optionalString (def.networkEmulatorConfig != { }) '' [NetworkEmulator] ${attrsToSection def.networkEmulatorConfig} '' + optionalString (def.tokenBucketFilterConfig != { }) '' [TokenBucketFilter] ${attrsToSection def.tokenBucketFilterConfig} '' + optionalString (def.pieConfig != { }) '' [PIE] ${attrsToSection def.pieConfig} '' + optionalString (def.flowQueuePIEConfig != { }) '' [FlowQueuePIE] ${attrsToSection def.flowQueuePIEConfig} '' + optionalString (def.stochasticFairBlueConfig != { }) '' [StochasticFairBlue] ${attrsToSection def.stochasticFairBlueConfig} '' + optionalString (def.stochasticFairnessQueueingConfig != { }) '' [StochasticFairnessQueueing] ${attrsToSection def.stochasticFairnessQueueingConfig} '' + optionalString (def.bfifoConfig != { }) '' [BFIFO] ${attrsToSection def.bfifoConfig} '' + optionalString (def.pfifoConfig != { }) '' [PFIFO] ${attrsToSection def.pfifoConfig} '' + optionalString (def.pfifoHeadDropConfig != { }) '' [PFIFOHeadDrop] ${attrsToSection def.pfifoHeadDropConfig} '' + optionalString (def.pfifoFastConfig != { }) '' [PFIFOFast] ${attrsToSection def.pfifoFastConfig} '' + optionalString (def.cakeConfig != { }) '' [CAKE] ${attrsToSection def.cakeConfig} '' + optionalString (def.controlledDelayConfig != { }) '' [ControlledDelay] ${attrsToSection def.controlledDelayConfig} '' + optionalString (def.deficitRoundRobinSchedulerConfig != { }) '' [DeficitRoundRobinScheduler] ${attrsToSection def.deficitRoundRobinSchedulerConfig} '' + optionalString (def.deficitRoundRobinSchedulerClassConfig != { }) '' [DeficitRoundRobinSchedulerClass] ${attrsToSection def.deficitRoundRobinSchedulerClassConfig} '' + optionalString (def.enhancedTransmissionSelectionConfig != { }) '' [EnhancedTransmissionSelection] ${attrsToSection def.enhancedTransmissionSelectionConfig} '' + optionalString (def.genericRandomEarlyDetectionConfig != { }) '' [GenericRandomEarlyDetection] ${attrsToSection def.genericRandomEarlyDetectionConfig} '' + optionalString (def.fairQueueingControlledDelayConfig != { }) '' [FairQueueingControlledDelay] ${attrsToSection def.fairQueueingControlledDelayConfig} '' + optionalString (def.fairQueueingConfig != { }) '' [FairQueueing] ${attrsToSection def.fairQueueingConfig} '' + optionalString (def.trivialLinkEqualizerConfig != { }) '' [TrivialLinkEqualizer] ${attrsToSection def.trivialLinkEqualizerConfig} '' + optionalString (def.hierarchyTokenBucketConfig != { }) '' [HierarchyTokenBucket] ${attrsToSection def.hierarchyTokenBucketConfig} '' + optionalString (def.hierarchyTokenBucketClassConfig != { }) '' [HierarchyTokenBucketClass] ${attrsToSection def.hierarchyTokenBucketClassConfig} '' + optionalString (def.heavyHitterFilterConfig != { }) '' [HeavyHitterFilter] ${attrsToSection def.heavyHitterFilterConfig} '' + optionalString (def.quickFairQueueingConfig != { }) '' [QuickFairQueueing] ${attrsToSection def.quickFairQueueingConfig} '' + optionalString (def.quickFairQueueingConfigClass != { }) '' [QuickFairQueueingClass] ${attrsToSection def.quickFairQueueingConfigClass} '' + flip concatMapStrings def.bridgeVLANs (x: '' [BridgeVLAN] ${attrsToSection x.bridgeVLANConfig} '') + def.extraConfig; }; mkUnitFiles = prefix: cfg: listToAttrs (map (name: { name = "${prefix}systemd/network/${name}"; value.source = "${cfg.units.${name}.unit}/${name}"; Loading Loading
nixos/modules/system/boot/networkd.nix +242 −0 Original line number Diff line number Diff line Loading @@ -582,6 +582,7 @@ let "VLAN" "IPVLAN" "MACVLAN" "MACVTAP" "VXLAN" "Tunnel" "MACsec" Loading Loading @@ -2504,6 +2505,15 @@ let ''; }; macvtap = mkOption { default = [ ]; type = types.listOf types.str; description = lib.mdDoc '' A list of macvtap interfaces to be added to the network section of the unit. See {manpage}`systemd.network(5)` for details. ''; }; vxlan = mkOption { default = [ ]; type = types.listOf types.str; Loading Loading @@ -2619,6 +2629,238 @@ let ${attrsToSection def.dhcpV6Config} ''; }; networkToUnit = name: def: { inherit (def) enable; text = commonMatchText def + optionalString (def.linkConfig != { }) '' [Link] ${attrsToSection def.linkConfig} '' + '' [Network] '' + attrsToSection def.networkConfig + optionalString (def.address != [ ]) '' ${concatStringsSep "\n" (map (s: "Address=${s}") def.address)} '' + optionalString (def.gateway != [ ]) '' ${concatStringsSep "\n" (map (s: "Gateway=${s}") def.gateway)} '' + optionalString (def.dns != [ ]) '' ${concatStringsSep "\n" (map (s: "DNS=${s}") def.dns)} '' + optionalString (def.ntp != [ ]) '' ${concatStringsSep "\n" (map (s: "NTP=${s}") def.ntp)} '' + optionalString (def.bridge != [ ]) '' ${concatStringsSep "\n" (map (s: "Bridge=${s}") def.bridge)} '' + optionalString (def.bond != [ ]) '' ${concatStringsSep "\n" (map (s: "Bond=${s}") def.bond)} '' + optionalString (def.vrf != [ ]) '' ${concatStringsSep "\n" (map (s: "VRF=${s}") def.vrf)} '' + optionalString (def.vlan != [ ]) '' ${concatStringsSep "\n" (map (s: "VLAN=${s}") def.vlan)} '' + optionalString (def.macvlan != [ ]) '' ${concatStringsSep "\n" (map (s: "MACVLAN=${s}") def.macvlan)} '' + optionalString (def.macvtap != [ ]) '' ${concatStringsSep "\n" (map (s: "MACVTAP=${s}") def.macvtap)} '' + optionalString (def.vxlan != [ ]) '' ${concatStringsSep "\n" (map (s: "VXLAN=${s}") def.vxlan)} '' + optionalString (def.tunnel != [ ]) '' ${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)} '' + optionalString (def.xfrm != [ ]) '' ${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)} '' + '' '' + flip concatMapStrings def.addresses (x: '' [Address] ${attrsToSection x.addressConfig} '') + flip concatMapStrings def.routingPolicyRules (x: '' [RoutingPolicyRule] ${attrsToSection x.routingPolicyRuleConfig} '') + flip concatMapStrings def.routes (x: '' [Route] ${attrsToSection x.routeConfig} '') + optionalString (def.dhcpV4Config != { }) '' [DHCPv4] ${attrsToSection def.dhcpV4Config} '' + optionalString (def.dhcpV6Config != { }) '' [DHCPv6] ${attrsToSection def.dhcpV6Config} '' + optionalString (def.dhcpPrefixDelegationConfig != { }) '' [DHCPPrefixDelegation] ${attrsToSection def.dhcpPrefixDelegationConfig} '' + optionalString (def.ipv6AcceptRAConfig != { }) '' [IPv6AcceptRA] ${attrsToSection def.ipv6AcceptRAConfig} '' + optionalString (def.dhcpServerConfig != { }) '' [DHCPServer] ${attrsToSection def.dhcpServerConfig} '' + optionalString (def.ipv6SendRAConfig != { }) '' [IPv6SendRA] ${attrsToSection def.ipv6SendRAConfig} '' + flip concatMapStrings def.ipv6Prefixes (x: '' [IPv6Prefix] ${attrsToSection x.ipv6PrefixConfig} '') + flip concatMapStrings def.ipv6RoutePrefixes (x: '' [IPv6RoutePrefix] ${attrsToSection x.ipv6RoutePrefixConfig} '') + flip concatMapStrings def.dhcpServerStaticLeases (x: '' [DHCPServerStaticLease] ${attrsToSection x.dhcpServerStaticLeaseConfig} '') + optionalString (def.bridgeConfig != { }) '' [Bridge] ${attrsToSection def.bridgeConfig} '' + flip concatMapStrings def.bridgeFDBs (x: '' [BridgeFDB] ${attrsToSection x.bridgeFDBConfig} '') + flip concatMapStrings def.bridgeMDBs (x: '' [BridgeMDB] ${attrsToSection x.bridgeMDBConfig} '') + optionalString (def.lldpConfig != { }) '' [LLDP] ${attrsToSection def.lldpConfig} '' + optionalString (def.canConfig != { }) '' [CAN] ${attrsToSection def.canConfig} '' + optionalString (def.ipoIBConfig != { }) '' [IPoIB] ${attrsToSection def.ipoIBConfig} '' + optionalString (def.qdiscConfig != { }) '' [QDisc] ${attrsToSection def.qdiscConfig} '' + optionalString (def.networkEmulatorConfig != { }) '' [NetworkEmulator] ${attrsToSection def.networkEmulatorConfig} '' + optionalString (def.tokenBucketFilterConfig != { }) '' [TokenBucketFilter] ${attrsToSection def.tokenBucketFilterConfig} '' + optionalString (def.pieConfig != { }) '' [PIE] ${attrsToSection def.pieConfig} '' + optionalString (def.flowQueuePIEConfig != { }) '' [FlowQueuePIE] ${attrsToSection def.flowQueuePIEConfig} '' + optionalString (def.stochasticFairBlueConfig != { }) '' [StochasticFairBlue] ${attrsToSection def.stochasticFairBlueConfig} '' + optionalString (def.stochasticFairnessQueueingConfig != { }) '' [StochasticFairnessQueueing] ${attrsToSection def.stochasticFairnessQueueingConfig} '' + optionalString (def.bfifoConfig != { }) '' [BFIFO] ${attrsToSection def.bfifoConfig} '' + optionalString (def.pfifoConfig != { }) '' [PFIFO] ${attrsToSection def.pfifoConfig} '' + optionalString (def.pfifoHeadDropConfig != { }) '' [PFIFOHeadDrop] ${attrsToSection def.pfifoHeadDropConfig} '' + optionalString (def.pfifoFastConfig != { }) '' [PFIFOFast] ${attrsToSection def.pfifoFastConfig} '' + optionalString (def.cakeConfig != { }) '' [CAKE] ${attrsToSection def.cakeConfig} '' + optionalString (def.controlledDelayConfig != { }) '' [ControlledDelay] ${attrsToSection def.controlledDelayConfig} '' + optionalString (def.deficitRoundRobinSchedulerConfig != { }) '' [DeficitRoundRobinScheduler] ${attrsToSection def.deficitRoundRobinSchedulerConfig} '' + optionalString (def.deficitRoundRobinSchedulerClassConfig != { }) '' [DeficitRoundRobinSchedulerClass] ${attrsToSection def.deficitRoundRobinSchedulerClassConfig} '' + optionalString (def.enhancedTransmissionSelectionConfig != { }) '' [EnhancedTransmissionSelection] ${attrsToSection def.enhancedTransmissionSelectionConfig} '' + optionalString (def.genericRandomEarlyDetectionConfig != { }) '' [GenericRandomEarlyDetection] ${attrsToSection def.genericRandomEarlyDetectionConfig} '' + optionalString (def.fairQueueingControlledDelayConfig != { }) '' [FairQueueingControlledDelay] ${attrsToSection def.fairQueueingControlledDelayConfig} '' + optionalString (def.fairQueueingConfig != { }) '' [FairQueueing] ${attrsToSection def.fairQueueingConfig} '' + optionalString (def.trivialLinkEqualizerConfig != { }) '' [TrivialLinkEqualizer] ${attrsToSection def.trivialLinkEqualizerConfig} '' + optionalString (def.hierarchyTokenBucketConfig != { }) '' [HierarchyTokenBucket] ${attrsToSection def.hierarchyTokenBucketConfig} '' + optionalString (def.hierarchyTokenBucketClassConfig != { }) '' [HierarchyTokenBucketClass] ${attrsToSection def.hierarchyTokenBucketClassConfig} '' + optionalString (def.heavyHitterFilterConfig != { }) '' [HeavyHitterFilter] ${attrsToSection def.heavyHitterFilterConfig} '' + optionalString (def.quickFairQueueingConfig != { }) '' [QuickFairQueueing] ${attrsToSection def.quickFairQueueingConfig} '' + optionalString (def.quickFairQueueingConfigClass != { }) '' [QuickFairQueueingClass] ${attrsToSection def.quickFairQueueingConfigClass} '' + flip concatMapStrings def.bridgeVLANs (x: '' [BridgeVLAN] ${attrsToSection x.bridgeVLANConfig} '') + def.extraConfig; }; mkUnitFiles = prefix: cfg: listToAttrs (map (name: { name = "${prefix}systemd/network/${name}"; value.source = "${cfg.units.${name}.unit}/${name}"; Loading