File 0005-ifconfig-set-MTU-even-if-device-is-up.patch of Package wicked.6334

From 3086667d317d8dfe28394be067d7539b6927c377 Mon Sep 17 00:00:00 2001
From: Nikola Pajkovsky <npajkovsky@suse.cz>
Date: Thu, 14 Dec 2017 10:53:12 +0100
Subject: ifconfig: set MTU even if device is up (bsc#1059292)

wicked should not supplement what drivers in kernel are capable. That
means, that if device is up, and is not capable set MTU on-fly, kernel
returns error. This is driver problem, not wicked and should just
print an error and continue.

Signed-off-by: Nikola Pajkovsky <npajkovsky@suse.cz>

diff --git a/src/dbus-objects/interface.c b/src/dbus-objects/interface.c
index 0d971972..840eed24 100644
--- a/src/dbus-objects/interface.c
+++ b/src/dbus-objects/interface.c
@@ -925,20 +925,9 @@ ni_objectmodel_netif_link_up(ni_dbus_object_t *object, const ni_dbus_method_t *m
 			}
 		}
 
-		/*
-		 * MTU change on device-up interfaces quite often causes either
-		 * error -16 (busy) or sets all upper interfaces LOWERLAYERDOWN.
-		 */
-		if (ni_netdev_device_is_up(dev)) {
-			ni_debug_objectmodel("Skipping MTU change on %s: device is up",
-					dev->name);
-			req->mtu = 0;
-		}
+		if  (req->mtu != dev->link.mtu)
+		     ni_system_mtu_change(nc, dev, req->mtu);
 
-		if (req->mtu != dev->link.mtu &&
-		    ni_system_mtu_change(nc, dev, req->mtu) < 0) {
-			ni_info("Unable to set %s MTU to %u", dev->name, req->mtu);
-		}
 		req->mtu = 0;
 	}
 
diff --git a/src/ifconfig.c b/src/ifconfig.c
index 220ece87..e88e3982 100644
--- a/src/ifconfig.c
+++ b/src/ifconfig.c
@@ -4022,6 +4022,7 @@ __ni_rtnl_link_change_mtu(ni_netdev_t *dev, unsigned int mtu)
 {
 	struct ifinfomsg ifi;
 	struct nl_msg *msg;
+	int err;
 
 	if (!dev || !mtu)
 		return -1;
@@ -4030,15 +4031,20 @@ __ni_rtnl_link_change_mtu(ni_netdev_t *dev, unsigned int mtu)
 	ifi.ifi_family = AF_UNSPEC;
 	ifi.ifi_index = dev->link.ifindex;
 
-	msg = nlmsg_alloc_simple(RTM_NEWLINK, NLM_F_REQUEST);
+	if (!(msg = nlmsg_alloc_simple(RTM_NEWLINK, NLM_F_REQUEST)))
+		goto nla_put_failure;
+
 	if (nlmsg_append(msg, &ifi, sizeof(ifi), NLMSG_ALIGNTO) < 0)
 		goto nla_put_failure;
 
 	if (__ni_rtnl_link_put_mtu(msg, mtu) < 0)
 		goto nla_put_failure;
 
-	if (ni_nl_talk(msg, NULL))
+	if ((err = ni_nl_talk(msg, NULL))) {
+		ni_error("failed to modify interface %s mtu to %u: %s",
+				dev->name, mtu, nl_geterror(err));
 		goto failed;
+	}
 
 	ni_debug_ifconfig("successfully modified interface %s mtu to %u",
 			dev->name, mtu);
-- 
2.13.6

openSUSE Build Service is sponsored by