nixos/network-interfaces: add networking.interfaces.<name>.ipv[46].routes.type
This commit is contained in:
parent
42cfcd1d78
commit
3a09010b9d
@ -219,14 +219,15 @@ let
|
|||||||
cidr = "${route.address}/${toString route.prefixLength}";
|
cidr = "${route.address}/${toString route.prefixLength}";
|
||||||
via = optionalString (route.via != null) ''via "${route.via}"'';
|
via = optionalString (route.via != null) ''via "${route.via}"'';
|
||||||
options = concatStrings (mapAttrsToList (name: val: "${name} ${val} ") route.options);
|
options = concatStrings (mapAttrsToList (name: val: "${name} ${val} ") route.options);
|
||||||
|
type = toString route.type;
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
echo "${cidr}" >> $state
|
echo "${cidr}" >> $state
|
||||||
echo -n "adding route ${cidr}... "
|
echo -n "adding route ${cidr}... "
|
||||||
if out=$(ip route add "${cidr}" ${options} ${via} dev "${i.name}" proto static 2>&1); then
|
if out=$(ip route add ${type} "${cidr}" ${options} ${via} dev "${i.name}" proto static 2>&1); then
|
||||||
echo "done"
|
echo "done"
|
||||||
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
|
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
|
||||||
echo "'ip route add "${cidr}" ${options} ${via} dev "${i.name}"' failed: $out"
|
echo "'ip route add ${type} "${cidr}" ${options} ${via} dev "${i.name}"' failed: $out"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
''
|
''
|
||||||
|
@ -142,6 +142,9 @@ in
|
|||||||
optionalAttrs (route.via != null) {
|
optionalAttrs (route.via != null) {
|
||||||
Gateway = route.via;
|
Gateway = route.via;
|
||||||
} //
|
} //
|
||||||
|
optionalAttrs (route.type != null) {
|
||||||
|
Type = route.type;
|
||||||
|
} //
|
||||||
optionalAttrs (route.options ? onlink) {
|
optionalAttrs (route.options ? onlink) {
|
||||||
GatewayOnLink = true;
|
GatewayOnLink = true;
|
||||||
} //
|
} //
|
||||||
|
@ -90,6 +90,22 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type = mkOption {
|
||||||
|
type = types.nullOr (types.enum [
|
||||||
|
"unicast" "local" "broadcast" "multicast"
|
||||||
|
]);
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Type of the route. See the <literal>Route types</literal> section
|
||||||
|
in the <literal>ip-route(8)</literal> manual page for the details.
|
||||||
|
|
||||||
|
Note that <literal>prohibit</literal>, <literal>blackhole</literal>,
|
||||||
|
<literal>unreachable</literal>, and <literal>throw</literal> cannot
|
||||||
|
be configured per device, so they are not available here. Similarly,
|
||||||
|
<literal>nat</literal> hasn't been supported since kernel 2.6.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
via = mkOption {
|
via = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
|
@ -77,12 +77,14 @@ let
|
|||||||
testCases = {
|
testCases = {
|
||||||
loopback = {
|
loopback = {
|
||||||
name = "Loopback";
|
name = "Loopback";
|
||||||
machine.networking.useDHCP = false;
|
nodes.client = { pkgs, ... }: with pkgs.lib; {
|
||||||
machine.networking.useNetworkd = networkd;
|
networking.useDHCP = false;
|
||||||
|
networking.useNetworkd = networkd;
|
||||||
|
};
|
||||||
testScript = ''
|
testScript = ''
|
||||||
start_all()
|
start_all()
|
||||||
machine.wait_for_unit("network.target")
|
client.wait_for_unit("network.target")
|
||||||
loopback_addresses = machine.succeed("ip addr show lo")
|
loopback_addresses = client.succeed("ip addr show lo")
|
||||||
assert "inet 127.0.0.1/8" in loopback_addresses
|
assert "inet 127.0.0.1/8" in loopback_addresses
|
||||||
assert "inet6 ::1/128" in loopback_addresses
|
assert "inet6 ::1/128" in loopback_addresses
|
||||||
'';
|
'';
|
||||||
@ -139,6 +141,25 @@ let
|
|||||||
client.wait_until_succeeds("ping -c 1 192.168.3.1")
|
client.wait_until_succeeds("ping -c 1 192.168.3.1")
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
routeType = {
|
||||||
|
name = "RouteType";
|
||||||
|
nodes.client = { pkgs, ... }: with pkgs.lib; {
|
||||||
|
networking = {
|
||||||
|
useDHCP = false;
|
||||||
|
useNetworkd = networkd;
|
||||||
|
interfaces.eth1.ipv4.routes = [{
|
||||||
|
address = "192.168.1.127";
|
||||||
|
prefixLength = 32;
|
||||||
|
type = "local";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testScript = ''
|
||||||
|
start_all()
|
||||||
|
client.wait_for_unit("network.target")
|
||||||
|
client.succeed("ip -4 route list table local | grep 'local 192.168.1.127'")
|
||||||
|
'';
|
||||||
|
};
|
||||||
dhcpDefault = {
|
dhcpDefault = {
|
||||||
name = "useDHCP-by-default";
|
name = "useDHCP-by-default";
|
||||||
nodes.router = router;
|
nodes.router = router;
|
||||||
|
Loading…
Reference in New Issue
Block a user