nixos/networking: use optionalAttrs -> mkIf for networkd route generation

Suggested in https://github.com/NixOS/nixpkgs/pull/312472#discussion_r1605894882
This commit is contained in:
Maximilian Bosch 2024-05-20 17:30:21 +02:00
parent c4fd7cf16d
commit f9f943b36e
No known key found for this signature in database

View file

@ -95,63 +95,64 @@ let
address = forEach (interfaceIps i) address = forEach (interfaceIps i)
(ip: "${ip.address}/${toString ip.prefixLength}"); (ip: "${ip.address}/${toString ip.prefixLength}");
routes = forEach (interfaceRoutes i) routes = forEach (interfaceRoutes i)
(route: (route: mkMerge [
# Most of these route options have not been tested. # Most of these route options have not been tested.
# Please fix or report any mistakes you may find. # Please fix or report any mistakes you may find.
optionalAttrs (route.address != null && route.prefixLength != null) { (mkIf (route.address != null && route.prefixLength != null) {
Destination = "${route.address}/${toString route.prefixLength}"; Destination = "${route.address}/${toString route.prefixLength}";
} // })
optionalAttrs (route.options ? fastopen_no_cookie) { (mkIf (route.options ? fastopen_no_cookie) {
FastOpenNoCookie = route.options.fastopen_no_cookie; FastOpenNoCookie = route.options.fastopen_no_cookie;
} // })
optionalAttrs (route.via != null) { (mkIf (route.via != null) {
Gateway = route.via; Gateway = route.via;
} // })
optionalAttrs (route.type != null) { (mkIf (route.type != null) {
Type = route.type; Type = route.type;
} // })
optionalAttrs (route.options ? onlink) { (mkIf (route.options ? onlink) {
GatewayOnLink = true; GatewayOnLink = true;
} // })
optionalAttrs (route.options ? initrwnd) { (mkIf (route.options ? initrwnd) {
InitialAdvertisedReceiveWindow = route.options.initrwnd; InitialAdvertisedReceiveWindow = route.options.initrwnd;
} // })
optionalAttrs (route.options ? initcwnd) { (mkIf (route.options ? initcwnd) {
InitialCongestionWindow = route.options.initcwnd; InitialCongestionWindow = route.options.initcwnd;
} // })
optionalAttrs (route.options ? pref) { (mkIf (route.options ? pref) {
IPv6Preference = route.options.pref; IPv6Preference = route.options.pref;
} // })
optionalAttrs (route.options ? mtu) { (mkIf (route.options ? mtu) {
MTUBytes = route.options.mtu; MTUBytes = route.options.mtu;
} // })
optionalAttrs (route.options ? metric) { (mkIf (route.options ? metric) {
Metric = route.options.metric; Metric = route.options.metric;
} // })
optionalAttrs (route.options ? src) { (mkIf (route.options ? src) {
PreferredSource = route.options.src; PreferredSource = route.options.src;
} // })
optionalAttrs (route.options ? protocol) { (mkIf (route.options ? protocol) {
Protocol = route.options.protocol; Protocol = route.options.protocol;
} // })
optionalAttrs (route.options ? quickack) { (mkIf (route.options ? quickack) {
QuickAck = route.options.quickack; QuickAck = route.options.quickack;
} // })
optionalAttrs (route.options ? scope) { (mkIf (route.options ? scope) {
Scope = route.options.scope; Scope = route.options.scope;
} // })
optionalAttrs (route.options ? from) { (mkIf (route.options ? from) {
Source = route.options.from; Source = route.options.from;
} // })
optionalAttrs (route.options ? table) { (mkIf (route.options ? table) {
Table = route.options.table; Table = route.options.table;
} // })
optionalAttrs (route.options ? advmss) { (mkIf (route.options ? advmss) {
TCPAdvertisedMaximumSegmentSize = route.options.advmss; TCPAdvertisedMaximumSegmentSize = route.options.advmss;
} // })
optionalAttrs (route.options ? ttl-propagate) { (mkIf (route.options ? ttl-propagate) {
TTLPropagate = route.options.ttl-propagate == "enabled"; TTLPropagate = route.options.ttl-propagate == "enabled";
}); })
]);
networkConfig.IPv6PrivacyExtensions = "kernel"; networkConfig.IPv6PrivacyExtensions = "kernel";
linkConfig = optionalAttrs (i.macAddress != null) { linkConfig = optionalAttrs (i.macAddress != null) {
MACAddress = i.macAddress; MACAddress = i.macAddress;