Unverified Commit 186edce0 authored by Ryan Lahfa's avatar Ryan Lahfa Committed by GitHub
Browse files

Merge pull request #241362 from RaitoBezarius/macvtap-networkd

parents e809af74 6b9e4923
Loading
Loading
Loading
Loading
+242 −0
Original line number Diff line number Diff line
@@ -582,6 +582,7 @@ let
          "VLAN"
          "IPVLAN"
          "MACVLAN"
          "MACVTAP"
          "VXLAN"
          "Tunnel"
          "MACsec"
@@ -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;
@@ -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}";