summaryrefslogtreecommitdiffstats
path: root/nixos/modules/tasks/network-interfaces.nix
diff options
context:
space:
mode:
authorEric Sagnes <eric.sagnes@gmail.com>2016-09-11 19:45:24 +0900
committerEric Sagnes <eric.sagnes@gmail.com>2016-09-13 12:54:40 +0900
commit062928c3ad2eeb2c4d20146c1b85f75bfed31c7c (patch)
tree801e983582dc6bf67bc5db69a5db418a7868108e /nixos/modules/tasks/network-interfaces.nix
parent12a1de83050335812b812788a505f8e76d382dec (diff)
network-interfaces module: optionSet -> submodule
Diffstat (limited to 'nixos/modules/tasks/network-interfaces.nix')
-rw-r--r--nixos/modules/tasks/network-interfaces.nix508
1 files changed, 261 insertions, 247 deletions
diff --git a/nixos/modules/tasks/network-interfaces.nix b/nixos/modules/tasks/network-interfaces.nix
index c52bd904caec..5d7ce906ea33 100644
--- a/nixos/modules/tasks/network-interfaces.nix
+++ b/nixos/modules/tasks/network-interfaces.nix
@@ -97,21 +97,22 @@ let
addrOpts = v:
assert v == 4 || v == 6;
- {
- address = mkOption {
- type = types.str;
- description = ''
- IPv${toString v} address of the interface. Leave empty to configure the
- interface using DHCP.
- '';
- };
+ { options = {
+ address = mkOption {
+ type = types.str;
+ description = ''
+ IPv${toString v} address of the interface. Leave empty to configure the
+ interface using DHCP.
+ '';
+ };
- prefixLength = mkOption {
- type = types.addCheck types.int (n: n >= 0 && n <= (if v == 4 then 32 else 128));
- description = ''
- Subnet mask of the interface, specified as the number of
- bits in the prefix (<literal>${if v == 4 then "24" else "64"}</literal>).
- '';
+ prefixLength = mkOption {
+ type = types.addCheck types.int (n: n >= 0 && n <= (if v == 4 then 32 else 128));
+ description = ''
+ Subnet mask of the interface, specified as the number of
+ bits in the prefix (<literal>${if v == 4 then "24" else "64"}</literal>).
+ '';
+ };
};
};
@@ -141,8 +142,7 @@ let
{ address = "10.0.0.1"; prefixLength = 16; }
{ address = "192.168.1.1"; prefixLength = 24; }
];
- type = types.listOf types.optionSet;
- options = addrOpts 4;
+ type = with types; listOf (submodule (addrOpts 4));
description = ''
List of IPv4 addresses that will be statically assigned to the interface.
'';
@@ -154,8 +154,7 @@ let
{ address = "fdfd:b3f0:482::1"; prefixLength = 48; }
{ address = "2001:1470:fffd:2098::e006"; prefixLength = 64; }
];
- type = types.listOf types.optionSet;
- options = addrOpts 6;
+ type = with types; listOf (submodule (addrOpts 6));
description = ''
List of IPv6 addresses that will be statically assigned to the interface.
'';
@@ -415,8 +414,7 @@ in
<option>networking.useDHCP</option> is true, then every
interface not listed here will be configured using DHCP.
'';
- type = types.loaOf types.optionSet;
- options = [ interfaceOpts ];
+ type = with types; loaOf (submodule interfaceOpts);
};
networking.vswitches = mkOption {
@@ -434,53 +432,55 @@ in
interface.
'';
- type = types.attrsOf types.optionSet;
+ type = with types; attrsOf (submodule {
- options = {
+ options = {
- interfaces = mkOption {
- example = [ "eth0" "eth1" ];
- type = types.listOf types.str;
- description =
- "The physical network interfaces connected by the vSwitch.";
- };
+ interfaces = mkOption {
+ example = [ "eth0" "eth1" ];
+ type = types.listOf types.str;
+ description =
+ "The physical network interfaces connected by the vSwitch.";
+ };
- controllers = mkOption {
- type = types.listOf types.str;
- default = [];
- example = [ "ptcp:6653:[::1]" ];
- description = ''
- Specify the controller targets. For the allowed options see <literal>man 8 ovs-vsctl</literal>.
- '';
- };
+ controllers = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "ptcp:6653:[::1]" ];
+ description = ''
+ Specify the controller targets. For the allowed options see <literal>man 8 ovs-vsctl</literal>.
+ '';
+ };
- openFlowRules = mkOption {
- type = types.lines;
- default = "";
- example = ''
- actions=normal
- '';
- description = ''
- OpenFlow rules to insert into the Open vSwitch. All <literal>openFlowRules</literal> are
- loaded with <literal>ovs-ofctl</literal> within one atomic operation.
- '';
- };
+ openFlowRules = mkOption {
+ type = types.lines;
+ default = "";
+ example = ''
+ actions=normal
+ '';
+ description = ''
+ OpenFlow rules to insert into the Open vSwitch. All <literal>openFlowRules</literal> are
+ loaded with <literal>ovs-ofctl</literal> within one atomic operation.
+ '';
+ };
+
+ extraOvsctlCmds = mkOption {
+ type = types.lines;
+ default = "";
+ example = ''
+ set-fail-mode <switch_name> secure
+ set Bridge <switch_name> stp_enable=true
+ '';
+ description = ''
+ Commands to manipulate the Open vSwitch database. Every line executed with <literal>ovs-vsctl</literal>.
+ All commands are bundled together with the operations for adding the interfaces
+ into one atomic operation.
+ '';
+ };
- extraOvsctlCmds = mkOption {
- type = types.lines;
- default = "";
- example = ''
- set-fail-mode <switch_name> secure
- set Bridge <switch_name> stp_enable=true
- '';
- description = ''
- Commands to manipulate the Open vSwitch database. Every line executed with <literal>ovs-vsctl</literal>.
- All commands are bundled together with the operations for adding the interfaces
- into one atomic operation.
- '';
};
- };
+ });
};
@@ -499,25 +499,27 @@ in
bridge's network interface.
'';
- type = types.attrsOf types.optionSet;
+ type = with types; attrsOf (submodule {
- options = {
+ options = {
- interfaces = mkOption {
- example = [ "eth0" "eth1" ];
- type = types.listOf types.str;
- description =
- "The physical network interfaces connected by the bridge.";
- };
+ interfaces = mkOption {
+ example = [ "eth0" "eth1" ];
+ type = types.listOf types.str;
+ description =
+ "The physical network interfaces connected by the bridge.";
+ };
+
+ rstp = mkOption {
+ example = true;
+ default = false;
+ type = types.bool;
+ description = "Whether the bridge interface should enable rstp.";
+ };
- rstp = mkOption {
- example = true;
- default = false;
- type = types.bool;
- description = "Whether the bridge interface should enable rstp.";
};
- };
+ });
};
@@ -538,65 +540,66 @@ in
name specifying the name of the bond's network interface
'';
- type = types.attrsOf types.optionSet;
+ type = with types; attrsOf (submodule {
- options = {
+ options = {
- interfaces = mkOption {
- example = [ "enp4s0f0" "enp4s0f1" "wlan0" ];
- type = types.listOf types.str;
- description = "The interfaces to bond together";
- };
+ interfaces = mkOption {
+ example = [ "enp4s0f0" "enp4s0f1" "wlan0" ];
+ type = types.listOf types.str;
+ description = "The interfaces to bond together";
+ };
- lacp_rate = mkOption {
- default = null;
- example = "fast";
- type = types.nullOr types.str;
- description = ''
- Option specifying the rate in which we'll ask our link partner
- to transmit LACPDU packets in 802.3ad mode.
- '';
- };
-
- miimon = mkOption {
- default = null;
- example = 100;
- type = types.nullOr types.int;
- description = ''
- Miimon is the number of millisecond in between each round of polling
- by the device driver for failed links. By default polling is not
- enabled and the driver is trusted to properly detect and handle
- failure scenarios.
- '';
- };
-
- mode = mkOption {
- default = null;
- example = "active-backup";
- type = types.nullOr types.str;
- description = ''
- The mode which the bond will be running. The default mode for
- the bonding driver is balance-rr, optimizing for throughput.
- More information about valid modes can be found at
- https://www.kernel.org/doc/Documentation/networking/bonding.txt
- '';
- };
+ lacp_rate = mkOption {
+ default = null;
+ example = "fast";
+ type = types.nullOr types.str;
+ description = ''
+ Option specifying the rate in which we'll ask our link partner
+ to transmit LACPDU packets in 802.3ad mode.
+ '';
+ };
+
+ miimon = mkOption {
+ default = null;
+ example = 100;
+ type = types.nullOr types.int;
+ description = ''
+ Miimon is the number of millisecond in between each round of polling
+ by the device driver for failed links. By default polling is not
+ enabled and the driver is trusted to properly detect and handle
+ failure scenarios.
+ '';
+ };
+
+ mode = mkOption {
+ default = null;
+ example = "active-backup";
+ type = types.nullOr types.str;
+ description = ''
+ The mode which the bond will be running. The default mode for
+ the bonding driver is balance-rr, optimizing for throughput.
+ More information about valid modes can be found at
+ https://www.kernel.org/doc/Documentation/networking/bonding.txt
+ '';
+ };
+
+ xmit_hash_policy = mkOption {
+ default = null;
+ example = "layer2+3";
+ type = types.nullOr types.str;
+ description = ''
+ Selects the transmit hash policy to use for slave selection in
+ balance-xor, 802.3ad, and tlb modes.
+ '';
+ };
- xmit_hash_policy = mkOption {
- default = null;
- example = "layer2+3";
- type = types.nullOr types.str;
- description = ''
- Selects the transmit hash policy to use for slave selection in
- balance-xor, 802.3ad, and tlb modes.
- '';
};
- };
+ });
};
networking.macvlans = mkOption {
- type = types.attrsOf types.optionSet;
default = { };
example = literalExample {
wan = {
@@ -608,26 +611,28 @@ in
This option allows you to define macvlan interfaces which should
be automatically created.
'';
- options = {
+ type = with types; attrsOf (submodule {
+ options = {
+
+ interface = mkOption {
+ example = "enp4s0";
+ type = types.str;
+ description = "The interface the macvlan will transmit packets through.";
+ };
+
+ mode = mkOption {
+ default = null;
+ type = types.nullOr types.str;
+ example = "vepa";
+ description = "The mode of the macvlan device.";
+ };
- interface = mkOption {
- example = "enp4s0";
- type = types.str;
- description = "The interface the macvlan will transmit packets through.";
};
- mode = mkOption {
- default = null;
- type = types.nullOr types.str;
- example = "vepa";
- description = "The mode of the macvlan device.";
- };
-
- };
+ });
};
networking.sits = mkOption {
- type = types.attrsOf types.optionSet;
default = { };
example = literalExample {
hurricane = {
@@ -644,46 +649,49 @@ in
description = ''
This option allows you to define 6-to-4 interfaces which should be automatically created.
'';
- options = {
-
- remote = mkOption {
- type = types.nullOr types.str;
- default = null;
- example = "10.0.0.1";
- description = ''
- The address of the remote endpoint to forward traffic over.
- '';
- };
-
- local = mkOption {
- type = types.nullOr types.str;
- default = null;
- example = "10.0.0.22";
- description = ''
- The address of the local endpoint which the remote
- side should send packets to.
- '';
- };
-
- ttl = mkOption {
- type = types.nullOr types.int;
- default = null;
- example = 255;
- description = ''
- The time-to-live of the connection to the remote tunnel endpoint.
- '';
- };
+ type = with types; attrsOf (submodule {
+ options = {
+
+ remote = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = "10.0.0.1";
+ description = ''
+ The address of the remote endpoint to forward traffic over.
+ '';
+ };
+
+ local = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = "10.0.0.22";
+ description = ''
+ The address of the local endpoint which the remote
+ side should send packets to.
+ '';
+ };
+
+ ttl = mkOption {
+ type = types.nullOr types.int;
+ default = null;
+ example = 255;
+ description = ''
+ The time-to-live of the connection to the remote tunnel endpoint.
+ '';
+ };
+
+ dev = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = "enp4s0f0";
+ description = ''
+ The underlying network device on which the tunnel resides.
+ '';
+ };
- dev = mkOption {
- type = types.nullOr types.str;
- default = null;
- example = "enp4s0f0";
- description = ''
- The underlying network device on which the tunnel resides.
- '';
};
- };
+ });
};
networking.vlans = mkOption {
@@ -706,23 +714,26 @@ in
specifying the name of the vlan interface.
'';
- type = types.attrsOf types.optionSet;
+ type = with types; attrsOf (submodule {
- options = {
+ options = {
- id = mkOption {
- example = 1;
- type = types.int;
- description = "The vlan identifier";
- };
+ id = mkOption {
+ example = 1;
+ type = types.int;
+ description = "The vlan identifier";
+ };
+
+ interface = mkOption {
+ example = "enp4s0";
+ type = types.str;
+ description = "The interface the vlan will transmit packets through.";
+ };
- interface = mkOption {
- example = "enp4s0";
- type = types.str;
- description = "The interface the vlan will transmit packets through.";
};
- };
+ });
+
};
networking.wlanInterfaces = mkOption {
@@ -760,73 +771,76 @@ in
would have to be created explicitly.
'';
- type = types.attrsOf types.optionSet;
-
- options = {
+ type = with types; attrsOf (submodule {
- device = mkOption {
- type = types.string;
- example = "wlp6s0";
- description = "The name of the underlying hardware WLAN device as assigned by <literal>udev</literal>.";
- };
+ options = {
- type = mkOption {
- type = types.string;
- default = "managed";
- example = "ibss";
- description = ''
- The type of the WLAN interface. The type has to be either <literal>managed</literal>,
- <literal>ibss</literal>, <literal>monitor</literal>, <literal>mesh</literal> or <literal>wds</literal>.
- Also, the type has to be supported by the underlying hardware of the device.
- '';
- };
+ device = mkOption {
+ type = types.string;
+ example = "wlp6s0";
+ description = "The name of the underlying hardware WLAN device as assigned by <literal>udev</literal>.";
+ };
- meshID = mkOption {
- type = types.nullOr types.string;
- default = null;
- description = "MeshID of interface with type <literal>mesh</literal>.";
- };
-
- flags = mkOption {
- type = types.nullOr types.string;
- default = null;
- example = "control";
- description = ''
- Flags for interface of type <literal>monitor</literal>. The valid flags are:
- none: no special flags
- fcsfail: show frames with FCS errors
- control: show control frames
- otherbss: show frames from other BSSes
- cook: use cooked mode
- active: use active mode (ACK incoming unicast packets)
- '';
- };
+ type = mkOption {
+ type = types.string;
+ default = "managed";
+ example = "ibss";
+ description = ''
+ The type of the WLAN interface. The type has to be either <literal>managed</literal>,
+ <literal>ibss</literal>, <literal>monitor</literal>, <literal>mesh</literal> or <literal>wds</literal>.
+ Also, the type has to be supported by the underlying hardware of the device.
+ '';
+ };
+
+ meshID = mkOption {
+ type = types.nullOr types.string;
+ default = null;
+ description = "MeshID of interface with type <literal>mesh</literal>.";
+ };
+
+ flags = mkOption {
+ type = types.nullOr types.string;
+ default = null;
+ example = "control";
+ description = ''
+ Flags for interface of type <literal>monitor</literal>. The valid flags are:
+ none: no special flags
+ fcsfail: show frames with FCS errors
+ control: show control frames
+ otherbss: show frames from other BSSes
+ cook: use cooked mode
+ active: use active mode (ACK incoming unicast packets)
+ '';
+ };
+
+ fourAddr = mkOption {
+ type = types.nullOr types.bool;
+ default = null;
+ description = "Whether to enable <literal>4-address mode</literal> with type <literal>managed</literal>.";
+ };
+
+ mac = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = "02:00:00:00:00:01";
+ description = ''
+ MAC address to use for the device. If <literal>null</literal>, then the MAC of the
+ underlying hardware WLAN device is used.
+
+ INFO: Locally administered MAC addresses are of the form:
+ <itemizedlist>
+ <listitem><para>x2:xx:xx:xx:xx:xx</para></listitem>
+ <listitem><para>x6:xx:xx:xx:xx:xx</para></listitem>
+ <listitem><para>xA:xx:xx:xx:xx:xx</para></listitem>
+ <listitem><para>xE:xx:xx:xx:xx:xx</para></listitem>
+ </itemizedlist>
+ '';
+ };
- fourAddr = mkOption {
- type = types.nullOr types.bool;
- default = null;
- description = "Whether to enable <literal>4-address mode</literal> with type <literal>managed</literal>.";
};
- mac = mkOption {
- type = types.nullOr types.str;
- default = null;
- example = "02:00:00:00:00:01";
- description = ''
- MAC address to use for the device. If <literal>null</literal>, then the MAC of the
- underlying hardware WLAN device is used.
-
- INFO: Locally administered MAC addresses are of the form:
- <itemizedlist>
- <listitem><para>x2:xx:xx:xx:xx:xx</para></listitem>
- <listitem><para>x6:xx:xx:xx:xx:xx</para></listitem>
- <listitem><para>xA:xx:xx:xx:xx:xx</para></listitem>
- <listitem><para>xE:xx:xx:xx:xx:xx</para></listitem>
- </itemizedlist>
- '';
- };
+ });
- };
};
networking.useDHCP = mkOption {