]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: add UseMTU= in [IPv6AcceptRA]
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 20 Aug 2021 00:41:34 +0000 (09:41 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 20 Aug 2021 08:14:08 +0000 (17:14 +0900)
Note that kernel has similar knob in sysctl: accept_ra_mtu.

Closes #18868.

man/systemd.network.xml
src/network/networkd-ndisc.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h
test/fuzz/fuzz-network-parser/directives.network

index 03100c035b846e621d45019e25c13a2dc9f0e479..573ba959eb4d15240cf39c21cc2421848247bb64 100644 (file)
@@ -2265,6 +2265,14 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
           </listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><varname>UseMTU=</varname></term>
+          <listitem>
+            <para>Takes a boolean. When true, the MTU received in the Router Advertisement will be
+            used. Defaults to true.</para>
+          </listitem>
+        </varlistentry>
+
         <varlistentry>
           <term><varname>UseAutonomousPrefix=</varname></term>
           <listitem>
index f58edb8f3cae99673c8c625a298b91593f600a13..fe1f1e0333cf9fc7ee9dd259eff15aff311bf9dc 100644 (file)
@@ -536,9 +536,9 @@ static int ndisc_request_address(Address *in, Link *link, sd_ndisc_router *rt) {
 static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
         _cleanup_(route_freep) Route *route = NULL;
         struct in6_addr gateway;
-        uint16_t lifetime;
+        uint32_t table, mtu = 0;
         unsigned preference;
-        uint32_t table, mtu;
+        uint16_t lifetime;
         usec_t time_now;
         int r;
 
@@ -575,11 +575,11 @@ static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
-        r = sd_ndisc_router_get_mtu(rt, &mtu);
-        if (r == -ENODATA)
-                mtu = 0;
-        else if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m");
+        if (link->network->ipv6_accept_ra_use_mtu) {
+                r = sd_ndisc_router_get_mtu(rt, &mtu);
+                if (r < 0 && r != -ENODATA)
+                        return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m");
+        }
 
         table = link_get_ipv6_accept_ra_route_table(link);
 
index aa4dc00e55bc8abb4db11bdc303288ccd049d96b..846e54aed7596178b8dd3edc56f347da93f22d41 100644 (file)
@@ -256,6 +256,7 @@ IPv6AcceptRA.UseAutonomousPrefix,            config_parse_bool,
 IPv6AcceptRA.UseOnLinkPrefix,                config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_onlink_prefix)
 IPv6AcceptRA.UseDNS,                         config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_dns)
 IPv6AcceptRA.UseDomains,                     config_parse_ipv6_accept_ra_use_domains,                  0,                             offsetof(Network, ipv6_accept_ra_use_domains)
+IPv6AcceptRA.UseMTU,                         config_parse_bool,                                        0,                             offsetof(Network, ipv6_accept_ra_use_mtu)
 IPv6AcceptRA.DHCPv6Client,                   config_parse_ipv6_accept_ra_start_dhcp6_client,           0,                             offsetof(Network, ipv6_accept_ra_start_dhcp6_client)
 IPv6AcceptRA.RouteTable,                     config_parse_section_route_table,                         0,                             0
 IPv6AcceptRA.RouteMetric,                    config_parse_dhcp_route_metric,                           0,                             0
index bb09ba9e8933802fd5f73985606f6748e69a5638..1928db537e0c56c170001727b0a9dd11e39055ad 100644 (file)
@@ -400,15 +400,16 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                 .ipv4_accept_local = -1,
                 .ipv4_route_localnet = -1,
                 .ipv6_privacy_extensions = IPV6_PRIVACY_EXTENSIONS_NO,
-                .ipv6_accept_ra = -1,
                 .ipv6_dad_transmits = -1,
                 .ipv6_hop_limit = -1,
                 .ipv6_proxy_ndp = -1,
                 .proxy_arp = -1,
 
+                .ipv6_accept_ra = -1,
                 .ipv6_accept_ra_use_dns = true,
                 .ipv6_accept_ra_use_autonomous_prefix = true,
                 .ipv6_accept_ra_use_onlink_prefix = true,
+                .ipv6_accept_ra_use_mtu = true,
                 .ipv6_accept_ra_route_table = RT_TABLE_MAIN,
                 .ipv6_accept_ra_route_metric = DHCP_ROUTE_METRIC,
                 .ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
index 815bcf5023fcf14325d8129d18978b0c01a10889..95c86e72304066423dd4593be59f11655458615c 100644 (file)
@@ -301,6 +301,7 @@ struct Network {
         bool ipv6_accept_ra_use_dns;
         bool ipv6_accept_ra_use_autonomous_prefix;
         bool ipv6_accept_ra_use_onlink_prefix;
+        bool ipv6_accept_ra_use_mtu;
         bool active_slave;
         bool primary_slave;
         DHCPUseDomains ipv6_accept_ra_use_domains;
index 8fe4ced35154b0f6a70b1ad960e757f6ed69a679..a3711cb77d9c487ee24b6c8de89657260f246882 100644 (file)
@@ -342,6 +342,7 @@ Label=
 Prefix=
 [IPv6AcceptRA]
 UseDomains=
+UseMTU=
 RouteTable=
 RouteMetric=
 UseDNS=