From 8ffe1d0c468f9121a79977382d682ed53b812e4e Mon Sep 17 00:00:00 2001 From: Aline Manera Date: Mon, 16 Sep 2013 14:12:53 -0300 Subject: [PATCH] Add tftp protocol support for cdrom disk qemu/KVM also supports a tftp URL while specifying the cdrom ISO image. The xml should be as following: Signed-off-by: Aline Manera --- docs/formatdomain.html.in | 8 ++++ docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 6 +++ .../qemuxml2argv-disk-cdrom-network-tftp.args | 7 ++++ .../qemuxml2argv-disk-cdrom-network-tftp.xml | 37 +++++++++++++++++++ tests/qemuxml2argvtest.c | 2 + 8 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0b6cd455d4..a927643c39 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1533,6 +1533,14 @@ <target dev='hdc' bus='ide' tray='open'/> <readonly/> </disk> + <disk type='network' device='cdrom'> + <driver name='qemu' type='raw'/> + <source protocol="tftp" name="url_path"> + <host name="hostname" port="69"/> + </source> + <target dev='hdc' bus='ide' tray='open'/> + <readonly/> + </disk> <disk type='block' device='lun'> <driver name='qemu' type='raw'/> <source dev='/dev/sda'/> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 2da36691c1..4d333a84e1 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1234,6 +1234,7 @@ https ftp ftps + tftp diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ff3da7a7dc..05c1de4f53 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -267,7 +267,8 @@ VIR_ENUM_IMPL(virDomainDiskProtocol, VIR_DOMAIN_DISK_PROTOCOL_LAST, "http", "https", "ftp", - "ftps") + "ftps", + "tftp") VIR_ENUM_IMPL(virDomainDiskProtocolTransport, VIR_DOMAIN_DISK_PROTO_TRANS_LAST, "tcp", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ab1290b4aa..9414ebff76 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -546,6 +546,7 @@ enum virDomainDiskProtocol { VIR_DOMAIN_DISK_PROTOCOL_HTTPS, VIR_DOMAIN_DISK_PROTOCOL_FTP, VIR_DOMAIN_DISK_PROTOCOL_FTPS, + VIR_DOMAIN_DISK_PROTOCOL_TFTP, VIR_DOMAIN_DISK_PROTOCOL_LAST }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1bde013802..4628dac73e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3923,6 +3923,12 @@ qemuBuildDriveStr(virConnectPtr conn ATTRIBUTE_UNUSED, disk->hosts->port ? disk->hosts->port : "990"); virBufferEscape(&opt, ',', ",", "%s,", disk->src); break; + case VIR_DOMAIN_DISK_PROTOCOL_TFTP: + virBufferAsprintf(&opt, "file=tftp://%s:%s", + disk->hosts->name, + disk->hosts->port ? disk->hosts->port : "69"); + virBufferEscape(&opt, ',', ",", "%s,", disk->src); + break; } } else if (disk->type == VIR_DOMAIN_DISK_TYPE_VOLUME) { if (qemuBuildVolumeString(conn, disk, &opt) < 0) diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args new file mode 100644 index 0000000000..bc0cb92236 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.args @@ -0,0 +1,7 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/kvm -S \ +-M pc-1.2 -m 1024 -smp 1 -nographic -nodefaults \ +-monitor unix:/tmp/test-monitor,server,nowait -boot d -usb \ +-drive file=tftp://host.name:69/url/path/file.iso,if=none,media=cdrom,id=drive-ide0-1-0 \ +-device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.xml new file mode 100644 index 0000000000..b311237cb6 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-cdrom-network-tftp.xml @@ -0,0 +1,37 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 1048576 + 1048576 + 1 + + hvm + + + + + + + + + destroy + restart + restart + + /usr/bin/kvm + + + + + + + + +
+ + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 5daee822a9..ec4a6e5777 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -451,6 +451,8 @@ mymain(void) QEMU_CAPS_DRIVE); DO_TEST("disk-cdrom-network-ftps", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE); + DO_TEST("disk-cdrom-network-tftp", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE, + QEMU_CAPS_DRIVE); DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE); DO_TEST("disk-cdrom-tray", QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_TX_ALG);