From a9f434cf00d1d36d9a013b9739efe69653dd7279 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 22 May 2014 11:59:19 +0530 Subject: [PATCH] networkd: sit-tunnel add support for 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 | 8 ++++++++ src/network/networkd.h | 1 + 4 files changed, 11 insertions(+) diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf index f39c922fd..dff0ae6a1 100644 --- a/src/network/networkd-netdev-gperf.gperf +++ b/src/network/networkd-netdev-gperf.gperf @@ -29,4 +29,5 @@ 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) Peer.Name, config_parse_ifname, 0, offsetof(NetDev, ifname_peer) diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index 1036daf15..4439374a6 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 = true; r = config_parse(NULL, filename, file, "Match\0NetDev\0VLAN\0MACVLAN\0Tunnel\0Peer\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 9b4cb4f95..1a06a17c7 100644 --- a/src/network/networkd-tunnel.c +++ b/src/network/networkd-tunnel.c @@ -207,6 +207,14 @@ static int netdev_fill_sit_rtnl_message(Link *link, sd_rtnl_message *m) { return r; } + r = sd_rtnl_message_append_u8(m, IFLA_IPTUN_PMTUDISC, netdev->tunnel_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 e50485476..6f69c9a48 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -109,6 +109,7 @@ struct NetDev { int ifindex; NetDevState state; + bool tunnel_pmtudisc; unsigned tunnel_ttl; unsigned tunnel_tos; struct in_addr tunnel_local; -- 2.30.2