mirror of
https://github.com/systemd/systemd.git
synced 2025-01-11 09:18:07 +03:00
network: Route - allow to set TCP RTO
This commit is contained in:
parent
5f22d16bb3
commit
1412d4a4fe
@ -1719,6 +1719,15 @@ allow my_server_t localnet_peer_t:peer recv;</programlisting>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>TCPRetransmissionTimeOutSec=</varname></term>
|
||||
<listitem>
|
||||
<para>Specifies the TCP Retransmission Time Out for the route. Takes time values in seconds.
|
||||
This value specifies the timeout of an alive TCP connection, when RTO retransmissions remain unacknowledged.
|
||||
When unset, the kernel's default will be used.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>MultiPathRoute=<replaceable>address</replaceable>[@<replaceable>name</replaceable>] [<replaceable>weight</replaceable>]</varname></term>
|
||||
<listitem>
|
||||
|
@ -196,6 +196,7 @@ Route.GatewayOnlink, config_parse_route_boolean,
|
||||
Route.IPv6Preference, config_parse_ipv6_route_preference, 0, 0
|
||||
Route.Protocol, config_parse_route_protocol, 0, 0
|
||||
Route.Type, config_parse_route_type, 0, 0
|
||||
Route.TCPRetransmissionTimeOutSec, config_parse_route_tcp_rto, 0, 0
|
||||
Route.InitialCongestionWindow, config_parse_route_tcp_window, 0, 0
|
||||
Route.InitialAdvertisedReceiveWindow, config_parse_route_tcp_window, 0, 0
|
||||
Route.TCPAdvertisedMaximumSegmentSize, config_parse_tcp_advmss, 0, 0
|
||||
|
@ -1247,6 +1247,12 @@ static int route_configure(const Route *route, uint32_t lifetime_sec, Link *link
|
||||
return r;
|
||||
}
|
||||
|
||||
if (route->tcp_rto_usec > 0) {
|
||||
r = sd_netlink_message_append_u32(m, RTAX_RTO_MIN, route->tcp_rto_usec / USEC_PER_MSEC);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_netlink_message_close_container(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -2752,6 +2758,58 @@ int config_parse_route_mtu(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_route_tcp_rto(
|
||||
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) {
|
||||
|
||||
Network *network = userdata;
|
||||
_cleanup_(route_free_or_set_invalidp) Route *n = NULL;
|
||||
usec_t usec;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
assert(section);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
r = route_new_static(network, filename, section_line, &n);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||
"Failed to allocate route, ignoring assignment: %m");
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = parse_sec(rvalue, &usec);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||
"Failed to parse route TCP retransmission time out (RTO) sec '%s', ignoring: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (usec != USEC_INFINITY &&
|
||||
DIV_ROUND_UP(usec, USEC_PER_SEC) > UINT32_MAX) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
"Route TCP retransmission time out (RTO) = must be in the range 0...%"PRIu32"ms, ignoring: %s", UINT32_MAX, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
n->tcp_rto_usec = usec;
|
||||
|
||||
TAKE_PTR(n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_multipath_route(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
|
@ -56,6 +56,7 @@ struct Route {
|
||||
unsigned flags;
|
||||
int gateway_onlink; /* Only used in conf parser and route_section_verify(). */
|
||||
uint32_t nexthop_id;
|
||||
usec_t tcp_rto_usec;
|
||||
|
||||
bool scope_set:1;
|
||||
bool table_set:1;
|
||||
@ -125,6 +126,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_route_protocol);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_route_type);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_route_tcp_window);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_tcp_window);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_route_tcp_rto);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_route_mtu);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_multipath_route);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_tcp_congestion);
|
||||
|
Loading…
Reference in New Issue
Block a user