From 67e6b6c9981207d7d658f2ad2bf1c39b75c099c7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 21 Sep 2021 16:52:06 +0200 Subject: [passthrough] New module for managing hardware passthrough for QEMU --- modules-available/statistics/page.inc.php | 78 +++++++++---------------------- 1 file changed, 23 insertions(+), 55 deletions(-) (limited to 'modules-available/statistics/page.inc.php') diff --git a/modules-available/statistics/page.inc.php b/modules-available/statistics/page.inc.php index 3e4aa9ce..04d9a515 100644 --- a/modules-available/statistics/page.inc.php +++ b/modules-available/statistics/page.inc.php @@ -24,10 +24,12 @@ class Page_Statistics extends Page /* Dictionary::translate('submenu_projectors'); Dictionary::translate('submenu_replace'); + Dictionary::translate('submenu_hints'); */ - foreach (['projectors', 'replace'] as $section) { - Dashboard::addSubmenu('?do=statistics&show=' . $section, Dictionary::translate('submenu_' . $section, true)); + foreach (['projectors', 'replace', 'hints'] as $section) { + Dashboard::addSubmenu('?do=statistics&show=' . $section, + Dictionary::translate('submenu_' . $section, true)); } $this->show = Request::any('show', false, 'string'); @@ -251,11 +253,24 @@ class Page_Statistics extends Page { if (!User::load()) return; - if (Request::any('action') === 'bios') { + $action = Request::any('action'); + if ($action === 'bios') { require_once 'modules/statistics/pages/machine.inc.php'; SubPage::ajaxCheckBios(); return; } + if ($action === 'json-lookup') { + $reply = []; + foreach (Request::post('list', [], 'array') as $item) { + $name = PciId::getPciId(PciId::AUTO, $item, true); + if ($name === false) { + $name = '?????'; + } + $reply[$item] = $name; + } + header('Content-Type: application/json'); + die(json_encode($reply)); + } $param = Request::any('lookup', false, 'string'); if ($param === false) { @@ -263,61 +278,14 @@ class Page_Statistics extends Page } $add = ''; if (preg_match('/^([a-f0-9]{4}):([a-f0-9]{4})$/', $param, $out)) { - $cat = 'DEVICE'; - $host = $out[2] . '.' . $out[1]; $add = ' (' . $param . ')'; - } elseif (preg_match('/^([a-f0-9]{4})$/', $param, $out)) { - $cat = 'VENDOR'; - $host = $out[1]; - } elseif (preg_match('/^c\.([a-f0-9]{2})([a-f0-9]{2})$/', $param, $out)) { - $cat = 'CLASS'; - $host = $out[2] . '.' . $out[1] . '.c'; - } else { - die('Invalid format requested'); - } - $cached = Page_Statistics::getPciId($cat, $param); - if ($cached !== false && $cached['dateline'] > time()) { - echo $cached['value'], $add; - exit; - } - $res = dns_get_record($host . '.pci.id.ucw.cz', DNS_TXT); - if (is_array($res)) { - foreach ($res as $entry) { - if (isset($entry['txt']) && substr($entry['txt'], 0, 2) === 'i=') { - $string = substr($entry['txt'], 2); - Page_Statistics::setPciId($cat, $param, $string); - echo $string, $add; - exit; - } - } } - if ($cached !== false) { - echo $cached['value'], $add; - exit; + $cached = PciId::getPciId(PciId::AUTO, $param, true); + if ($cached === false) { + $cached = 'Unknown'; } - die('Not found'); - } - - public static function getPciId($cat, $id) - { - static $cache = []; - $key = $cat . '-' . $id; - if (isset($cache[$key])) - return $cache[$key]; - return $cache[$key] = Database::queryFirst('SELECT value, dateline FROM pciid WHERE category = :cat AND id = :id LIMIT 1', - array('cat' => $cat, 'id' => $id)); - } - - private static function setPciId($cat, $id, $value) - { - Database::exec('INSERT INTO pciid (category, id, value, dateline) VALUES (:cat, :id, :value, :timeout)' - . ' ON DUPLICATE KEY UPDATE value = VALUES(value), dateline = VALUES(dateline)', - array( - 'cat' => $cat, - 'id' => $id, - 'value' => $value, - 'timeout' => time() + mt_rand(10, 30) * 86400, - ), true); + echo $cached, $add; + exit; } } -- cgit v1.2.3-55-g7522