diff options
author | Susant Sahani <ssahani@gmail.com> | 2019-05-13 13:15:33 +0200 |
---|---|---|
committer | Susant Sahani <ssahani@gmail.com> | 2019-05-14 04:38:36 +0200 |
commit | 633c7258655ba94b2b9c24689de150717839e78b (patch) | |
tree | 00f9d70192bdfa5cd49fd40bc68b76985b57cb27 | |
parent | sd-netlink: support RTAX_FASTOPEN_NO_COOKIE (diff) | |
download | systemd-633c7258655ba94b2b9c24689de150717839e78b.tar.xz systemd-633c7258655ba94b2b9c24689de150717839e78b.zip |
networkd: route add support to configure fastopen_no_cookie
This patch adds fastopen_no_cookie option to enable/disable TCP fastopen
without a cookie on a per-route basis.
-rw-r--r-- | man/systemd.network.xml | 8 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 | ||||
-rw-r--r-- | src/network/networkd-route.c | 45 | ||||
-rw-r--r-- | src/network/networkd-route.h | 2 | ||||
-rw-r--r-- | test/fuzz/fuzz-network-parser/directives.network | 1 |
5 files changed, 57 insertions, 0 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 3ff1a036ff..0395f2c330 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1219,6 +1219,14 @@ </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> <para>The maximum transmission unit in bytes to set for the diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index c6036e29fa..e8e228092c 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -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) diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 379077cbfd..03332cd21b 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -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, diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index 1e8320fdc0..892da25bd5 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -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); diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 97e8e4a580..3c4a16bc39 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -78,6 +78,7 @@ PreferredSource= Scope= MTUBytes= QuickAck= +FastOpenNoCookie= Source= Metric= [Network] |