at master 10 kB view raw
1{ lib, systemdUtils }: 2 3let 4 inherit (lib) 5 concatMapStrings 6 concatStringsSep 7 flip 8 optionalString 9 ; 10 11 attrsToSection = systemdUtils.lib.attrsToSection; 12 commonMatchText = 13 def: 14 optionalString (def.matchConfig != { }) '' 15 [Match] 16 ${attrsToSection def.matchConfig} 17 ''; 18in 19{ 20 linkToUnit = 21 def: 22 commonMatchText def 23 + '' 24 [Link] 25 ${attrsToSection def.linkConfig} 26 '' 27 + def.extraConfig; 28 29 netdevToUnit = 30 def: 31 commonMatchText def 32 + '' 33 [NetDev] 34 ${attrsToSection def.netdevConfig} 35 '' 36 + optionalString (def.bridgeConfig != { }) '' 37 [Bridge] 38 ${attrsToSection def.bridgeConfig} 39 '' 40 + optionalString (def.vlanConfig != { }) '' 41 [VLAN] 42 ${attrsToSection def.vlanConfig} 43 '' 44 + optionalString (def.ipvlanConfig != { }) '' 45 [IPVLAN] 46 ${attrsToSection def.ipvlanConfig} 47 '' 48 + optionalString (def.ipvtapConfig != { }) '' 49 [IPVTAP] 50 ${attrsToSection def.ipvtapConfig} 51 '' 52 + optionalString (def.macvlanConfig != { }) '' 53 [MACVLAN] 54 ${attrsToSection def.macvlanConfig} 55 '' 56 + optionalString (def.vxlanConfig != { }) '' 57 [VXLAN] 58 ${attrsToSection def.vxlanConfig} 59 '' 60 + optionalString (def.tunnelConfig != { }) '' 61 [Tunnel] 62 ${attrsToSection def.tunnelConfig} 63 '' 64 + optionalString (def.fooOverUDPConfig != { }) '' 65 [FooOverUDP] 66 ${attrsToSection def.fooOverUDPConfig} 67 '' 68 + optionalString (def.peerConfig != { }) '' 69 [Peer] 70 ${attrsToSection def.peerConfig} 71 '' 72 + optionalString (def.tunConfig != { }) '' 73 [Tun] 74 ${attrsToSection def.tunConfig} 75 '' 76 + optionalString (def.tapConfig != { }) '' 77 [Tap] 78 ${attrsToSection def.tapConfig} 79 '' 80 + optionalString (def.l2tpConfig != { }) '' 81 [L2TP] 82 ${attrsToSection def.l2tpConfig} 83 '' 84 + flip concatMapStrings def.l2tpSessions (x: '' 85 [L2TPSession] 86 ${attrsToSection x} 87 '') 88 + optionalString (def.wireguardConfig != { }) '' 89 [WireGuard] 90 ${attrsToSection def.wireguardConfig} 91 '' 92 + flip concatMapStrings def.wireguardPeers (x: '' 93 [WireGuardPeer] 94 ${attrsToSection x} 95 '') 96 + optionalString (def.bondConfig != { }) '' 97 [Bond] 98 ${attrsToSection def.bondConfig} 99 '' 100 + optionalString (def.xfrmConfig != { }) '' 101 [Xfrm] 102 ${attrsToSection def.xfrmConfig} 103 '' 104 + optionalString (def.vrfConfig != { }) '' 105 [VRF] 106 ${attrsToSection def.vrfConfig} 107 '' 108 + optionalString (def.wlanConfig != { }) '' 109 [WLAN] 110 ${attrsToSection def.wlanConfig} 111 '' 112 + optionalString (def.batmanAdvancedConfig != { }) '' 113 [BatmanAdvanced] 114 ${attrsToSection def.batmanAdvancedConfig} 115 '' 116 + def.extraConfig; 117 118 networkToUnit = 119 def: 120 commonMatchText def 121 + optionalString (def.linkConfig != { }) '' 122 [Link] 123 ${attrsToSection def.linkConfig} 124 '' 125 + '' 126 [Network] 127 '' 128 + attrsToSection def.networkConfig 129 + optionalString (def.address != [ ]) '' 130 ${concatStringsSep "\n" (map (s: "Address=${s}") def.address)} 131 '' 132 + optionalString (def.gateway != [ ]) '' 133 ${concatStringsSep "\n" (map (s: "Gateway=${s}") def.gateway)} 134 '' 135 + optionalString (def.dns != [ ]) '' 136 ${concatStringsSep "\n" (map (s: "DNS=${s}") def.dns)} 137 '' 138 + optionalString (def.ntp != [ ]) '' 139 ${concatStringsSep "\n" (map (s: "NTP=${s}") def.ntp)} 140 '' 141 + optionalString (def.bridge != [ ]) '' 142 ${concatStringsSep "\n" (map (s: "Bridge=${s}") def.bridge)} 143 '' 144 + optionalString (def.bond != [ ]) '' 145 ${concatStringsSep "\n" (map (s: "Bond=${s}") def.bond)} 146 '' 147 + optionalString (def.vrf != [ ]) '' 148 ${concatStringsSep "\n" (map (s: "VRF=${s}") def.vrf)} 149 '' 150 + optionalString (def.vlan != [ ]) '' 151 ${concatStringsSep "\n" (map (s: "VLAN=${s}") def.vlan)} 152 '' 153 + optionalString (def.macvlan != [ ]) '' 154 ${concatStringsSep "\n" (map (s: "MACVLAN=${s}") def.macvlan)} 155 '' 156 + optionalString (def.macvtap != [ ]) '' 157 ${concatStringsSep "\n" (map (s: "MACVTAP=${s}") def.macvtap)} 158 '' 159 + optionalString (def.vxlan != [ ]) '' 160 ${concatStringsSep "\n" (map (s: "VXLAN=${s}") def.vxlan)} 161 '' 162 + optionalString (def.tunnel != [ ]) '' 163 ${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)} 164 '' 165 + optionalString (def.xfrm != [ ]) '' 166 ${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)} 167 '' 168 + "\n" 169 + flip concatMapStrings def.addresses (x: '' 170 [Address] 171 ${attrsToSection x} 172 '') 173 + flip concatMapStrings def.routingPolicyRules (x: '' 174 [RoutingPolicyRule] 175 ${attrsToSection x} 176 '') 177 + flip concatMapStrings def.routes (x: '' 178 [Route] 179 ${attrsToSection x} 180 '') 181 + optionalString (def.dhcpV4Config != { }) '' 182 [DHCPv4] 183 ${attrsToSection def.dhcpV4Config} 184 '' 185 + optionalString (def.dhcpV6Config != { }) '' 186 [DHCPv6] 187 ${attrsToSection def.dhcpV6Config} 188 '' 189 + optionalString (def.dhcpPrefixDelegationConfig != { }) '' 190 [DHCPPrefixDelegation] 191 ${attrsToSection def.dhcpPrefixDelegationConfig} 192 '' 193 + optionalString (def.ipv6AcceptRAConfig != { }) '' 194 [IPv6AcceptRA] 195 ${attrsToSection def.ipv6AcceptRAConfig} 196 '' 197 + optionalString (def.dhcpServerConfig != { }) '' 198 [DHCPServer] 199 ${attrsToSection def.dhcpServerConfig} 200 '' 201 + optionalString (def.ipv6SendRAConfig != { }) '' 202 [IPv6SendRA] 203 ${attrsToSection def.ipv6SendRAConfig} 204 '' 205 + flip concatMapStrings def.ipv6PREF64Prefixes (x: '' 206 [IPv6PREF64Prefix] 207 ${attrsToSection x} 208 '') 209 + flip concatMapStrings def.ipv6Prefixes (x: '' 210 [IPv6Prefix] 211 ${attrsToSection x} 212 '') 213 + flip concatMapStrings def.ipv6RoutePrefixes (x: '' 214 [IPv6RoutePrefix] 215 ${attrsToSection x} 216 '') 217 + flip concatMapStrings def.dhcpServerStaticLeases (x: '' 218 [DHCPServerStaticLease] 219 ${attrsToSection x} 220 '') 221 + optionalString (def.bridgeConfig != { }) '' 222 [Bridge] 223 ${attrsToSection def.bridgeConfig} 224 '' 225 + flip concatMapStrings def.bridgeFDBs (x: '' 226 [BridgeFDB] 227 ${attrsToSection x} 228 '') 229 + flip concatMapStrings def.bridgeMDBs (x: '' 230 [BridgeMDB] 231 ${attrsToSection x} 232 '') 233 + optionalString (def.lldpConfig != { }) '' 234 [LLDP] 235 ${attrsToSection def.lldpConfig} 236 '' 237 + optionalString (def.canConfig != { }) '' 238 [CAN] 239 ${attrsToSection def.canConfig} 240 '' 241 + optionalString (def.ipoIBConfig != { }) '' 242 [IPoIB] 243 ${attrsToSection def.ipoIBConfig} 244 '' 245 + optionalString (def.qdiscConfig != { }) '' 246 [QDisc] 247 ${attrsToSection def.qdiscConfig} 248 '' 249 + optionalString (def.networkEmulatorConfig != { }) '' 250 [NetworkEmulator] 251 ${attrsToSection def.networkEmulatorConfig} 252 '' 253 + optionalString (def.tokenBucketFilterConfig != { }) '' 254 [TokenBucketFilter] 255 ${attrsToSection def.tokenBucketFilterConfig} 256 '' 257 + optionalString (def.pieConfig != { }) '' 258 [PIE] 259 ${attrsToSection def.pieConfig} 260 '' 261 + optionalString (def.flowQueuePIEConfig != { }) '' 262 [FlowQueuePIE] 263 ${attrsToSection def.flowQueuePIEConfig} 264 '' 265 + optionalString (def.stochasticFairBlueConfig != { }) '' 266 [StochasticFairBlue] 267 ${attrsToSection def.stochasticFairBlueConfig} 268 '' 269 + optionalString (def.stochasticFairnessQueueingConfig != { }) '' 270 [StochasticFairnessQueueing] 271 ${attrsToSection def.stochasticFairnessQueueingConfig} 272 '' 273 + optionalString (def.bfifoConfig != { }) '' 274 [BFIFO] 275 ${attrsToSection def.bfifoConfig} 276 '' 277 + optionalString (def.pfifoConfig != { }) '' 278 [PFIFO] 279 ${attrsToSection def.pfifoConfig} 280 '' 281 + optionalString (def.pfifoHeadDropConfig != { }) '' 282 [PFIFOHeadDrop] 283 ${attrsToSection def.pfifoHeadDropConfig} 284 '' 285 + optionalString (def.pfifoFastConfig != { }) '' 286 [PFIFOFast] 287 ${attrsToSection def.pfifoFastConfig} 288 '' 289 + optionalString (def.cakeConfig != { }) '' 290 [CAKE] 291 ${attrsToSection def.cakeConfig} 292 '' 293 + optionalString (def.controlledDelayConfig != { }) '' 294 [ControlledDelay] 295 ${attrsToSection def.controlledDelayConfig} 296 '' 297 + optionalString (def.deficitRoundRobinSchedulerConfig != { }) '' 298 [DeficitRoundRobinScheduler] 299 ${attrsToSection def.deficitRoundRobinSchedulerConfig} 300 '' 301 + optionalString (def.deficitRoundRobinSchedulerClassConfig != { }) '' 302 [DeficitRoundRobinSchedulerClass] 303 ${attrsToSection def.deficitRoundRobinSchedulerClassConfig} 304 '' 305 + optionalString (def.enhancedTransmissionSelectionConfig != { }) '' 306 [EnhancedTransmissionSelection] 307 ${attrsToSection def.enhancedTransmissionSelectionConfig} 308 '' 309 + optionalString (def.genericRandomEarlyDetectionConfig != { }) '' 310 [GenericRandomEarlyDetection] 311 ${attrsToSection def.genericRandomEarlyDetectionConfig} 312 '' 313 + optionalString (def.fairQueueingControlledDelayConfig != { }) '' 314 [FairQueueingControlledDelay] 315 ${attrsToSection def.fairQueueingControlledDelayConfig} 316 '' 317 + optionalString (def.fairQueueingConfig != { }) '' 318 [FairQueueing] 319 ${attrsToSection def.fairQueueingConfig} 320 '' 321 + optionalString (def.trivialLinkEqualizerConfig != { }) '' 322 [TrivialLinkEqualizer] 323 ${attrsToSection def.trivialLinkEqualizerConfig} 324 '' 325 + optionalString (def.hierarchyTokenBucketConfig != { }) '' 326 [HierarchyTokenBucket] 327 ${attrsToSection def.hierarchyTokenBucketConfig} 328 '' 329 + optionalString (def.hierarchyTokenBucketClassConfig != { }) '' 330 [HierarchyTokenBucketClass] 331 ${attrsToSection def.hierarchyTokenBucketClassConfig} 332 '' 333 + optionalString (def.heavyHitterFilterConfig != { }) '' 334 [HeavyHitterFilter] 335 ${attrsToSection def.heavyHitterFilterConfig} 336 '' 337 + optionalString (def.quickFairQueueingConfig != { }) '' 338 [QuickFairQueueing] 339 ${attrsToSection def.quickFairQueueingConfig} 340 '' 341 + optionalString (def.quickFairQueueingConfigClass != { }) '' 342 [QuickFairQueueingClass] 343 ${attrsToSection def.quickFairQueueingConfigClass} 344 '' 345 + flip concatMapStrings def.bridgeVLANs (x: '' 346 [BridgeVLAN] 347 ${attrsToSection x} 348 '') 349 + def.extraConfig; 350 351}