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 | nixpkgs-cabc0647d9555a24689e4d1483537149eab18e42.tar nixpkgs-cabc0647d9555a24689e4d1483537149eab18e42.tar.gz nixpkgs-cabc0647d9555a24689e4d1483537149eab18e42.tar.bz2 nixpkgs-cabc0647d9555a24689e4d1483537149eab18e42.tar.lz nixpkgs-cabc0647d9555a24689e4d1483537149eab18e42.tar.xz nixpkgs-cabc0647d9555a24689e4d1483537149eab18e42.tar.zst nixpkgs-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 b1ab989f130..1249fabc309 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 |