forked from QubesOS/qubes-core-libvirt
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path0009-libxl-add-support-for-qubes-graphic-device.patch
309 lines (289 loc) · 11.3 KB
/
0009-libxl-add-support-for-qubes-graphic-device.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
From 15c4ef7e4e85583e6a654be398951f1f04a8c35e Mon Sep 17 00:00:00 2001
From: HW42 <[email protected]>
Date: Sat, 22 Apr 2017 08:57:58 +0200
Subject: [PATCH] libxl: add support for qubes graphic device
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Organization: Invisible Things Lab
Cc: Marek Marczykowski-Górecki <[email protected]>
Signed-off-by: Marek Marczykowski-Górecki <[email protected]>
---
docs/schemas/domaincommon.rng | 13 +++++++++++
src/conf/domain_conf.c | 43 +++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 5 ++++
src/libxl/libxl_conf.c | 9 ++++++++
src/qemu/qemu_command.c | 2 ++
src/qemu/qemu_driver.c | 2 ++
src/qemu/qemu_hotplug.c | 1 +
src/qemu/qemu_process.c | 4 ++++
src/qemu/qemu_validate.c | 1 +
src/vmx/vmx.c | 1 +
10 files changed, 81 insertions(+)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index f7cc3e2ac9..5945a9e32c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3594,6 +3594,19 @@
</optional>
<ref name="listenElements"/>
</group>
+ <group>
+ <attribute name="type">
+ <value>qubes</value>
+ </attribute>
+ <attribute name="domain">
+ <text/>
+ </attribute>
+ <optional>
+ <attribute name="log_level">
+ <data type="integer"/>
+ </attribute>
+ </optional>
+ </group>
<group>
<attribute name="type">
<value>spice</value>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 111767b552..1623d6cb78 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -833,6 +833,7 @@ VIR_ENUM_IMPL(virDomainGraphics,
"vnc",
"rdp",
"desktop",
+ "qubes",
"spice",
"egl-headless",
);
@@ -1808,6 +1809,10 @@ void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def)
VIR_FREE(def->data.desktop.display);
break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
+ VIR_FREE(def->data.qubes_gui.domain);
+ break;
+
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
VIR_FREE(def->data.spice.rendernode);
VIR_FREE(def->data.spice.keymap);
@@ -14603,6 +14608,30 @@ virDomainGraphicsDefParseXMLDesktop(virDomainGraphicsDefPtr def,
return 0;
}
+static int virDomainGraphicsDefParseXMLQubes(virDomainGraphicsDefPtr def,
+ xmlNodePtr node)
+{
+ int ret = -1;
+ char *log_level = virXMLPropString(node, "log_level");
+
+ if (log_level) {
+ if (virStrToLong_i(log_level, NULL, 10,
+ &def->data.qubes_gui.log_level) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse Qubes GUI log_level %s"), log_level);
+ goto error;
+ }
+ } else {
+ def->data.qubes_gui.log_level = 0;
+ }
+
+ def->data.qubes_gui.domain = virXMLPropString(node, "domain");
+
+ ret = 0;
+ error:
+ VIR_FREE(log_level);
+ return ret;
+}
static int
virDomainGraphicsDefParseXMLSpice(virDomainGraphicsDefPtr def,
@@ -14976,6 +15005,10 @@ virDomainGraphicsDefParseXML(virDomainXMLOptionPtr xmlopt,
if (virDomainGraphicsDefParseXMLDesktop(def, node) < 0)
goto error;
break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
+ if (virDomainGraphicsDefParseXMLQubes(def, node) < 0)
+ goto error;
+ break;
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
if (virDomainGraphicsDefParseXMLSpice(def, node, ctxt, flags) < 0)
goto error;
@@ -28006,6 +28039,14 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
+ if (def->data.qubes_gui.domain)
+ virBufferEscapeString(buf, " domain='%s'",
+ def->data.qubes_gui.domain);
+ virBufferAsprintf(buf, " log_level='%d'",
+ def->data.qubes_gui.log_level);
+ break;
+
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
if (!glisten) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -32525,6 +32566,7 @@ virDomainGraphicsDefHasOpenGL(const virDomainDef *def)
switch (graphics->type) {
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
continue;
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
@@ -32577,6 +32619,7 @@ virDomainGraphicsGetRenderNode(const virDomainGraphicsDef *graphics)
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 672dded2a5..da078c51dc 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1514,6 +1514,7 @@ typedef enum {
VIR_DOMAIN_GRAPHICS_TYPE_VNC,
VIR_DOMAIN_GRAPHICS_TYPE_RDP,
VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
+ VIR_DOMAIN_GRAPHICS_TYPE_QUBES,
VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS,
@@ -1694,6 +1695,10 @@ struct _virDomainGraphicsDef {
virTristateBool gl;
char *rendernode;
} spice;
+ struct {
+ char *domain;
+ int log_level;
+ } qubes_gui;
struct {
char *rendernode;
} egl_headless;
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 007ceb902a..4907790eed 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -1558,6 +1558,9 @@ libxlMakeVfb(virPortAllocatorRangePtr graphicsports,
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
+ libxl_defbool_set(&x_vfb->vnc.enable, false);
+ libxl_defbool_set(&x_vfb->sdl.enable, false);
}
return 0;
@@ -1636,6 +1639,12 @@ libxlMakeBuildInfoVfb(virPortAllocatorRangePtr graphicsports,
unsigned short port;
virDomainGraphicsListenDefPtr glisten = NULL;
+ if (l_vfb->type == VIR_DOMAIN_GRAPHICS_TYPE_QUBES) {
+ libxl_defbool_set(&b_info->u.hvm.qubes_gui.enable, true);
+ b_info->u.hvm.qubes_gui.domname = g_strdup(l_vfb->data.qubes_gui.domain);
+ b_info->u.hvm.qubes_gui.log_level = l_vfb->data.qubes_gui.log_level;
+ }
+
if (l_vfb->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE)
continue;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 419eca5675..8267066272 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7633,6 +7633,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
return -1;
break;
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
return -1;
@@ -9419,6 +9420,7 @@ qemuBuildCommandLineValidate(virQEMUDriverPtr driver,
break;
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
break;
}
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index dd9ae30bb5..56ad7d3c50 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -18801,6 +18801,7 @@ qemuDomainOpenGraphics(virDomainPtr dom,
break;
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -18870,6 +18871,7 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom,
break;
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index a5d57702eb..4c7217a7bf 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -4215,6 +4215,7 @@ qemuDomainChangeGraphics(virQEMUDriverPtr driver,
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
virReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 999e576e5b..59a0032c6e 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4654,6 +4654,7 @@ qemuProcessGraphicsReservePorts(virDomainGraphicsDefPtr graphics,
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
@@ -4693,6 +4694,7 @@ qemuProcessGraphicsAllocatePorts(virQEMUDriverPtr driver,
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
@@ -4849,6 +4851,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver,
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
@@ -5153,6 +5156,7 @@ qemuProcessStartValidateGraphics(virDomainObjPtr vm)
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 584d1375b8..f2ca54fd9f 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -3322,6 +3322,7 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics,
break;
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unsupported graphics type '%s'"),
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index f2248cef53..a749bb5560 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -3290,6 +3290,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
+ case VIR_DOMAIN_GRAPHICS_TYPE_QUBES:
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
--
2.25.4