summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSusant Sahani <susant@redhat.com>2014-05-22 11:59:19 +0530
committerTom Gundersen <teg@jklm.no>2014-06-02 16:16:02 +0200
commita9f434cf00d1d36d9a013b9739efe69653dd7279 (patch)
tree9b420807b78cac20ef55398cb95105a63ec698de
parent8bb088c5d44e566eb101e3f093d690aeb2a82285 (diff)
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.
-rw-r--r--src/network/networkd-netdev-gperf.gperf1
-rw-r--r--src/network/networkd-netdev.c1
-rw-r--r--src/network/networkd-tunnel.c8
-rw-r--r--src/network/networkd.h1
4 files changed, 11 insertions, 0 deletions
diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf
index f39c922fd2..dff0ae6a16 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 1036daf157..4439374a67 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 9b4cb4f959..1a06a17c7b 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 e504854761..6f69c9a487 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;