blob: 7d3d847a8a6d4034733cbca481dd00cff4d81e8c [file] [log] [blame]
# Support for GRETap interfaces in NixOS' scripted networking.
#
# We currently only use it in the edge01.waw test framework to bring vlans
# across test VMs.
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.hscloud.gretap;
in {
options.hscloud.gretap = {
interfaces = mkOption {
type = with types; attrsOf (submodule {
options = {
localV4 = mkOption {
type = types.str;
description = "Local outer IPv4 address";
};
remoteV4 = mkOption {
type = types.str;
description = "Remote outer IPv4 address";
};
id = mkOption {
type = types.int;
description = "Tunnel ID";
};
parent = mkOption {
type = types.str;
description = "Parent/outer device";
};
};
});
description = ''
GRETap interfaces to create.
'';
};
};
config.boot.kernelModules = [ "fou" ];
config.systemd.services = mapAttrs' (name: value: nameValuePair "${name}-gretap" {
wants = [
"${name}-netdev.service"
"network-addresses-${value.parent}.service"
];
after = [
"network-addresses-${value.parent}.service"
];
before = [
"network-addresses-${name}.service"
];
wantedBy = [
"network-addresses-${name}.service"
];
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.iproute2}/bin/ip link add name ${name} type gretap remote ${value.remoteV4} local ${value.localV4} key ${toString value.id}";
};
}) cfg.interfaces;
}