# Functionality that used to live in bootstrap.hswaw.net, a VMm now moved back
# into edge01.waw.bgp.wtf

{ config, pkgs, ... }: {
  networking.bridges.bootstrap.interfaces = [];
  networking.interfaces.bootstrap.ipv4.addresses = [
    { address = "185.236.240.18"; prefixLength = 32; }
  ];
  systemd.network.networks."40-bootstrap".networkConfig.IgnoreCarrierLoss = true;
  systemd.network.networks."40-bootstrap".networkConfig.ConfigureWithoutCarrier = true;
  services.atftpd = {
    enable = true;
    root = (let 
      # netboot.xyz.kpxe retrieved from netboot.xyz at 2021/03/15.
      netbootxyz-kpxe = pkgs.fetchurl {
        url = https://object.ceph-waw3.hswaw.net/q3k-personal/b0b99ab84eb973c8a3818ec9fd11e17b75494ad8b5e6976aebbe8b162052da47.kpxe;
        sha256 = "0iysa8h1d2xyxdm9grmmv154jxbvw48zvjcfh6iwhwxr9sw9mfdh";
      };
      # netboot.xyz-undionly.kpxe retrieved from netboot.xyz at 2021/03/15.
      netbootxyz-undionly-kpxe = pkgs.fetchurl {
        url = https://object.ceph-waw3.hswaw.net/q3k-personal/42ca97fe5219899e208cf466cb04d2cd4fe7f7b30e0db30ef63cafabcc95b989.kpxe;
        sha256 = "12drjp6apbrwyq7b638fngvyfkyds82cnrplihh9x28rabz9gjj2";
      };
    in pkgs.stdenv.mkDerivation {
      name = "atftp-root";
      unpackPhase = "true";
      buildPhase = "true";
      installPhase = ''
        mkdir -p $out
        cp ${netbootxyz-kpxe} $out/netboot.xyz.kpxe
        cp ${netbootxyz-undionly-kpxe} $out/netboot.xyz-undionly.kpxe
      '';
    });
  };
  services.dhcpd4 = {
    enable = true;
    interfaces = [ "bootstrap" "vl-dcsw-l3" ];
    extraConfig = ''
      # ISC DHCP is trash. We only use it in relay mode, yet we have to do
      # this.
      subnet 185.236.240.18 netmask 255.255.255.255 {}

      subnet 185.236.240.6 netmask 255.255.255.254 {}

      subnet 185.236.240.24 netmask 255.255.255.248 {
          option routers 185.236.240.25;
          range 185.236.240.29 185.236.240.30;
          option domain-name-servers 8.8.8.8;
      }

      subnet 185.236.240.32 netmask 255.255.255.240 {
          range 185.236.240.45 185.236.240.46;
          option routers 185.236.240.33;
          option domain-name-servers 8.8.8.8;
      }

      host bc01n01 {
          hardware ethernet 00:23:ae:fe:83:20;
          fixed-address 185.236.240.35;
          option host-name "bc01n01";
      }
      host bc01n02 {
          hardware ethernet 00:23:ae:fe:83:c4;
          fixed-address 185.236.240.36;
          option host-name "bc01n02";
      }
      host bc01n03 {
          hardware ethernet 00:23:ae:fe:42:80;
          fixed-address 185.236.240.37;
          option host-name "bc01n03";
          filename "netboot.xyz-undionly.kpxe";
      }
      host bc01n04 {
          hardware ethernet 00:23:ae:fe:7e:a8;
          fixed-address 185.236.240.41;
          option host-name "bc01n04";
          filename "netboot.xyz-undionly.kpxe";
      }
      host boston-packets {
          hardware ethernet 00:23:ae:fe:45:8c;
          fixed-address 185.236.240.38;
          option host-name "boston-packets.hackerspace.pl";
      }
      host dcr01s22 {
          hardware ethernet 90:1b:0e:08:12:b8;
          fixed-address 185.236.240.39;
          option host-name "dcr01s22";
      }
      host dcr01s24 {
          hardware ethernet 90:1b:0e:31:bb:6a;
          fixed-address 185.236.240.40;
          option host-name "dcr01s24";
      }
      host dcr03s32b1 {
          hardware ethernet 02:01:87:4a:9a:b9;
          fixed-address 185.236.240.26;
          option host-name "dcr03s32b1";
      }
    '';
  };
}
