networkd: route add MPLS TTL propagate

This commit is contained in:
Susant Sahani 2019-05-16 15:19:08 +05:30 committed by Yu Watanabe
parent cb7e98ab05
commit 9b88f20aba
5 changed files with 58 additions and 0 deletions

View File

@ -1235,6 +1235,14 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>TTLPropagate=</varname></term>
<listitem>
<para>Takes a boolean. When true enables TTL propagation at Label Switched Path (LSP) egress.
When unset, the kernel's default will be used.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>MTUBytes=</varname></term>
<listitem>

View File

@ -130,6 +130,7 @@ Route.InitialCongestionWindow, config_parse_tcp_window,
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
Route.TTLPropagate, config_parse_route_ttl_propagate, 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)

View File

@ -61,6 +61,7 @@ int route_new(Route **ret) {
.quickack = -1,
.fast_open_no_cookie = -1,
.gateway_onlink = -1,
.ttl_propagate = -1,
};
*ret = TAKE_PTR(route);
@ -617,6 +618,12 @@ int route_configure(
return log_link_error_errno(link, r, "Could not append RTA_OIF attribute: %m");
}
if (route->ttl_propagate >= 0) {
r = sd_netlink_message_append_u8(req, RTA_TTL_PROPAGATE, route->ttl_propagate);
if (r < 0)
return log_link_error_errno(link, r, "Could not append RTA_TTL_PROPAGATE attribute: %m");
}
r = sd_netlink_message_open_container(req, RTA_METRICS);
if (r < 0)
return log_link_error_errno(link, r, "Could not append RTA_METRICS attribute: %m");
@ -1300,6 +1307,45 @@ int config_parse_route_mtu(
return 0;
}
int config_parse_route_ttl_propagate(
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;
int r, k;
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 TTLPropagate= value, ignoring: %s", rvalue);
return 0;
}
n->ttl_propagate = k;
TAKE_PTR(n);
return 0;
}
int route_section_verify(Route *route, Network *network) {
if (section_is_invalid(route->section))
return -EINVAL;

View File

@ -18,6 +18,7 @@ struct Route {
int family;
int quickack;
int fast_open_no_cookie;
int ttl_propagate;
unsigned char dst_prefixlen;
unsigned char src_prefixlen;
@ -77,4 +78,5 @@ 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_ttl_propagate);
CONFIG_PARSER_PROTOTYPE(config_parse_route_mtu);

View File

@ -83,6 +83,7 @@ QuickAck=
FastOpenNoCookie=
Source=
Metric=
TTLPropagate=
[Network]
IPv6DuplicateAddressDetection=
IPMasquerade=