networkd: Geneve add support for inherit for TTL
This commit is contained in:
committed by
Yu Watanabe
parent
cb367b1785
commit
d70c9bbd6c
@@ -731,8 +731,8 @@
|
||||
<varlistentry>
|
||||
<term><varname>TTL=</varname></term>
|
||||
<listitem>
|
||||
<para>Specifies the TTL value to use in outgoing packets. Takes a number in the range 0-255.
|
||||
When unset or set to 0, the kernel's default will be used meaning that packets TTL will be set from
|
||||
<para>Accepts the same key in <literal>[VXLAN]</literal> section except when unset or
|
||||
set to 0, the kernel's default will be used meaning that packets TTL will be set from
|
||||
<filename>/proc/sys/net/ipv4/ip_default_ttl</filename>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -102,7 +102,11 @@ static int netdev_geneve_create(NetDev *netdev) {
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_REMOTE/IFLA_GENEVE_REMOTE6 attribute: %m");
|
||||
}
|
||||
|
||||
if (v->ttl > 0) {
|
||||
if (v->inherit) {
|
||||
r = sd_netlink_message_append_u8(m, IFLA_GENEVE_TTL_INHERIT, 1);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_TTL_INHERIT attribute: %m");
|
||||
} else {
|
||||
r = sd_netlink_message_append_u8(m, IFLA_GENEVE_TTL, v->ttl);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_TTL attribute: %m");
|
||||
@@ -271,6 +275,47 @@ int config_parse_geneve_flow_label(const char *unit,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_geneve_ttl(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) {
|
||||
Geneve *v = userdata;
|
||||
unsigned f;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
if (streq(rvalue, "inherit"))
|
||||
v->inherit = true;
|
||||
else {
|
||||
r = safe_atou(rvalue, &f);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Failed to parse Geneve TTL '%s', ignoring assignment: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (f > 255) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0,
|
||||
"Invalid Geneve TTL '%s'. TTL must be <= 255. Ignoring assignment.", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
v->ttl = f;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int netdev_geneve_verify(NetDev *netdev, const char *filename) {
|
||||
Geneve *v = GENEVE(netdev);
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ struct Geneve {
|
||||
bool udpcsum;
|
||||
bool udp6zerocsumtx;
|
||||
bool udp6zerocsumrx;
|
||||
bool inherit;
|
||||
|
||||
GeneveDF geneve_df;
|
||||
union in_addr_union remote;
|
||||
@@ -49,3 +50,4 @@ CONFIG_PARSER_PROTOTYPE(config_parse_geneve_vni);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_geneve_address);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_geneve_flow_label);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_geneve_df);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_geneve_ttl);
|
||||
|
||||
@@ -128,7 +128,7 @@ VXLAN.IPDoNotFragment, config_parse_df,
|
||||
GENEVE.Id, config_parse_geneve_vni, 0, offsetof(Geneve, id)
|
||||
GENEVE.Remote, config_parse_geneve_address, 0, offsetof(Geneve, remote)
|
||||
GENEVE.TOS, config_parse_uint8, 0, offsetof(Geneve, tos)
|
||||
GENEVE.TTL, config_parse_uint8, 0, offsetof(Geneve, ttl)
|
||||
GENEVE.TTL, config_parse_geneve_ttl, 0, offsetof(Geneve, ttl)
|
||||
GENEVE.UDPChecksum, config_parse_bool, 0, offsetof(Geneve, udpcsum)
|
||||
GENEVE.UDP6ZeroCheckSumRx, config_parse_bool, 0, offsetof(Geneve, udp6zerocsumrx)
|
||||
GENEVE.UDP6ZeroChecksumRx, config_parse_bool, 0, offsetof(Geneve, udp6zerocsumrx)
|
||||
|
||||
Reference in New Issue
Block a user