Created by
xchandan
| #!/bin/bash
function get_ovs_br()
{
port=$1
ovs-vsctl port-to-br $port
}
function collect_br_data()
{
all_br_intfs=$(ls -l /sys/class/net/*/master|awk '{print $9}')
for br_intf in $all_br_intfs; do
intf_name=$(echo $br_intf|awk -F/ '{print $5}')
br_name=$(readlink $br_intf|awk -F/ '{print $NF}')
if [[ "$br_name" == "ovs-system" ]]; then
br_name="ovs:$(get_ovs_br $intf_name)"
fi
echo "$intf_name@$br_name"
done
}
function get_br_for_port()
{
port=$1
br_port_db=$2
grep $port $br_port_db| awk -F@ '{print $2}'
}
function get_nic_info()
{
nic=$1
nic_host_info=$(echo $nic|awk -F@ '{print $1}')
nic_vm_info=$(echo $nic|awk -F@ '{print $2}')
nic_host_fd=$(echo $nic_host_info|tr ',' '\n'|awk -F'=' '/fd/{print $2}')
nic_vm_mac=$(echo $nic_vm_info|tr ',' '\n'|awk -F'=' '/mac/{print $2}')
nic_host_name=$(awk '/iff/{print $NF}' /proc/$pid/fdinfo/$nic_host_fd)
nic_vm_name=$(echo $nic_vm_info|tr ',' '\n'|awk -F'=' '/id/{print $2}')
nic_br=$(get_br_for_port $nic_host_name $br_port_db)
echo "NIC: $nic_host_name $nic_vm_name $nic_vm_mac $nic_br"
}
br_port_db=$(mktemp /tmp/portdbXXXX)
collect_br_data > $br_port_db
all_kvm_names=$(virsh list --name)
for kvm_name in $all_kvm_names; do
uuid=$(virsh dominfo $kvm_name|awk '/UUID/{print $NF}')
proc=$(ps axww -o pid,cmd|grep kvm|grep $uuid)
pid=$(echo $proc|awk '{print $1}')
cmd=$(echo $proc|awk '{$1=""; print $0}')
echo "VM: $uuid $pid $kvm_name"
nics=$(python kvm_nic.py "$cmd")
for nic in $nics; do
get_nic_info $nic
done
echo "----"
done
rm $br_port_db
|
| import sys
try:
cmdline = sys.argv[1]
except:
print ""
terms = cmdline.split()
idx = 0
nics = []
for term in terms:
if term.startswith('-netdev'):
nics.append((terms[idx+1], terms[idx+3]))
idx +=1
for nic in nics:
print "%s@%s" %(nic[0], nic[1])
|