The resolution of the VNC framebuffer can now be set via the resolution
definition introduced in 5.9.0.
Also, add "gop" to the list of model types the <resolution/>
sub-element is valid for.
Signed-off-by: Fabian Freyer <fabian.freyer(a)physik.tu-berlin.de>
---
docs/formatdomain.html.in | 2 +-
docs/news.xml | 9 ++++++
src/bhyve/bhyve_command.c | 3 ++
src/bhyve/bhyve_parse_command.c | 20 +++++++++++++
.../bhyveargv2xml-vnc-resolution.args | 10 +++++++
.../bhyveargv2xml-vnc-resolution.xml | 24 ++++++++++++++++
tests/bhyveargv2xmltest.c | 1 +
.../bhyvexml2argv-vnc-resolution.args | 10 +++++++
.../bhyvexml2argv-vnc-resolution.ldargs | 1 +
.../bhyvexml2argv-vnc-resolution.xml | 20 +++++++++++++
tests/bhyvexml2argvtest.c | 1 +
.../bhyvexml2xmlout-vnc-resolution.xml | 28 +++++++++++++++++++
tests/bhyvexml2xmltest.c | 1 +
13 files changed, 129 insertions(+), 1 deletion(-)
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml
create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 23eb029234..06bbbf7fea 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -7543,7 +7543,7 @@ qemu-kvm -net nic,model=? /dev/null
element may also have an optional <code>resolution</code>
sub-element.
The <code>resolution</code> element has attributes
<code>x</code> and
<code>y</code> to set the minimum resolution for the video device.
This
- sub-element is valid for model types "vga", "qxl",
"bochs", and
+ sub-element is valid for model types "vga", "qxl",
"bochs", "gop", and
"virtio".
</p>
</dd>
diff --git a/docs/news.xml b/docs/news.xml
index 4cef804aac..d728dfa93c 100644
--- a/docs/news.xml
+++ b/docs/news.xml
@@ -44,6 +44,15 @@
<libvirt>
<release version="v6.4.0" date="unreleased">
<section title="New features">
+ <change>
+ <summary>
+ bhyve: support setting the framebuffer resolution
+ </summary>
+ <description>
+ libvirt can now set the framebuffer's "w" and "h"
parameters
+ using the <code>resolution</code> element.
+ </description>
+ </change>
</section>
<section title="Improvements">
</section>
diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
index 5b1d80083a..db35cb9bd8 100644
--- a/src/bhyve/bhyve_command.c
+++ b/src/bhyve/bhyve_command.c
@@ -469,6 +469,9 @@ bhyveBuildGraphicsArgStr(const virDomainDef *def,
goto error;
}
+ if (video->res)
+ virBufferAsprintf(&opt, ",w=%d,h=%d", video->res->x,
video->res->y);
+
if (video->driver)
virBufferAsprintf(&opt, ",vga=%s",
virDomainVideoVGAConfTypeToString(video->driver->vgaconf));
diff --git a/src/bhyve/bhyve_parse_command.c b/src/bhyve/bhyve_parse_command.c
index 39cce67ea9..0414cb1ef1 100644
--- a/src/bhyve/bhyve_parse_command.c
+++ b/src/bhyve/bhyve_parse_command.c
@@ -620,6 +620,26 @@ bhyveParsePCIFbuf(virDomainDefPtr def,
if (virStrToLong_i(param, NULL, 10, &graphics->data.vnc.port))
goto error;
}
+
+ if (STRPREFIX(param, "w=")) {
+ param += strlen("w=");
+
+ if (video->res == NULL)
+ video->res = g_new0(virDomainVideoResolutionDef, 1);
+
+ if (virStrToLong_uip(param, NULL, 10, &video->res->x))
+ goto error;
+ }
+
+ if (STRPREFIX(param, "h=")) {
+ param += strlen("h=");
+
+ if (video->res == NULL)
+ video->res = g_new0(virDomainVideoResolutionDef, 1);
+
+ if (virStrToLong_uip(param, NULL, 10, &video->res->y))
+ goto error;
+ }
}
cleanup:
diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args
b/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args
new file mode 100644
index 0000000000..e5e2c0f2e8
--- /dev/null
+++ b/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.args
@@ -0,0 +1,10 @@
+/usr/sbin/bhyve \
+-c 1 \
+-m 214 \
+-u \
+-H \
+-P \
+-s 0:0,hostbridge \
+-l bootrom,/path/to/test.fd \
+-s 2:0,fbuf,tcp=127.0.0.1:5904,w=1920,h=1080 \
+-s 1,lpc bhyve
diff --git a/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml
b/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml
new file mode 100644
index 0000000000..f8fa0ed1ce
--- /dev/null
+++ b/tests/bhyveargv2xmldata/bhyveargv2xml-vnc-resolution.xml
@@ -0,0 +1,24 @@
+<domain type='bhyve'>
+ <name>bhyve</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type>hvm</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>destroy</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <graphics type='vnc' port='5904' autoport='no'
listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1'/>
+ </graphics>
+ <video>
+ <model type='default' heads='1'>
+ <resolution x='1920' y='1080'/>
+ </model>
+ </video>
+ </devices>
+</domain>
diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c
index 88690ba304..09d14e3fd0 100644
--- a/tests/bhyveargv2xmltest.c
+++ b/tests/bhyveargv2xmltest.c
@@ -199,6 +199,7 @@ mymain(void)
DO_TEST("vnc-vga-on");
DO_TEST("vnc-vga-off");
DO_TEST("vnc-vga-io");
+ DO_TEST("vnc-resolution");
virObjectUnref(driver.caps);
virObjectUnref(driver.xmlopt);
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args
b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args
new file mode 100644
index 0000000000..e5e2c0f2e8
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.args
@@ -0,0 +1,10 @@
+/usr/sbin/bhyve \
+-c 1 \
+-m 214 \
+-u \
+-H \
+-P \
+-s 0:0,hostbridge \
+-l bootrom,/path/to/test.fd \
+-s 2:0,fbuf,tcp=127.0.0.1:5904,w=1920,h=1080 \
+-s 1,lpc bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs
b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs
new file mode 100644
index 0000000000..421376db9e
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.ldargs
@@ -0,0 +1 @@
+dummy
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml
b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml
new file mode 100644
index 0000000000..637a121fb7
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-vnc-resolution.xml
@@ -0,0 +1,20 @@
+<domain type='bhyve'>
+ <name>bhyve</name>
+ <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+ <memory>219136</memory>
+ <vcpu>1</vcpu>
+ <os>
+ <type>hvm</type>
+ <loader readonly="yes"
type="pflash">/path/to/test.fd</loader>
+ </os>
+ <devices>
+ <video>
+ <model type='gop' heads='1' primary='yes'>
+ <resolution x="1920" y="1080"/>
+ </model>
+ </video>
+ <graphics type='vnc' port='5904'>
+ <listen type='address' address='127.0.0.1'/>
+ </graphics>
+ </devices>
+</domain>
diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
index 9e7eb218b8..b948f740bd 100644
--- a/tests/bhyvexml2argvtest.c
+++ b/tests/bhyvexml2argvtest.c
@@ -206,6 +206,7 @@ mymain(void)
DO_TEST("vnc-vgaconf-off");
DO_TEST("vnc-vgaconf-io");
DO_TEST("vnc-autoport");
+ DO_TEST("vnc-resolution");
DO_TEST("cputopology");
DO_TEST_FAILURE("cputopology-nvcpu-mismatch");
DO_TEST("commandline");
diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml
b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml
new file mode 100644
index 0000000000..958da4f82c
--- /dev/null
+++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-vnc-resolution.xml
@@ -0,0 +1,28 @@
+<domain type='bhyve'>
+ <name>bhyve</name>
+ <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='x86_64'>hvm</type>
+ <loader readonly='yes'
type='pflash'>/path/to/test.fd</loader>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <controller type='pci' index='0' model='pci-root'/>
+ <graphics type='vnc' port='5904' autoport='no'
listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1'/>
+ </graphics>
+ <video>
+ <model type='gop' heads='1' primary='yes'>
+ <resolution x='1920' y='1080'/>
+ </model>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x0'/>
+ </video>
+ </devices>
+</domain>
diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c
index a0c20a14c1..f6e4d44b8a 100644
--- a/tests/bhyvexml2xmltest.c
+++ b/tests/bhyvexml2xmltest.c
@@ -108,6 +108,7 @@ mymain(void)
DO_TEST_DIFFERENT("vnc-vgaconf-off");
DO_TEST_DIFFERENT("vnc-vgaconf-io");
DO_TEST_DIFFERENT("vnc-autoport");
+ DO_TEST_DIFFERENT("vnc-resolution");
DO_TEST_DIFFERENT("commandline");
DO_TEST_DIFFERENT("msrs");
--
2.19.2