# A small Ethernet-over-IP service implementation.
# Yes, that's the Mikrotik EoIP implementation. This one is somewhat sketchy
# (notably, it pumps huge zero-padded frames into tap), so doesn't use it for
# production. We currently only use it in the edge01.waw test framework to
# bring vlans across test VMs.

{ config, pkgs, lib, ... }:

with lib;

let
  eoip = pkgs.stdenv.mkDerivation {
    pname = "eoip";
    version = "20180119";
    nativeBuildInputs = with pkgs; [ cmake ];
    src = pkgs.fetchFromGitHub {
      owner = "amphineko";
      repo = "eoiptapd";
      rev = "5573a905bcbc001b503308665f098e82f451dc33";
      sha256 = "0np9dzcw5w6jarzdv2yh3mbzz0wgw10sjqyi6pxan4ipr75v1b8s";
    };
    installPhase = ''
      mkdir -p $out/bin
      cp eoiptapd $out/bin/eoiptapd
    '';
  };

  cfg = config.hscloud.eoip;

in {
  options.hscloud.eoip = {
    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 = ''
        EoIP interfaces to create.
      '';
    };
  };

  config.systemd.services = mapAttrs' (name: value: nameValuePair "${name}-eoip" {
    wantedBy = [ "network.target" ];
    wants = [
      "${name}-netdev.service"
      "network-addresses-${value.parent}.service"
    ];
    after = [
      "network-addresses-${value.parent}.service"
    ];
    serviceConfig = {
      Type = "simple";
      ExecStart = "${eoip}/bin/eoiptapd -i ${name} -l ${value.localV4} -r ${value.remoteV4} -t ${toString value.id}";
      Restart = "always";
      RestartSec = "1";
    };
  }) cfg.interfaces;
}
