<term><varname>DiscoverPathMTU=</varname></term>
<listitem>
<para>Takes a boolean. When true, enables Path MTU Discovery on
- the tunnel.</para>
+ the tunnel.
+ When <varname>IgnoreDontFragment=</varname> is enabled,
+ defaults to false. Otherwise, defaults to true.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>IgnoreDontFragment=</varname></term>
+ <listitem>
+ <para>Takes a boolean. When true, enables IPv4 Don't Fragment (DF) suppression on
+ the tunnel. Defaults to false.
+ Note that if <varname>IgnoreDontFragment=</varname> is set to true,
+ <varname>DiscoverPathMTU=</varname> cannot be set to true.
+ Only applicable to GRE, GRETAP, and ERSPAN tunnels.</para>
</listitem>
</varlistentry>
<varlistentry>
Tunnel.Key, config_parse_tunnel_key, 0, offsetof(Tunnel, key)
Tunnel.InputKey, config_parse_tunnel_key, 0, offsetof(Tunnel, ikey)
Tunnel.OutputKey, config_parse_tunnel_key, 0, offsetof(Tunnel, okey)
-Tunnel.DiscoverPathMTU, config_parse_bool, 0, offsetof(Tunnel, pmtudisc)
+Tunnel.DiscoverPathMTU, config_parse_tristate, 0, offsetof(Tunnel, pmtudisc)
+Tunnel.IgnoreDontFragment, config_parse_bool, 0, offsetof(Tunnel, ignore_df)
Tunnel.Mode, config_parse_ip6tnl_mode, 0, offsetof(Tunnel, ip6tnl_mode)
Tunnel.IPv6FlowLabel, config_parse_ipv6_flowlabel, 0, 0
Tunnel.CopyDSCP, config_parse_bool, 0, offsetof(Tunnel, copy_dscp)
if (r < 0)
return r;
+ r = sd_netlink_message_append_u8(m, IFLA_GRE_IGNORE_DF, t->ignore_df);
+ if (r < 0)
+ return r;
+
if (t->key != 0) {
ikey = okey = htobe32(t->key);
iflags |= GRE_KEY;
"The local address cannot be '%s' when Independent= or AssignToLoopback= is enabled, ignoring.",
strna(netdev_local_address_type_to_string(t->local_type)));
+ if (t->pmtudisc > 0 && t->ignore_df)
+ return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+ "IgnoreDontFragment= cannot be enabled when DiscoverPathMTU= is enabled");
+ if (t->pmtudisc < 0)
+ t->pmtudisc = !t->ignore_df;
return 0;
}
assert(t);
t->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
- t->pmtudisc = true;
+ t->pmtudisc = -1;
t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
t->isatap = -1;
t->gre_erspan_sequence = -1;
Ip6TnlMode ip6tnl_mode;
FooOverUDPEncapType fou_encap_type;
- bool pmtudisc;
+ int pmtudisc;
+ bool ignore_df;
bool copy_dscp;
bool independent;
bool fou_tunnel;
Remote = 172.16.1.100
Key=101
SerializeTunneledPackets=true
+IgnoreDontFragment=true
Remote=10.65.223.239
Key=106
SerializeTunneledPackets=true
+IgnoreDontFragment=true
self.assertRegex(output, 'okey 0.0.0.106')
self.assertRegex(output, 'iseq')
self.assertRegex(output, 'oseq')
+ self.assertIn('nopmtudisc', output)
+ self.assertIn('ignore-df', output)
output = check_output('ip -d link show gretap98')
print(output)
self.assertRegex(output, 'gretap remote 10.65.223.239 local any dev dummy98')
self.assertNotIn('erspan_hwid 1f', output)
self.assertIn('ikey 0.0.0.101', output)
self.assertIn('iseq', output)
+ self.assertIn('nopmtudisc', output)
+ self.assertIn('ignore-df', output)
output = check_output('ip -d link show erspan98')
print(output)
self.assertIn('erspan remote 172.16.1.100 local any', output)