Libvirt domain XML currently allows only local filepaths that can be used to specify a NVRAM disk. It should be possible to support NVRAM disks on network storage as it would give flexibility to start the VM on any host without having to worry about where to get the latest nvram image. This series extends the NVRAM element to support hosting over network-backed disks. It achieves this by embedding virStorageSource pointer for nvram into _virDomainLoaderDef. It introduces a 'type' attribute for NVRAM element to specify 'file' vs 'network' backed NVRAM. XML with new annotation: <nvram type='network'> <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/0'> <host name='example.com' port='6000'/> <auth username='myname'> <secret type='iscsi' usage='mycluster_myname'/> </auth> </host> </source> </nvram> or <nvram type='network'> <source protocol='nbd' name='bar'> <host name='example.org' port='6000'/> </source> </nvram> or <nvram type='file'> <source file='/var/lib/libvirt/nvram/guest_VARS.fd'/> </nvram> Changes v1->v2: - Split the patch into smaller patches - Added unit test - Updated the doc - Addressed Peter's comment on v1 (https://listman.redhat.com/archives/libvir-list/2022-March/229684.html) Changes v2->v3: - Added authentication with 'iscsi' protocol unit test - Updated the validation logic - Addressed Peter's other comments on v2 patch(https://listman.redhat.com/archives/libvir-list/2022-April/229971.html) Rohit Kumar (5): Make NVRAM a virStorageSource type. Add support to parse/format/validate virStorageSource type NVRAM Update schema, docs, and validation logic to support network backed NVRAM Add unit tests for network backed NVRAM Add unit test to support new 'file' type NVRAM NEWS.rst | 5 + docs/formatdomain.rst | 34 +++++- src/conf/domain_conf.c | 115 +++++++++++++++--- src/conf/domain_conf.h | 3 +- src/conf/schemas/domaincommon.rng | 21 +++- src/qemu/qemu_cgroup.c | 3 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_domain.c | 23 +++- src/qemu/qemu_driver.c | 5 +- src/qemu/qemu_firmware.c | 23 +++- src/qemu/qemu_namespace.c | 5 +- src/qemu/qemu_process.c | 5 +- src/qemu/qemu_validate.c | 71 +++++++++++ src/security/security_dac.c | 6 +- src/security/security_selinux.c | 6 +- src/security/virt-aa-helper.c | 5 +- src/vbox/vbox_common.c | 3 +- .../bios-nvram-file.x86_64-latest.args | 37 ++++++ tests/qemuxml2argvdata/bios-nvram-file.xml | 23 ++++ .../bios-nvram-network-iscsi.x86_64-4.1.0.err | 1 + ...ios-nvram-network-iscsi.x86_64-latest.args | 38 ++++++ .../bios-nvram-network-iscsi.xml | 31 +++++ .../bios-nvram-network-nbd.x86_64-latest.args | 37 ++++++ .../bios-nvram-network-nbd.xml | 28 +++++ tests/qemuxml2argvtest.c | 4 + .../bios-nvram-file.x86_64-latest.xml | 39 ++++++ ...bios-nvram-network-iscsi.x86_64-latest.xml | 44 +++++++ .../bios-nvram-network-nbd.x86_64-latest.xml | 41 +++++++ tests/qemuxml2xmltest.c | 3 + 29 files changed, 618 insertions(+), 43 deletions(-) create mode 100644 tests/qemuxml2argvdata/bios-nvram-file.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/bios-nvram-file.xml create mode 100644 tests/qemuxml2argvdata/bios-nvram-network-iscsi.x86_64-4.1.0.err create mode 100644 tests/qemuxml2argvdata/bios-nvram-network-iscsi.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/bios-nvram-network-iscsi.xml create mode 100644 tests/qemuxml2argvdata/bios-nvram-network-nbd.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/bios-nvram-network-nbd.xml create mode 100644 tests/qemuxml2xmloutdata/bios-nvram-file.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/bios-nvram-network-iscsi.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/bios-nvram-network-nbd.x86_64-latest.xml -- 2.25.1