diff options
author | William A. Kennington III <william@wkennington.com> | 2013-12-29 21:52:30 -0600 |
---|---|---|
committer | William A. Kennington III <william@wkennington.com> | 2013-12-29 21:54:24 -0600 |
commit | cabc0647d9555a24689e4d1483537149eab18e42 (patch) | |
tree | 5391fc4020c952837320d81e89023acad7443d8a /nixos | |
parent | 2ffab7ba6a1f2290e37ca70f927366f28c6a606e (diff) | |
download | nixlib-cabc0647d9555a24689e4d1483537149eab18e42.tar nixlib-cabc0647d9555a24689e4d1483537149eab18e42.tar.gz nixlib-cabc0647d9555a24689e4d1483537149eab18e42.tar.bz2 nixlib-cabc0647d9555a24689e4d1483537149eab18e42.tar.lz nixlib-cabc0647d9555a24689e4d1483537149eab18e42.tar.xz nixlib-cabc0647d9555a24689e4d1483537149eab18e42.tar.zst nixlib-cabc0647d9555a24689e4d1483537149eab18e42.zip |
network-interfaces: Add support for creating vlans
This patch adds support for vlan creation at machine startup, so that we can adjust interface settings for vlan devices using nix.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/tasks/network-interfaces.nix | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/nixos/modules/tasks/network-interfaces.nix b/nixos/modules/tasks/network-interfaces.nix index b1ab989f130f..1249fabc309a 100644 --- a/nixos/modules/tasks/network-interfaces.nix +++ b/nixos/modules/tasks/network-interfaces.nix @@ -219,6 +219,45 @@ in }; + networking.vlans = mkOption { + default = { }; + example = { + vlan0 = { + id = 3; + interface = "enp3s0"; + }; + vlan1 = { + id = 1; + interface = "wlan0"; + }; + }; + description = + '' + This option allows you to define vlan devices that tag packets + on top of a physical interface. The value of this option is an + attribute set. Each attribute specifies a vlan, with the name + specifying the name of the vlan interface. + ''; + + type = types.attrsOf types.optionSet; + + options = { + + id = mkOption { + example = 1; + type = types.int; + description = "The vlan identifier"; + }; + + interface = mkOption { + example = "enp4s0"; + type = types.string; + description = "The interface the vlan will transmit packets through."; + }; + + }; + }; + networking.useDHCP = mkOption { type = types.bool; default = true; @@ -421,10 +460,32 @@ in ''; }; + createVlanDevice = n: v: + let + deps = [ "sys-subsystem-net-devices-${v.interface}.device" ]; + in + { + description = "Vlan Interface ${n}"; + wantedBy = [ "network.target" "sys-subsystem-net-devices-${n}.device" ]; + bindsTo = deps; + after = deps; + serviceConfig.Type = "oneshot"; + serviceConfig.RemainAfterExit = true; + path = [ pkgs.iproute ]; + script = '' + ip link add link "${v.interface}" "${n}" type vlan id "${toString v.id}" + ip link set "${n}" up + ''; + postStop = '' + ip link delete "${n}" + ''; + }; + in listToAttrs ( map configureInterface interfaces ++ map createTunDevice (filter (i: i.virtual) interfaces)) // mapAttrs createBridgeDevice cfg.bridges + // mapAttrs createVlanDevice cfg.vlans // { "network-setup" = networkSetup; }; # Set the host and domain names in the activation script. Don't |