azure-cli: 2.66.0 -> 2.67.0 (#357241)
[NixPkgs.git] / nixos / lib / systemd-network-units.nix
blobc35309a6d2628c6d5ad36284b50cdadea9a343a2
1 { lib, systemdUtils }:
3 let
4   inherit (lib)
5     concatMapStrings
6     concatStringsSep
7     flip
8     optionalString
9     ;
11   attrsToSection = systemdUtils.lib.attrsToSection;
12   commonMatchText = def:
13     optionalString (def.matchConfig != { }) ''
14       [Match]
15       ${attrsToSection def.matchConfig}
16     '';
17 in {
18   linkToUnit = def:
19     commonMatchText def + ''
20       [Link]
21       ${attrsToSection def.linkConfig}
22     '' + def.extraConfig;
24   netdevToUnit = def:
25     commonMatchText def + ''
26       [NetDev]
27       ${attrsToSection def.netdevConfig}
28     '' + optionalString (def.bridgeConfig != { }) ''
29       [Bridge]
30       ${attrsToSection def.bridgeConfig}
31     '' + optionalString (def.vlanConfig != { }) ''
32       [VLAN]
33       ${attrsToSection def.vlanConfig}
34     '' + optionalString (def.ipvlanConfig != { }) ''
35       [IPVLAN]
36       ${attrsToSection def.ipvlanConfig}
37     '' + optionalString (def.ipvtapConfig != { }) ''
38       [IPVTAP]
39       ${attrsToSection def.ipvtapConfig}
40     '' + optionalString (def.macvlanConfig != { }) ''
41       [MACVLAN]
42       ${attrsToSection def.macvlanConfig}
43     '' + optionalString (def.vxlanConfig != { }) ''
44       [VXLAN]
45       ${attrsToSection def.vxlanConfig}
46     '' + optionalString (def.tunnelConfig != { }) ''
47       [Tunnel]
48       ${attrsToSection def.tunnelConfig}
49     '' + optionalString (def.fooOverUDPConfig != { }) ''
50       [FooOverUDP]
51       ${attrsToSection def.fooOverUDPConfig}
52     '' + optionalString (def.peerConfig != { }) ''
53       [Peer]
54       ${attrsToSection def.peerConfig}
55     '' + optionalString (def.tunConfig != { }) ''
56       [Tun]
57       ${attrsToSection def.tunConfig}
58     '' + optionalString (def.tapConfig != { }) ''
59       [Tap]
60       ${attrsToSection def.tapConfig}
61     '' + optionalString (def.l2tpConfig != { }) ''
62       [L2TP]
63       ${attrsToSection def.l2tpConfig}
64     '' + flip concatMapStrings def.l2tpSessions (x: ''
65       [L2TPSession]
66       ${attrsToSection x}
67     '') + optionalString (def.wireguardConfig != { }) ''
68       [WireGuard]
69       ${attrsToSection def.wireguardConfig}
70     '' + flip concatMapStrings def.wireguardPeers (x: ''
71       [WireGuardPeer]
72       ${attrsToSection x}
73     '') + optionalString (def.bondConfig != { }) ''
74       [Bond]
75       ${attrsToSection def.bondConfig}
76     '' + optionalString (def.xfrmConfig != { }) ''
77       [Xfrm]
78       ${attrsToSection def.xfrmConfig}
79     '' + optionalString (def.vrfConfig != { }) ''
80       [VRF]
81       ${attrsToSection def.vrfConfig}
82     '' + optionalString (def.wlanConfig != { }) ''
83       [WLAN]
84       ${attrsToSection def.wlanConfig}
85     '' + optionalString (def.batmanAdvancedConfig != { }) ''
86       [BatmanAdvanced]
87       ${attrsToSection def.batmanAdvancedConfig}
88     '' + def.extraConfig;
90   networkToUnit = def:
91     commonMatchText def + optionalString (def.linkConfig != { }) ''
92       [Link]
93       ${attrsToSection def.linkConfig}
94     '' + ''
95       [Network]
96     '' + attrsToSection def.networkConfig
97     + optionalString (def.address != [ ]) ''
98       ${concatStringsSep "\n" (map (s: "Address=${s}") def.address)}
99     '' + optionalString (def.gateway != [ ]) ''
100       ${concatStringsSep "\n" (map (s: "Gateway=${s}") def.gateway)}
101     '' + optionalString (def.dns != [ ]) ''
102       ${concatStringsSep "\n" (map (s: "DNS=${s}") def.dns)}
103     '' + optionalString (def.ntp != [ ]) ''
104       ${concatStringsSep "\n" (map (s: "NTP=${s}") def.ntp)}
105     '' + optionalString (def.bridge != [ ]) ''
106       ${concatStringsSep "\n" (map (s: "Bridge=${s}") def.bridge)}
107     '' + optionalString (def.bond != [ ]) ''
108       ${concatStringsSep "\n" (map (s: "Bond=${s}") def.bond)}
109     '' + optionalString (def.vrf != [ ]) ''
110       ${concatStringsSep "\n" (map (s: "VRF=${s}") def.vrf)}
111     '' + optionalString (def.vlan != [ ]) ''
112       ${concatStringsSep "\n" (map (s: "VLAN=${s}") def.vlan)}
113     '' + optionalString (def.macvlan != [ ]) ''
114       ${concatStringsSep "\n" (map (s: "MACVLAN=${s}") def.macvlan)}
115     '' + optionalString (def.macvtap != [ ]) ''
116       ${concatStringsSep "\n" (map (s: "MACVTAP=${s}") def.macvtap)}
117     '' + optionalString (def.vxlan != [ ]) ''
118       ${concatStringsSep "\n" (map (s: "VXLAN=${s}") def.vxlan)}
119     '' + optionalString (def.tunnel != [ ]) ''
120       ${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)}
121     '' + optionalString (def.xfrm != [ ]) ''
122       ${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)}
123     '' + "\n" + flip concatMapStrings def.addresses (x: ''
124       [Address]
125       ${attrsToSection x}
126     '') + flip concatMapStrings def.routingPolicyRules (x: ''
127       [RoutingPolicyRule]
128       ${attrsToSection x}
129     '') + flip concatMapStrings def.routes (x: ''
130       [Route]
131       ${attrsToSection x}
132     '') + optionalString (def.dhcpV4Config != { }) ''
133       [DHCPv4]
134       ${attrsToSection def.dhcpV4Config}
135     '' + optionalString (def.dhcpV6Config != { }) ''
136       [DHCPv6]
137       ${attrsToSection def.dhcpV6Config}
138     '' + optionalString (def.dhcpPrefixDelegationConfig != { }) ''
139       [DHCPPrefixDelegation]
140       ${attrsToSection def.dhcpPrefixDelegationConfig}
141     '' + optionalString (def.ipv6AcceptRAConfig != { }) ''
142       [IPv6AcceptRA]
143       ${attrsToSection def.ipv6AcceptRAConfig}
144     '' + optionalString (def.dhcpServerConfig != { }) ''
145       [DHCPServer]
146       ${attrsToSection def.dhcpServerConfig}
147     '' + optionalString (def.ipv6SendRAConfig != { }) ''
148       [IPv6SendRA]
149       ${attrsToSection def.ipv6SendRAConfig}
150     '' + flip concatMapStrings def.ipv6PREF64Prefixes (x: ''
151       [IPv6PREF64Prefix]
152       ${attrsToSection x}
153     '') + flip concatMapStrings def.ipv6Prefixes (x: ''
154       [IPv6Prefix]
155       ${attrsToSection x}
156     '') + flip concatMapStrings def.ipv6RoutePrefixes (x: ''
157       [IPv6RoutePrefix]
158       ${attrsToSection x}
159     '') + flip concatMapStrings def.dhcpServerStaticLeases (x: ''
160       [DHCPServerStaticLease]
161       ${attrsToSection x}
162     '') + optionalString (def.bridgeConfig != { }) ''
163       [Bridge]
164       ${attrsToSection def.bridgeConfig}
165     '' + flip concatMapStrings def.bridgeFDBs (x: ''
166       [BridgeFDB]
167       ${attrsToSection x}
168     '') + flip concatMapStrings def.bridgeMDBs (x: ''
169       [BridgeMDB]
170       ${attrsToSection x}
171     '') + optionalString (def.lldpConfig != { }) ''
172       [LLDP]
173       ${attrsToSection def.lldpConfig}
174     '' + optionalString (def.canConfig != { }) ''
175       [CAN]
176       ${attrsToSection def.canConfig}
177     '' + optionalString (def.ipoIBConfig != { }) ''
178       [IPoIB]
179       ${attrsToSection def.ipoIBConfig}
180     '' + optionalString (def.qdiscConfig != { }) ''
181       [QDisc]
182       ${attrsToSection def.qdiscConfig}
183     '' + optionalString (def.networkEmulatorConfig != { }) ''
184       [NetworkEmulator]
185       ${attrsToSection def.networkEmulatorConfig}
186     '' + optionalString (def.tokenBucketFilterConfig != { }) ''
187       [TokenBucketFilter]
188       ${attrsToSection def.tokenBucketFilterConfig}
189     '' + optionalString (def.pieConfig != { }) ''
190       [PIE]
191       ${attrsToSection def.pieConfig}
192     '' + optionalString (def.flowQueuePIEConfig != { }) ''
193       [FlowQueuePIE]
194       ${attrsToSection def.flowQueuePIEConfig}
195     '' + optionalString (def.stochasticFairBlueConfig != { }) ''
196       [StochasticFairBlue]
197       ${attrsToSection def.stochasticFairBlueConfig}
198     '' + optionalString (def.stochasticFairnessQueueingConfig != { }) ''
199       [StochasticFairnessQueueing]
200       ${attrsToSection def.stochasticFairnessQueueingConfig}
201     '' + optionalString (def.bfifoConfig != { }) ''
202       [BFIFO]
203       ${attrsToSection def.bfifoConfig}
204     '' + optionalString (def.pfifoConfig != { }) ''
205       [PFIFO]
206       ${attrsToSection def.pfifoConfig}
207     '' + optionalString (def.pfifoHeadDropConfig != { }) ''
208       [PFIFOHeadDrop]
209       ${attrsToSection def.pfifoHeadDropConfig}
210     '' + optionalString (def.pfifoFastConfig != { }) ''
211       [PFIFOFast]
212       ${attrsToSection def.pfifoFastConfig}
213     '' + optionalString (def.cakeConfig != { }) ''
214       [CAKE]
215       ${attrsToSection def.cakeConfig}
216     '' + optionalString (def.controlledDelayConfig != { }) ''
217       [ControlledDelay]
218       ${attrsToSection def.controlledDelayConfig}
219     '' + optionalString (def.deficitRoundRobinSchedulerConfig != { }) ''
220       [DeficitRoundRobinScheduler]
221       ${attrsToSection def.deficitRoundRobinSchedulerConfig}
222     '' + optionalString (def.deficitRoundRobinSchedulerClassConfig != { }) ''
223       [DeficitRoundRobinSchedulerClass]
224       ${attrsToSection def.deficitRoundRobinSchedulerClassConfig}
225     '' + optionalString (def.enhancedTransmissionSelectionConfig != { }) ''
226       [EnhancedTransmissionSelection]
227       ${attrsToSection def.enhancedTransmissionSelectionConfig}
228     '' + optionalString (def.genericRandomEarlyDetectionConfig != { }) ''
229       [GenericRandomEarlyDetection]
230       ${attrsToSection def.genericRandomEarlyDetectionConfig}
231     '' + optionalString (def.fairQueueingControlledDelayConfig != { }) ''
232       [FairQueueingControlledDelay]
233       ${attrsToSection def.fairQueueingControlledDelayConfig}
234     '' + optionalString (def.fairQueueingConfig != { }) ''
235       [FairQueueing]
236       ${attrsToSection def.fairQueueingConfig}
237     '' + optionalString (def.trivialLinkEqualizerConfig != { }) ''
238       [TrivialLinkEqualizer]
239       ${attrsToSection def.trivialLinkEqualizerConfig}
240     '' + optionalString (def.hierarchyTokenBucketConfig != { }) ''
241       [HierarchyTokenBucket]
242       ${attrsToSection def.hierarchyTokenBucketConfig}
243     '' + optionalString (def.hierarchyTokenBucketClassConfig != { }) ''
244       [HierarchyTokenBucketClass]
245       ${attrsToSection def.hierarchyTokenBucketClassConfig}
246     '' + optionalString (def.heavyHitterFilterConfig != { }) ''
247       [HeavyHitterFilter]
248       ${attrsToSection def.heavyHitterFilterConfig}
249     '' + optionalString (def.quickFairQueueingConfig != { }) ''
250       [QuickFairQueueing]
251       ${attrsToSection def.quickFairQueueingConfig}
252     '' + optionalString (def.quickFairQueueingConfigClass != { }) ''
253       [QuickFairQueueingClass]
254       ${attrsToSection def.quickFairQueueingConfigClass}
255     '' + flip concatMapStrings def.bridgeVLANs (x: ''
256       [BridgeVLAN]
257       ${attrsToSection x}
258     '') + def.extraConfig;