Add the virDomainDeviceAddress information to the sound, video and watchdog devices. This means all of them gain the new XML element <address .... /> This brings them upto par with disk/net/hostdev devices which already have address info * src/conf/domain_conf.h: Add virDomainDeviceAddress to sound, video & watchdog device struts. * src/conf/domain_conf.c: Hook up parsing/formatting for virDomainDeviceAddress in sound, video & watchdog devices * docs/schemas/domain.rng: Associate device address info with sound, video & watchdog --- docs/schemas/domain.rng | 9 +++++++ src/conf/domain_conf.c | 54 +++++++++++++++++++++++++++++++++++++++------- src/conf/domain_conf.h | 3 ++ 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index f426587..dd729c0 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -907,6 +907,9 @@ </optional> </element> </optional> + <optional> + <ref name="address"/> + </optional> </element> </define> <!-- @@ -1043,6 +1046,9 @@ <value>ac97</value> </choice> </attribute> + <optional> + <ref name="address"/> + </optional> </element> </define> <define name="watchdog"> @@ -1064,6 +1070,9 @@ </choice> </attribute> </optional> + <optional> + <ref name="address"/> + </optional> </element> </define> <define name="parallel"> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d7b1aa1..27d0613 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -465,6 +465,8 @@ void virDomainSoundDefFree(virDomainSoundDefPtr def) if (!def) return; + virDomainDeviceInfoClear(&def->info); + VIR_FREE(def); } @@ -473,6 +475,8 @@ void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def) if (!def) return; + virDomainDeviceInfoClear(&def->info); + VIR_FREE(def); } @@ -481,6 +485,8 @@ void virDomainVideoDefFree(virDomainVideoDefPtr def) if (!def) return; + virDomainDeviceInfoClear(&def->info); + VIR_FREE(def->accel); VIR_FREE(def); } @@ -2259,8 +2265,8 @@ error: static virDomainSoundDefPtr virDomainSoundDefParseXML(virConnectPtr conn, const xmlNodePtr node, - int flags ATTRIBUTE_UNUSED) { - + int flags) +{ char *model; virDomainSoundDefPtr def; @@ -2276,6 +2282,9 @@ virDomainSoundDefParseXML(virConnectPtr conn, goto error; } + if (virDomainDeviceInfoParseXML(conn, node, &def->info, flags) < 0) + goto error; + cleanup: VIR_FREE(model); @@ -2291,7 +2300,8 @@ error: static virDomainWatchdogDefPtr virDomainWatchdogDefParseXML(virConnectPtr conn, const xmlNodePtr node, - int flags ATTRIBUTE_UNUSED) { + int flags) +{ char *model = NULL; char *action = NULL; @@ -2327,6 +2337,9 @@ virDomainWatchdogDefParseXML(virConnectPtr conn, } } + if (virDomainDeviceInfoParseXML(conn, node, &def->info, flags) < 0) + goto error; + cleanup: VIR_FREE (action); VIR_FREE (model); @@ -2439,7 +2452,7 @@ static virDomainVideoDefPtr virDomainVideoDefParseXML(virConnectPtr conn, const xmlNodePtr node, virDomainDefPtr dom, - int flags ATTRIBUTE_UNUSED) { + int flags) { virDomainVideoDefPtr def; xmlNodePtr cur; char *type = NULL; @@ -2499,6 +2512,9 @@ virDomainVideoDefParseXML(virConnectPtr conn, def->heads = 1; } + if (virDomainDeviceInfoParseXML(conn, node, &def->info, flags) < 0) + goto error; + VIR_FREE(type); VIR_FREE(vram); VIR_FREE(heads); @@ -2927,8 +2943,7 @@ virDomainDeviceDefPtr virDomainDeviceDefParse(virConnectPtr conn, goto error; } else if (xmlStrEqual(node->name, BAD_CAST "watchdog")) { dev->type = VIR_DOMAIN_DEVICE_WATCHDOG; - if (!(dev->data.watchdog = virDomainWatchdogDefParseXML(conn, node, - flags))) + if (!(dev->data.watchdog = virDomainWatchdogDefParseXML(conn, node, flags))) goto error; } else if (xmlStrEqual(node->name, BAD_CAST "video")) { dev->type = VIR_DOMAIN_DEVICE_VIDEO; @@ -3637,7 +3652,7 @@ static virDomainDefPtr virDomainDefParseXML(virConnectPtr conn, } if (n > 0) { virDomainWatchdogDefPtr watchdog = - virDomainWatchdogDefParseXML (conn, nodes[0], flags); + virDomainWatchdogDefParseXML(conn, nodes[0], flags); if (!watchdog) goto error; @@ -4550,9 +4565,18 @@ virDomainSoundDefFormat(virConnectPtr conn, return -1; } - virBufferVSprintf(buf, " <sound model='%s'/>\n", + virBufferVSprintf(buf, " <sound model='%s'", model); + if (virDomainDeviceInfoIsSet(&def->info)) { + virBufferAddLit(buf, ">\n"); + if (virDomainDeviceInfoFormat(buf, &def->info) < 0) + return -1; + virBufferAddLit(buf, " </sound>\n"); + } else { + virBufferAddLit(buf, "/>\n"); + } + return 0; } @@ -4577,9 +4601,18 @@ virDomainWatchdogDefFormat(virConnectPtr conn, return -1; } - virBufferVSprintf(buf, " <watchdog model='%s' action='%s'/>\n", + virBufferVSprintf(buf, " <watchdog model='%s' action='%s'", model, action); + if (virDomainDeviceInfoIsSet(&def->info)) { + virBufferAddLit(buf, ">\n"); + if (virDomainDeviceInfoFormat(buf, &def->info) < 0) + return -1; + virBufferAddLit(buf, " </watchdog>\n"); + } else { + virBufferAddLit(buf, "/>\n"); + } + return 0; } @@ -4624,6 +4657,9 @@ virDomainVideoDefFormat(virConnectPtr conn, virBufferAddLit(buf, "/>\n"); } + if (virDomainDeviceInfoFormat(buf, &def->info) < 0) + return -1; + virBufferAddLit(buf, " </video>\n"); return 0; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index d4de042..0f68864 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -335,6 +335,7 @@ typedef struct _virDomainSoundDef virDomainSoundDef; typedef virDomainSoundDef *virDomainSoundDefPtr; struct _virDomainSoundDef { int model; + virDomainDeviceInfo info; }; enum virDomainWatchdogModel { @@ -359,6 +360,7 @@ typedef virDomainWatchdogDef *virDomainWatchdogDefPtr; struct _virDomainWatchdogDef { int model; int action; + virDomainDeviceInfo info; }; @@ -388,6 +390,7 @@ struct _virDomainVideoDef { unsigned int vram; unsigned int heads; virDomainVideoAccelDefPtr accel; + virDomainDeviceInfo info; }; /* 3 possible graphics console modes */ -- 1.6.5.2 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list