免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2385 | 回复: 0
打印 上一主题 下一主题

[VMware] VMware Server网络设置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-10 16:43 |只看该作者 |倒序浏览
VMware Server通过/usr/lib/vmware/net-services.sh完成网络服务的设置.  
bridge=vmnet-bridge
dhcpd=vmnet-dhcpd
netifup=vmnet-netifup
natd=vmnet-natd
ping=vmware-ping
vnet=vmnet
# Create a virtual host ethernet interface and connect it to a virtual
# ethernet hub
vmware_start_netifup() {
   local vHostIf="$1" # IN
   local vHubNr="$2"  # IN
   cd "$vmdb_answer_BINDIR" && "$vmdb_answer_BINDIR"/"$netifup" \
      -d /var/run/"$netifup"-"$vHostIf".pid /dev/vmnet"$vHubNr" "$vHostIf"
}
# Disconnect a virtual host ethernet interface from a virtual ethernet hub
# and destroy the virtual host ethernet interface
vmware_stop_netifup() {
   local vHostIf="$1" # IN
   if vmware_stop_pidfile /var/run/"$netifup"-"$vHostIf".pid; then
      rm -f /var/run/"$netifup"-"$vHostIf".pid
   fi
}
# Connect a physical host ethernet interface to a virtual ethernet hub
vmware_start_bridge() {
   local vHubNr="$1"  # IN
   local pHostIf="$2" # IN
   cd "$vmdb_answer_BINDIR" && "$vmdb_answer_BINDIR"/"$bridge" \
      -d /var/run/"$bridge"-"$vHubNr".pid /dev/vmnet"$vHubNr" "$pHostIf"
}
# Disconnect a physical host ethernet interface from a virtual ethernet hub
vmware_stop_bridge() {
   local vHubNr="$1"  # IN
   if vmware_stop_pidfile /var/run/"$bridge"-"$vHubNr".pid; then
      rm -f /var/run/"$bridge"-"$vHubNr".pid
   fi
}
# Start a DHCP server on a private IP network
vmware_start_dhcpd() {
   local vHostIf="$1" # IN
   # The daemon already logs its output in the system log, so we can safely
   # trash it
   cd "$vmdb_answer_BINDIR" && "$vmdb_answer_BINDIR"/"$dhcpd" \
      -cf "$vmware_etc_dir"/"$vHostIf"/dhcpd/dhcpd.conf \
      -lf "$vmware_etc_dir"/"$vHostIf"/dhcpd/dhcpd.leases \
      -pf /var/run/"$dhcpd"-"$vHostIf".pid "$vHostIf" >/dev/null 2>&1
}
# Stop a DHCP server on a private IP network
vmware_stop_dhcpd() {
   local vHostIf="$1" # IN
   if vmware_stop_pidfile /var/run/"$dhcpd"-"$vHostIf".pid; then
      rm -f /var/run/"$dhcpd"-"$vHostIf".pid
   fi
}
# Start the host-only network user service
vmware_start_hostonly() {
   local vHubNr="$1"    # IN
   local vHostIf="$2"   # IN
   local ifIp="$3"      # IN
   local ifMask="$4"    # IN
   local run_dhcpd="$5" # IN
   local ifNet
   #
   # Do a cursory check to see if the host-only network
   # configuration is still ok.  We do this so that mobile
   # hosts don't get setup at install time and then moved to
   # a new locale where the host-only network config is no
   # longer valid.
   #
   # NB: This really needs to be done at power-on time when
   #     VM is configured to use host-only networking so that
   #     we aren't fooled by dynamic changes in the network.
   #
   # XXX ping takes 10 seconds to timeout if nobody answers
   #     that slows boot too much so we do this bit in the
   #     background.
   #
   if lookForHostOnlyNetwork "$ifIp"; then
    echo 'Host-only networking disabled because '"$ifIp"
    echo 'appears to be a real, physical, existing address.'
    echo 'Please run "'"$vmdb_answer_BINDIR"'/vmware-config.pl" to'
    echo 'modify your host-only network configuration.'
    exit 1
   fi
   vmware_start_netifup "$vHostIf" "$vHubNr" || exit 1
   # Configure the virtual host ethernet interface and define the private IP
   # network
   #
   # . We provide the broadcast address explicitly because versions of ifconfig
   #   prior to 1.39 (1999-03-18) seem to miscompute it
   # . 2.0.x kernels don't install a route when the interface is marked up, but
   #   2.2.x kernel do. Since we want to see any errors from route we don't
   #   just discard messages from route, but instead check if the route got
   #   installed before manually adding one.
   ifNet=`ipv4_subnet "$ifIp" "$ifMask"`
   if ifconfig "$vHostIf" inet "$ifIp" netmask "$ifMask" \
         broadcast "`ipv4_broadcast "$ifIp" "$ifMask"`" up \
         && noRoutePresent "$ifNet" "$vHostIf"; then
      route add -net "$ifNet" netmask "$ifMask" "$vHostIf"
   fi
   if [ "$run_dhcpd" = 'yes' ]; then
      vmware_start_dhcpd "$vHostIf" || exit 1
   fi
   exit 0
}
# Stop the host-only network user service
vmware_stop_hostonly() {
   local vHostIf="$1"   # IN
   local ifIp="$2"      # IN
   local ifMask="$3"    # IN
   local ifNet
   # Terminate the private network
   ifNet=`ipv4_subnet "$ifIp" "$ifMask"`
   noRoutePresent "$ifNet" "$vHostIf" || \
      route del -net "$ifNet" netmask "$ifMask" || exit 1
   # To test if the interface exists, we can not just look at the exitcode
   # because old versions of ifconfig don't exit with 1 when invoked with a
   # non-existing interface
   if [ "`ifconfig "$vHostIf" 2>/dev/null`" != '' ]; then
      ifconfig "$vHostIf" down || exit 1
   fi
   vmware_stop_netifup "$vHostIf" || exit 1
   exit 0
}
# Start the NAT network user service
vmware_start_nat() {
   local vHubNr="$1"    # IN
   cd "$vmdb_answer_BINDIR" && "$vmdb_answer_BINDIR"/"$natd" \
      -d /var/run/"$natd"-"$vHubNr".pid \
      -m /var/run/"$natd"-"$vHubNr".mac \
      -c "$vmware_etc_dir"/vmnet"$vHubNr"/nat/nat.conf
}
# Stop the NAT network user service
vmware_stop_nat() {
   local vHubNr="$1"   # IN
   if vmware_stop_pidfile /var/run/"$natd"-"$vHubNr".pid; then
      rm -f /var/run/"$natd"-"$vHubNr".pid
      rm -f /var/run/"$natd"-"$vHubNr".mac
   fi
}
# See how we were called.
case "$1" in
   start)
      if [ -e "$vmware_etc_dir"/not_configured ]; then
         echo "`vmware_product_name`"' is installed, but it has not been (correctly) configured'
         echo 'for the running kernel. To (re-)configure it, invoke the'
         echo 'following command: '"$vmdb_answer_BINDIR"'/vmware-config.pl.'
         echo
         exit 1
      fi
      if [ "$vmdb_answer_NETWORKING" = 'yes' ]; then
         if [ "`isLoaded "$vnet"`" = 'no' ]; then
            echo 'Module '"$vnet"' is not loaded.  Please verify that it is loaded before'
            echo 'running this script.'
            echo
            exit 1
         fi
         exitcode='0'
         vHubNr=0
         while [ $vHubNr -lt 256 ]; do
            eval 'interface="$vmdb_answer_VNET_'"$vHubNr"'_INTERFACE"'
            eval 'hostaddr="$vmdb_answer_VNET_'"$vHubNr"'_HOSTONLY_HOSTADDR"'
            eval 'netmask="$vmdb_answer_VNET_'"$vHubNr"'_HOSTONLY_NETMASK"'
            if [ -n "$interface" ]; then
               vmware_create_vmnet "$vHubNr"
               vmware_exec 'Bridged networking on /dev/vmnet'"$vHubNr" \
                  vmware_start_bridge "$vHubNr" "$interface"
               exitcode=$(($exitcode + $?))
            elif [ -n "$hostaddr" -a -n "$netmask" ]; then
               vmware_create_vmnet "$vHubNr"
               vmware_bg_exec 'Host-only networking on /dev/vmnet'"$vHubNr" \
                  vmware_start_hostonly "$vHubNr" 'vmnet'"$vHubNr" \
                  "$hostaddr" "$netmask" 'yes'
               exitcode=$(($exitcode + $?))
               eval 'nat="$vmdb_answer_VNET_'"$vHubNr"'_NAT"'
               if [ "$nat" = 'yes' ]; then
                  vmware_exec 'NAT service on /dev/vmnet'"$vHubNr" \
                     vmware_start_nat "$vHubNr"
                  exitcode=$(($exitcode + $?))
               fi
            fi
            vHubNr=$(($vHubNr + 1))
         done
      fi
      if [ "$exitcode" -gt 0 ]; then
         exit 1
      fi
   ;;
   stop)
      if [ "$vmdb_answer_NETWORKING" = "yes" ]; then
         exitcode='0'
         vHubNr=0
         while [ $vHubNr -lt 256 ]; do
            eval 'interface="$vmdb_answer_VNET_'"$vHubNr"'_INTERFACE"'
            eval 'hostaddr="$vmdb_answer_VNET_'"$vHubNr"'_HOSTONLY_HOSTADDR"'
            eval 'netmask="$vmdb_answer_VNET_'"$vHubNr"'_HOSTONLY_NETMASK"'
            if [ -n "$interface" ]; then
               vmware_exec "Bridged networking on /dev/vmnet$vHubNr" \
                                           vmware_stop_bridge "$vHubNr"
               exitcode=$(($exitcode + $?))
            elif [ -n "$hostaddr" -a -n "$netmask" ]; then
               vmware_exec "DHCP server on /dev/vmnet$vHubNr" vmware_stop_dhcpd \
                  "vmnet$vHubNr"
               exitcode=$(($exitcode + $?))
               eval 'nat="$vmdb_answer_VNET_'"$vHubNr"'_NAT"'
               if [ "$nat" = "yes" ]; then
                  vmware_exec 'NAT service on /dev/vmnet'"$vHubNr" \
                     vmware_stop_nat "$vHubNr"
                  exitcode=$(($exitcode + $?))
               fi
               vmware_exec 'Host-only networking on /dev/vmnet'"$vHubNr" \
                  vmware_stop_hostonly 'vmnet'"$vHubNr" "$hostaddr" "$netmask"
            fi
            vHubNr=$(($vHubNr + 1))
         done
      fi
      if [ "$exitcode" -gt 0 ]; then
         exit 1
      fi
   ;;
   status)
      exitcode='0'
      if [ "$vmdb_answer_NETWORKING" = "yes" ]; then
         vHubNr=0
         while [ $vHubNr -lt 256 ]; do
            eval 'interface="$vmdb_answer_VNET_'"$vHubNr"'_INTERFACE"'
            eval 'hostaddr="$vmdb_answer_VNET_'"$vHubNr"'_HOSTONLY_HOSTADDR"'
            eval 'netmask="$vmdb_answer_VNET_'"$vHubNr"'_HOSTONLY_NETMASK"'
            if [ -n "$interface" ]; then
                    echo -n 'Bridged networking on /dev/vmnet'"$vHubNr"
                    if vmware_check_pidfile '/var/run/'"$bridge"'-'"$vHubNr"'.pid'; then
                       echo ' is running'
                    else
                       echo ' is not running'
                            exitcode=$(($exitcode + 1))
                    fi
            elif [ -n "$hostaddr" -a -n "$netmask" ]; then
                    echo -n 'Host-only networking on /dev/vmnet'"$vHubNr"
                    if vmware_check_pidfile '/var/run/'"$netifup"'-vmnet'"$vHubNr".'pid'; then
                       echo ' is running'
                    else
                       echo ' is not running'
                            exitcode=$(($exitcode + 1))
                    fi
               eval 'nat="$vmdb_answer_VNET_'"$vHubNr"'_NAT"'
               if [ "$nat" = 'yes' ]; then
                       echo -n 'NAT networking on /dev/vmnet'"$vHubNr"
                       if vmware_check_pidfile '/var/run/'"$natd"'-'"$vHubNr"'.pid'; then
                          echo ' is running'
                            else
                          echo ' is not running'
                               exitcode=$(($exitcode + 1))
                       fi
               fi
            fi
            vHubNr=$(($vHubNr + 1))
         done
      fi

      if [ "$exitcode" -gt 0 ]; then
         exit 1
      fi
   ;;
   restart)
      "$0" stop && "$0" start
   ;;
   *)
      echo "Usage: `basename "$0"` {start|stop|status|restart}"
      exit 1
esac
exit 0
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/28922/showart_525688.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP