configure batman and bridges
parent
7334aded89
commit
d2edc6ff45
@ -0,0 +1,95 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.ffnix;
|
||||
activeDomains = attrsets.filterAttrs (n: v: v.enable) cfg.domains;
|
||||
|
||||
mkDomain = name: domCfg:
|
||||
let
|
||||
mkIfName = type:
|
||||
if type == "bridge" then "br-${name}" else
|
||||
if type == "batman" then "bat-${name}" else
|
||||
throw "unknown interface type ${type}, coud not generate name";
|
||||
in {
|
||||
networks."10-lo" = {
|
||||
routes = if !domCfg.defaultNullRoute then [] else [
|
||||
{
|
||||
routeConfig = {
|
||||
Destination = "0.0.0.0/0";
|
||||
Metric = 200;
|
||||
Type = "unreachable";
|
||||
Table = domCfg.routingTable;
|
||||
};
|
||||
}
|
||||
{
|
||||
routeConfig = {
|
||||
Destination = "::/0";
|
||||
Metric = 200;
|
||||
Type = "unreachable";
|
||||
Table = domCfg.routingTable;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
netdevs."30-${mkIfName "bridge"}".netdevConfig = {
|
||||
Name = mkIfName "bridge";
|
||||
Kind = "bridge";
|
||||
};
|
||||
networks."30-${mkIfName "bridge"}" = {
|
||||
matchConfig.Name = mkIfName "bridge";
|
||||
linkConfig.RequiredForOnline = "no";
|
||||
address = domCfg.addresses;
|
||||
routes = map (prefix: {
|
||||
routeConfig = {
|
||||
Destination = prefix;
|
||||
Scope = "link";
|
||||
Table = domCfg.routingTable;
|
||||
};
|
||||
}) (domCfg.ipv6Prefixes ++ [ domCfg.ipv4Prefix ]);
|
||||
routingPolicyRules = [
|
||||
{
|
||||
routingPolicyRuleConfig = {
|
||||
IncomingInterface = mkIfName "bridge";
|
||||
Table = domCfg.routingTable;
|
||||
Family = "both";
|
||||
};
|
||||
}
|
||||
] ++ map (prefix: {
|
||||
routingPolicyRuleConfig = {
|
||||
From = prefix;
|
||||
Table = domCfg.routingTable;
|
||||
};
|
||||
}) (domCfg.ipv6Prefixes ++ [ domCfg.ipv4Prefix ]);
|
||||
};
|
||||
|
||||
netdevs."30-${mkIfName "batman"}" = mkIf (!cfg.batmanLegacy) {
|
||||
netdevConfig = {
|
||||
Kind = "batadv";
|
||||
Name = mkIfName "batman";
|
||||
};
|
||||
batmanAdvancedConfig = {
|
||||
GatewayMode = "server";
|
||||
RoutingAlgorithm = domCfg.batmanAlgorithm;
|
||||
OriginatorIntervalSec = 5;
|
||||
};
|
||||
};
|
||||
networks."30-${mkIfName "batman"}" = {
|
||||
matchConfig.Name = mkIfName "batman";
|
||||
bridge = [ "${mkIfName "bridge"}" ];
|
||||
};
|
||||
};
|
||||
|
||||
domConfigs = map (key: getAttr key (mapAttrs mkDomain activeDomains)) (attrNames activeDomains);
|
||||
mergedConfigs = mapAttrs (name: value: mkMerge value) (attrsets.zipAttrs (map (x: removeAttrs x [ "foo" ]) domConfigs));
|
||||
|
||||
in
|
||||
{
|
||||
config = mkIf cfg.enable {
|
||||
environment.etc."ffnix.json".source = pkgs.writeText "ffnix.json" (generators.toJSON {} activeDomains);
|
||||
systemd.network.netdevs = mergedConfigs.netdevs;
|
||||
systemd.network.networks = mergedConfigs.networks;
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue