]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Fix soft suspend problem when NetworkManager down
authorVMware, Inc <>
Fri, 12 Apr 2013 19:40:09 +0000 (12:40 -0700)
committerDmitry Torokhov <dtor@vmware.com>
Wed, 17 Apr 2013 19:16:44 +0000 (12:16 -0700)
Soft suspend will let tools run /etc/vmware-tools/scripts/vmware/network,
if NetworkManager is down, the script will error out and fail the suspend
operation.

Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
open-vm-tools/scripts/linux/network

index af3bc9ce357eac79422c0e1b98be9fb93c0d190e..874744f377654825309938926613e89a2b1bfc33 100644 (file)
@@ -173,32 +173,56 @@ TranquilizeNetworkManager()
    # `which' may be a bit noisy, so we'll shush it.
    dbusSend=`which dbus-send 2>/dev/null`
    rc=$?
-   if [ $rc = 0 ]; then
-      # NetworkManager 0.8.0
-      $dbusSend --system --print-reply          \
-         --dest=org.freedesktop.NetworkManager  \
-         /org/freedesktop/NetworkManager        \
-         org.freedesktop.NetworkManager.Enable boolean:false
-      rc=$?
-      if [ $rc = 0 ]; then
-         return $rc
-      fi
-      # NetworkManager 0.7.0
-      $dbusSend --system --print-reply          \
-         --dest=org.freedesktop.NetworkManager  \
-         /org/freedesktop/NetworkManager        \
-         org.freedesktop.NetworkManager.Sleep boolean:true
-      rc=$?
-      if [ $rc = 0 ]; then
-         return $rc
-      fi
-      # NetworkManager 0.6
-      $dbusSend --system --print-reply          \
-         --dest=org.freedesktop.NetworkManager  \
-         /org/freedesktop/NetworkManager        \
-         org.freedesktop.NetworkManager.sleep
-      rc=$?
+   if [ $rc -ne 0 ]; then
+      return $rc
+   fi
+
+   # Check NetworkManager state before disabling it.
+   nm_state=`$dbusSend --system --print-reply          \
+             --dest=org.freedesktop.NetworkManager     \
+             /org/freedesktop/NetworkManager           \
+             org.freedesktop.DBus.Properties.Get       \
+             string:'org.freedesktop.NetworkManager'   \
+             string:'State'                            \
+             | awk '/variant/ {print $3;}'`
+   if [ -z "$nm_state" ]; then
+      return 1
+   fi
+   # NetworkManager API     0.7/0.8   0.9
+   # NM_STATE_ASLEEP           1      10
+   # NM_STATE_DISCONNECTED     4      20
+   case $nm_state in
+      1|4|10|20)
+         # Nothing needs to be done.
+         return 0
+         ;;
+   esac
+
+   # NetworkManager 0.8.0 and above
+   $dbusSend --system --print-reply          \
+      --dest=org.freedesktop.NetworkManager  \
+      /org/freedesktop/NetworkManager        \
+      org.freedesktop.NetworkManager.Enable boolean:false
+   rc=$?
+   if [ $rc -eq 0 ]; then
+      return $rc
    fi
+   # NetworkManager 0.7.0
+   $dbusSend --system --print-reply          \
+      --dest=org.freedesktop.NetworkManager  \
+      /org/freedesktop/NetworkManager        \
+      org.freedesktop.NetworkManager.Sleep boolean:true
+   rc=$?
+   if [ $rc -eq 0 ]; then
+      return $rc
+   fi
+   # NetworkManager 0.6
+   $dbusSend --system --print-reply          \
+      --dest=org.freedesktop.NetworkManager  \
+      /org/freedesktop/NetworkManager        \
+      org.freedesktop.NetworkManager.sleep
+   rc=$?
+
    return $rc
 }