// moo.example.com
                    // 48cf6378-6fd5-4610-0611-63dd4b31cfd6
                    // 1048576
                    // 1048576
                    // 8
                    // 
                    // hvm
                    // 
                    // 
                    // 
                    // 
                    // (...)
                    // See spec at https://libvirt.org/formatdomain.html
                    // Convert array to string
                    unset($vm_info_xml);
                    foreach ($vm_info_array as $line) {
                        $vm_info_xml .= $line;
                    }
                    $xml = simplexml_load_string(' '.$vm_info_xml);
                    d_echo($xml);
                    $vmwVmDisplayName = $xml->name;
                    $vmwVmGuestOS     = '';
                    // libvirt does not supply this
                    exec($config['virsh'].' -rc '.$uri.' domstate '.$dom_id, $vm_state);
                    $vmwVmState = ucfirst($vm_state[0]);
                    $vmwVmCpus  = $xml->vcpu['current'];
                    if (!isset($vmwVmCpus)) {
                        $vmwVmCpus  = $xml->vcpu;
                    }
                    $vmwVmMemSize = $xml->memory;
                    // Convert memory size to MiB
                    switch ($vmwVmMemSize['unit']) {
                        case 'T':
                        case 'TiB':
                            $vmwVmMemSize = $vmwVmMemSize * 1048576;
                            break;
                        case 'TB':
                            $vmwVmMemSize = $vmwVmMemSize * 1000000;
                            break;
                        case 'G':
                        case 'GiB':
                            $vmwVmMemSize = $vmwVmMemSize * 1024;
                            break;
                        case 'GB':
                            $vmwVmMemSize = $vmwVmMemSize * 1000;
                            break;
                        case 'M':
                        case 'MiB':
                            break;
                        case 'MB':
                            $vmwVmMemSize = $vmwVmMemSize * 1000000 / 1048576;
                            break;
                        case 'KB':
                            $vmwVmMemSize = $vmwVmMemSize / 1000;
                            break;
                        case 'b':
                        case 'bytes':
                            $vmwVmMemSize = $vmwVmMemSize / 1048576;
                            break;
                        default:
                            // KiB or k or no value
                            $vmwVmMemSize = $vmwVmMemSize / 1024;
                            break;
                    }
                    // Check whether the Virtual Machine is already known for this host.
                    $result = dbFetchRow("SELECT * FROM `vminfo` WHERE `device_id` = ? AND `vmwVmVMID` = ? AND `vm_type` = 'libvirt'", array($device['device_id'], $dom_id));
                    if (count($result['device_id']) == 0) {
                        $inserted_id = dbInsert(array('device_id' => $device['device_id'], 'vm_type' => 'libvirt', 'vmwVmVMID' => $dom_id, 'vmwVmDisplayName' => mres($vmwVmDisplayName), 'vmwVmGuestOS' => mres($vmwVmGuestOS), 'vmwVmMemSize' => mres($vmwVmMemSize), 'vmwVmCpus' => mres($vmwVmCpus), 'vmwVmState' => mres($vmwVmState)), 'vminfo');
                        echo '+';
                        log_event("Virtual Machine added: $vmwVmDisplayName ($vmwVmMemSize MB)", $device, 'vm', 3, $inserted_id);
                    } else {
                        if ($result['vmwVmState'] != $vmwVmState
                            || $result['vmwVmDisplayName'] != $vmwVmDisplayName
                            || $result['vmwVmCpus'] != $vmwVmCpus
                            || $result['vmwVmGuestOS'] != $vmwVmGuestOS
                            || $result['vmwVmMemSize'] != $vmwVmMemSize
                        ) {
                            dbUpdate(array('vmwVmState' => mres($vmwVmState), 'vmwVmGuestOS' => mres($vmwVmGuestOS), 'vmwVmDisplayName' => mres($vmwVmDisplayName), 'vmwVmMemSize' => mres($vmwVmMemSize), 'vmwVmCpus' => mres($vmwVmCpus)), 'vminfo', "device_id=? AND vm_type='libvirt' AND vmwVmVMID=?", array($device['device_id'], $dom_id));
                            echo 'U';
                            // FIXME eventlog
                        } else {
                            echo '.';
                        }
                    }
                    // Save the discovered Virtual Machine.
                    $libvirt_vmlist[] = $dom_id;
                }//end if
            }//end foreach
        }//end if
        // If we found VMs, don't cycle the other protocols anymore.
        if (count($libvirt_vmlist)) {
            break;
        }
    }//end foreach
    // Get a list of all the known Virtual Machines for this host.
    $sql = "SELECT id, vmwVmVMID, vmwVmDisplayName FROM vminfo WHERE device_id = '".$device['device_id']."' AND vm_type='libvirt'";
    foreach (dbFetchRows($sql) as $db_vm) {
        // Delete the Virtual Machines that are removed from the host.
        if (!in_array($db_vm['vmwVmVMID'], $libvirt_vmlist)) {
            dbDelete('vminfo', '`id` = ?', array($db_vm['id']));
            echo '-';
            log_event('Virtual Machine removed: ' . $db_vm['vmwVmDisplayName'], $device, 'vm', 4, $db_vm['id']);
        }
    }
    echo "\n";
}//end if