|
|
|
@ -37,7 +37,7 @@ with lib;
|
|
|
|
|
};
|
|
|
|
|
policyCheck = name: interface:
|
|
|
|
|
let
|
|
|
|
|
clientList = filter (x x != null) (lib.mapAttrsToList
|
|
|
|
|
clientList = filter (x: x != null) (lib.mapAttrsToList
|
|
|
|
|
(childName: value:
|
|
|
|
|
if any (nic: nic == name) value.routeToNics then
|
|
|
|
|
childName
|
|
|
|
@ -74,52 +74,51 @@ with lib;
|
|
|
|
|
}
|
|
|
|
|
'') (builtins.attrNames config.networking.interfaces);
|
|
|
|
|
|
|
|
|
|
genode.init.children = let
|
|
|
|
|
|
|
|
|
|
nics = mapAttrs' (name: interface:
|
|
|
|
|
let name' = name + ".driver";
|
|
|
|
|
genode.core.children = mapAttrs' (name: interface:
|
|
|
|
|
let name' = name + ".driver";
|
|
|
|
|
in {
|
|
|
|
|
name = name';
|
|
|
|
|
value = let
|
|
|
|
|
binary = with pkgs.genodePackages;
|
|
|
|
|
{
|
|
|
|
|
ipxe = ipxe_nic_drv;
|
|
|
|
|
virtio = virtio_nic_drv;
|
|
|
|
|
}.${interface.genode.driver};
|
|
|
|
|
in {
|
|
|
|
|
name = name';
|
|
|
|
|
value = let
|
|
|
|
|
binary = with pkgs.genodePackages;
|
|
|
|
|
{
|
|
|
|
|
ipxe = ipxe_nic_drv;
|
|
|
|
|
virtio = virtio_nic_drv;
|
|
|
|
|
}.${interface.genode.driver};
|
|
|
|
|
in {
|
|
|
|
|
inputs = [ binary ];
|
|
|
|
|
configFile = let
|
|
|
|
|
policy = lib.mapAttrsToList (childName: value:
|
|
|
|
|
if any (nic: nic == name) value.routeToNics then ''
|
|
|
|
|
Init.Config.Policy::{
|
|
|
|
|
, service = "Nic"
|
|
|
|
|
, label = Init.LabelSelector.prefix "${childName}"
|
|
|
|
|
}
|
|
|
|
|
'' else
|
|
|
|
|
"") config.genode.init.children;
|
|
|
|
|
|
|
|
|
|
in pkgs.writeText "${name'}.dhall" ''
|
|
|
|
|
let Genode = env:DHALL_GENODE
|
|
|
|
|
|
|
|
|
|
let Init = Genode.Init
|
|
|
|
|
|
|
|
|
|
in Init.Child.flat
|
|
|
|
|
Init.Child.Attributes::{
|
|
|
|
|
, binary = "${binary.pname}"
|
|
|
|
|
, provides = [ "Nic" ]
|
|
|
|
|
, resources = Init.Resources::{ caps = 128, ram = Genode.units.MiB 4 }
|
|
|
|
|
, routes = [ Init.ServiceRoute.parent "IO_MEM" ]
|
|
|
|
|
, config = Init.Config::{
|
|
|
|
|
, attributes = toMap { verbose = "true" }
|
|
|
|
|
, policies = [ ${
|
|
|
|
|
toString policy
|
|
|
|
|
} ] : List Init.Config.Policy.Type
|
|
|
|
|
}
|
|
|
|
|
inputs = [ binary ];
|
|
|
|
|
configFile = let
|
|
|
|
|
policy = lib.mapAttrsToList (childName: value:
|
|
|
|
|
if any (nic: nic == name) value.routeToNics then ''
|
|
|
|
|
Init.Config.Policy::{
|
|
|
|
|
, service = "Nic"
|
|
|
|
|
, label = Init.LabelSelector.prefix "nixos -> ${childName}"
|
|
|
|
|
}
|
|
|
|
|
'' else
|
|
|
|
|
"") config.genode.init.children;
|
|
|
|
|
|
|
|
|
|
in pkgs.writeText "${name'}.dhall" ''
|
|
|
|
|
let Genode = env:DHALL_GENODE
|
|
|
|
|
|
|
|
|
|
let Init = Genode.Init
|
|
|
|
|
|
|
|
|
|
in Init.Child.flat
|
|
|
|
|
Init.Child.Attributes::{
|
|
|
|
|
, binary = "${binary.pname}"
|
|
|
|
|
, provides = [ "Nic" ]
|
|
|
|
|
, resources = Init.Resources::{ caps = 128, ram = Genode.units.MiB 4 }
|
|
|
|
|
, routes = [ Init.ServiceRoute.parent "IO_MEM" ]
|
|
|
|
|
, config = Init.Config::{
|
|
|
|
|
, attributes = toMap { verbose = "true" }
|
|
|
|
|
, policies = [ ${
|
|
|
|
|
toString policy
|
|
|
|
|
} ] : List Init.Config.Policy.Type
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
}) config.networking.interfaces;
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
}) config.networking.interfaces;
|
|
|
|
|
|
|
|
|
|
genode.init.children = let
|
|
|
|
|
sockets = mapAttrs' (name: interface:
|
|
|
|
|
let name' = name + ".sockets";
|
|
|
|
|
in {
|
|
|
|
@ -142,7 +141,10 @@ with lib;
|
|
|
|
|
lxip = 32;
|
|
|
|
|
}.${interface.genode.stack};
|
|
|
|
|
settings = with builtins;
|
|
|
|
|
lib.optionals (interface.ipv4.addresses != [ ])
|
|
|
|
|
[{
|
|
|
|
|
name = "label";
|
|
|
|
|
value = name;
|
|
|
|
|
}] ++ lib.optionals (interface.ipv4.addresses != [ ])
|
|
|
|
|
(let addr = head interface.ipv4.addresses;
|
|
|
|
|
in [
|
|
|
|
|
{
|
|
|
|
@ -204,7 +206,7 @@ with lib;
|
|
|
|
|
};
|
|
|
|
|
}) config.networking.interfaces;
|
|
|
|
|
|
|
|
|
|
in nics // (lib.filterAttrs (n: v: v != null) sockets);
|
|
|
|
|
in lib.filterAttrs (n: v: v != null) sockets;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|