nixos/network-interfaces: Add maclvan support
This commit is contained in:
parent
1860ee27b0
commit
fbe9ac05d3
@ -250,6 +250,29 @@ in
|
|||||||
postStop = destroyBond n;
|
postStop = destroyBond n;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
createMacvlanDevice = n: v: nameValuePair "${n}-netdev"
|
||||||
|
(let
|
||||||
|
deps = [ (subsystemDevice v.interface) ];
|
||||||
|
in
|
||||||
|
{ description = "Vlan Interface ${n}";
|
||||||
|
wantedBy = [ "network.target" (subsystemDevice n) ];
|
||||||
|
bindsTo = deps;
|
||||||
|
after = deps;
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
serviceConfig.RemainAfterExit = true;
|
||||||
|
path = [ pkgs.iproute ];
|
||||||
|
script = ''
|
||||||
|
# Remove Dead Interfaces
|
||||||
|
ip link show "${n}" >/dev/null 2>&1 && ip link delete "${n}"
|
||||||
|
ip link add link "${v.interface}" name "${n}" type macvlan \
|
||||||
|
${optionalString (v.mode != null) "mode ${v.mode}"}
|
||||||
|
ip link set "${n}" up
|
||||||
|
'';
|
||||||
|
postStop = ''
|
||||||
|
ip link delete "${n}"
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
createSitDevice = n: v: nameValuePair "${n}-netdev"
|
createSitDevice = n: v: nameValuePair "${n}-netdev"
|
||||||
(let
|
(let
|
||||||
deps = optional (v.dev != null) (subsystemDevice v.dev);
|
deps = optional (v.dev != null) (subsystemDevice v.dev);
|
||||||
@ -303,6 +326,7 @@ in
|
|||||||
map createTunDevice (filter (i: i.virtual) interfaces))
|
map createTunDevice (filter (i: i.virtual) interfaces))
|
||||||
// mapAttrs' createBridgeDevice cfg.bridges
|
// mapAttrs' createBridgeDevice cfg.bridges
|
||||||
// mapAttrs' createBondDevice cfg.bonds
|
// mapAttrs' createBondDevice cfg.bonds
|
||||||
|
// mapAttrs' createMacvlanDevice cfg.macvlans
|
||||||
// mapAttrs' createSitDevice cfg.sits
|
// mapAttrs' createSitDevice cfg.sits
|
||||||
// mapAttrs' createVlanDevice cfg.vlans
|
// mapAttrs' createVlanDevice cfg.vlans
|
||||||
// {
|
// {
|
||||||
|
@ -118,6 +118,18 @@ in
|
|||||||
networkConfig.Bond = name;
|
networkConfig.Bond = name;
|
||||||
} ])));
|
} ])));
|
||||||
})))
|
})))
|
||||||
|
(mkMerge (flip mapAttrsToList cfg.macvlans (name: macvlan: {
|
||||||
|
netdevs."40-${name}" = {
|
||||||
|
netdevConfig = {
|
||||||
|
Name = name;
|
||||||
|
Kind = "macvlan";
|
||||||
|
};
|
||||||
|
macvlanConfig.Mode = macvlan.mode;
|
||||||
|
};
|
||||||
|
networks."40-${macvlan.interface}" = (mkMerge [ (genericNetwork (mkOverride 999)) {
|
||||||
|
macvlan = [ name ];
|
||||||
|
} ]);
|
||||||
|
})))
|
||||||
(mkMerge (flip mapAttrsToList cfg.sits (name: sit: {
|
(mkMerge (flip mapAttrsToList cfg.sits (name: sit: {
|
||||||
netdevs."40-${name}" = {
|
netdevs."40-${name}" = {
|
||||||
netdevConfig = {
|
netdevConfig = {
|
||||||
|
@ -428,6 +428,37 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
networking.macvlans = mkOption {
|
||||||
|
type = types.attrsOf types.optionSet;
|
||||||
|
default = { };
|
||||||
|
example = {
|
||||||
|
wan = {
|
||||||
|
interface = "enp2s0";
|
||||||
|
mode = "vepa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
description = ''
|
||||||
|
This option allows you to define macvlan interfaces which should
|
||||||
|
be automatically created.
|
||||||
|
'';
|
||||||
|
options = {
|
||||||
|
|
||||||
|
interface = mkOption {
|
||||||
|
example = "enp4s0";
|
||||||
|
type = types.string;
|
||||||
|
description = "The interface the macvlan will transmit packets through.";
|
||||||
|
};
|
||||||
|
|
||||||
|
mode = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
example = "vepa";
|
||||||
|
description = "The mode of the macvlan device.";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
networking.sits = mkOption {
|
networking.sits = mkOption {
|
||||||
type = types.attrsOf types.optionSet;
|
type = types.attrsOf types.optionSet;
|
||||||
default = { };
|
default = { };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user