mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
Compare commits
1 Commits
d32cac25c8
...
f3fde178c0
Author | SHA1 | Date | |
---|---|---|---|
|
f3fde178c0 |
32
NEWS.rst
32
NEWS.rst
@ -36,13 +36,6 @@ v10.2.0 (unreleased)
|
||||
use the upcoming QEMU 9.0.0 release together with the development version
|
||||
of edk2.
|
||||
|
||||
* qemu: Introduce virDomainGraphicsReload API
|
||||
|
||||
Reloading the graphics display is now supported for QEMU guests using
|
||||
VNC. This is useful to make QEMU reload the TLS certificates without
|
||||
restarting the guest. Available via the ``virDomainGraphicsReload`` API
|
||||
and the ``domdisplay-reload`` virsh command.
|
||||
|
||||
* **Improvements**
|
||||
|
||||
* **Bug fixes**
|
||||
@ -59,31 +52,6 @@ v10.2.0 (unreleased)
|
||||
releases to 10.2.0 works as well, but the other direction remains broken
|
||||
unless the fix is backported.
|
||||
|
||||
* node_device: Don't report spurious errors from PCI VPD parsing
|
||||
|
||||
In last release the PCI Vital Product Data parser was enhanced to report
|
||||
errors but that effort failed as some kernels have the file but don't allow
|
||||
reading it causing logs to be spammed with::
|
||||
|
||||
libvirtd[21055]: operation failed: failed to read the PCI VPD data
|
||||
|
||||
Since the data is used only in the node device XML and errors are ignored if
|
||||
the parsing failed, this release removes all the error reporting.
|
||||
|
||||
* qemu: set correct SELinux label for unprivileged virtiofsd
|
||||
|
||||
It is now possible to use virtiofsd-based ``<filesystem>`` shares even
|
||||
if the guest is confined using SELinux.
|
||||
|
||||
* qemu: fix a crash on unprivileged virtiofsd hotplug
|
||||
|
||||
Hotplugging virtiofsd-based filesystems works now.
|
||||
|
||||
* virt-admin: Fix segfault when libvirtd dies
|
||||
|
||||
``virt-admin`` no longer crashes when ``libvirtd`` unexpectedly closes
|
||||
the connection.
|
||||
|
||||
|
||||
v10.1.0 (2024-03-01)
|
||||
====================
|
||||
|
@ -313,6 +313,7 @@ src/util/virnuma.c
|
||||
src/util/virnvme.c
|
||||
src/util/virobject.c
|
||||
src/util/virpci.c
|
||||
src/util/virpcivpd.c
|
||||
src/util/virperf.c
|
||||
src/util/virpidfile.c
|
||||
src/util/virpolkit.c
|
||||
|
90
po/ko.po
90
po/ko.po
@ -18,7 +18,7 @@ msgstr ""
|
||||
"Project-Id-Version: libvirt 6.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2024-03-22 09:54+0000\n"
|
||||
"PO-Revision-Date: 2024-03-27 17:36+0000\n"
|
||||
"PO-Revision-Date: 2024-02-29 14:36+0000\n"
|
||||
"Last-Translator: 김인수 <simmon@nplob.com>\n"
|
||||
"Language-Team: Korean <https://translate.fedoraproject.org/projects/libvirt/"
|
||||
"libvirt/ko/>\n"
|
||||
@ -482,7 +482,7 @@ msgstr " 저장소:"
|
||||
|
||||
#, c-format
|
||||
msgid " [[--%1$s] <string>]..."
|
||||
msgstr " [[--%1$s] <문자열>]..."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@ -498,7 +498,7 @@ msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid " {[--%1$s] <string>}..."
|
||||
msgstr " {[--%1$s] <문자열>}..."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@ -2850,7 +2850,7 @@ msgstr "resctrl 디렉토리 '%1$s'를 생성 할 수 없음"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot create save directory '%1$s'"
|
||||
msgstr "저장 디렉토리 '%1$s'를 생성 할 수 없습니다"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot create socket '%1$s'"
|
||||
@ -3888,7 +3888,7 @@ msgid "Connections from inside daemon must be direct"
|
||||
msgstr "내부 데몬에서 직접 연결해야 합니다"
|
||||
|
||||
msgid "Console only works in PTY mode"
|
||||
msgstr "PTY 방식에서 콘솔만 동작합니다"
|
||||
msgstr ""
|
||||
|
||||
msgid "Constant pages:"
|
||||
msgstr "고정 페이지:"
|
||||
@ -6638,19 +6638,19 @@ msgstr "%1$s 삭제 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to cleanup stale managed save dir '%1$s'"
|
||||
msgstr "오래된 관리 저장 디렉토리 '%1$s' 정리에 실패했습니다"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to clear security context for agent for %1$s"
|
||||
msgstr "%1$s용 관리를 위한 보안 문맥을 정리하는 데 실패하였습니다"
|
||||
msgstr "%1$s를 위한 에이젠트의 보안 문맥을 삭제하는데 실패하였습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to clear security context for monitor for %1$s"
|
||||
msgstr "%1$s용 모니터를 위한 보안 문맥 정리에 실패했습니다"
|
||||
msgstr "%1$s의 모니터에 대한 보안 문맥을 삭제하는데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to clone vol from %1$s"
|
||||
msgstr "%1$s에서 볼륨 복제에 실패했습니다"
|
||||
msgstr "%1$s에서 볼륨 복제하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to close bind target %1$s"
|
||||
@ -6720,13 +6720,13 @@ msgstr "연결장치 개요 %1$d를 이름으로 변환하는데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to convert loadparm '%1$s' to upper case"
|
||||
msgstr "loadparm '%1$s'를 대문자로 변환하는 데 실패했습니다"
|
||||
msgstr "loadparm '%1$s'을(를) 대문자로 변환하지 못했습니다"
|
||||
|
||||
msgid "Failed to convert the command string to argv-lists"
|
||||
msgstr "명령 문자열을 argv-lists로 변환하는 데 실패했습니다"
|
||||
msgstr "명령 문자열을 argv-lists로 변환하지 못했습니다"
|
||||
|
||||
msgid "Failed to copy XML node"
|
||||
msgstr "XML 노드 복사에 실패했습니다"
|
||||
msgstr "XML 노드를 복사하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to core dump domain '%1$s' to %2$s"
|
||||
@ -6755,10 +6755,10 @@ msgstr "SASL 클라이언트 문맥을 생성하는 데 실패: %1$d (%2$s)"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create SAVE dir %1$s"
|
||||
msgstr "저장 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to create XML"
|
||||
msgstr "XML 생성에 실패했습니다"
|
||||
msgstr "XML 생성하기 실패"
|
||||
|
||||
msgid "Failed to create XML config object"
|
||||
msgstr "XML 구성 개체를 생성하지 못했습니다"
|
||||
@ -6795,42 +6795,42 @@ msgid "Failed to create directory for device %1$s"
|
||||
msgstr "장치 %1$s의 디렉토리를 생성하는데 실패했습니다"
|
||||
|
||||
msgid "Failed to create disk pool geometry"
|
||||
msgstr "디스크 풀 지오메트리 생성에 실패했습니다"
|
||||
msgstr "디스크 풀 지오메트리 생성 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create domain from %1$s"
|
||||
msgstr "%1$s에서 도메인 생성에 실패했습니다"
|
||||
msgstr "%1$s에서 도메인 생성하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create domain save file '%1$s'"
|
||||
msgstr "도메인 저장 파일 '%1$s' 생성에 실패했습니다"
|
||||
msgstr "도메인 저장 파일 '%1$s'를 만드는 데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create dump dir %1$s"
|
||||
msgstr "덤프 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr "덤프 디렉토리 %1$s을(를) 생성하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create file '%1$s'"
|
||||
msgstr "파일 '%1$s' 생성에 실패했습니다"
|
||||
msgstr "파일 '%1$s' 생성하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create file '%1$s': couldn't determine fs type"
|
||||
msgstr "파일 '%1$s' 생성에 실패: fs 유형 확인 할 수 없습니다"
|
||||
msgstr "파일 '%1$s' 만들기 실패: fs 유형 확인 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create filesystem probe for device %1$s"
|
||||
msgstr "장치 %1$s의 파일시스템 조사 생성에 실패했습니다"
|
||||
msgstr "장치 %1$s의 파일시스템 조사를 생성하는데 실패했습니다"
|
||||
|
||||
msgid "Failed to create interface node under bridge node in xml document"
|
||||
msgstr "xml 문서에서 브리지 노드 하에서 연결장치 노드를 생성에 실패했습니다"
|
||||
msgstr "xml 문서에서 브리지 노드 아래에 인터페이스 노드를 생성하는데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create iscsi context for %1$s"
|
||||
msgstr "%1$s를 위한 iscsi 문맥 생성에 실패했습니다"
|
||||
msgstr "%1$s를 위한 iscsi 문맥을 생성하는데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create lib dir %1$s"
|
||||
msgstr "라이브러리 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr "라이브러리 디렉토리 %1$s을(를) 작성하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create memory backing dir %1$s"
|
||||
@ -6861,47 +6861,47 @@ msgstr "passt 상태 디렉토리 %1$s 생성에 실패함"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create pool %1$s"
|
||||
msgstr "풀 %1$s를 생성에 실패했습니다"
|
||||
msgstr "풀 %1$s를 생성하는 데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create pool from %1$s"
|
||||
msgstr "%1$s에서 풀 생성에 실패했습니다"
|
||||
msgstr "%1$s에서 풀 생성하기 실패"
|
||||
|
||||
msgid "Failed to create reboot thread, killing domain"
|
||||
msgstr "재부팅 스레드 생성 실패, 도메인 종료"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create save dir %1$s"
|
||||
msgstr "저장 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr "저장 디렉토리 %1$s를 작성하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create slirp state dir %1$s"
|
||||
msgstr "slirp 상태 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr "slirp 상태 디렉토리 %1$s을 생성하는데 실패했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create snapshot dir %1$s"
|
||||
msgstr "순간찍기 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr "순간찍기 디렉토리 %1$s 생성에 실패함"
|
||||
|
||||
msgid "Failed to create socket"
|
||||
msgstr "소켓 생성에 실패했습니다"
|
||||
msgstr "소켓 생성하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create state dir %1$s"
|
||||
msgstr "상태 디렉토리 %1$s 생성에 실패했습니다"
|
||||
msgstr "상태 디렉토리 %1$s를 작성하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create state dir '%1$s'"
|
||||
msgstr "상태 디렉토리 '%1$s' 생성에 실패했습니다"
|
||||
msgstr "상태 디렉토리 '%1$s'를 작성하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create symlink '%1$s' to '%2$s'"
|
||||
msgstr "심볼릭 링크 '%1$s'를 '%2$s'로 생성하는 데 실패했습니다"
|
||||
msgstr "심볼릭 링크 '%1$s'를 '%2$s'에 대해 만들 수 없음"
|
||||
|
||||
msgid "Failed to create thread"
|
||||
msgstr "쓰레드 생성에 실패했습니다"
|
||||
msgstr "스레드 생성 실패"
|
||||
|
||||
msgid "Failed to create thread for receiving migration data"
|
||||
msgstr "이전 자료를 수신하기 위하여 쓰레드 생성에 실패했습니다"
|
||||
msgstr "이전 자료를 수신하기 위하여 쓰레드 생성하는데 실패했습니다"
|
||||
|
||||
msgid "Failed to create thread to handle daemon restart"
|
||||
msgstr "데몬 재시작을 처리할 스레드를 생성하지 못했습니다"
|
||||
@ -6948,43 +6948,43 @@ msgstr "%1$s에서 볼륨 생성하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create/open domain save xml file '%1$s'"
|
||||
msgstr "도메인 저장 xml 파일 '%1$s' 생성/열기에 실패했습니다"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define domain from %1$s"
|
||||
msgstr "%1$s에서 도메인 정의하기에 실패했습니다"
|
||||
msgstr "%1$s에서 도메인 정의하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define interface from %1$s"
|
||||
msgstr "%1$s에서 인터페이스 정의하기에 실패했습니다"
|
||||
msgstr "%1$s에서 인터페이스 정의하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define network filter from %1$s"
|
||||
msgstr "%1$s에서 네트워크 필터 정의에 실패했습니다"
|
||||
msgstr "%1$s에서 네트워크 필터 정의에 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define network from %1$s"
|
||||
msgstr "%1$s에서 네트워크 정의하기에 실패했습니다"
|
||||
msgstr "%1$s에서 네트워크 정의하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define new bridge interface %1$s"
|
||||
msgstr "새로운 브리지 연결장치 %1$s 정의하기에 실패했습니다"
|
||||
msgstr "새로운 브리지 인터페이스 %1$s 정의 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define new interface %1$s"
|
||||
msgstr "새로운 연결장치 %1$s 정의하기에 실패했습니다"
|
||||
msgstr "새로운 인터페이스 %1$s를 정의하는데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define node device from '%1$s'"
|
||||
msgstr "'%1$s'에서 노드 장치를 정의하기에 실패했습니다"
|
||||
msgstr "'%1$s'에서 노드 장치를 정의하지 못했습니다"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define pool %1$s"
|
||||
msgstr "풀 %1$s를 정의하기에 실패했습니다"
|
||||
msgstr "풀 %1$s를 정의하는 데 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define pool from %1$s"
|
||||
msgstr "%1$s에서 풀 정의하기에 실패했습니다"
|
||||
msgstr "%1$s에서 풀 정의하기 실패"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to delete DiskDescriptor.xml of volume '%1$s'"
|
||||
|
103
po/uk.po
103
po/uk.po
@ -16,7 +16,7 @@ msgstr ""
|
||||
"Project-Id-Version: libvirt 6.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2024-03-22 09:54+0000\n"
|
||||
"PO-Revision-Date: 2024-03-27 17:36+0000\n"
|
||||
"PO-Revision-Date: 2024-02-28 13:55+0000\n"
|
||||
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
|
||||
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
|
||||
"libvirt/libvirt/uk/>\n"
|
||||
@ -489,7 +489,7 @@ msgstr " Сховище:"
|
||||
|
||||
#, c-format
|
||||
msgid " [[--%1$s] <string>]..."
|
||||
msgstr " [[--%1$s] <рядок>]..."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@ -505,7 +505,7 @@ msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid " {[--%1$s] <string>}..."
|
||||
msgstr " {[--%1$s] <рядок>}..."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@ -2978,7 +2978,7 @@ msgstr "Не вдалося створити каталог resctrl «%1$s»"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot create save directory '%1$s'"
|
||||
msgstr "Не вдалося зберегти каталог «%1$s»"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot create socket '%1$s'"
|
||||
@ -4091,7 +4091,7 @@ msgid "Connections from inside daemon must be direct"
|
||||
msgstr "З'єднання із внутрішньої фонової служби мають бути безпосередніми"
|
||||
|
||||
msgid "Console only works in PTY mode"
|
||||
msgstr "Консоль працює лише у режимі PTY"
|
||||
msgstr ""
|
||||
|
||||
msgid "Constant pages:"
|
||||
msgstr "Незмінні сторінки:"
|
||||
@ -6023,9 +6023,6 @@ msgid ""
|
||||
"virtualization is enabled in the host BIOS, and host configuration is setup "
|
||||
"to load the mshv modules."
|
||||
msgstr ""
|
||||
"Домен потребує пристрою MSHV, але він є недоступним. Перевірте, чи увімкнено "
|
||||
"віртуалізацію у BIOS основної системи, і основну систему налаштовано на "
|
||||
"завантаження модулів mshv."
|
||||
|
||||
msgid "Domain requires at least 1 vCPU"
|
||||
msgstr "Для домену потрібне принаймні один віртуальний процесор"
|
||||
@ -6930,7 +6927,7 @@ msgstr "Не вдалося спорожнити %1$s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to cleanup stale managed save dir '%1$s'"
|
||||
msgstr "Не вдалося очистити статичний керований каталог збереження «%1$s»"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to clear security context for agent for %1$s"
|
||||
@ -7049,7 +7046,7 @@ msgstr "Не вдалося створити контекст клієнта SAS
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create SAVE dir %1$s"
|
||||
msgstr "Не вдалося створити каталог SAVE %1$s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to create XML"
|
||||
msgstr "Не вдається створити XML"
|
||||
@ -7248,7 +7245,7 @@ msgstr "Не вдалося створити том з %1$s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create/open domain save xml file '%1$s'"
|
||||
msgstr "Не вдалося створити або відкрити файл XML збереження домену «%1$s»"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to define domain from %1$s"
|
||||
@ -8018,7 +8015,7 @@ msgstr "Не вдалося відкрити файл образу домену
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to open domain save file '%1$s'"
|
||||
msgstr "Не вдалося відкрити файл збереження домену «%1$s»"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to open file '%1$s'"
|
||||
@ -8368,7 +8365,7 @@ msgstr "Не вдалося вилучити образ керованого з
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to remove managed save path '%1$s'"
|
||||
msgstr "Не вдалося вилучити керований шлях збереження «%1$s»"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to remove storage volume '%1$s'(%2$s)"
|
||||
@ -8520,7 +8517,7 @@ msgid "Failed to save VM settings"
|
||||
msgstr "Не вдалося зберегти параметри ВМ"
|
||||
|
||||
msgid "Failed to save domain"
|
||||
msgstr "Не вдалося зберегти домен"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to save domain '%1$d' with libxenlight"
|
||||
@ -8733,7 +8730,7 @@ msgid "Failed to shutdown domain '%1$s'"
|
||||
msgstr "Помилка вимикання домену «%1$s»"
|
||||
|
||||
msgid "Failed to shutoff after domain save"
|
||||
msgstr "Не вдалося завершити роботу після збереження домену"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to soft reset VM '%1$s'. Destroying VM"
|
||||
@ -8962,7 +8959,7 @@ msgid "Failed to write '%1$s'"
|
||||
msgstr "Не вдалося записати «%1$s»"
|
||||
|
||||
msgid "Failed to write file header"
|
||||
msgstr "Не вдалося записати заголовок файла"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to write pixel data"
|
||||
msgstr "Не вдалося записати піксельні дані"
|
||||
@ -8983,7 +8980,7 @@ msgid "Failed to write vmx file '%1$s'"
|
||||
msgstr "Не вдалося виконати запис файла VMX «%1$s»"
|
||||
|
||||
msgid "Failed to write xml definition"
|
||||
msgstr "Не вдалося записати визначення XML"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed to write xml description"
|
||||
msgstr "Не вдалося записати опис у форматі XML"
|
||||
@ -9314,17 +9311,16 @@ msgid "Get or set perf event"
|
||||
msgstr "Отримати або встановити подію perf"
|
||||
|
||||
msgid "Get or set the current blkio parameters for a guest domain."
|
||||
msgstr "Отримати або встановити поточні параметри blkio для гостьового домену."
|
||||
msgstr ""
|
||||
|
||||
msgid "Get or set the current memory parameters for a guest domain."
|
||||
msgstr ""
|
||||
"Отримати або встановити поточні параметри пам'яті для гостьового домену."
|
||||
|
||||
msgid "Get or set the current numa parameters for a guest domain."
|
||||
msgstr "Отримати або встановити поточні параметри NUMA для гостьового домену."
|
||||
msgstr ""
|
||||
|
||||
msgid "Get or set the current perf events for a guest domain."
|
||||
msgstr "Отримати або встановити поточні події perf для гостьового домену."
|
||||
msgstr ""
|
||||
|
||||
msgid "Get or set the current snapshot"
|
||||
msgstr "Отримання або встановлення поточного знімка"
|
||||
@ -12322,8 +12318,6 @@ msgid ""
|
||||
"NUMA mode, one of strict, preferred and interleave or a number from the "
|
||||
"virDomainNumatuneMemMode enum"
|
||||
msgstr ""
|
||||
"Режим NUMA, одне зі значень, strict, preferred та interleave, або число з "
|
||||
"переліку virDomainNumatuneMemMode"
|
||||
|
||||
#, c-format
|
||||
msgid "NUMA node %1$d is not available"
|
||||
@ -14260,7 +14254,7 @@ msgid "Relative backing during copy not supported yet"
|
||||
msgstr "Підтримки відносного резервування під час копіювання ще не передбачено"
|
||||
|
||||
msgid "Reload domain's graphics display certificates"
|
||||
msgstr "Перезавантажити сертифікати графічного дисплея домену"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Remote command terminated with non-zero code: %1$d"
|
||||
@ -14452,10 +14446,10 @@ msgid "Retrieve identity details about <client> from <server>"
|
||||
msgstr "Отримати дані профілю клієнта <client> з сервера <server>"
|
||||
|
||||
msgid "Retrieve server's client-related configuration limits"
|
||||
msgstr "Отримати з сервера пов'язані із клієнтом обмеження налаштувань"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retrieve threadpool attributes from a server."
|
||||
msgstr "Отримати атрибути буфера потоків з сервера."
|
||||
msgstr ""
|
||||
|
||||
msgid "Return pool info in bytes"
|
||||
msgstr "Повернути дані щодо буфера у байтах"
|
||||
@ -14944,7 +14938,7 @@ msgstr ""
|
||||
"гостьової системи"
|
||||
|
||||
msgid "Serial only works in UNIX/PTY modes"
|
||||
msgstr "Послідовний режим працює лише у режимах UNIX/PTY"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Serial port index %1$d out of [0..3] range"
|
||||
@ -19867,7 +19861,6 @@ msgstr "Несподівано отримано порт мережі без з'
|
||||
|
||||
msgid "Unix Socket backend is not supported by this version of ch."
|
||||
msgstr ""
|
||||
"Підтримки модуля обробки даних сокетів Unix у цій версії ch не передбачено."
|
||||
|
||||
msgid "Unix file descriptors not supported on this platform"
|
||||
msgstr "На цій платформі не передбачено підтримки дескрипторів файлів UNIX"
|
||||
@ -23527,10 +23520,10 @@ msgid "cannot revert snapshot of running domain"
|
||||
msgstr "не можна відновлювати попередній стан запущеного домену"
|
||||
|
||||
msgid "cannot save domain with host devices"
|
||||
msgstr "не вдалося зберегти домен із гостьовими пристроями"
|
||||
msgstr ""
|
||||
|
||||
msgid "cannot save domain with network interfaces"
|
||||
msgstr "не вдалося зберегти домен із мережевими інтерфейсами"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "cannot save file '%1$s'"
|
||||
@ -24116,10 +24109,10 @@ msgid "command '%1$s' requires <%2$s> option"
|
||||
msgstr "для команди «%1$s» потрібно вказати параметр <%2$s>"
|
||||
|
||||
msgid "command groups is NULL run vshInit before reloading"
|
||||
msgstr "групи команд дорівнюють NULL; запустіть vshInit до перезавантаження"
|
||||
msgstr ""
|
||||
|
||||
msgid "command groups must be non-NULL"
|
||||
msgstr "групи команд не повинні дорівнювати NULL"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "command is already running as pid %1$lld"
|
||||
@ -27678,7 +27671,7 @@ msgid "failed to read AppArmor template"
|
||||
msgstr "не вдалося прочитати дані шаблону AppArmor"
|
||||
|
||||
msgid "failed to read CHSaveXMLHeader header"
|
||||
msgstr "не вдалося прочитати заголовок CHSaveXMLHeader"
|
||||
msgstr ""
|
||||
|
||||
msgid "failed to read XML"
|
||||
msgstr "не вдалося прочитати XML"
|
||||
@ -27812,21 +27805,19 @@ msgid "failed to resolve symlink %1$s: %2$s"
|
||||
msgstr "не вдалося знайти джерело символічного посилання %1$s: %2$s"
|
||||
|
||||
msgid "failed to restore domain"
|
||||
msgstr "не вдалося відновити домен"
|
||||
msgstr ""
|
||||
|
||||
msgid "failed to restore domain from managed save"
|
||||
msgstr "не вдалося відновити домен із керованого сховища збережених даних"
|
||||
msgstr ""
|
||||
|
||||
msgid "failed to resume domain"
|
||||
msgstr "помилка відновлення роботи домену"
|
||||
|
||||
msgid "failed to resume domain after restore"
|
||||
msgstr "не вдалося відновити роботу домену після відновлення"
|
||||
msgstr ""
|
||||
|
||||
msgid "failed to resume domain after restore from managed save"
|
||||
msgstr ""
|
||||
"не вдалося відновити роботу домену після відновлення з керованого сховища "
|
||||
"збережених даних"
|
||||
|
||||
msgid "failed to retrieve XML"
|
||||
msgstr "не вдалося отримати XML"
|
||||
@ -27950,7 +27941,7 @@ msgid "failed to suspend domain"
|
||||
msgstr "не вдалося призупинити роботу домену"
|
||||
|
||||
msgid "failed to suspend domain before saving"
|
||||
msgstr "не вдалося призупинити роботу домену до збереження"
|
||||
msgstr ""
|
||||
|
||||
msgid "failed to take screenshot"
|
||||
msgstr "не вдалося створити знімок вікна"
|
||||
@ -28668,7 +28659,7 @@ msgstr ""
|
||||
"потрібен графічний пристрій для значення атрибуту 'display=on' у <hostdev>"
|
||||
|
||||
msgid "graphics display type"
|
||||
msgstr "тип графічного дисплея"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"graphics type 'egl-headless' is only supported with one of: 'vnc', 'spice' "
|
||||
@ -29067,8 +29058,6 @@ msgid ""
|
||||
"hypervisor provided conflicting CPU data: feature '%1$s' is both enabled and "
|
||||
"disabled at the same time"
|
||||
msgstr ""
|
||||
"наданий гіпервізор конфліктує із даними процесора: можливість «%1$s» одразу "
|
||||
"увімкнено і вимкнено"
|
||||
|
||||
msgid "i - turn off validation and try to redefine again"
|
||||
msgstr "i - вимкнути перевірку і спробувати визначити все знову"
|
||||
@ -31186,7 +31175,7 @@ msgstr ""
|
||||
"агента)"
|
||||
|
||||
msgid "maplen must be non-negative"
|
||||
msgstr "maplen має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "mark inactive domains with managed save state"
|
||||
msgstr "позначити неактивні домени позначкою стану керованого збереження"
|
||||
@ -31224,7 +31213,7 @@ msgid "maxcells > REMOTE_NODE_MAX_CELLS"
|
||||
msgstr "maxcells > REMOTE_NODE_MAX_CELLS"
|
||||
|
||||
msgid "maxcells must be non-negative"
|
||||
msgstr "maxcells має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "maxerrors too large"
|
||||
msgstr "значення maxerrors є занадто великим"
|
||||
@ -31233,7 +31222,7 @@ msgid "maxids > REMOTE_DOMAIN_LIST_MAX"
|
||||
msgstr "maxids > REMOTE_DOMAIN_LIST_MAX"
|
||||
|
||||
msgid "maxids must be non-negative"
|
||||
msgstr "maxids має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "maximum"
|
||||
msgstr "maximum"
|
||||
@ -31284,7 +31273,7 @@ msgid "maxinfo > REMOTE_VCPUINFO_MAX"
|
||||
msgstr "maxinfo > REMOTE_VCPUINFO_MAX"
|
||||
|
||||
msgid "maxinfo must be non-negative"
|
||||
msgstr "maxinfo має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "maxnames > REMOTE_DOMAIN_LIST_MAX"
|
||||
msgstr "maxnames > REMOTE_DOMAIN_LIST_MAX"
|
||||
@ -31314,13 +31303,13 @@ msgid "maxnames > REMOTE_STORAGE_VOL_LIST_MAX"
|
||||
msgstr "maxnames > REMOTE_STORAGE_VOL_LIST_MAX"
|
||||
|
||||
msgid "maxnames must be non-negative"
|
||||
msgstr "maxnames має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
|
||||
msgid "maxuuids must be non-negative"
|
||||
msgstr "maxuuids має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "mdev attribute missing name or value"
|
||||
msgstr "у атрибуті mdev пропущено назву або значення"
|
||||
@ -32701,10 +32690,10 @@ msgid "msi option is only supported with a server"
|
||||
msgstr "підтримку параметра msi передбачено лише з сервером"
|
||||
|
||||
msgid "mtp is not supported with this QEMU binary"
|
||||
msgstr "підтримки mtp у цьому виконуваному файлі QEMU не передбачено"
|
||||
msgstr ""
|
||||
|
||||
msgid "mtp only supports passthrough accessmode"
|
||||
msgstr "у mtp передбачено підтримку лише режиму доступу і пропусканням"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@ -32840,7 +32829,7 @@ msgid "ncpumaps > REMOTE_VCPUINFO_MAX"
|
||||
msgstr "ncpumaps > REMOTE_VCPUINFO_MAX"
|
||||
|
||||
msgid "ncpumaps must be non-negative"
|
||||
msgstr "ncpumaps має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "ncpus count exceeds maximum: %1$u > %2$u"
|
||||
@ -33868,7 +33857,7 @@ msgid "nparams in %1$s must be equal to %2$d"
|
||||
msgstr "значення nparams у %1$s має дорівнювати %2$d"
|
||||
|
||||
msgid "nparams must be non-negative"
|
||||
msgstr "nparams має бути невід'ємним"
|
||||
msgstr ""
|
||||
|
||||
msgid "nparams too large"
|
||||
msgstr "надто великий розмір nparams"
|
||||
@ -34111,7 +34100,7 @@ msgid "only can resume paused domain"
|
||||
msgstr "можна відновити роботу лише призупиненого домену"
|
||||
|
||||
msgid "only can save running/paused domain"
|
||||
msgstr "збереження можливе лише для запущеного або призупиненого домену"
|
||||
msgstr ""
|
||||
|
||||
msgid "only can shutdown running/paused domain"
|
||||
msgstr "вимикати можна лише запущений або призупинений домен"
|
||||
@ -34367,7 +34356,7 @@ msgstr ""
|
||||
"вивести рядок XML щодо системної інформації гіпервізора, якщо він доступний"
|
||||
|
||||
msgid "output help for each command"
|
||||
msgstr "вивести довідку для кожної команди"
|
||||
msgstr ""
|
||||
|
||||
msgid "output the list of options which are missing completers"
|
||||
msgstr "вивести список параметрів, де не вистачає завершувачів"
|
||||
@ -36011,7 +36000,7 @@ msgid "save image is incomplete"
|
||||
msgstr "збережений образ є неповним"
|
||||
|
||||
msgid "save image magic is incorrect"
|
||||
msgstr "контрольна сума збереженого образу є помилковою"
|
||||
msgstr ""
|
||||
|
||||
msgid "saved"
|
||||
msgstr "збережено"
|
||||
@ -38013,7 +38002,7 @@ msgstr "невідповідність типів у події (маємо 0x%1
|
||||
|
||||
#, c-format
|
||||
msgid "type must be less than %1$d"
|
||||
msgstr "type має бути меншим за %1$d"
|
||||
msgstr ""
|
||||
|
||||
msgid "type of source (block|file|network)"
|
||||
msgstr "тип джерела (block|file|network)"
|
||||
@ -40432,7 +40421,7 @@ msgstr "У virVMXContext не встановлено функцію parseFileNam
|
||||
|
||||
#, c-format
|
||||
msgid "virt type '%1$s' is not supported"
|
||||
msgstr "підтримки типу віртуалізації «%1$s» не передбачено"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
|
@ -3066,12 +3066,15 @@ virNodeDeviceGetPCIVPDDynamicCap(virNodeDevCapPCIDev *devCapPCIDev)
|
||||
if (!(pciDev = virPCIDeviceNew(&devAddr)))
|
||||
return -1;
|
||||
|
||||
/* VPD is optional in PCI(e) specs. If it is there, attempt to add it. */
|
||||
if ((res = virPCIDeviceGetVPD(pciDev))) {
|
||||
devCapPCIDev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VPD;
|
||||
devCapPCIDev->vpd = g_steal_pointer(&res);
|
||||
if (virPCIDeviceHasVPD(pciDev)) {
|
||||
/* VPD is optional in PCI(e) specs. If it is there, attempt to add it. */
|
||||
if ((res = virPCIDeviceGetVPD(pciDev))) {
|
||||
devCapPCIDev->flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VPD;
|
||||
devCapPCIDev->vpd = g_steal_pointer(&res);
|
||||
} else {
|
||||
virResetLastError();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3107,6 +3107,7 @@ virPCIDeviceGetUnbindFromStub;
|
||||
virPCIDeviceGetUsedBy;
|
||||
virPCIDeviceGetVPD;
|
||||
virPCIDeviceHasPCIExpressLink;
|
||||
virPCIDeviceHasVPD;
|
||||
virPCIDeviceIsAssignable;
|
||||
virPCIDeviceIsPCIExpress;
|
||||
virPCIDeviceListAdd;
|
||||
|
@ -3078,14 +3078,24 @@ virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path,
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
virPCIDeviceHasVPD(virPCIDevice *dev)
|
||||
{
|
||||
g_autofree char *vpdPath = virPCIFile(dev->name, "vpd");
|
||||
bool ret = virFileIsRegular(vpdPath);
|
||||
|
||||
VIR_DEBUG("path='%s', exists='%d'", vpdPath, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* virPCIDeviceGetVPD:
|
||||
* @dev: a PCI device to get a PCI VPD for.
|
||||
*
|
||||
* Obtain a PCI device's Vital Product Data (VPD). VPD is optional in
|
||||
* both PCI Local Bus and PCIe specifications so there is no guarantee it
|
||||
* will be there for a particular device. The VPD data is returned in @vpd if
|
||||
* it's available or otherwise NULL is set.
|
||||
* will be there for a particular device.
|
||||
*
|
||||
* Returns: a pointer to virPCIVPDResource which needs to be freed by the caller
|
||||
* or NULL if getting it failed for some reason (e.g. invalid format, I/O error).
|
||||
@ -3096,12 +3106,16 @@ virPCIDeviceGetVPD(virPCIDevice *dev)
|
||||
g_autofree char *vpdPath = virPCIFile(dev->name, "vpd");
|
||||
VIR_AUTOCLOSE fd = -1;
|
||||
|
||||
fd = open(vpdPath, O_RDONLY);
|
||||
|
||||
VIR_DEBUG("dev='%s' path='%s' fd='%d'", virPCIDeviceGetName(dev), vpdPath, fd);
|
||||
|
||||
if (fd < 0)
|
||||
if (!virPCIDeviceHasVPD(dev)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, _("Device %1$s does not have a VPD"),
|
||||
virPCIDeviceGetName(dev));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((fd = open(vpdPath, O_RDONLY)) < 0) {
|
||||
virReportSystemError(errno, _("Failed to open a VPD file '%1$s'"), vpdPath);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return virPCIVPDParse(fd);
|
||||
}
|
||||
@ -3180,10 +3194,17 @@ virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path G_GNUC_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool
|
||||
virPCIDeviceHasVPD(virPCIDevice *dev G_GNUC_UNUSED)
|
||||
{
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
virPCIVPDResource *
|
||||
virPCIDeviceGetVPD(virPCIDevice *dev G_GNUC_UNUSED)
|
||||
{
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
|
||||
return NULL;
|
||||
}
|
||||
#endif /* __linux__ */
|
||||
|
@ -270,6 +270,7 @@ int virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path,
|
||||
char **pfname,
|
||||
int *vf_index);
|
||||
|
||||
bool virPCIDeviceHasVPD(virPCIDevice *dev);
|
||||
virPCIVPDResource * virPCIDeviceGetVPD(virPCIDevice *dev);
|
||||
|
||||
int virPCIDeviceUnbind(virPCIDevice *dev);
|
||||
|
@ -361,9 +361,9 @@ virPCIVPDResourceUpdateKeyword(virPCIVPDResource *res,
|
||||
* @offset: The offset at which bytes need to be read.
|
||||
* @csum: A pointer to a byte containing the current checksum value. Mutated by this function.
|
||||
*
|
||||
* Returns 0 if exactly @count bytes were read from @vpdFileFd. The csum value
|
||||
* is also modified as bytes are read. If an error occurs while reading data
|
||||
* from the VPD file descriptor -1 is returned to the caller.
|
||||
* Returns 0 if exactly @count bytes were read from @vpdFileFd. The csum value is
|
||||
* also modified as bytes are read. If an error occurs while reading data from the VPD file
|
||||
* descriptor, it is reported and -1 is returned to the caller.
|
||||
*/
|
||||
static int
|
||||
virPCIVPDReadVPDBytes(int vpdFileFd,
|
||||
@ -375,7 +375,8 @@ virPCIVPDReadVPDBytes(int vpdFileFd,
|
||||
ssize_t numRead = pread(vpdFileFd, buf, count, offset);
|
||||
|
||||
if (numRead != count) {
|
||||
VIR_DEBUG("read='%zd' expected='%zu'", numRead, count);
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -446,7 +447,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
|
||||
|
||||
case VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RDWR:
|
||||
if (readOnly) {
|
||||
VIR_DEBUG("unexpected RW keyword in read-only section");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: unexpected RW keyword in read-only section"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -455,7 +457,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
|
||||
|
||||
case VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RESVD:
|
||||
if (!readOnly) {
|
||||
VIR_DEBUG("unexpected RV keyword in read-write section");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: unexpected RV keyword in read-write section"));
|
||||
return -1;
|
||||
}
|
||||
/* Only need one byte to be read and accounted towards
|
||||
@ -474,7 +477,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
|
||||
if (resPos + resDataLen < fieldPos + fieldDataLen) {
|
||||
/* In this case the field cannot simply be skipped since the position of the
|
||||
* next field is determined based on the length of a previous field. */
|
||||
VIR_DEBUG("data field length invalid");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: data field length invalid"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -513,7 +517,8 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
|
||||
case VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RESVD:
|
||||
if (*csum) {
|
||||
/* All bytes up to and including the checksum byte should add up to 0. */
|
||||
VIR_DEBUG("invalid checksum");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: invalid checksum"));
|
||||
return -1;
|
||||
}
|
||||
hasChecksum = true;
|
||||
@ -541,12 +546,14 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
|
||||
* they were not the last fields in the section. */
|
||||
if ((fieldPos < resPos + resDataLen)) {
|
||||
/* unparsed data still present */
|
||||
VIR_DEBUG("parsing ended prematurely");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: parsing ended prematurely"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (readOnly && !hasChecksum) {
|
||||
VIR_DEBUG("missing mandatory checksum");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: missing mandatory checksum"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -561,7 +568,7 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd,
|
||||
* @resDataLen: A length of the data portion of a resource.
|
||||
* @csum: A pointer to a 1-byte checksum.
|
||||
*
|
||||
* Returns: 0 on success -1 on failure. No libvirt errors are reported.
|
||||
* Returns: 0 on success -1 and an error on failure
|
||||
*/
|
||||
static int
|
||||
virPCIVPDParseVPDLargeResourceString(int vpdFileFd, uint16_t resPos,
|
||||
@ -577,7 +584,8 @@ virPCIVPDParseVPDLargeResourceString(int vpdFileFd, uint16_t resPos,
|
||||
|
||||
resValue = g_strdup(g_strstrip(buf));
|
||||
if (!virPCIVPDResourceIsValidTextValue(resValue)) {
|
||||
VIR_DEBUG("PCI VPD string contains invalid characters");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to parse PCI VPD string value with invalid characters"));
|
||||
return -1;
|
||||
}
|
||||
res->name = g_steal_pointer(&resValue);
|
||||
@ -591,7 +599,7 @@ virPCIVPDParseVPDLargeResourceString(int vpdFileFd, uint16_t resPos,
|
||||
* Parse a PCI device's Vital Product Data (VPD) contained in a file descriptor.
|
||||
*
|
||||
* Returns: a pointer to a GList of VPDResource types which needs to be freed by the caller or
|
||||
* NULL if getting it failed for some reason. No libvirt errors are reported.
|
||||
* NULL if getting it failed for some reason.
|
||||
*/
|
||||
virPCIVPDResource *
|
||||
virPCIVPDParse(int vpdFileFd)
|
||||
@ -621,8 +629,7 @@ virPCIVPDParse(int vpdFileFd)
|
||||
if (tag & PCI_VPD_LARGE_RESOURCE_FLAG) {
|
||||
if (resPos > PCI_VPD_ADDR_MASK + 1 - 3) {
|
||||
/* Bail if the large resource starts at the position where the end tag should be. */
|
||||
VIR_DEBUG("expected end tag, got more data");
|
||||
return NULL;
|
||||
goto malformed;
|
||||
}
|
||||
|
||||
/* Read the two length bytes of the large resource record. */
|
||||
@ -645,7 +652,8 @@ virPCIVPDParse(int vpdFileFd)
|
||||
if (tag == PCI_VPD_RESOURCE_END_TAG) {
|
||||
/* Stop VPD traversal since the end tag was encountered. */
|
||||
if (!hasReadOnly) {
|
||||
VIR_DEBUG("missing read-only section");
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: missing read-only section"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -654,8 +662,7 @@ virPCIVPDParse(int vpdFileFd)
|
||||
|
||||
if (resDataLen > PCI_VPD_ADDR_MASK + 1 - resPos) {
|
||||
/* Bail if the resource is too long to fit into the VPD address space. */
|
||||
VIR_DEBUG("VPD resource too long");
|
||||
return NULL;
|
||||
goto malformed;
|
||||
}
|
||||
|
||||
switch (tag) {
|
||||
@ -691,7 +698,9 @@ virPCIVPDParse(int vpdFileFd)
|
||||
resPos += resDataLen;
|
||||
}
|
||||
|
||||
VIR_DEBUG("unexpected end of VPD data, expected end tag");
|
||||
malformed:
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("failed to read the PCI VPD data: malformed data"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -700,7 +709,8 @@ virPCIVPDParse(int vpdFileFd)
|
||||
virPCIVPDResource *
|
||||
virPCIVPDParse(int vpdFileFd G_GNUC_UNUSED)
|
||||
{
|
||||
VIR_DEBUG("not implemented");
|
||||
virReportError(VIR_ERR_NO_SUPPORT, "%s",
|
||||
_("PCI VPD reporting not available on this platform"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user