From: Natanael Copa Date: Fri, 21 Aug 2015 09:48:10 +0000 (+0200) Subject: Clone bridge interface MTU setting X-Git-Tag: lxc-2.0.0.beta1~177 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e54864d3632e3959bed6dd6b7e6d2cbd7eb8eec0;p=thirdparty%2Flxc.git Clone bridge interface MTU setting Instead of require static mtu setting in config we simply clone the existing MTU setting of the bridge interface. This fixes issue when bridge interface has bigger MTU (like 9000 for jumbo frame support) than the default 1500. When veth interface is created it has by default MTU set to 1500 and when this is added to the bridge, the kernel wee reduce the MTU for the bridge to 1500. We solve this by cloning the MTU value from bridge interface. This simplifies managing containers with bridge interface who supports jumbo frames (mtu 9000) and makes it easier to move containers between hosts with different MTU settings. Signed-off-by: Natanael Copa Acked-by: Stéphane Graber --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 309ceea40..a3d45ee06 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2609,7 +2609,7 @@ static int instantiate_veth(struct lxc_handler *handler, struct lxc_netdev *netd { char veth1buf[IFNAMSIZ], *veth1; char veth2buf[IFNAMSIZ], *veth2; - int err; + int err, mtu = 0; if (netdev->priv.veth_attr.pair) { veth1 = netdev->priv.veth_attr.pair; @@ -2655,12 +2655,18 @@ static int instantiate_veth(struct lxc_handler *handler, struct lxc_netdev *netd } if (netdev->mtu) { - err = lxc_netdev_set_mtu(veth1, atoi(netdev->mtu)); + mtu = atoi(netdev->mtu); + } else if (netdev->link) { + mtu = netdev_get_mtu(if_nametoindex(netdev->link)); + } + + if (mtu) { + err = lxc_netdev_set_mtu(veth1, mtu); if (!err) - err = lxc_netdev_set_mtu(veth2, atoi(netdev->mtu)); + err = lxc_netdev_set_mtu(veth2, mtu); if (err) { - ERROR("failed to set mtu '%s' for veth pair (%s and %s): %s", - netdev->mtu, veth1, veth2, strerror(-err)); + ERROR("failed to set mtu '%i' for veth pair (%s and %s): %s", + mtu, veth1, veth2, strerror(-err)); goto out_delete; } }