mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| # $Id: find_bond.sh 10510 2010-07-11 10:10:03Z alex $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/hypervisor/xenserver/find_bond.sh $
 | |
| 
 | |
| #set -x
 | |
|  
 | |
| 
 | |
| cleanup_vlan() {
 | |
|   for vlan in `xe vlan-list | grep uuid | awk '{print $NF}'`; do 
 | |
|     untagged=$(xe vlan-param-list uuid=$vlan | grep untagged | awk '{print $NF}')
 | |
|     network=$(xe pif-param-get param-name=network-uuid uuid=$untagged)
 | |
|     xe vlan-destroy uuid=$vlan
 | |
|     xe network-destroy uuid=$network
 | |
|   done
 | |
| }
 | |
| 
 | |
| usage() {
 | |
|   echo "$0 device"
 | |
|   exit 1
 | |
| }
 | |
| 
 | |
| sflag=
 | |
| dflag=
 | |
| 
 | |
| while getopts 'sd' OPTION
 | |
| do
 | |
|   case $OPTION in
 | |
|   d)    dflag=1
 | |
|          ;;
 | |
|   s)    sflag=1
 | |
|          ;;
 | |
|   ?)    usage
 | |
|          exit 1
 | |
|          ;;
 | |
|   esac
 | |
| done
 | |
| 
 | |
| shift $(($OPTIND - 1))
 | |
| nic=$1
 | |
| 
 | |
| [ -z "$nic" ] && usage
 | |
| 
 | |
| addr=$(ip addr | grep $nic | grep inet | awk '{print $2}')
 | |
| addr=${addr%/*}
 | |
| bridges=$(brctl show | grep -v bridge | awk '{print $1}')
 | |
| 
 | |
| host_uuid=$(xe host-list hostname=$(hostname) | grep uuid | awk '{print $NF}')
 | |
| if [ -z "$host_uuid" ]; then
 | |
|   printf "Unable to find host uuid using $(hostname)\n" >&2
 | |
|   exit 2
 | |
| fi
 | |
| 
 | |
| 
 | |
| if [ -z "$addr" ]; then
 | |
|   printf "Unable to find an ip address for $nic\n" >&2
 | |
|   exit 3
 | |
| fi
 | |
| 
 | |
| current=$(brctl show | grep $nic | awk '{print $NF}')
 | |
| for dev in `ip addr | grep mtu | grep -v -E "\.[0-9]*@|lo|$nic|$current" | awk '{print $2}'`
 | |
| do
 | |
|   dev=${dev%:}
 | |
|   echo $bridges | grep $dev >/dev/null 2>&1
 | |
|   br=$?
 | |
|   ifconfig $dev | grep UP >/dev/null 2>&1
 | |
|   rc=$?
 | |
|   if [ $rc -eq 1 ]; then
 | |
|     ifconfig $dev up
 | |
|     sleep 4
 | |
|   fi
 | |
|   arping -q -c 1 -w 2 -D -I $dev $addr >/dev/null 2>&1
 | |
|   rc=$?
 | |
|   if [ $rc -ne 1 ]; then
 | |
|     continue;
 | |
|   fi
 | |
| 
 | |
|   if [ $br -ne 0 ]; then
 | |
|     # What we've found is the naked nic.
 | |
|     pif_uuid=$(xe pif-list device=$dev host-uuid=$host_uuid | grep -B 3 "( RO): -1" | grep uuid | awk '{print $NF}')
 | |
|     if [ -z "$pif_uuid" ]; then
 | |
|       mac=$(ifconfig $dev | grep HWaddr | awk '{print $NF}')
 | |
|       pif_uuid=$(xe pif-introduce host-uuid=$host_uuid device=$dev mac=$mac)
 | |
|     fi
 | |
| 
 | |
|     if [ -z $pif_uuid ]; then
 | |
|       continue;
 | |
|     fi
 | |
| 
 | |
|     bridge=$(xe network-list PIF-uuids=$pif_uuid | grep bridge | awk '{print $NF}')
 | |
|     if [ -z $bridge ]; then
 | |
|       continue;
 | |
|     fi
 | |
| 
 | |
|     xe pif-plug uuid=$pif_uuid
 | |
| 
 | |
|     echo ">>>$dev<<<"
 | |
|     exit 0    
 | |
|   else
 | |
|     # What we've found is the bridge
 | |
|     network_uuid=`xe network-list bridge=$dev | grep uuid | awk '{print $NF}'`
 | |
|     if [ -z "$network_uuid" ]; then
 | |
|       continue;
 | |
|     fi
 | |
|     pif=`xe pif-list network-uuid=$network_uuid host-uuid=$host_uuid VLAN=-1 | grep device | awk '{print $NF}'`
 | |
|     if [ -z "$pif" ]; then
 | |
|       continue;
 | |
|     fi
 | |
|     echo ">>>$pif<<<"
 | |
|     exit 0
 | |
|   fi
 | |
| done
 | |
| exit 4
 |