|
|
3e5297 |
From 0a377494bcfcf4e145e260478071be124d56dc6d Mon Sep 17 00:00:00 2001
|
|
|
3e5297 |
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
|
3e5297 |
Date: Fri, 20 Aug 2021 09:41:34 +0900
|
|
|
3e5297 |
Subject: [PATCH] network: add UseMTU= in [IPv6AcceptRA]
|
|
|
3e5297 |
|
|
|
3e5297 |
Note that kernel has similar knob in sysctl: accept_ra_mtu.
|
|
|
3e5297 |
|
|
|
3e5297 |
Closes #18868.
|
|
|
3e5297 |
---
|
|
|
3e5297 |
man/systemd.network.xml | 8 ++++++++
|
|
|
3e5297 |
src/network/networkd-ndisc.c | 14 +++++++-------
|
|
|
3e5297 |
src/network/networkd-network-gperf.gperf | 1 +
|
|
|
3e5297 |
src/network/networkd-network.c | 3 ++-
|
|
|
3e5297 |
src/network/networkd-network.h | 1 +
|
|
|
3e5297 |
test/fuzz/fuzz-network-parser/directives.network | 1 +
|
|
|
3e5297 |
6 files changed, 20 insertions(+), 8 deletions(-)
|
|
|
3e5297 |
|
|
|
3e5297 |
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
|
|
|
3e5297 |
index 03100c035b84..573ba959eb4d 100644
|
|
|
3e5297 |
--- a/man/systemd.network.xml
|
|
|
3e5297 |
+++ b/man/systemd.network.xml
|
|
|
3e5297 |
@@ -2265,6 +2265,14 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
|
|
|
3e5297 |
</listitem>
|
|
|
3e5297 |
</varlistentry>
|
|
|
3e5297 |
|
|
|
3e5297 |
+ <varlistentry>
|
|
|
3e5297 |
+ <term><varname>UseMTU=</varname></term>
|
|
|
3e5297 |
+ <listitem>
|
|
|
3e5297 |
+ <para>Takes a boolean. When true, the MTU received in the Router Advertisement will be
|
|
|
3e5297 |
+ used. Defaults to true.</para>
|
|
|
3e5297 |
+ </listitem>
|
|
|
3e5297 |
+ </varlistentry>
|
|
|
3e5297 |
+
|
|
|
3e5297 |
<varlistentry>
|
|
|
3e5297 |
<term><varname>UseAutonomousPrefix=</varname></term>
|
|
|
3e5297 |
<listitem>
|
|
|
3e5297 |
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
|
|
|
3e5297 |
index f58edb8f3cae..fe1f1e0333cf 100644
|
|
|
3e5297 |
--- a/src/network/networkd-ndisc.c
|
|
|
3e5297 |
+++ b/src/network/networkd-ndisc.c
|
|
|
3e5297 |
@@ -536,9 +536,9 @@ static int ndisc_request_address(Address *in, Link *link, sd_ndisc_router *rt) {
|
|
|
3e5297 |
static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
|
|
|
3e5297 |
_cleanup_(route_freep) Route *route = NULL;
|
|
|
3e5297 |
struct in6_addr gateway;
|
|
|
3e5297 |
- uint16_t lifetime;
|
|
|
3e5297 |
+ uint32_t table, mtu = 0;
|
|
|
3e5297 |
unsigned preference;
|
|
|
3e5297 |
- uint32_t table, mtu;
|
|
|
3e5297 |
+ uint16_t lifetime;
|
|
|
3e5297 |
usec_t time_now;
|
|
|
3e5297 |
int r;
|
|
|
3e5297 |
|
|
|
3e5297 |
@@ -575,11 +575,11 @@ static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
|
|
|
3e5297 |
if (r < 0)
|
|
|
3e5297 |
return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
|
|
|
3e5297 |
|
|
|
3e5297 |
- r = sd_ndisc_router_get_mtu(rt, &mtu);
|
|
|
3e5297 |
- if (r == -ENODATA)
|
|
|
3e5297 |
- mtu = 0;
|
|
|
3e5297 |
- else if (r < 0)
|
|
|
3e5297 |
- return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m");
|
|
|
3e5297 |
+ if (link->network->ipv6_accept_ra_use_mtu) {
|
|
|
3e5297 |
+ r = sd_ndisc_router_get_mtu(rt, &mtu);
|
|
|
3e5297 |
+ if (r < 0 && r != -ENODATA)
|
|
|
3e5297 |
+ return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m");
|
|
|
3e5297 |
+ }
|
|
|
3e5297 |
|
|
|
3e5297 |
table = link_get_ipv6_accept_ra_route_table(link);
|
|
|
3e5297 |
|
|
|
3e5297 |
diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
|
|
|
3e5297 |
index aa4dc00e55bc..846e54aed759 100644
|
|
|
3e5297 |
--- a/src/network/networkd-network-gperf.gperf
|
|
|
3e5297 |
+++ b/src/network/networkd-network-gperf.gperf
|
|
|
3e5297 |
@@ -256,6 +256,7 @@ IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool,
|
|
|
3e5297 |
IPv6AcceptRA.UseOnLinkPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_onlink_prefix)
|
|
|
3e5297 |
IPv6AcceptRA.UseDNS, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_dns)
|
|
|
3e5297 |
IPv6AcceptRA.UseDomains, config_parse_ipv6_accept_ra_use_domains, 0, offsetof(Network, ipv6_accept_ra_use_domains)
|
|
|
3e5297 |
+IPv6AcceptRA.UseMTU, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_mtu)
|
|
|
3e5297 |
IPv6AcceptRA.DHCPv6Client, config_parse_ipv6_accept_ra_start_dhcp6_client, 0, offsetof(Network, ipv6_accept_ra_start_dhcp6_client)
|
|
|
3e5297 |
IPv6AcceptRA.RouteTable, config_parse_section_route_table, 0, 0
|
|
|
3e5297 |
IPv6AcceptRA.RouteMetric, config_parse_dhcp_route_metric, 0, 0
|
|
|
3e5297 |
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
|
|
|
3e5297 |
index bb09ba9e8933..1928db537e0c 100644
|
|
|
3e5297 |
--- a/src/network/networkd-network.c
|
|
|
3e5297 |
+++ b/src/network/networkd-network.c
|
|
|
3e5297 |
@@ -400,15 +400,16 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
|
|
3e5297 |
.ipv4_accept_local = -1,
|
|
|
3e5297 |
.ipv4_route_localnet = -1,
|
|
|
3e5297 |
.ipv6_privacy_extensions = IPV6_PRIVACY_EXTENSIONS_NO,
|
|
|
3e5297 |
- .ipv6_accept_ra = -1,
|
|
|
3e5297 |
.ipv6_dad_transmits = -1,
|
|
|
3e5297 |
.ipv6_hop_limit = -1,
|
|
|
3e5297 |
.ipv6_proxy_ndp = -1,
|
|
|
3e5297 |
.proxy_arp = -1,
|
|
|
3e5297 |
|
|
|
3e5297 |
+ .ipv6_accept_ra = -1,
|
|
|
3e5297 |
.ipv6_accept_ra_use_dns = true,
|
|
|
3e5297 |
.ipv6_accept_ra_use_autonomous_prefix = true,
|
|
|
3e5297 |
.ipv6_accept_ra_use_onlink_prefix = true,
|
|
|
3e5297 |
+ .ipv6_accept_ra_use_mtu = true,
|
|
|
3e5297 |
.ipv6_accept_ra_route_table = RT_TABLE_MAIN,
|
|
|
3e5297 |
.ipv6_accept_ra_route_metric = DHCP_ROUTE_METRIC,
|
|
|
3e5297 |
.ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
|
|
|
3e5297 |
diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
|
|
|
3e5297 |
index 815bcf5023fc..95c86e723040 100644
|
|
|
3e5297 |
--- a/src/network/networkd-network.h
|
|
|
3e5297 |
+++ b/src/network/networkd-network.h
|
|
|
3e5297 |
@@ -301,6 +301,7 @@ struct Network {
|
|
|
3e5297 |
bool ipv6_accept_ra_use_dns;
|
|
|
3e5297 |
bool ipv6_accept_ra_use_autonomous_prefix;
|
|
|
3e5297 |
bool ipv6_accept_ra_use_onlink_prefix;
|
|
|
3e5297 |
+ bool ipv6_accept_ra_use_mtu;
|
|
|
3e5297 |
bool active_slave;
|
|
|
3e5297 |
bool primary_slave;
|
|
|
3e5297 |
DHCPUseDomains ipv6_accept_ra_use_domains;
|
|
|
3e5297 |
diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network
|
|
|
3e5297 |
index 8fe4ced35154..a3711cb77d9c 100644
|
|
|
3e5297 |
--- a/test/fuzz/fuzz-network-parser/directives.network
|
|
|
3e5297 |
+++ b/test/fuzz/fuzz-network-parser/directives.network
|
|
|
3e5297 |
@@ -342,6 +342,7 @@ Label=
|
|
|
3e5297 |
Prefix=
|
|
|
3e5297 |
[IPv6AcceptRA]
|
|
|
3e5297 |
UseDomains=
|
|
|
3e5297 |
+UseMTU=
|
|
|
3e5297 |
RouteTable=
|
|
|
3e5297 |
RouteMetric=
|
|
|
3e5297 |
UseDNS=
|