[systemd-devel] [PATCH 1/1] networkd: sit-tunnel add support for pmtudisc

Susant Sahani susant at redhat.com
Wed May 21 02:13:00 PDT 2014


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



More information about the systemd-devel mailing list