V2 fixed the uninitialized variable pmtudisc. This patch adds path of mtu discovery for sit tunnel. To enable/disable DiscoverPathMTU is introduced.
Example configuration file: sit.netdev [NetDev] Name=sit-tun Kind=sit MTUBytes=1480 [Tunnel] DiscoverPathMTU=1 Local=X.X.X.X Remote=X.X.X.X By default pmtudisc is turned on , if DiscoverPathMTU is missing from the config. To turn it off DiscoverPathMTU=0 needs to be set. --- src/network/networkd-netdev-gperf.gperf | 1 + src/network/networkd-netdev.c | 1 + src/network/networkd-tunnel.c | 12 ++++++++++++ src/network/networkd.h | 1 + 4 files changed, 15 insertions(+) diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf index 29889cd..b171d76 100644 --- a/src/network/networkd-netdev-gperf.gperf +++ b/src/network/networkd-netdev-gperf.gperf @@ -29,3 +29,4 @@ Tunnel.Local, config_parse_tunnel_address, 0, Tunnel.Remote, config_parse_tunnel_address, 0, offsetof(NetDev, tunnel_remote) Tunnel.TOS, config_parse_unsigned, 0, offsetof(NetDev, tunnel_tos) Tunnel.TTL, config_parse_unsigned, 0, offsetof(NetDev, tunnel_ttl) +Tunnel.DiscoverPathMTU, config_parse_bool, 0, offsetof(NetDev, tunnel_pmtudisc) diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index c54b0c1..63f8ff7 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -545,6 +545,7 @@ static int netdev_load_one(Manager *manager, const char *filename) { netdev->kind = _NETDEV_KIND_INVALID; netdev->macvlan_mode = _NETDEV_MACVLAN_MODE_INVALID; netdev->vlanid = VLANID_MAX + 1; + netdev->tunnel_pmtudisc = 1; r = config_parse(NULL, filename, file, "Match\0NetDev\0VLAN\0MACVLAN\0Tunnel\0", config_item_perf_lookup, (void*) network_netdev_gperf_lookup, diff --git a/src/network/networkd-tunnel.c b/src/network/networkd-tunnel.c index fee474c..bb2d805 100644 --- a/src/network/networkd-tunnel.c +++ b/src/network/networkd-tunnel.c @@ -131,6 +131,7 @@ static int netdev_fill_ipip_rtnl_message(Link *link, sd_rtnl_message *m) { static int netdev_fill_sit_rtnl_message(Link *link, sd_rtnl_message *m) { NetDev *netdev; + uint8_t pmtudisc = 1; int r; assert(link); @@ -207,6 +208,17 @@ static int netdev_fill_sit_rtnl_message(Link *link, sd_rtnl_message *m) { return r; } + if(!netdev->tunnel_pmtudisc) + pmtudisc = 0; + + r = sd_rtnl_message_append_u8(m, IFLA_IPTUN_PMTUDISC, pmtudisc); + if (r < 0) { + log_error_netdev(netdev, + "Could not append IFLA_IPTUN_PMTUDISC attribute: %s", + strerror(-r)); + return r; + } + r = sd_rtnl_message_close_container(m); if (r < 0) { log_error_netdev(netdev, diff --git a/src/network/networkd.h b/src/network/networkd.h index cfe24f5..98ea66e 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -107,6 +107,7 @@ struct NetDev { int ifindex; NetDevState state; + bool tunnel_pmtudisc; unsigned tunnel_ttl; unsigned tunnel_tos; struct in_addr tunnel_local; -- 1.9.0 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel