]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: route add support to configure fastopen_no_cookie
authorSusant Sahani <ssahani@gmail.com>
Mon, 13 May 2019 11:15:33 +0000 (16:45 +0530)
committerSusant Sahani <ssahani@gmail.com>
Tue, 14 May 2019 02:38:36 +0000 (08:08 +0530)
This patch adds fastopen_no_cookie option to enable/disable TCP fastopen
without a cookie on a per-route basis.

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

index 3ff1a036ff5ebbbd7aa5cae6c8a18e1e3700104e..0395f2c330582757728ac957fb3db848c4f3e1f2 100644 (file)
             </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>FastOpenNoCookie=</varname></term>
+          <listitem>
+            <para>Takes a boolean. When true enables TCP fastopen without a cookie on a per-route basis.
+            When unset, the kernel's default will be used.
+            </para>
+          </listitem>
+        </varlistentry>
         <varlistentry>
         <term><varname>MTUBytes=</varname></term>
         <listitem>
index c6036e29faf6819f1912889a7c972656ae3593ac..e8e228092cd5b7ec8e6d28acffad6ad982b384e3 100644 (file)
@@ -127,6 +127,7 @@ Route.Type,                             config_parse_route_type,
 Route.InitialCongestionWindow,          config_parse_tcp_window,                         0,                             0
 Route.InitialAdvertisedReceiveWindow,   config_parse_tcp_window,                         0,                             0
 Route.QuickAck,                         config_parse_quickack,                           0,                             0
+Route.FastOpenNoCookie,                 config_parse_fast_open_no_cookie,                0,                             0
 DHCP.ClientIdentifier,                  config_parse_dhcp_client_identifier,             0,                             offsetof(Network, dhcp_client_identifier)
 DHCP.UseDNS,                            config_parse_bool,                               0,                             offsetof(Network, dhcp_use_dns)
 DHCP.UseNTP,                            config_parse_bool,                               0,                             offsetof(Network, dhcp_use_ntp)
index 379077cbfde9c5b17303de832f5228fb9d897c73..03332cd21b3d0d1b983160c7f0482bc2dc2fa001 100644 (file)
@@ -59,6 +59,7 @@ int route_new(Route **ret) {
                 .table = RT_TABLE_MAIN,
                 .lifetime = USEC_INFINITY,
                 .quickack = -1,
+                .fast_open_no_cookie = -1,
                 .gateway_onlink = -1,
         };
 
@@ -644,6 +645,12 @@ int route_configure(
                         return log_link_error_errno(link, r, "Could not append RTAX_QUICKACK attribute: %m");
         }
 
+        if (route->fast_open_no_cookie >= 0) {
+                r = sd_netlink_message_append_u32(req, RTAX_FASTOPEN_NO_COOKIE, route->fast_open_no_cookie);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Could not append RTAX_FASTOPEN_NO_COOKIE attribute: %m");
+        }
+
         r = sd_netlink_message_close_container(req);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not append RTA_METRICS attribute: %m");
@@ -1197,6 +1204,44 @@ int config_parse_quickack(
         return 0;
 }
 
+int config_parse_fast_open_no_cookie(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        _cleanup_(route_free_or_set_invalidp) Route *n = NULL;
+        Network *network = userdata;
+        int k, r;
+
+        assert(filename);
+        assert(section);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+
+        r = route_new_static(network, filename, section_line, &n);
+        if (r < 0)
+                return r;
+
+        k = parse_boolean(rvalue);
+        if (k < 0) {
+                log_syntax(unit, LOG_ERR, filename, line, k,
+                           "Failed to parse TCP fastopen no cookie, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        n->fast_open_no_cookie = k;
+        TAKE_PTR(n);
+        return 0;
+}
+
 int config_parse_route_mtu(
                 const char *unit,
                 const char *filename,
index 1e8320fdc087814ca3c74af89a3f10aeb0c548a4..892da25bd5678c1db4e3cf2a3b6d86464eec87a9 100644 (file)
@@ -17,6 +17,7 @@ struct Route {
 
         int family;
         int quickack;
+        int fast_open_no_cookie;
 
         unsigned char dst_prefixlen;
         unsigned char src_prefixlen;
@@ -74,4 +75,5 @@ CONFIG_PARSER_PROTOTYPE(config_parse_route_protocol);
 CONFIG_PARSER_PROTOTYPE(config_parse_route_type);
 CONFIG_PARSER_PROTOTYPE(config_parse_tcp_window);
 CONFIG_PARSER_PROTOTYPE(config_parse_quickack);
+CONFIG_PARSER_PROTOTYPE(config_parse_fast_open_no_cookie);
 CONFIG_PARSER_PROTOTYPE(config_parse_route_mtu);
index 97e8e4a58026dcad1fbd90fbb2f022ae09b27f7f..3c4a16bc39bd032a9e425aba87330dae9ab3f7e0 100644 (file)
@@ -78,6 +78,7 @@ PreferredSource=
 Scope=
 MTUBytes=
 QuickAck=
+FastOpenNoCookie=
 Source=
 Metric=
 [Network]