You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.3 KiB
Nix
153 lines
4.3 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.ffnix;
|
|
in
|
|
{
|
|
options.ffnix = {
|
|
enable = mkEnableOption "ffnix";
|
|
batmanLegacy = mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = types.bool;
|
|
description = ''
|
|
Use batman-adv-legacy - do not use in new communities!
|
|
'';
|
|
};
|
|
bird = {
|
|
enable = mkEnableOption "bird routing daemon";
|
|
routerID = mkOption {
|
|
type = types.str;
|
|
};
|
|
kernelTable = mkOption {
|
|
type= types.int;
|
|
};
|
|
earlyExtraConfig = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
};
|
|
extraConfig = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
};
|
|
};
|
|
domains = mkOption {
|
|
description = "Freifunk Domains (a domain is a seperated L2 network segment)";
|
|
default = {};
|
|
type = with types; attrsOf (submodule {
|
|
options = {
|
|
enable = mkEnableOption "ffnix Domain";
|
|
ipv4Prefix = mkOption {
|
|
type = types.str;
|
|
};
|
|
ipv6Prefixes = mkOption {
|
|
type = types.listOf types.str;
|
|
};
|
|
ipv4Addresses = mkOption {
|
|
type = types.listOf types.str;
|
|
description = ''
|
|
IPv4 Addresses to be configured on the bridge interface.
|
|
WARNING: the primary-ipv4-address to be send as a gateway address via DHCP has to be the first one.
|
|
'';
|
|
};
|
|
ipv6Addresses = mkOption {
|
|
type = types.listOf types.str;
|
|
description = ''
|
|
IPv6 Addresses to be configured on the bridge interface.
|
|
'';
|
|
};
|
|
routingTable = mkOption {
|
|
type = types.int;
|
|
};
|
|
defaultNullRoute = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = ''
|
|
Create a Null-Route in the routing-table to allow traffic leaks on the gateways default route when uplink is down.
|
|
The first address will be sen't as the DNS-Server via RAs.
|
|
'';
|
|
};
|
|
mtu = mkOption {
|
|
type = types.int;
|
|
};
|
|
enableRadvd = mkOption {
|
|
default = false;
|
|
type = types.bool;
|
|
};
|
|
radvdPrefixes = mkOption {
|
|
default = [];
|
|
type = types.listOf types.str;
|
|
};
|
|
dhcpRange = mkOption {
|
|
default = "";
|
|
type = types.str;
|
|
};
|
|
searchDomain = mkOption {
|
|
type = types.str;
|
|
};
|
|
dhcpExtraConfig = mkOption {
|
|
description = ''
|
|
Additional config that will me merged with the kea-subnet4 config
|
|
'';
|
|
default = {};
|
|
type = (pkgs.formats.json {}).type;
|
|
};
|
|
batmanAlgorithm = mkOption {
|
|
default = "batman-iv";
|
|
type = types.str;
|
|
};
|
|
tunnels = mkOption {
|
|
default = {};
|
|
type = types.submodule {
|
|
options = {
|
|
fastd = mkOption {
|
|
default = {};
|
|
type = types.submodule {
|
|
options = {
|
|
enable = mkEnableOption "Fastd Tunnel";
|
|
mtu = mkOption {
|
|
type = types.int;
|
|
default = 1406;
|
|
};
|
|
port = mkOption {
|
|
type = types.int;
|
|
default = 10000;
|
|
};
|
|
interfaceMac = mkOption {
|
|
type = types.str;
|
|
};
|
|
extraConfig = mkOption {
|
|
description = ''
|
|
Additional config that will me merged with the fastd-instance config
|
|
'';
|
|
default = {};
|
|
type = (pkgs.formats.json {}).type;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
});
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
services.vnstat.enable = true;
|
|
|
|
programs.mtr.enable = true;
|
|
|
|
};
|
|
|
|
imports = [
|
|
./modules
|
|
./modules/batman.nix
|
|
./modules/fastd.nix
|
|
./modules/bird
|
|
];
|
|
}
|