<div dir="ltr"><div>Hi!</div><div> Is this going to be merged? Do I need to do something else?</div><div><br></div><div>Thanks!<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 24, 2020 at 5:08 PM Jonathon Jongsma <<a href="mailto:jjongsma@redhat.com">jjongsma@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, 2020-07-22 at 14:56 -0300, Nicolas Brignone wrote:<br>
> Existing virDomainDefPostParseGraphics function seems to be the right<br>
> place to put this validations.<br>
> <br>
> After moving this validation, one less argument is needed in<br>
> virDomainGraphicsListenDefParseXML, so removing the "graphics"<br>
> argument<br>
> from the function signature.<br>
> <br>
> Signed-off-by: Nicolas Brignone <<a href="mailto:nmbrignone@gmail.com" target="_blank">nmbrignone@gmail.com</a>><br>
> ---<br>
> src/conf/domain_conf.c | 66 +++++++++++++++++++++++-----------------<br>
> --<br>
> 1 file changed, 36 insertions(+), 30 deletions(-)<br>
> <br>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c<br>
> index 8d328819..3228f12a 100644<br>
> --- a/src/conf/domain_conf.c<br>
> +++ b/src/conf/domain_conf.c<br>
> @@ -4804,13 +4804,15 @@ virDomainDefPostParseTimer(virDomainDefPtr<br>
> def)<br>
> }<br>
> <br>
> <br>
> -static void<br>
> +static int<br>
> virDomainDefPostParseGraphics(virDomainDef *def)<br>
> {<br>
> size_t i;<br>
> <br>
> for (i = 0; i < def->ngraphics; i++) {<br>
> + size_t j;<br>
> virDomainGraphicsDefPtr graphics = def->graphics[i];<br>
> + const char *graphicsType =<br>
> virDomainGraphicsTypeToString(graphics->type);<br>
> <br>
> /* If spice graphics is configured without ports and with<br>
> autoport='no'<br>
> * then we start qemu with Spice to not listen<br>
> anywhere. Let's convert<br>
> @@ -4826,8 +4828,38 @@ virDomainDefPostParseGraphics(virDomainDef<br>
> *def)<br>
> VIR_FREE(glisten->address);<br>
> glisten->type =<br>
> VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE;<br>
> }<br>
> +<br>
> + }<br>
> +<br>
> + for (j = 0; j < graphics->nListens; j++) {<br>
> + virDomainGraphicsListenDefPtr glisten =<br>
> virDomainGraphicsGetListen(graphics, j);<br>
> + switch (glisten->type) {<br>
> + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:<br>
> + if (graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_VNC &&<br>
> + graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {<br>
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> + _("listen type 'socket' is not<br>
> available for "<br>
> + "graphics type '%s'"),<br>
> graphicsType);<br>
> + return -1;<br>
> + }<br>
> + break;<br>
> + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:<br>
> + if (graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&<br>
> + graphics->type !=<br>
> VIR_DOMAIN_GRAPHICS_TYPE_VNC) {<br>
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> + _("listen type 'none' is not<br>
> available for "<br>
> + "graphics type '%s'"),<br>
> graphicsType);<br>
> + return -1;<br>
> + }<br>
> + break;<br>
> + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:<br>
> + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:<br>
> + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:<br>
> + break;<br>
> + }<br>
> }<br>
> }<br>
> + return 0;<br>
> }<br>
> <br>
> <br>
> @@ -5915,7 +5947,8 @@ virDomainDefPostParseCommon(virDomainDefPtr<br>
> def,<br>
> /* clean up possibly duplicated metadata entries */<br>
> virXMLNodeSanitizeNamespaces(def->metadata);<br>
> <br>
> - virDomainDefPostParseGraphics(def);<br>
> + if (virDomainDefPostParseGraphics(def) < 0)<br>
> + return -1;<br>
> <br>
> if (virDomainDefPostParseCPU(def) < 0)<br>
> return -1;<br>
> @@ -14140,13 +14173,11 @@ virDomainGraphicsAuthDefParseXML(xmlNodePtr<br>
> node,<br>
> */<br>
> static int<br>
> virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr<br>
> def,<br>
> - virDomainGraphicsDefPtr graphics,<br>
> xmlNodePtr node,<br>
> xmlNodePtr parent,<br>
> unsigned int flags)<br>
> {<br>
> int ret = -1;<br>
> - const char *graphicsType =<br>
> virDomainGraphicsTypeToString(graphics->type);<br>
> int tmp, typeVal;<br>
> g_autofree char *type = virXMLPropString(node, "type");<br>
> g_autofree char *address = virXMLPropString(node, "address");<br>
> @@ -14175,31 +14206,6 @@<br>
> virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,<br>
> }<br>
> def->type = typeVal;<br>
> <br>
> - switch (def->type) {<br>
> - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:<br>
> - if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&<br>
> - graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {<br>
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> - _("listen type 'socket' is not available<br>
> for "<br>
> - "graphics type '%s'"), graphicsType);<br>
> - goto error;<br>
> - }<br>
> - break;<br>
> - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:<br>
> - if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&<br>
> - graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {<br>
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> - _("listen type 'none' is not available<br>
> for "<br>
> - "graphics type '%s'"), graphicsType);<br>
> - goto error;<br>
> - }<br>
> - break;<br>
> - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:<br>
> - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:<br>
> - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:<br>
> - break;<br>
> - }<br>
> -<br>
> if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) {<br>
> if (address && addressCompat && STRNEQ(address,<br>
> addressCompat)) {<br>
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,<br>
> @@ -14309,7 +14315,7 @@<br>
> virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def,<br>
> goto cleanup;<br>
> <br>
> for (i = 0; i < nListens; i++) {<br>
> - if (virDomainGraphicsListenDefParseXML(&def->listens[i], <br>
> def,<br>
> + if (virDomainGraphicsListenDefParseXML(&def->listens[i],<br>
> listenNodes[i],<br>
> i == 0 ? node :<br>
> NULL,<br>
> flags) < 0)<br>
<br>
<br>
Reviewed-by: Jonathon Jongsma <<a href="mailto:jjongsma@redhat.com" target="_blank">jjongsma@redhat.com</a>><br>
<br>
It looks like there are still some additional validation checks in this<br>
function that could be also moved in subsequent patches if you're<br>
motivated.<br>
<br>
</blockquote></div>