#!/bin/sh
##########################################################
# Copyright (C) 2001-2008 VMware, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation version 2.1 and no later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the Lesser GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA.
#
##########################################################

##########################################################################
# DO NOT modify this file directly as it will be overwritten the next
# time the VMware Tools are installed.
##########################################################################

echo `date` ": Executing '$0'"
echo

find_networking_script() {
    local script="error"
    for dir in "/etc/init.d" "/sbin/init.d" "/etc" "/etc/rc.d" ; do
        if [ -d "$dir/rc0.d" ] &&
	    [ -d "$dir/rc1.d" ] &&
	    [ -d "$dir/rc2.d" ] &&
	    [ -d "$dir/rc3.d" ] &&
	    [ -d "$dir/rc4.d" ] &&
	    [ -d "$dir/rc5.d" ] &&
	    [ -d "$dir/rc6.d" ]; then

	    # Now find the appropriate networking script.
	    if [ -d "$dir/init.d" ]; then
		if [ -x "$dir/init.d/network" ]; then
		    script="$dir/init.d/network"
		elif [ -x "$dir/init.d/networking" ]; then
		    script="$dir/init.d/networking"
		fi
	    else
		if [ -x "$dir/network" ]; then
		    script="$dir/network"
		elif [ -x "$dir/networking" ]; then
		    script="$dir/networking"
		fi
	    fi
        fi
    done

    echo "$script"
}

rescue_NIC() {
   niclist="/var/run/vmware-active-nics"

   ifup_path=`which ifup 2>/dev/null`;
   if [ $? -ne 0 ]; then
      return 1;
   fi

   ifconfig_path=`which ifconfig 2>/dev/null`;
   if [ $? -ne 0 ]; then
      return 1;
   fi

   if [ -f "$niclist" ]; then
      while read nic; do
         if $ifconfig_path $nic | egrep '^ +UP ' >/dev/null 2>&1; then
            echo `date` "[resume-vm-default::rescue_nic] $nic is already active."
         else
            echo `date` "[rescue_nic] activating $nic ..."

            $ifup_path $nic
         fi
      done < $niclist

      rm -f $niclist
   fi
}


#
# wakeNetworkManager --
#
#    Wake the NetworkManager daemon (maybe).
#
#    See http://projects.gnome.org/NetworkManager/developers/spec.html .
#
# Results:
#    Sleep(false)request is sent to the NetworkManager D-Bus interface.
#
# Side effects:
#    None.
#

wakeNetworkManager() {
   # `which' may be a bit noisy, so we'll shush it.
   dbusSend=`which dbus-send 2>/dev/null`
   if [ $? -eq 0 ]; then
      $dbusSend --system --dest=org.freedesktop.NetworkManager          \
         /org/freedesktop/NetworkManager                                \
         org.freedesktop.NetworkManager.Sleep boolean:false
   fi
}


#
# main
#

wakeNetworkManager

network=`find_networking_script`
if [ "$network" != "error" ]; then
   "$network" restart
   # Continue even if the networking init script wasn't successful.
   status=0
else
   echo "networking script not found"
   status=1
fi

if [ $status -eq 0 ]; then
    rescue_NIC
fi

scriptsdir="`dirname $0`/scripts/`basename $0`.d"
if [ -d "$scriptsdir" ]; then
    for scriptfile in "$scriptsdir"/*; do
	[ -x "$scriptfile" ] && "$scriptfile" resume-vm
    done
fi

exit "$status"
