mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-17 23:36:17 +01:00
Merge pull request #175743 from scvalex/add-route-type-option
nixos/network-interfaces: add networking.interfaces.<name>.ipv[46].routes.type
This commit is contained in:
commit
18cce1008e
4 changed files with 47 additions and 6 deletions
|
@ -219,14 +219,15 @@ let
|
|||
cidr = "${route.address}/${toString route.prefixLength}";
|
||||
via = optionalString (route.via != null) ''via "${route.via}"'';
|
||||
options = concatStrings (mapAttrsToList (name: val: "${name} ${val} ") route.options);
|
||||
type = toString route.type;
|
||||
in
|
||||
''
|
||||
echo "${cidr}" >> $state
|
||||
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"
|
||||
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
|
||||
fi
|
||||
''
|
||||
|
|
|
@ -142,6 +142,9 @@ in
|
|||
optionalAttrs (route.via != null) {
|
||||
Gateway = route.via;
|
||||
} //
|
||||
optionalAttrs (route.type != null) {
|
||||
Type = route.type;
|
||||
} //
|
||||
optionalAttrs (route.options ? onlink) {
|
||||
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 {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
|
|
|
@ -77,12 +77,14 @@ let
|
|||
testCases = {
|
||||
loopback = {
|
||||
name = "Loopback";
|
||||
machine.networking.useDHCP = false;
|
||||
machine.networking.useNetworkd = networkd;
|
||||
nodes.client = { pkgs, ... }: with pkgs.lib; {
|
||||
networking.useDHCP = false;
|
||||
networking.useNetworkd = networkd;
|
||||
};
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_unit("network.target")
|
||||
loopback_addresses = machine.succeed("ip addr show lo")
|
||||
client.wait_for_unit("network.target")
|
||||
loopback_addresses = client.succeed("ip addr show lo")
|
||||
assert "inet 127.0.0.1/8" 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")
|
||||
'';
|
||||
};
|
||||
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 = {
|
||||
name = "useDHCP-by-default";
|
||||
nodes.router = router;
|
||||
|
|
Loading…
Reference in a new issue