mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Add device info to serial, parallel, channel, input & fs devices
Although the serial, parallel, chanel, input & fs devices do not have PCI address info, they can all have device aliases. Thus it neccessary to associate the virDomainDeviceInfo data with them all. * src/conf/domain_conf.c, src/conf/domain_conf.h: Add hooks for parsing / formatting device info for serial, parallel, channel input and fs devices. * docs/schemas/domain.rng: Associate device info with character devices, input & fs device
This commit is contained in:
parent
5da9c98067
commit
4ac290cc33
@ -600,6 +600,9 @@
|
|||||||
</interleave>
|
</interleave>
|
||||||
</group>
|
</group>
|
||||||
</choice>
|
</choice>
|
||||||
|
<optional>
|
||||||
|
<ref name="address"/>
|
||||||
|
</optional>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
<define name="filesystemtgt">
|
<define name="filesystemtgt">
|
||||||
@ -990,6 +993,9 @@
|
|||||||
</optional>
|
</optional>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<ref name="address"/>
|
||||||
|
</optional>
|
||||||
</interleave>
|
</interleave>
|
||||||
</define>
|
</define>
|
||||||
<define name="qemucdevSrcType">
|
<define name="qemucdevSrcType">
|
||||||
@ -1119,6 +1125,9 @@
|
|||||||
<interleave>
|
<interleave>
|
||||||
<ref name="qemucdevSrcDef"/>
|
<ref name="qemucdevSrcDef"/>
|
||||||
<ref name="guestfwdTarget"/>
|
<ref name="guestfwdTarget"/>
|
||||||
|
<optional>
|
||||||
|
<ref name="address"/>
|
||||||
|
</optional>
|
||||||
</interleave>
|
</interleave>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
@ -1139,6 +1148,9 @@
|
|||||||
</choice>
|
</choice>
|
||||||
</attribute>
|
</attribute>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<ref name="address"/>
|
||||||
|
</optional>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
<define name="hostdev">
|
<define name="hostdev">
|
||||||
|
@ -355,6 +355,7 @@ void virDomainInputDefFree(virDomainInputDefPtr def)
|
|||||||
if (!def)
|
if (!def)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
virDomainDeviceInfoClear(&def->info);
|
||||||
VIR_FREE(def);
|
VIR_FREE(def);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,6 +392,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
|
|||||||
|
|
||||||
VIR_FREE(def->src);
|
VIR_FREE(def->src);
|
||||||
VIR_FREE(def->dst);
|
VIR_FREE(def->dst);
|
||||||
|
virDomainDeviceInfoClear(&def->info);
|
||||||
|
|
||||||
VIR_FREE(def);
|
VIR_FREE(def);
|
||||||
}
|
}
|
||||||
@ -474,6 +476,8 @@ void virDomainChrDefFree(virDomainChrDefPtr def)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virDomainDeviceInfoClear(&def->info);
|
||||||
|
|
||||||
VIR_FREE(def);
|
VIR_FREE(def);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -845,11 +849,23 @@ static void virDomainDefClearDeviceInfo(virDomainDefPtr def, int alias, int pcia
|
|||||||
for (i = 0; i < def->nhostdevs ; i++)
|
for (i = 0; i < def->nhostdevs ; i++)
|
||||||
virDomainDeviceInfoClearField(&def->hostdevs[i]->info, alias, pciaddr);
|
virDomainDeviceInfoClearField(&def->hostdevs[i]->info, alias, pciaddr);
|
||||||
for (i = 0; i < def->nvideos ; i++)
|
for (i = 0; i < def->nvideos ; i++)
|
||||||
virDomainDeviceInfoClearField(&def->videos[i]->info, alias, pciaddr);
|
virDomainDeviceInfoClearField(&def->videos[i]->info, alias, pciaddr);
|
||||||
for (i = 0; i < def->ncontrollers ; i++)
|
for (i = 0; i < def->ncontrollers ; i++)
|
||||||
virDomainDeviceInfoClearField(&def->controllers[i]->info, alias, pciaddr);
|
virDomainDeviceInfoClearField(&def->controllers[i]->info, alias, pciaddr);
|
||||||
|
for (i = 0; i < def->nserials ; i++)
|
||||||
|
virDomainDeviceInfoClearField(&def->serials[i]->info, alias, pciaddr);
|
||||||
|
for (i = 0; i < def->nparallels ; i++)
|
||||||
|
virDomainDeviceInfoClearField(&def->parallels[i]->info, alias, pciaddr);
|
||||||
|
for (i = 0; i < def->nchannels ; i++)
|
||||||
|
virDomainDeviceInfoClearField(&def->channels[i]->info, alias, pciaddr);
|
||||||
|
for (i = 0; i < def->ninputs ; i++)
|
||||||
|
virDomainDeviceInfoClearField(&def->inputs[i]->info, alias, pciaddr);
|
||||||
|
for (i = 0; i < def->nfss ; i++)
|
||||||
|
virDomainDeviceInfoClearField(&def->fss[i]->info, alias, pciaddr);
|
||||||
if (def->watchdog)
|
if (def->watchdog)
|
||||||
virDomainDeviceInfoClearField(&def->watchdog->info, alias, pciaddr);
|
virDomainDeviceInfoClearField(&def->watchdog->info, alias, pciaddr);
|
||||||
|
if (def->console)
|
||||||
|
virDomainDeviceInfoClearField(&def->console->info, alias, pciaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1488,7 +1504,7 @@ cleanup:
|
|||||||
static virDomainFSDefPtr
|
static virDomainFSDefPtr
|
||||||
virDomainFSDefParseXML(virConnectPtr conn,
|
virDomainFSDefParseXML(virConnectPtr conn,
|
||||||
xmlNodePtr node,
|
xmlNodePtr node,
|
||||||
int flags ATTRIBUTE_UNUSED) {
|
int flags) {
|
||||||
virDomainFSDefPtr def;
|
virDomainFSDefPtr def;
|
||||||
xmlNodePtr cur;
|
xmlNodePtr cur;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
@ -1552,6 +1568,9 @@ virDomainFSDefParseXML(virConnectPtr conn,
|
|||||||
def->dst = target;
|
def->dst = target;
|
||||||
target = NULL;
|
target = NULL;
|
||||||
|
|
||||||
|
if (virDomainDeviceInfoParseXML(conn, node, &def->info, flags) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(type);
|
VIR_FREE(type);
|
||||||
VIR_FREE(target);
|
VIR_FREE(target);
|
||||||
@ -1893,7 +1912,7 @@ error:
|
|||||||
static virDomainChrDefPtr
|
static virDomainChrDefPtr
|
||||||
virDomainChrDefParseXML(virConnectPtr conn,
|
virDomainChrDefParseXML(virConnectPtr conn,
|
||||||
xmlNodePtr node,
|
xmlNodePtr node,
|
||||||
int flags ATTRIBUTE_UNUSED) {
|
int flags) {
|
||||||
xmlNodePtr cur;
|
xmlNodePtr cur;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
char *bindHost = NULL;
|
char *bindHost = NULL;
|
||||||
@ -2187,6 +2206,9 @@ virDomainChrDefParseXML(virConnectPtr conn,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (virDomainDeviceInfoParseXML(conn, node, &def->info, flags) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(mode);
|
VIR_FREE(mode);
|
||||||
VIR_FREE(protocol);
|
VIR_FREE(protocol);
|
||||||
@ -2213,7 +2235,7 @@ static virDomainInputDefPtr
|
|||||||
virDomainInputDefParseXML(virConnectPtr conn,
|
virDomainInputDefParseXML(virConnectPtr conn,
|
||||||
const char *ostype,
|
const char *ostype,
|
||||||
xmlNodePtr node,
|
xmlNodePtr node,
|
||||||
int flags ATTRIBUTE_UNUSED) {
|
int flags) {
|
||||||
virDomainInputDefPtr def;
|
virDomainInputDefPtr def;
|
||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
char *bus = NULL;
|
char *bus = NULL;
|
||||||
@ -2283,6 +2305,9 @@ virDomainInputDefParseXML(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (virDomainDeviceInfoParseXML(conn, node, &def->info, flags) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(type);
|
VIR_FREE(type);
|
||||||
VIR_FREE(bus);
|
VIR_FREE(bus);
|
||||||
@ -4650,7 +4675,8 @@ virDomainControllerDefFormat(virConnectPtr conn,
|
|||||||
static int
|
static int
|
||||||
virDomainFSDefFormat(virConnectPtr conn,
|
virDomainFSDefFormat(virConnectPtr conn,
|
||||||
virBufferPtr buf,
|
virBufferPtr buf,
|
||||||
virDomainFSDefPtr def)
|
virDomainFSDefPtr def,
|
||||||
|
int flags)
|
||||||
{
|
{
|
||||||
const char *type = virDomainFSTypeToString(def->type);
|
const char *type = virDomainFSTypeToString(def->type);
|
||||||
|
|
||||||
@ -4693,6 +4719,9 @@ virDomainFSDefFormat(virConnectPtr conn,
|
|||||||
if (def->readonly)
|
if (def->readonly)
|
||||||
virBufferAddLit(buf, " <readonly/>\n");
|
virBufferAddLit(buf, " <readonly/>\n");
|
||||||
|
|
||||||
|
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
virBufferAddLit(buf, " </filesystem>\n");
|
virBufferAddLit(buf, " </filesystem>\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -4934,6 +4963,9 @@ virDomainChrDefFormat(virConnectPtr conn,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
virBufferVSprintf(buf, " </%s>\n",
|
virBufferVSprintf(buf, " </%s>\n",
|
||||||
elementName);
|
elementName);
|
||||||
|
|
||||||
@ -5062,7 +5094,8 @@ virDomainVideoDefFormat(virConnectPtr conn,
|
|||||||
static int
|
static int
|
||||||
virDomainInputDefFormat(virConnectPtr conn,
|
virDomainInputDefFormat(virConnectPtr conn,
|
||||||
virBufferPtr buf,
|
virBufferPtr buf,
|
||||||
virDomainInputDefPtr def)
|
virDomainInputDefPtr def,
|
||||||
|
int flags)
|
||||||
{
|
{
|
||||||
const char *type = virDomainInputTypeToString(def->type);
|
const char *type = virDomainInputTypeToString(def->type);
|
||||||
const char *bus = virDomainInputBusTypeToString(def->bus);
|
const char *bus = virDomainInputBusTypeToString(def->bus);
|
||||||
@ -5078,9 +5111,18 @@ virDomainInputDefFormat(virConnectPtr conn,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
virBufferVSprintf(buf, " <input type='%s' bus='%s'/>\n",
|
virBufferVSprintf(buf, " <input type='%s' bus='%s'",
|
||||||
type, bus);
|
type, bus);
|
||||||
|
|
||||||
|
if (virDomainDeviceInfoIsSet(&def->info)) {
|
||||||
|
virBufferAddLit(buf, ">\n");
|
||||||
|
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
|
||||||
|
return -1;
|
||||||
|
virBufferAddLit(buf, " </input>\n");
|
||||||
|
} else {
|
||||||
|
virBufferAddLit(buf, "/>\n");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5403,7 +5445,7 @@ char *virDomainDefFormat(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
for (n = 0 ; n < def->nfss ; n++)
|
for (n = 0 ; n < def->nfss ; n++)
|
||||||
if (virDomainFSDefFormat(conn, &buf, def->fss[n]) < 0)
|
if (virDomainFSDefFormat(conn, &buf, def->fss[n], flags) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
|
||||||
@ -5439,7 +5481,7 @@ char *virDomainDefFormat(virConnectPtr conn,
|
|||||||
|
|
||||||
for (n = 0 ; n < def->ninputs ; n++)
|
for (n = 0 ; n < def->ninputs ; n++)
|
||||||
if (def->inputs[n]->bus == VIR_DOMAIN_INPUT_BUS_USB &&
|
if (def->inputs[n]->bus == VIR_DOMAIN_INPUT_BUS_USB &&
|
||||||
virDomainInputDefFormat(conn, &buf, def->inputs[n]) < 0)
|
virDomainInputDefFormat(conn, &buf, def->inputs[n], flags) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (def->ngraphics > 0) {
|
if (def->ngraphics > 0) {
|
||||||
@ -5447,10 +5489,11 @@ char *virDomainDefFormat(virConnectPtr conn,
|
|||||||
virDomainInputDef autoInput = {
|
virDomainInputDef autoInput = {
|
||||||
VIR_DOMAIN_INPUT_TYPE_MOUSE,
|
VIR_DOMAIN_INPUT_TYPE_MOUSE,
|
||||||
STREQ(def->os.type, "hvm") ?
|
STREQ(def->os.type, "hvm") ?
|
||||||
VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN
|
VIR_DOMAIN_INPUT_BUS_PS2 : VIR_DOMAIN_INPUT_BUS_XEN,
|
||||||
|
{ .alias = NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
if (virDomainInputDefFormat(conn, &buf, &autoInput) < 0)
|
if (virDomainInputDefFormat(conn, &buf, &autoInput, flags) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
for (n = 0 ; n < def->ngraphics ; n++)
|
for (n = 0 ; n < def->ngraphics ; n++)
|
||||||
|
@ -197,6 +197,7 @@ struct _virDomainFSDef {
|
|||||||
char *src;
|
char *src;
|
||||||
char *dst;
|
char *dst;
|
||||||
unsigned int readonly : 1;
|
unsigned int readonly : 1;
|
||||||
|
virDomainDeviceInfo info;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -316,6 +317,8 @@ struct _virDomainChrDef {
|
|||||||
int listen;
|
int listen;
|
||||||
} nix;
|
} nix;
|
||||||
} data;
|
} data;
|
||||||
|
|
||||||
|
virDomainDeviceInfo info;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum virDomainInputType {
|
enum virDomainInputType {
|
||||||
@ -338,6 +341,7 @@ typedef virDomainInputDef *virDomainInputDefPtr;
|
|||||||
struct _virDomainInputDef {
|
struct _virDomainInputDef {
|
||||||
int type;
|
int type;
|
||||||
int bus;
|
int bus;
|
||||||
|
virDomainDeviceInfo info;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum virDomainSoundModel {
|
enum virDomainSoundModel {
|
||||||
|
Loading…
Reference in New Issue
Block a user