about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2013-01-30 01:12:02 +0100
committerMichael Biebl <biebl@debian.org>2013-01-30 01:12:05 +0100
commitbb5116b4016d0ce4fe9a3887a7d68fe4c8c0b8de (patch)
treecc999fd9335b2511c57b7b2ed6e95f6bbc7c8a2d
parent989cceb558d2c8d52b061d1ee214dbae5b056d45 (diff)
ensure carrier is always on for devices that don't support detection (rh #816719).
(Closes: #699292) Patch cherry-picked from upstream Git.
-rw-r--r--debian/changelog8
-rw-r--r--debian/patches/21-carrier-detect.patch76
-rw-r--r--debian/patches/series1
3 files changed, 85 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 46d0ab24..848f02e6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+network-manager (0.9.4.0-10) UNRELEASED; urgency=low
+
+  * debian/patches/21-carrier-detect.patch: ensure carrier is always on for
+    devices that don't support detection (rh #816719). (Closes: #699292)
+    Patch cherry-picked from upstream Git.
+
+ -- Michael Biebl <biebl@debian.org>  Wed, 30 Jan 2013 01:10:27 +0100
+
 network-manager (0.9.4.0-9) unstable; urgency=low
 
   * Change the ifupdown dispatcher script and set ADDRFAM to "inet" or "inet6"
diff --git a/debian/patches/21-carrier-detect.patch b/debian/patches/21-carrier-detect.patch
new file mode 100644
index 00000000..06e2faed
--- /dev/null
+++ b/debian/patches/21-carrier-detect.patch
@@ -0,0 +1,76 @@
+commit a091c7aa0f15ca2eb7a0c3d3e99405aa98855965
+Author: Dan Williams <dcbw@redhat.com>
+Date:   Sat Apr 28 11:48:01 2012 -0500
+
+    core: ensure carrier is always on for devices that don't support detection (rh #816719)
+    
+    We broke this when splitting NMDeviceWired out of NMDeviceEthernet.
+
+diff --git a/src/nm-device-wired.c b/src/nm-device-wired.c
+index a476faa..e9934fb 100644
+--- a/src/nm-device-wired.c
++++ b/src/nm-device-wired.c
+@@ -162,6 +162,7 @@ set_carrier (NMDeviceWired *self,
+ {
+ 	NMDeviceWiredPrivate *priv;
+ 	NMDeviceState state;
++	guint32 caps;
+ 
+ 	g_return_if_fail (NM_IS_DEVICE (self));
+ 
+@@ -172,6 +173,13 @@ set_carrier (NMDeviceWired *self,
+ 	/* Clear any previous deferred action */
+ 	carrier_action_defer_clear (self);
+ 
++	/* Warn if we try to set carrier down on a device that
++	 * doesn't support carrier detect.  These devices assume
++	 * the carrier is always up.
++	 */
++	caps = nm_device_get_capabilities (NM_DEVICE (self));
++	g_return_if_fail (caps & NM_DEVICE_CAP_CARRIER_DETECT);
++
+ 	priv->carrier = carrier;
+ 	g_object_notify (G_OBJECT (self), "carrier");
+ 
+@@ -200,10 +208,8 @@ carrier_on (NMNetlinkMonitor *monitor,
+ 
+ 	/* Make sure signal is for us */
+ 	if (idx == nm_device_get_ifindex (device)) {
+-		/* Ignore spurious netlink messages */
+ 		caps = nm_device_get_capabilities (device);
+-		if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
+-			return;
++		g_return_if_fail (caps & NM_DEVICE_CAP_CARRIER_DETECT);
+ 
+ 		set_carrier (self, TRUE, FALSE);
+ 		set_speed (self, ethtool_get_speed (self));
+@@ -224,10 +230,8 @@ carrier_off (NMNetlinkMonitor *monitor,
+ 		NMDeviceState state;
+ 		gboolean defer = FALSE;
+ 
+-		/* Ignore spurious netlink messages */
+ 		caps = nm_device_get_capabilities (device);
+-		if (!(caps & NM_DEVICE_CAP_CARRIER_DETECT))
+-			return;
++		g_return_if_fail (caps & NM_DEVICE_CAP_CARRIER_DETECT);
+ 
+ 		/* Defer carrier-off event actions while connected by a few seconds
+ 		 * so that tripping over a cable, power-cycling a switch, or breaking
+@@ -350,11 +354,15 @@ static gboolean
+ real_hw_bring_up (NMDevice *dev, gboolean *no_firmware)
+ {
+ 	gboolean success, carrier;
++	guint32 caps;
+ 
+ 	success = nm_system_iface_set_up (nm_device_get_ip_ifindex (dev), TRUE, no_firmware);
+ 	if (success) {
+-		carrier = get_carrier_sync (NM_DEVICE_WIRED (dev));
+-		set_carrier (NM_DEVICE_WIRED (dev), carrier, carrier ? FALSE : TRUE);
++		caps = nm_device_get_capabilities (dev);
++		if (caps & NM_DEVICE_CAP_CARRIER_DETECT) {
++			carrier = get_carrier_sync (NM_DEVICE_WIRED (dev));
++			set_carrier (NM_DEVICE_WIRED (dev), carrier, carrier ? FALSE : TRUE);
++		}
+ 	}
+ 	return success;
+ }
diff --git a/debian/patches/series b/debian/patches/series
index 3c1f2808..5fdbad7c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -14,3 +14,4 @@
 18-libnm-glib-NULL-out-priv-fields-on-dispose.patch
 19-libnm-glib-discard-devices-and-active-connections-on-stop.patch
 20-libnm-glib-clear-object-cache-on-stop.patch
+21-carrier-detect.patch