nixos/networking-interfaces: rename IP addresses/routes options

This commit is contained in:
rnhmjoj 2017-12-03 05:13:14 +01:00
parent f41111c4da
commit c1bed05e34
No known key found for this signature in database
GPG key ID: 91BE884FBA4B591A
8 changed files with 72 additions and 111 deletions

View file

@ -12,7 +12,7 @@ interfaces. However, you can configure an interface manually as
follows: follows:
<programlisting> <programlisting>
networking.interfaces.eth0.ip4 = [ { address = "192.168.1.2"; prefixLength = 24; } ]; networking.interfaces.eth0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
</programlisting> </programlisting>
Typically youll also want to set a default gateway and set of name Typically youll also want to set a default gateway and set of name

View file

@ -26,7 +26,7 @@ boot.kernel.sysctl."net.ipv6.conf.eth0.disable_ipv6" = true;
DHCPv6. You can configure an interface manually: DHCPv6. You can configure an interface manually:
<programlisting> <programlisting>
networking.interfaces.eth0.ip6 = [ { address = "fe00:aa:bb:cc::2"; prefixLength = 64; } ]; networking.interfaces.eth0.ipv6.addresses = [ { address = "fe00:aa:bb:cc::2"; prefixLength = 64; } ];
</programlisting> </programlisting>
</para> </para>

View file

@ -51,7 +51,7 @@ rec {
let let
interfacesNumbered = zipLists config.virtualisation.vlans (range 1 255); interfacesNumbered = zipLists config.virtualisation.vlans (range 1 255);
interfaces = flip map interfacesNumbered ({ fst, snd }: interfaces = flip map interfacesNumbered ({ fst, snd }:
nameValuePair "eth${toString snd}" { ip4 = nameValuePair "eth${toString snd}" { ipv4.addresses =
[ { address = "192.168.${toString fst}.${toString m.snd}"; [ { address = "192.168.${toString fst}.${toString m.snd}";
prefixLength = 24; prefixLength = 24;
} ]; } ];
@ -64,7 +64,7 @@ rec {
networking.interfaces = listToAttrs interfaces; networking.interfaces = listToAttrs interfaces;
networking.primaryIPAddress = networking.primaryIPAddress =
optionalString (interfaces != []) (head (head interfaces).value.ip4).address; optionalString (interfaces != []) (head (head interfaces).value.ipv4.addresses).address;
# Put the IP addresses of all VMs in this machine's # Put the IP addresses of all VMs in this machine's
# /etc/hosts file. If a machine has multiple # /etc/hosts file. If a machine has multiple

View file

@ -16,7 +16,7 @@ let
# Don't start dhcpcd on explicitly configured interfaces or on # Don't start dhcpcd on explicitly configured interfaces or on
# interfaces that are part of a bridge, bond or sit device. # interfaces that are part of a bridge, bond or sit device.
ignoredInterfaces = ignoredInterfaces =
map (i: i.name) (filter (i: if i.useDHCP != null then !i.useDHCP else i.ip4 != [ ] || i.ipAddress != null) interfaces) map (i: i.name) (filter (i: if i.useDHCP != null then !i.useDHCP else i.ipv4.addresses != [ ]) interfaces)
++ mapAttrsToList (i: _: i) config.networking.sits ++ mapAttrsToList (i: _: i) config.networking.sits
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.bridges)) ++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.bridges))
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.vswitches)) ++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.vswitches))

View file

@ -20,14 +20,8 @@ let
"sys-subsystem-net-devices-${escapeSystemdPath interface}.device"; "sys-subsystem-net-devices-${escapeSystemdPath interface}.device";
interfaceIps = i: interfaceIps = i:
i.ip4 ++ optionals cfg.enableIPv6 i.ip6 i.ipv4.addresses
++ optional (i.ipAddress != null) { ++ optionals cfg.enableIPv6 i.ipv6.addresses;
address = i.ipAddress;
prefixLength = i.prefixLength;
} ++ optional (cfg.enableIPv6 && i.ipv6Address != null) {
address = i.ipv6Address;
prefixLength = i.ipv6PrefixLength;
};
destroyBond = i: '' destroyBond = i: ''
while true; do while true; do
@ -207,7 +201,7 @@ let
state="/run/nixos/network/routes/${i.name}" state="/run/nixos/network/routes/${i.name}"
mkdir -p $(dirname "$state") mkdir -p $(dirname "$state")
${flip concatMapStrings (i.ipv4Routes ++ i.ipv6Routes) (route: ${flip concatMapStrings (i.ipv4.routes ++ i.ipv6.routes) (route:
let let
cidr = "${route.address}/${toString route.prefixLength}"; cidr = "${route.address}/${toString route.prefixLength}";
via = optionalString (route.via != null) ''via "${route.via}"''; via = optionalString (route.via != null) ''via "${route.via}"'';

View file

@ -9,14 +9,8 @@ let
interfaces = attrValues cfg.interfaces; interfaces = attrValues cfg.interfaces;
interfaceIps = i: interfaceIps = i:
i.ip4 ++ optionals cfg.enableIPv6 i.ip6 i.ipv4.addresses
++ optional (i.ipAddress != null) { ++ optionals cfg.enableIPv6 i.ipv6.addresses;
address = i.ipAddress;
prefixLength = i.prefixLength;
} ++ optional (cfg.enableIPv6 && i.ipv6Address != null) {
address = i.ipv6Address;
prefixLength = i.ipv6PrefixLength;
};
dhcpStr = useDHCP: if useDHCP == true || useDHCP == null then "both" else "none"; dhcpStr = useDHCP: if useDHCP == true || useDHCP == null then "both" else "none";

View file

@ -1,4 +1,4 @@
{ config, lib, pkgs, utils, stdenv, ... }: { config, options, lib, pkgs, utils, stdenv, ... }:
with lib; with lib;
with utils; with utils;
@ -182,7 +182,6 @@ let
interfaceOpts = { name, ... }: { interfaceOpts = { name, ... }: {
options = { options = {
name = mkOption { name = mkOption {
example = "eth0"; example = "eth0";
type = types.str; type = types.str;
@ -209,7 +208,7 @@ let
''; '';
}; };
ip4 = mkOption { ipv4.addresses = mkOption {
default = [ ]; default = [ ];
example = [ example = [
{ address = "10.0.0.1"; prefixLength = 16; } { address = "10.0.0.1"; prefixLength = 16; }
@ -221,7 +220,7 @@ let
''; '';
}; };
ip6 = mkOption { ipv6.addresses = mkOption {
default = [ ]; default = [ ];
example = [ example = [
{ address = "fdfd:b3f0:482::1"; prefixLength = 48; } { address = "fdfd:b3f0:482::1"; prefixLength = 48; }
@ -233,7 +232,7 @@ let
''; '';
}; };
ipv4Routes = mkOption { ipv4.routes = mkOption {
default = []; default = [];
example = [ example = [
{ address = "10.0.0.0"; prefixLength = 16; } { address = "10.0.0.0"; prefixLength = 16; }
@ -245,7 +244,7 @@ let
''; '';
}; };
ipv6Routes = mkOption { ipv6.routes = mkOption {
default = []; default = [];
example = [ example = [
{ address = "fdfd:b3f0::"; prefixLength = 48; } { address = "fdfd:b3f0::"; prefixLength = 48; }
@ -257,53 +256,6 @@ let
''; '';
}; };
ipAddress = mkOption {
default = null;
example = "10.0.0.1";
type = types.nullOr types.str;
description = ''
IP address of the interface. Leave empty to configure the
interface using DHCP.
'';
};
prefixLength = mkOption {
default = null;
example = 24;
type = types.nullOr types.int;
description = ''
Subnet mask of the interface, specified as the number of
bits in the prefix (<literal>24</literal>).
'';
};
subnetMask = mkOption {
default = null;
description = ''
Defunct, supply the prefix length instead.
'';
};
ipv6Address = mkOption {
default = null;
example = "2001:1470:fffd:2098::e006";
type = types.nullOr types.str;
description = ''
IPv6 address of the interface. Leave empty to configure the
interface using NDP.
'';
};
ipv6PrefixLength = mkOption {
default = 64;
example = 64;
type = types.int;
description = ''
Subnet mask of the interface, specified as the number of
bits in the prefix (<literal>64</literal>).
'';
};
macAddress = mkOption { macAddress = mkOption {
default = null; default = null;
example = "00:11:22:33:44:55"; example = "00:11:22:33:44:55";
@ -375,6 +327,32 @@ let
name = mkDefault name; name = mkDefault name;
}; };
# Renamed or removed options
imports =
let
defined = x: x != "_mkMergedOptionModule";
in [
(mkRenamedOptionModule [ "ip4" ] [ "ipv4" "addresses"])
(mkRenamedOptionModule [ "ip6" ] [ "ipv6" "addresses"])
(mkRemovedOptionModule [ "subnetMask" ] ''
Supply a prefix length instead; use option
networking.interfaces.<name>.ipv{4,6}.addresses'')
(mkMergedOptionModule
[ [ "ipAddress" ] [ "prefixLength" ] ]
[ "ipv4" "addresses" ]
(cfg: with cfg;
optional (defined ipAddress && defined prefixLength)
{ address = ipAddress; prefixLength = prefixLength; }))
(mkMergedOptionModule
[ [ "ipv6Address" ] [ "ipv6PrefixLength" ] ]
[ "ipv6" "addresses" ]
(cfg: with cfg;
optional (defined ipv6Address && defined ipv6PrefixLength)
{ address = ipv6Address; prefixLength = ipv6PrefixLength; }))
({ options.warnings = options.warnings; })
];
}; };
hexChars = stringToCharacters "0123456789abcdef"; hexChars = stringToCharacters "0123456789abcdef";
@ -511,7 +489,7 @@ in
networking.interfaces = mkOption { networking.interfaces = mkOption {
default = {}; default = {};
example = example =
{ eth0.ip4 = [ { { eth0.ipv4 = [ {
address = "131.211.84.78"; address = "131.211.84.78";
prefixLength = 25; prefixLength = 25;
} ]; } ];
@ -990,13 +968,10 @@ in
config = { config = {
warnings = concatMap (i: i.warnings) interfaces;
assertions = assertions =
(flip map interfaces (i: { (flip map interfaces (i: {
assertion = i.subnetMask == null;
message = ''
The networking.interfaces."${i.name}".subnetMask option is defunct. Use prefixLength instead.
'';
})) ++ (flip map interfaces (i: {
# With the linux kernel, interface name length is limited by IFNAMSIZ # With the linux kernel, interface name length is limited by IFNAMSIZ
# to 16 bytes, including the trailing null byte. # to 16 bytes, including the trailing null byte.
# See include/linux/if.h in the kernel sources # See include/linux/if.h in the kernel sources
@ -1005,7 +980,7 @@ in
The name of networking.interfaces."${i.name}" is too long, it needs to be less than 16 characters. The name of networking.interfaces."${i.name}" is too long, it needs to be less than 16 characters.
''; '';
})) ++ (flip map slaveIfs (i: { })) ++ (flip map slaveIfs (i: {
assertion = i.ip4 == [ ] && i.ipAddress == null && i.ip6 == [ ] && i.ipv6Address == null; assertion = i.ipv4.addresses == [ ] && i.ipv6.addresses == [ ];
message = '' message = ''
The networking.interfaces."${i.name}" must not have any defined ips when it is a slave. The networking.interfaces."${i.name}" must not have any defined ips when it is a slave.
''; '';

View file

@ -21,10 +21,8 @@ let
firewall.allowedUDPPorts = [ 547 ]; firewall.allowedUDPPorts = [ 547 ];
interfaces = mkOverride 0 (listToAttrs (flip map vlanIfs (n: interfaces = mkOverride 0 (listToAttrs (flip map vlanIfs (n:
nameValuePair "eth${toString n}" { nameValuePair "eth${toString n}" {
ipAddress = "192.168.${toString n}.1"; ipv4.addresses = [ { address = "192.168.${toString n}.1"; prefixLength = 24;} ];
prefixLength = 24; ipv6.addresses = [ { address = "fd00:1234:5678:${toString n}::1"; prefixLength = 64;} ];
ipv6Address = "fd00:1234:5678:${toString n}::1";
ipv6PrefixLength = 64;
}))); })));
}; };
services.dhcpd4 = { services.dhcpd4 = {
@ -90,12 +88,12 @@ let
firewall.allowPing = true; firewall.allowPing = true;
useDHCP = false; useDHCP = false;
defaultGateway = "192.168.1.1"; defaultGateway = "192.168.1.1";
interfaces.eth1.ip4 = mkOverride 0 [ interfaces.eth1.ipv4.addresses = mkOverride 0 [
{ address = "192.168.1.2"; prefixLength = 24; } { address = "192.168.1.2"; prefixLength = 24; }
{ address = "192.168.1.3"; prefixLength = 32; } { address = "192.168.1.3"; prefixLength = 32; }
{ address = "192.168.1.10"; prefixLength = 32; } { address = "192.168.1.10"; prefixLength = 32; }
]; ];
interfaces.eth2.ip4 = mkOverride 0 [ interfaces.eth2.ipv4.addresses = mkOverride 0 [
{ address = "192.168.2.2"; prefixLength = 24; } { address = "192.168.2.2"; prefixLength = 24; }
]; ];
}; };
@ -143,12 +141,12 @@ let
firewall.allowPing = true; firewall.allowPing = true;
useDHCP = true; useDHCP = true;
interfaces.eth1 = { interfaces.eth1 = {
ip4 = mkOverride 0 [ ]; ipv4.addresses = mkOverride 0 [ ];
ip6 = mkOverride 0 [ ]; ipv6.addresses = mkOverride 0 [ ];
}; };
interfaces.eth2 = { interfaces.eth2 = {
ip4 = mkOverride 0 [ ]; ipv4.addresses = mkOverride 0 [ ];
ip6 = mkOverride 0 [ ]; ipv6.addresses = mkOverride 0 [ ];
}; };
}; };
}; };
@ -198,10 +196,10 @@ let
firewall.allowPing = true; firewall.allowPing = true;
useDHCP = false; useDHCP = false;
interfaces.eth1 = { interfaces.eth1 = {
ip4 = mkOverride 0 [ ]; ipv4.addresses = mkOverride 0 [ ];
useDHCP = true; useDHCP = true;
}; };
interfaces.eth2.ip4 = mkOverride 0 [ ]; interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
}; };
}; };
testScript = { nodes, ... }: testScript = { nodes, ... }:
@ -241,9 +239,9 @@ let
interfaces = [ "eth1" "eth2" ]; interfaces = [ "eth1" "eth2" ];
driverOptions.mode = "balance-rr"; driverOptions.mode = "balance-rr";
}; };
interfaces.eth1.ip4 = mkOverride 0 [ ]; interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
interfaces.eth2.ip4 = mkOverride 0 [ ]; interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
interfaces.bond.ip4 = mkOverride 0 interfaces.bond.ipv4.addresses = mkOverride 0
[ { inherit address; prefixLength = 30; } ]; [ { inherit address; prefixLength = 30; } ];
}; };
}; };
@ -274,7 +272,7 @@ let
useNetworkd = networkd; useNetworkd = networkd;
firewall.allowPing = true; firewall.allowPing = true;
useDHCP = false; useDHCP = false;
interfaces.eth1.ip4 = mkOverride 0 interfaces.eth1.ipv4.addresses = mkOverride 0
[ { inherit address; prefixLength = 24; } ]; [ { inherit address; prefixLength = 24; } ];
}; };
}; };
@ -289,9 +287,9 @@ let
firewall.allowPing = true; firewall.allowPing = true;
useDHCP = false; useDHCP = false;
bridges.bridge.interfaces = [ "eth1" "eth2" ]; bridges.bridge.interfaces = [ "eth1" "eth2" ];
interfaces.eth1.ip4 = mkOverride 0 [ ]; interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
interfaces.eth2.ip4 = mkOverride 0 [ ]; interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
interfaces.bridge.ip4 = mkOverride 0 interfaces.bridge.ipv4.addresses = mkOverride 0
[ { address = "192.168.1.1"; prefixLength = 24; } ]; [ { address = "192.168.1.1"; prefixLength = 24; } ];
}; };
}; };
@ -328,7 +326,7 @@ let
firewall.allowPing = true; firewall.allowPing = true;
useDHCP = true; useDHCP = true;
macvlans.macvlan.interface = "eth1"; macvlans.macvlan.interface = "eth1";
interfaces.eth1.ip4 = mkOverride 0 [ ]; interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
}; };
}; };
testScript = { nodes, ... }: testScript = { nodes, ... }:
@ -369,9 +367,9 @@ let
local = address4; local = address4;
dev = "eth1"; dev = "eth1";
}; };
interfaces.eth1.ip4 = mkOverride 0 interfaces.eth1.ipv4.addresses = mkOverride 0
[ { address = address4; prefixLength = 24; } ]; [ { address = address4; prefixLength = 24; } ];
interfaces.sit.ip6 = mkOverride 0 interfaces.sit.ipv6.addresses = mkOverride 0
[ { address = address6; prefixLength = 64; } ]; [ { address = address6; prefixLength = 64; } ];
}; };
}; };
@ -410,9 +408,9 @@ let
id = 1; id = 1;
interface = "eth0"; interface = "eth0";
}; };
interfaces.eth0.ip4 = mkOverride 0 [ ]; interfaces.eth0.ipv4.addresses = mkOverride 0 [ ];
interfaces.eth1.ip4 = mkOverride 0 [ ]; interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
interfaces.vlan.ip4 = mkOverride 0 interfaces.vlan.ipv4.addresses = mkOverride 0
[ { inherit address; prefixLength = 24; } ]; [ { inherit address; prefixLength = 24; } ];
}; };
}; };
@ -538,13 +536,13 @@ let
machine = { machine = {
networking.useDHCP = false; networking.useDHCP = false;
networking.interfaces."eth0" = { networking.interfaces."eth0" = {
ip4 = [ { address = "192.168.1.2"; prefixLength = 24; } ]; ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
ip6 = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ]; ipv6.addresses = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
ipv6Routes = [ ipv6.routes = [
{ address = "fdfd:b3f0::"; prefixLength = 48; } { address = "fdfd:b3f0::"; prefixLength = 48; }
{ address = "2001:1470:fffd:2098::"; prefixLength = 64; via = "fdfd:b3f0::1"; } { address = "2001:1470:fffd:2098::"; prefixLength = 64; via = "fdfd:b3f0::1"; }
]; ];
ipv4Routes = [ ipv4.routes = [
{ address = "10.0.0.0"; prefixLength = 16; options = { mtu = "1500"; }; } { address = "10.0.0.0"; prefixLength = 16; options = { mtu = "1500"; }; }
{ address = "192.168.2.0"; prefixLength = 24; via = "192.168.1.1"; } { address = "192.168.2.0"; prefixLength = 24; via = "192.168.1.1"; }
]; ];