Introduce virDomainChrSourceDefNew for virDomainChrDefPtr

Change the virDomainChrDef to use a pointer to 'source' and allocate
that pointer during virDomainChrDefNew.

This has tremendous "fallout" in the rest of the code which mainly
has to change source.$field to source->$field.

Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
John Ferlan 2016-10-21 07:45:54 -04:00
parent 931864a3ea
commit 77a12987a4
31 changed files with 344 additions and 326 deletions

View File

@ -130,7 +130,7 @@ bhyveBuildConsoleArgStr(const virDomainDef *def, virCommandPtr cmd)
chr = def->serials[0]; chr = def->serials[0];
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_NMDM) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_NMDM) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("only nmdm console types are supported")); _("only nmdm console types are supported"));
return -1; return -1;
@ -146,7 +146,7 @@ bhyveBuildConsoleArgStr(const virDomainDef *def, virCommandPtr cmd)
virCommandAddArgList(cmd, "-s", "1,lpc", NULL); virCommandAddArgList(cmd, "-s", "1,lpc", NULL);
virCommandAddArg(cmd, "-l"); virCommandAddArg(cmd, "-l");
virCommandAddArgFormat(cmd, "com%d,%s", virCommandAddArgFormat(cmd, "com%d,%s",
chr->target.port + 1, chr->source.data.file.path); chr->target.port + 1, chr->source->data.file.path);
return 0; return 0;
} }
@ -505,14 +505,14 @@ virBhyveProcessBuildGrubbhyveCmd(virDomainDefPtr def,
chr = def->serials[0]; chr = def->serials[0];
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_NMDM) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_NMDM) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("only nmdm console types are supported")); _("only nmdm console types are supported"));
return NULL; return NULL;
} }
virCommandAddArg(cmd, "--cons-dev"); virCommandAddArg(cmd, "--cons-dev");
virCommandAddArg(cmd, chr->source.data.file.path); virCommandAddArg(cmd, chr->source->data.file.path);
} }
/* VM name */ /* VM name */

View File

@ -1080,7 +1080,7 @@ bhyveDomainOpenConsole(virDomainPtr dom,
chr = vm->def->serials[0]; chr = vm->def->serials[0];
if (virFDStreamOpenPTY(st, chr->source.data.nmdm.slave, if (virFDStreamOpenPTY(st, chr->source->data.nmdm.slave,
0, 0, O_RDWR) < 0) 0, 0, O_RDWR) < 0)
goto cleanup; goto cleanup;

View File

@ -290,9 +290,9 @@ bhyveParseBhyveLPCArg(virDomainDefPtr def,
if (!(chr = virDomainChrDefNew(NULL))) if (!(chr = virDomainChrDefNew(NULL)))
goto error; goto error;
chr->source.type = VIR_DOMAIN_CHR_TYPE_NMDM; chr->source->type = VIR_DOMAIN_CHR_TYPE_NMDM;
chr->source.data.nmdm.master = NULL; chr->source->data.nmdm.master = NULL;
chr->source.data.nmdm.slave = NULL; chr->source->data.nmdm.slave = NULL;
chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL; chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL;
if (!STRPREFIX(param, "/dev/nmdm")) { if (!STRPREFIX(param, "/dev/nmdm")) {
@ -302,12 +302,12 @@ bhyveParseBhyveLPCArg(virDomainDefPtr def,
goto error; goto error;
} }
if (VIR_STRDUP(chr->source.data.nmdm.master, param) < 0) { if (VIR_STRDUP(chr->source->data.nmdm.master, param) < 0) {
virDomainChrDefFree(chr); virDomainChrDefFree(chr);
goto error; goto error;
} }
if (VIR_STRDUP(chr->source.data.nmdm.slave, chr->source.data.file.path) if (VIR_STRDUP(chr->source->data.nmdm.slave, chr->source->data.file.path)
< 0) { < 0) {
virDomainChrDefFree(chr); virDomainChrDefFree(chr);
goto error; goto error;
@ -315,19 +315,19 @@ bhyveParseBhyveLPCArg(virDomainDefPtr def,
/* If the last character of the master is 'A', the slave will be 'B' /* If the last character of the master is 'A', the slave will be 'B'
* and vice versa */ * and vice versa */
last = strlen(chr->source.data.nmdm.master) - 1; last = strlen(chr->source->data.nmdm.master) - 1;
switch (chr->source.data.file.path[last]) { switch (chr->source->data.file.path[last]) {
case 'A': case 'A':
chr->source.data.nmdm.slave[last] = 'B'; chr->source->data.nmdm.slave[last] = 'B';
break; break;
case 'B': case 'B':
chr->source.data.nmdm.slave[last] = 'A'; chr->source->data.nmdm.slave[last] = 'A';
break; break;
default: default:
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
_("Failed to set slave for %s: last letter not " _("Failed to set slave for %s: last letter not "
"'A' or 'B'"), "'A' or 'B'"),
NULLSTR(chr->source.data.nmdm.master)); NULLSTR(chr->source->data.nmdm.master));
goto error; goto error;
} }

View File

@ -172,10 +172,10 @@ virDomainAuditChardev(virDomainObjPtr vm,
virDomainChrSourceDefPtr newsrc = NULL; virDomainChrSourceDefPtr newsrc = NULL;
if (oldDef) if (oldDef)
oldsrc = &oldDef->source; oldsrc = oldDef->source;
if (newDef) if (newDef)
newsrc = &newDef->source; newsrc = newDef->source;
virDomainAuditGenericDev(vm, "chardev", virDomainAuditGenericDev(vm, "chardev",
virDomainAuditChardevPath(oldsrc), virDomainAuditChardevPath(oldsrc),

View File

@ -2116,7 +2116,7 @@ void virDomainChrDefFree(virDomainChrDefPtr def)
break; break;
} }
virDomainChrSourceDefClear(&def->source); virDomainChrSourceDefFree(def->source);
virDomainDeviceInfoClear(&def->info); virDomainDeviceInfoClear(&def->info);
if (def->seclabels) { if (def->seclabels) {
@ -3865,8 +3865,8 @@ virDomainDefAddConsoleCompat(virDomainDefPtr def)
def->serials[0]->target.port = 0; def->serials[0]->target.port = 0;
} else { } else {
/* if the console source doesn't match */ /* if the console source doesn't match */
if (!virDomainChrSourceDefIsEqual(&def->serials[0]->source, if (!virDomainChrSourceDefIsEqual(def->serials[0]->source,
&def->consoles[0]->source)) { def->consoles[0]->source)) {
virDomainChrDefFree(def->consoles[0]); virDomainChrDefFree(def->consoles[0]);
def->consoles[0] = NULL; def->consoles[0] = NULL;
} }
@ -10316,6 +10316,19 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
goto cleanup; goto cleanup;
} }
static virDomainChrSourceDefPtr
virDomainChrSourceDefNew(void)
{
virDomainChrSourceDefPtr def = NULL;
if (VIR_ALLOC(def) < 0)
return NULL;
return def;
}
/* Create a new character device definition and set /* Create a new character device definition and set
* default port. * default port.
*/ */
@ -10329,10 +10342,15 @@ virDomainChrDefNew(virDomainXMLOptionPtr xmlopt)
def->target.port = -1; def->target.port = -1;
if (xmlopt && xmlopt->privateData.chardevNew && if (!(def->source = virDomainChrSourceDefNew()))
!(def->privateData = xmlopt->privateData.chardevNew()))
VIR_FREE(def); VIR_FREE(def);
if (xmlopt && xmlopt->privateData.chardevNew &&
!(def->privateData = xmlopt->privateData.chardevNew())) {
virDomainChrSourceDefFree(def->source);
VIR_FREE(def);
}
return def; return def;
} }
@ -10398,8 +10416,8 @@ virDomainChrDefParseXML(virDomainXMLOptionPtr xmlopt,
type = virXMLPropString(node, "type"); type = virXMLPropString(node, "type");
if (type == NULL) { if (type == NULL) {
def->source.type = VIR_DOMAIN_CHR_TYPE_PTY; def->source->type = VIR_DOMAIN_CHR_TYPE_PTY;
} else if ((def->source.type = virDomainChrTypeFromString(type)) < 0) { } else if ((def->source->type = virDomainChrTypeFromString(type)) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown type presented to host for character device: %s"), _("unknown type presented to host for character device: %s"),
type); type);
@ -10430,18 +10448,18 @@ virDomainChrDefParseXML(virDomainXMLOptionPtr xmlopt,
((def->targetType = virDomainChrDefaultTargetType(def->deviceType)) < 0)) ((def->targetType = virDomainChrDefaultTargetType(def->deviceType)) < 0))
goto error; goto error;
if (virDomainChrSourceDefParseXML(&def->source, node->children, flags, def, if (virDomainChrSourceDefParseXML(def->source, node->children, flags, def,
ctxt, vmSeclabels, nvmSeclabels) < 0) ctxt, vmSeclabels, nvmSeclabels) < 0)
goto error; goto error;
if (def->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { if (def->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
if (def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO) { if (def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("spicevmc device type only supports " _("spicevmc device type only supports "
"virtio")); "virtio"));
goto error; goto error;
} else { } else {
def->source.data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_VDAGENT; def->source->data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_VDAGENT;
} }
} }
@ -14457,7 +14475,7 @@ virDomainChrEquals(virDomainChrDefPtr src,
return src == tgt; return src == tgt;
if (src->deviceType != tgt->deviceType || if (src->deviceType != tgt->deviceType ||
!virDomainChrSourceDefIsEqual(&src->source, &tgt->source)) !virDomainChrSourceDefIsEqual(src->source, tgt->source))
return false; return false;
switch ((virDomainChrDeviceType) src->deviceType) { switch ((virDomainChrDeviceType) src->deviceType) {
@ -18492,9 +18510,9 @@ virDomainChannelDefCheckABIStability(virDomainChrDefPtr src,
NULLSTR(dst->target.name), NULLSTR(src->target.name)); NULLSTR(dst->target.name), NULLSTR(src->target.name));
return false; return false;
} }
if (src->source.type != dst->source.type && if (src->source->type != dst->source->type &&
(src->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC || (src->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC ||
dst->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) && dst->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) &&
!src->target.name) { !src->target.name) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Changing device type to/from spicevmc would" _("Changing device type to/from spicevmc would"
@ -21523,10 +21541,10 @@ virDomainChrDefFormat(virBufferPtr buf,
virBufferAdjustIndent(buf, 2); virBufferAdjustIndent(buf, 2);
tty_compat = (def->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE && tty_compat = (def->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
def->target.port == 0 && def->target.port == 0 &&
def->source.type == VIR_DOMAIN_CHR_TYPE_PTY && def->source->type == VIR_DOMAIN_CHR_TYPE_PTY &&
!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) && !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) &&
def->source.data.file.path); def->source->data.file.path);
if (virDomainChrSourceDefFormat(buf, def, &def->source, tty_compat, flags) < 0) if (virDomainChrSourceDefFormat(buf, def, def->source, tty_compat, flags) < 0)
return -1; return -1;
/* Format <target> block */ /* Format <target> block */

View File

@ -1132,7 +1132,7 @@ struct _virDomainChrDef {
virDomainChrDeviceState state; virDomainChrDeviceState state;
virDomainChrSourceDef source; virDomainChrSourceDefPtr source;
virDomainDeviceInfo info; virDomainDeviceInfo info;

View File

@ -208,8 +208,8 @@ libxlMakeDomCreateInfo(libxl_ctx *ctx,
static int static int
libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf) libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf)
{ {
virDomainChrSourceDef srcdef = def->source; virDomainChrSourceDefPtr srcdef = def->source;
const char *type = virDomainChrTypeToString(srcdef.type); const char *type = virDomainChrTypeToString(srcdef->type);
if (!type) { if (!type) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@ -217,7 +217,7 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf)
return -1; return -1;
} }
switch (srcdef.type) { switch (srcdef->type) {
case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_NULL:
case VIR_DOMAIN_CHR_TYPE_STDIO: case VIR_DOMAIN_CHR_TYPE_STDIO:
case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_VC:
@ -228,19 +228,19 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf)
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
case VIR_DOMAIN_CHR_TYPE_PIPE: case VIR_DOMAIN_CHR_TYPE_PIPE:
if (virAsprintf(buf, "%s:%s", type, srcdef.data.file.path) < 0) if (virAsprintf(buf, "%s:%s", type, srcdef->data.file.path) < 0)
return -1; return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
if (VIR_STRDUP(*buf, srcdef.data.file.path) < 0) if (VIR_STRDUP(*buf, srcdef->data.file.path) < 0)
return -1; return -1;
break; break;
case VIR_DOMAIN_CHR_TYPE_UDP: { case VIR_DOMAIN_CHR_TYPE_UDP: {
const char *connectHost = srcdef.data.udp.connectHost; const char *connectHost = srcdef->data.udp.connectHost;
const char *bindHost = srcdef.data.udp.bindHost; const char *bindHost = srcdef->data.udp.bindHost;
const char *bindService = srcdef.data.udp.bindService; const char *bindService = srcdef->data.udp.bindService;
if (connectHost == NULL) if (connectHost == NULL)
connectHost = ""; connectHost = "";
@ -251,7 +251,7 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf)
if (virAsprintf(buf, "udp:%s:%s@%s:%s", if (virAsprintf(buf, "udp:%s:%s@%s:%s",
connectHost, connectHost,
srcdef.data.udp.connectService, srcdef->data.udp.connectService,
bindHost, bindHost,
bindService) < 0) bindService) < 0)
return -1; return -1;
@ -261,24 +261,24 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf)
case VIR_DOMAIN_CHR_TYPE_TCP: { case VIR_DOMAIN_CHR_TYPE_TCP: {
const char *prefix; const char *prefix;
if (srcdef.data.tcp.protocol == VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET) if (srcdef->data.tcp.protocol == VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET)
prefix = "telnet"; prefix = "telnet";
else else
prefix = "tcp"; prefix = "tcp";
if (virAsprintf(buf, "%s:%s:%s%s", if (virAsprintf(buf, "%s:%s:%s%s",
prefix, prefix,
srcdef.data.tcp.host, srcdef->data.tcp.host,
srcdef.data.tcp.service, srcdef->data.tcp.service,
srcdef.data.tcp.listen ? ",server,nowait" : "") < 0) srcdef->data.tcp.listen ? ",server,nowait" : "") < 0)
return -1; return -1;
break; break;
} }
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
if (virAsprintf(buf, "unix:%s%s", if (virAsprintf(buf, "unix:%s%s",
srcdef.data.nix.path, srcdef->data.nix.path,
srcdef.data.nix.listen ? ",server,nowait" : "") < 0) srcdef->data.nix.listen ? ",server,nowait" : "") < 0)
return -1; return -1;
break; break;
@ -1509,15 +1509,15 @@ libxlPrepareChannel(virDomainChrDefPtr channel,
const char *domainName) const char *domainName)
{ {
if (channel->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN && if (channel->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN &&
channel->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && channel->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
!channel->source.data.nix.path) { !channel->source->data.nix.path) {
if (virAsprintf(&channel->source.data.nix.path, if (virAsprintf(&channel->source->data.nix.path,
"%s/%s-%s", channelDir, domainName, "%s/%s-%s", channelDir, domainName,
channel->target.name ? channel->target.name channel->target.name ? channel->target.name
: "unknown.sock") < 0) : "unknown.sock") < 0)
return -1; return -1;
channel->source.data.nix.listen = true; channel->source->data.nix.listen = true;
} }
return 0; return 0;
@ -1535,14 +1535,14 @@ libxlMakeChannel(virDomainChrDefPtr l_channel,
return -1; return -1;
} }
switch (l_channel->source.type) { switch (l_channel->source->type) {
case VIR_DOMAIN_CHR_TYPE_PTY: case VIR_DOMAIN_CHR_TYPE_PTY:
x_channel->connection = LIBXL_CHANNEL_CONNECTION_PTY; x_channel->connection = LIBXL_CHANNEL_CONNECTION_PTY;
break; break;
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
x_channel->connection = LIBXL_CHANNEL_CONNECTION_SOCKET; x_channel->connection = LIBXL_CHANNEL_CONNECTION_SOCKET;
if (VIR_STRDUP(x_channel->u.socket.path, if (VIR_STRDUP(x_channel->u.socket.path,
l_channel->source.data.nix.path) < 0) l_channel->source->data.nix.path) < 0)
return -1; return -1;
break; break;
default: default:

View File

@ -392,7 +392,7 @@ libxlDomainDefPostParse(virDomainDefPtr def,
if (!(chrdef = virDomainChrDefNew(NULL))) if (!(chrdef = virDomainChrDefNew(NULL)))
return -1; return -1;
chrdef->source.type = VIR_DOMAIN_CHR_TYPE_PTY; chrdef->source->type = VIR_DOMAIN_CHR_TYPE_PTY;
chrdef->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE; chrdef->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
chrdef->target.port = 0; chrdef->target.port = 0;
chrdef->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN; chrdef->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
@ -987,7 +987,7 @@ libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, void *for_callback)
chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL)
chr = vm->def->serials[0]; chr = vm->def->serials[0];
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type == VIR_DOMAIN_CHR_TYPE_PTY) {
libxl_console_type console_type; libxl_console_type console_type;
console_type = console_type =
@ -997,9 +997,9 @@ libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, void *for_callback)
chr->target.port, console_type, chr->target.port, console_type,
&console); &console);
if (!ret) { if (!ret) {
VIR_FREE(chr->source.data.file.path); VIR_FREE(chr->source->data.file.path);
if (console && console[0] != '\0') { if (console && console[0] != '\0') {
ignore_value(VIR_STRDUP(chr->source.data.file.path, ignore_value(VIR_STRDUP(chr->source->data.file.path,
console)); console));
} }
} }
@ -1010,17 +1010,17 @@ libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, void *for_callback)
chr = vm->def->serials[i]; chr = vm->def->serials[i];
ignore_value(virAsprintf(&chr->info.alias, "serial%zd", i)); ignore_value(virAsprintf(&chr->info.alias, "serial%zd", i));
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type == VIR_DOMAIN_CHR_TYPE_PTY) {
if (chr->source.data.file.path) if (chr->source->data.file.path)
continue; continue;
ret = libxl_console_get_tty(ctx, ev->domid, ret = libxl_console_get_tty(ctx, ev->domid,
chr->target.port, chr->target.port,
LIBXL_CONSOLE_TYPE_SERIAL, LIBXL_CONSOLE_TYPE_SERIAL,
&console); &console);
if (!ret) { if (!ret) {
VIR_FREE(chr->source.data.file.path); VIR_FREE(chr->source->data.file.path);
if (console && console[0] != '\0') { if (console && console[0] != '\0') {
ignore_value(VIR_STRDUP(chr->source.data.file.path, ignore_value(VIR_STRDUP(chr->source->data.file.path,
console)); console));
} }
} }
@ -1075,7 +1075,7 @@ libxlDomainCreateChannelPTY(virDomainDefPtr def, libxl_ctx *ctx)
int ret; int ret;
chr = def->channels[i]; chr = def->channels[i];
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_PTY) if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY)
continue; continue;
ret = libxl_device_channel_getinfo(ctx, def->id, &x_channels[i], ret = libxl_device_channel_getinfo(ctx, def->id, &x_channels[i],
@ -1083,8 +1083,8 @@ libxlDomainCreateChannelPTY(virDomainDefPtr def, libxl_ctx *ctx)
if (!ret && channelinfo.u.pty.path && if (!ret && channelinfo.u.pty.path &&
channelinfo.u.pty.path != '\0') { channelinfo.u.pty.path != '\0') {
VIR_FREE(chr->source.data.file.path); VIR_FREE(chr->source->data.file.path);
ignore_value(VIR_STRDUP(chr->source.data.file.path, ignore_value(VIR_STRDUP(chr->source->data.file.path,
channelinfo.u.pty.path)); channelinfo.u.pty.path));
} }
} }

View File

@ -4724,7 +4724,7 @@ libxlDomainOpenConsole(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("character device %s is not using a PTY"), _("character device %s is not using a PTY"),
dev_name ? dev_name : NULLSTR(chr->info.alias)); dev_name ? dev_name : NULLSTR(chr->info.alias));
@ -4733,7 +4733,7 @@ libxlDomainOpenConsole(virDomainPtr dom,
/* handle mutually exclusive access to console devices */ /* handle mutually exclusive access to console devices */
ret = virChrdevOpen(priv->devs, ret = virChrdevOpen(priv->devs,
&chr->source, chr->source,
st, st,
(flags & VIR_DOMAIN_CONSOLE_FORCE) != 0); (flags & VIR_DOMAIN_CONSOLE_FORCE) != 0);

View File

@ -3252,14 +3252,14 @@ lxcDomainOpenConsole(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("character device %s is not using a PTY"), _("character device %s is not using a PTY"),
dev_name ? dev_name : NULLSTR(chr->info.alias)); dev_name ? dev_name : NULLSTR(chr->info.alias));
goto cleanup; goto cleanup;
} }
if (virFDStreamOpenFile(st, chr->source.data.file.path, if (virFDStreamOpenFile(st, chr->source->data.file.path,
0, 0, O_RDWR) < 0) 0, 0, O_RDWR) < 0)
goto cleanup; goto cleanup;

View File

@ -709,7 +709,7 @@ lxcCreateConsoles(virDomainDefPtr def, virConfPtr properties)
console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE; console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LXC; console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LXC;
console->target.port = i; console->target.port = i;
console->source.type = VIR_DOMAIN_CHR_TYPE_PTY; console->source->type = VIR_DOMAIN_CHR_TYPE_PTY;
def->consoles[i] = console; def->consoles[i] = console;
} }

View File

@ -1246,7 +1246,7 @@ int virLXCProcessStart(virConnectPtr conn,
} }
for (i = 0; i < vm->def->nconsoles; i++) { for (i = 0; i < vm->def->nconsoles; i++) {
if (vm->def->consoles[i]->source.type != VIR_DOMAIN_CHR_TYPE_PTY) { if (vm->def->consoles[i]->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Only PTY console types are supported")); _("Only PTY console types are supported"));
return -1; return -1;
@ -1362,8 +1362,8 @@ int virLXCProcessStart(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
VIR_FREE(vm->def->consoles[i]->source.data.file.path); VIR_FREE(vm->def->consoles[i]->source->data.file.path);
vm->def->consoles[i]->source.data.file.path = ttyPath; vm->def->consoles[i]->source->data.file.path = ttyPath;
VIR_FREE(vm->def->consoles[i]->info.alias); VIR_FREE(vm->def->consoles[i]->info.alias);
if (virAsprintf(&vm->def->consoles[i]->info.alias, "console%zu", i) < 0) if (virAsprintf(&vm->def->consoles[i]->info.alias, "console%zu", i) < 0)

View File

@ -196,7 +196,7 @@ qemuSetupChardevCgroup(virDomainDefPtr def ATTRIBUTE_UNUSED,
{ {
virDomainObjPtr vm = opaque; virDomainObjPtr vm = opaque;
return qemuSetupChrSourceCgroup(vm, &dev->source); return qemuSetupChrSourceCgroup(vm, dev->source);
} }

View File

@ -5320,7 +5320,7 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def,
break; break;
case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL: case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL:
/* Legacy syntax '-device spicevmc' */ /* Legacy syntax '-device spicevmc' */
if (dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC && if (dev->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC)) { virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC)) {
virBufferAddLit(&buf, "spicevmc"); virBufferAddLit(&buf, "spicevmc");
} else { } else {
@ -5354,7 +5354,7 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def,
} }
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC && dev->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC &&
dev->target.name && dev->target.name &&
STRNEQ(dev->target.name, "com.redhat.spice.0")) { STRNEQ(dev->target.name, "com.redhat.spice.0")) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@ -5364,12 +5364,12 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def,
} }
if (!(dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && if (!(dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC && dev->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC))) { virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC))) {
virBufferAsprintf(&buf, ",chardev=char%s,id=%s", virBufferAsprintf(&buf, ",chardev=char%s,id=%s",
dev->info.alias, dev->info.alias); dev->info.alias, dev->info.alias);
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
(dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC || (dev->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC ||
dev->target.name)) { dev->target.name)) {
virBufferAsprintf(&buf, ",name=%s", dev->target.name virBufferAsprintf(&buf, ",name=%s", dev->target.name
? dev->target.name : "com.redhat.spice.0"); ? dev->target.name : "com.redhat.spice.0");
@ -8533,13 +8533,13 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
virDomainChrDefPtr serial = def->serials[i]; virDomainChrDefPtr serial = def->serials[i];
char *devstr; char *devstr;
if (serial->source.type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice) if (serial->source->type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice)
continue; continue;
/* Use -chardev with -device if they are available */ /* Use -chardev with -device if they are available */
if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) { if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) {
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
&serial->source, serial->source,
serial->info.alias, serial->info.alias,
qemuCaps, true))) qemuCaps, true)))
return -1; return -1;
@ -8551,7 +8551,7 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
return -1; return -1;
} else { } else {
virCommandAddArg(cmd, "-serial"); virCommandAddArg(cmd, "-serial");
if (!(devstr = qemuBuildChrArgStr(&serial->source, NULL))) if (!(devstr = qemuBuildChrArgStr(serial->source, NULL)))
return -1; return -1;
virCommandAddArg(cmd, devstr); virCommandAddArg(cmd, devstr);
VIR_FREE(devstr); VIR_FREE(devstr);
@ -8578,7 +8578,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
/* Use -chardev with -device if they are available */ /* Use -chardev with -device if they are available */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV)) { if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV)) {
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
&parallel->source, parallel->source,
parallel->info.alias, parallel->info.alias,
qemuCaps, true))) qemuCaps, true)))
return -1; return -1;
@ -8591,7 +8591,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
return -1; return -1;
} else { } else {
virCommandAddArg(cmd, "-parallel"); virCommandAddArg(cmd, "-parallel");
if (!(devstr = qemuBuildChrArgStr(&parallel->source, NULL))) if (!(devstr = qemuBuildChrArgStr(parallel->source, NULL)))
return -1; return -1;
virCommandAddArg(cmd, devstr); virCommandAddArg(cmd, devstr);
VIR_FREE(devstr); VIR_FREE(devstr);
@ -8624,7 +8624,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
} }
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
&channel->source, channel->source,
channel->info.alias, channel->info.alias,
qemuCaps, true))) qemuCaps, true)))
return -1; return -1;
@ -8640,14 +8640,14 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO: case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC) && if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC) &&
channel->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { channel->source->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
/* spicevmc was originally introduced via a -device /* spicevmc was originally introduced via a -device
* with a backend internal to qemu; although we prefer * with a backend internal to qemu; although we prefer
* the newer -chardev interface. */ * the newer -chardev interface. */
; ;
} else { } else {
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
&channel->source, channel->source,
channel->info.alias, channel->info.alias,
qemuCaps, true))) qemuCaps, true)))
return -1; return -1;
@ -8690,7 +8690,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
} }
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
&console->source, console->source,
console->info.alias, console->info.alias,
qemuCaps, true))) qemuCaps, true)))
return -1; return -1;
@ -8704,7 +8704,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO: case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO:
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def, if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
&console->source, console->source,
console->info.alias, console->info.alias,
qemuCaps, true))) qemuCaps, true)))
return -1; return -1;

View File

@ -2660,10 +2660,10 @@ qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr,
if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL &&
chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
chr->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && chr->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
chr->source.data.nix.path && chr->source->data.nix.path &&
STRPREFIX(chr->source.data.nix.path, cfg->channelTargetDir)) { STRPREFIX(chr->source->data.nix.path, cfg->channelTargetDir)) {
VIR_FREE(chr->source.data.nix.path); VIR_FREE(chr->source->data.nix.path);
} }
virObjectUnref(cfg); virObjectUnref(cfg);
@ -6171,15 +6171,15 @@ qemuDomainPrepareChannel(virDomainChrDefPtr channel,
const char *domainChannelTargetDir) const char *domainChannelTargetDir)
{ {
if (channel->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && if (channel->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
channel->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && channel->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
!channel->source.data.nix.path) { !channel->source->data.nix.path) {
if (virAsprintf(&channel->source.data.nix.path, if (virAsprintf(&channel->source->data.nix.path,
"%s/%s", domainChannelTargetDir, "%s/%s", domainChannelTargetDir,
channel->target.name ? channel->target.name channel->target.name ? channel->target.name
: "unknown.sock") < 0) : "unknown.sock") < 0)
return -1; return -1;
channel->source.data.nix.listen = true; channel->source->data.nix.listen = true;
} }
return 0; return 0;

View File

@ -15888,7 +15888,7 @@ qemuDomainOpenConsole(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("character device %s is not using a PTY"), _("character device %s is not using a PTY"),
dev_name ? dev_name : NULLSTR(chr->info.alias)); dev_name ? dev_name : NULLSTR(chr->info.alias));
@ -15897,7 +15897,7 @@ qemuDomainOpenConsole(virDomainPtr dom,
/* handle mutually exclusive access to console devices */ /* handle mutually exclusive access to console devices */
ret = virChrdevOpen(priv->devs, ret = virChrdevOpen(priv->devs,
&chr->source, chr->source,
st, st,
(flags & VIR_DOMAIN_CONSOLE_FORCE) != 0); (flags & VIR_DOMAIN_CONSOLE_FORCE) != 0);
@ -15962,7 +15962,7 @@ qemuDomainOpenChannel(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_UNIX) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("channel %s is not using a UNIX socket"), _("channel %s is not using a UNIX socket"),
name ? name : NULLSTR(chr->info.alias)); name ? name : NULLSTR(chr->info.alias));
@ -15971,7 +15971,7 @@ qemuDomainOpenChannel(virDomainPtr dom,
/* handle mutually exclusive access to channel devices */ /* handle mutually exclusive access to channel devices */
ret = virChrdevOpen(priv->devs, ret = virChrdevOpen(priv->devs,
&chr->source, chr->source,
st, st,
(flags & VIR_DOMAIN_CHANNEL_FORCE) != 0); (flags & VIR_DOMAIN_CHANNEL_FORCE) != 0);

View File

@ -1700,7 +1700,7 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
virErrorPtr orig_err; virErrorPtr orig_err;
virDomainDefPtr vmdef = vm->def; virDomainDefPtr vmdef = vm->def;
char *devstr = NULL; char *devstr = NULL;
virDomainChrSourceDefPtr dev = &chr->source; virDomainChrSourceDefPtr dev = chr->source;
char *charAlias = NULL; char *charAlias = NULL;
bool chardevAttached = false; bool chardevAttached = false;
bool tlsobjAdded = false; bool tlsobjAdded = false;
@ -1753,7 +1753,7 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
tlsobjAdded = true; tlsobjAdded = true;
} }
if (qemuMonitorAttachCharDev(priv->mon, charAlias, &chr->source) < 0) if (qemuMonitorAttachCharDev(priv->mon, charAlias, chr->source) < 0)
goto exit_monitor; goto exit_monitor;
chardevAttached = true; chardevAttached = true;
@ -4403,7 +4403,7 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
if (!(charAlias = qemuAliasChardevFromDevAlias(tmpChr->info.alias))) if (!(charAlias = qemuAliasChardevFromDevAlias(tmpChr->info.alias)))
goto cleanup; goto cleanup;
if (tmpChr->source.type == VIR_DOMAIN_CHR_TYPE_TCP && if (tmpChr->source->type == VIR_DOMAIN_CHR_TYPE_TCP &&
cfg->chardevTLS && cfg->chardevTLS &&
!(objAlias = qemuAliasTLSObjFromChardevAlias(charAlias))) !(objAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
goto cleanup; goto cleanup;

View File

@ -2192,7 +2192,7 @@ qemuParseCommandLine(virCapsPtr caps,
if (!(chr = virDomainChrDefNew(NULL))) if (!(chr = virDomainChrDefNew(NULL)))
goto error; goto error;
if (qemuParseCommandLineChr(&chr->source, val) < 0) { if (qemuParseCommandLineChr(chr->source, val) < 0) {
virDomainChrDefFree(chr); virDomainChrDefFree(chr);
goto error; goto error;
} }
@ -2211,7 +2211,7 @@ qemuParseCommandLine(virCapsPtr caps,
if (!(chr = virDomainChrDefNew(NULL))) if (!(chr = virDomainChrDefNew(NULL)))
goto error; goto error;
if (qemuParseCommandLineChr(&chr->source, val) < 0) { if (qemuParseCommandLineChr(chr->source, val) < 0) {
virDomainChrDefFree(chr); virDomainChrDefFree(chr);
goto error; goto error;
} }

View File

@ -235,7 +235,7 @@ qemuConnectAgent(virQEMUDriverPtr driver, virDomainObjPtr vm)
virObjectUnlock(vm); virObjectUnlock(vm);
agent = qemuAgentOpen(vm, agent = qemuAgentOpen(vm,
&config->source, config->source,
&agentCallbacks); &agentCallbacks);
virObjectLock(vm); virObjectLock(vm);
@ -1836,7 +1836,7 @@ qemuProcessLookupPTYs(virDomainDefPtr def,
virDomainChrDefPtr chr = devices[i]; virDomainChrDefPtr chr = devices[i];
bool chardevfmt = virQEMUCapsSupportsChardev(def, qemuCaps, chr); bool chardevfmt = virQEMUCapsSupportsChardev(def, qemuCaps, chr);
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type == VIR_DOMAIN_CHR_TYPE_PTY) {
char id[32]; char id[32];
qemuMonitorChardevInfoPtr entry; qemuMonitorChardevInfoPtr entry;
@ -1851,7 +1851,7 @@ qemuProcessLookupPTYs(virDomainDefPtr def,
entry = virHashLookup(info, id); entry = virHashLookup(info, id);
if (!entry || !entry->ptyPath) { if (!entry || !entry->ptyPath) {
if (chr->source.data.file.path == NULL) { if (chr->source->data.file.path == NULL) {
/* neither the log output nor 'info chardev' had a /* neither the log output nor 'info chardev' had a
* pty path for this chardev, report an error * pty path for this chardev, report an error
*/ */
@ -1866,8 +1866,8 @@ qemuProcessLookupPTYs(virDomainDefPtr def,
} }
} }
VIR_FREE(chr->source.data.file.path); VIR_FREE(chr->source->data.file.path);
if (VIR_STRDUP(chr->source.data.file.path, entry->ptyPath) < 0) if (VIR_STRDUP(chr->source->data.file.path, entry->ptyPath) < 0)
return -1; return -1;
} }
} }
@ -1906,8 +1906,8 @@ qemuProcessFindCharDevicePTYsMonitor(virDomainObjPtr vm,
chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) { chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) {
/* yes, the first console is just an alias for serials[0] */ /* yes, the first console is just an alias for serials[0] */
i = 1; i = 1;
if (virDomainChrSourceDefCopy(&chr->source, if (virDomainChrSourceDefCopy(chr->source,
&((vm->def->serials[0])->source)) < 0) ((vm->def->serials[0])->source)) < 0)
return -1; return -1;
} }
} }
@ -2500,14 +2500,14 @@ qemuProcessPrepareChardevDevice(virDomainDefPtr def ATTRIBUTE_UNUSED,
void *opaque ATTRIBUTE_UNUSED) void *opaque ATTRIBUTE_UNUSED)
{ {
int fd; int fd;
if (dev->source.type != VIR_DOMAIN_CHR_TYPE_FILE) if (dev->source->type != VIR_DOMAIN_CHR_TYPE_FILE)
return 0; return 0;
if ((fd = open(dev->source.data.file.path, if ((fd = open(dev->source->data.file.path,
O_CREAT | O_APPEND, S_IRUSR|S_IWUSR)) < 0) { O_CREAT | O_APPEND, S_IRUSR|S_IWUSR)) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
_("Unable to pre-create chardev file '%s'"), _("Unable to pre-create chardev file '%s'"),
dev->source.data.file.path); dev->source->data.file.path);
return -1; return -1;
} }
@ -2522,10 +2522,10 @@ qemuProcessCleanupChardevDevice(virDomainDefPtr def ATTRIBUTE_UNUSED,
virDomainChrDefPtr dev, virDomainChrDefPtr dev,
void *opaque ATTRIBUTE_UNUSED) void *opaque ATTRIBUTE_UNUSED)
{ {
if (dev->source.type == VIR_DOMAIN_CHR_TYPE_UNIX && if (dev->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
dev->source.data.nix.listen && dev->source->data.nix.listen &&
dev->source.data.nix.path) dev->source->data.nix.path)
unlink(dev->source.data.nix.path); unlink(dev->source->data.nix.path);
return 0; return 0;
} }

View File

@ -968,7 +968,7 @@ virSecurityDACRestoreChardevCallback(virDomainDefPtr def,
{ {
virSecurityManagerPtr mgr = opaque; virSecurityManagerPtr mgr = opaque;
return virSecurityDACRestoreChardevLabel(mgr, def, dev, &dev->source); return virSecurityDACRestoreChardevLabel(mgr, def, dev, dev->source);
} }
@ -1139,7 +1139,7 @@ virSecurityDACSetChardevCallback(virDomainDefPtr def,
{ {
virSecurityManagerPtr mgr = opaque; virSecurityManagerPtr mgr = opaque;
return virSecurityDACSetChardevLabel(mgr, def, dev, &dev->source); return virSecurityDACSetChardevLabel(mgr, def, dev, dev->source);
} }

View File

@ -1934,7 +1934,7 @@ virSecuritySELinuxRestoreSecurityChardevCallback(virDomainDefPtr def,
dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL)
return 0; return 0;
return virSecuritySELinuxRestoreChardevLabel(mgr, def, dev, &dev->source); return virSecuritySELinuxRestoreChardevLabel(mgr, def, dev, dev->source);
} }
@ -2323,7 +2323,7 @@ virSecuritySELinuxSetSecurityChardevCallback(virDomainDefPtr def,
dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) dev->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL)
return 0; return 0;
return virSecuritySELinuxSetChardevLabel(mgr, def, dev, &dev->source); return virSecuritySELinuxSetChardevLabel(mgr, def, dev, dev->source);
} }

View File

@ -946,60 +946,60 @@ get_files(vahControl * ctl)
for (i = 0; i < ctl->def->nserials; i++) for (i = 0; i < ctl->def->nserials; i++)
if (ctl->def->serials[i] && if (ctl->def->serials[i] &&
(ctl->def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY || (ctl->def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY ||
ctl->def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_DEV || ctl->def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_DEV ||
ctl->def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_FILE || ctl->def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_FILE ||
ctl->def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_UNIX || ctl->def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_UNIX ||
ctl->def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_PIPE) && ctl->def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_PIPE) &&
ctl->def->serials[i]->source.data.file.path && ctl->def->serials[i]->source->data.file.path &&
ctl->def->serials[i]->source.data.file.path[0] != '\0') ctl->def->serials[i]->source->data.file.path[0] != '\0')
if (vah_add_file_chardev(&buf, if (vah_add_file_chardev(&buf,
ctl->def->serials[i]->source.data.file.path, ctl->def->serials[i]->source->data.file.path,
"rw", "rw",
ctl->def->serials[i]->source.type) != 0) ctl->def->serials[i]->source->type) != 0)
goto cleanup; goto cleanup;
for (i = 0; i < ctl->def->nconsoles; i++) for (i = 0; i < ctl->def->nconsoles; i++)
if (ctl->def->consoles[i] && if (ctl->def->consoles[i] &&
(ctl->def->consoles[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY || (ctl->def->consoles[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY ||
ctl->def->consoles[i]->source.type == VIR_DOMAIN_CHR_TYPE_DEV || ctl->def->consoles[i]->source->type == VIR_DOMAIN_CHR_TYPE_DEV ||
ctl->def->consoles[i]->source.type == VIR_DOMAIN_CHR_TYPE_FILE || ctl->def->consoles[i]->source->type == VIR_DOMAIN_CHR_TYPE_FILE ||
ctl->def->consoles[i]->source.type == VIR_DOMAIN_CHR_TYPE_UNIX || ctl->def->consoles[i]->source->type == VIR_DOMAIN_CHR_TYPE_UNIX ||
ctl->def->consoles[i]->source.type == VIR_DOMAIN_CHR_TYPE_PIPE) && ctl->def->consoles[i]->source->type == VIR_DOMAIN_CHR_TYPE_PIPE) &&
ctl->def->consoles[i]->source.data.file.path && ctl->def->consoles[i]->source->data.file.path &&
ctl->def->consoles[i]->source.data.file.path[0] != '\0') ctl->def->consoles[i]->source->data.file.path[0] != '\0')
if (vah_add_file(&buf, if (vah_add_file(&buf,
ctl->def->consoles[i]->source.data.file.path, "rw") != 0) ctl->def->consoles[i]->source->data.file.path, "rw") != 0)
goto cleanup; goto cleanup;
for (i = 0; i < ctl->def->nparallels; i++) for (i = 0; i < ctl->def->nparallels; i++)
if (ctl->def->parallels[i] && if (ctl->def->parallels[i] &&
(ctl->def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY || (ctl->def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY ||
ctl->def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_DEV || ctl->def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_DEV ||
ctl->def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_FILE || ctl->def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_FILE ||
ctl->def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_UNIX || ctl->def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_UNIX ||
ctl->def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_PIPE) && ctl->def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_PIPE) &&
ctl->def->parallels[i]->source.data.file.path && ctl->def->parallels[i]->source->data.file.path &&
ctl->def->parallels[i]->source.data.file.path[0] != '\0') ctl->def->parallels[i]->source->data.file.path[0] != '\0')
if (vah_add_file_chardev(&buf, if (vah_add_file_chardev(&buf,
ctl->def->parallels[i]->source.data.file.path, ctl->def->parallels[i]->source->data.file.path,
"rw", "rw",
ctl->def->parallels[i]->source.type) != 0) ctl->def->parallels[i]->source->type) != 0)
goto cleanup; goto cleanup;
for (i = 0; i < ctl->def->nchannels; i++) for (i = 0; i < ctl->def->nchannels; i++)
if (ctl->def->channels[i] && if (ctl->def->channels[i] &&
(ctl->def->channels[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY || (ctl->def->channels[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY ||
ctl->def->channels[i]->source.type == VIR_DOMAIN_CHR_TYPE_DEV || ctl->def->channels[i]->source->type == VIR_DOMAIN_CHR_TYPE_DEV ||
ctl->def->channels[i]->source.type == VIR_DOMAIN_CHR_TYPE_FILE || ctl->def->channels[i]->source->type == VIR_DOMAIN_CHR_TYPE_FILE ||
ctl->def->channels[i]->source.type == VIR_DOMAIN_CHR_TYPE_UNIX || ctl->def->channels[i]->source->type == VIR_DOMAIN_CHR_TYPE_UNIX ||
ctl->def->channels[i]->source.type == VIR_DOMAIN_CHR_TYPE_PIPE) && ctl->def->channels[i]->source->type == VIR_DOMAIN_CHR_TYPE_PIPE) &&
ctl->def->channels[i]->source.data.file.path && ctl->def->channels[i]->source->data.file.path &&
ctl->def->channels[i]->source.data.file.path[0] != '\0') ctl->def->channels[i]->source->data.file.path[0] != '\0')
if (vah_add_file_chardev(&buf, if (vah_add_file_chardev(&buf,
ctl->def->channels[i]->source.data.file.path, ctl->def->channels[i]->source->data.file.path,
"rw", "rw",
ctl->def->channels[i]->source.type) != 0) ctl->def->channels[i]->source->type) != 0)
goto cleanup; goto cleanup;
if (ctl->def->os.kernel) if (ctl->def->os.kernel)

View File

@ -290,7 +290,7 @@ umlBuildCommandLineChr(virDomainChrDefPtr def,
{ {
char *ret = NULL; char *ret = NULL;
switch (def->source.type) { switch (def->source->type) {
case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_NULL:
if (virAsprintf(&ret, "%s%d=null", dev, def->target.port) < 0) if (virAsprintf(&ret, "%s%d=null", dev, def->target.port) < 0)
return NULL; return NULL;
@ -303,7 +303,7 @@ umlBuildCommandLineChr(virDomainChrDefPtr def,
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
if (virAsprintf(&ret, "%s%d=tty:%s", dev, def->target.port, if (virAsprintf(&ret, "%s%d=tty:%s", dev, def->target.port,
def->source.data.file.path) < 0) def->source->data.file.path) < 0)
return NULL; return NULL;
break; break;
@ -313,14 +313,14 @@ umlBuildCommandLineChr(virDomainChrDefPtr def,
break; break;
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
if (def->source.data.tcp.listen != 1) { if (def->source->data.tcp.listen != 1) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("only TCP listen is supported for chr device")); _("only TCP listen is supported for chr device"));
return NULL; return NULL;
} }
if (virAsprintf(&ret, "%s%d=port:%s", dev, def->target.port, if (virAsprintf(&ret, "%s%d=port:%s", dev, def->target.port,
def->source.data.tcp.service) < 0) def->source->data.tcp.service) < 0)
return NULL; return NULL;
break; break;
@ -328,11 +328,11 @@ umlBuildCommandLineChr(virDomainChrDefPtr def,
{ {
int fd_out; int fd_out;
if ((fd_out = open(def->source.data.file.path, if ((fd_out = open(def->source->data.file.path,
O_WRONLY | O_APPEND | O_CREAT, 0660)) < 0) { O_WRONLY | O_APPEND | O_CREAT, 0660)) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
_("failed to open chardev file: %s"), _("failed to open chardev file: %s"),
def->source.data.file.path); def->source->data.file.path);
return NULL; return NULL;
} }
if (virAsprintf(&ret, "%s%d=null,fd:%d", dev, def->target.port, fd_out) < 0) { if (virAsprintf(&ret, "%s%d=null,fd:%d", dev, def->target.port, fd_out) < 0) {
@ -352,7 +352,7 @@ umlBuildCommandLineChr(virDomainChrDefPtr def,
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
default: default:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unsupported chr device type %d"), def->source.type); _("unsupported chr device type %d"), def->source->type);
break; break;
} }

View File

@ -244,8 +244,8 @@ umlIdentifyOneChrPTY(struct uml_driver *driver,
return -1; return -1;
if (res && STRPREFIX(res, "pts:")) { if (res && STRPREFIX(res, "pts:")) {
VIR_FREE(def->source.data.file.path); VIR_FREE(def->source->data.file.path);
if (VIR_STRDUP(def->source.data.file.path, res + 4) < 0) { if (VIR_STRDUP(def->source->data.file.path, res + 4) < 0) {
VIR_FREE(res); VIR_FREE(res);
VIR_FREE(cmd); VIR_FREE(cmd);
return -1; return -1;
@ -274,13 +274,13 @@ umlIdentifyChrPTY(struct uml_driver *driver,
size_t i; size_t i;
for (i = 0; i < dom->def->nconsoles; i++) for (i = 0; i < dom->def->nconsoles; i++)
if (dom->def->consoles[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY) if (dom->def->consoles[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY)
if (umlIdentifyOneChrPTY(driver, dom, if (umlIdentifyOneChrPTY(driver, dom,
dom->def->consoles[i], "con") < 0) dom->def->consoles[i], "con") < 0)
return -1; return -1;
for (i = 0; i < dom->def->nserials; i++) for (i = 0; i < dom->def->nserials; i++)
if (dom->def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY && if (dom->def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY &&
umlIdentifyOneChrPTY(driver, dom, umlIdentifyOneChrPTY(driver, dom,
dom->def->serials[i], "ssl") < 0) dom->def->serials[i], "ssl") < 0)
return -1; return -1;
@ -2624,14 +2624,14 @@ umlDomainOpenConsole(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("character device %s is not using a PTY"), _("character device %s is not using a PTY"),
dev_name ? dev_name : NULLSTR(chr->info.alias)); dev_name ? dev_name : NULLSTR(chr->info.alias));
goto cleanup; goto cleanup;
} }
if (virFDStreamOpenFile(st, chr->source.data.file.path, if (virFDStreamOpenFile(st, chr->source->data.file.path,
0, 0, O_RDWR) < 0) 0, 0, O_RDWR) < 0)
goto cleanup; goto cleanup;

View File

@ -1430,7 +1430,7 @@ vboxAttachSerial(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
ISerialPort *serialPort = NULL; ISerialPort *serialPort = NULL;
PRUnichar *pathUtf16 = NULL; PRUnichar *pathUtf16 = NULL;
VIR_DEBUG("SerialPort(%zu): Type: %d", i, def->serials[i]->source.type); VIR_DEBUG("SerialPort(%zu): Type: %d", i, def->serials[i]->source->type);
VIR_DEBUG("SerialPort(%zu): target.port: %d", i, VIR_DEBUG("SerialPort(%zu): target.port: %d", i,
def->serials[i]->target.port); def->serials[i]->target.port);
@ -1440,8 +1440,8 @@ vboxAttachSerial(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
gVBoxAPI.UISerialPort.SetEnabled(serialPort, 1); gVBoxAPI.UISerialPort.SetEnabled(serialPort, 1);
if (def->serials[i]->source.data.file.path) { if (def->serials[i]->source->data.file.path) {
VBOX_UTF8_TO_UTF16(def->serials[i]->source.data.file.path, VBOX_UTF8_TO_UTF16(def->serials[i]->source->data.file.path,
&pathUtf16); &pathUtf16);
gVBoxAPI.UISerialPort.SetPath(serialPort, pathUtf16); gVBoxAPI.UISerialPort.SetPath(serialPort, pathUtf16);
} }
@ -1459,20 +1459,20 @@ vboxAttachSerial(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
gVBoxAPI.UISerialPort.SetIRQ(serialPort, 4); gVBoxAPI.UISerialPort.SetIRQ(serialPort, 4);
gVBoxAPI.UISerialPort.SetIOBase(serialPort, 1016); gVBoxAPI.UISerialPort.SetIOBase(serialPort, 1016);
VIR_DEBUG(" serialPort-%zu irq: %d, iobase 0x%x, path: %s", VIR_DEBUG(" serialPort-%zu irq: %d, iobase 0x%x, path: %s",
i, 4, 1016, def->serials[i]->source.data.file.path); i, 4, 1016, def->serials[i]->source->data.file.path);
} else if (def->serials[i]->target.port == 1) { } else if (def->serials[i]->target.port == 1) {
gVBoxAPI.UISerialPort.SetIRQ(serialPort, 3); gVBoxAPI.UISerialPort.SetIRQ(serialPort, 3);
gVBoxAPI.UISerialPort.SetIOBase(serialPort, 760); gVBoxAPI.UISerialPort.SetIOBase(serialPort, 760);
VIR_DEBUG(" serialPort-%zu irq: %d, iobase 0x%x, path: %s", VIR_DEBUG(" serialPort-%zu irq: %d, iobase 0x%x, path: %s",
i, 3, 760, def->serials[i]->source.data.file.path); i, 3, 760, def->serials[i]->source->data.file.path);
} }
if (def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_DEV) { if (def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_DEV) {
gVBoxAPI.UISerialPort.SetHostMode(serialPort, PortMode_HostDevice); gVBoxAPI.UISerialPort.SetHostMode(serialPort, PortMode_HostDevice);
} else if (def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_PIPE) { } else if (def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_PIPE) {
gVBoxAPI.UISerialPort.SetHostMode(serialPort, PortMode_HostPipe); gVBoxAPI.UISerialPort.SetHostMode(serialPort, PortMode_HostPipe);
} else if (gVBoxAPI.APIVersion >= 2002051 && } else if (gVBoxAPI.APIVersion >= 2002051 &&
def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_FILE) { def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_FILE) {
/* PortMode RawFile is used for vbox 3.0 or later */ /* PortMode RawFile is used for vbox 3.0 or later */
gVBoxAPI.UISerialPort.SetHostMode(serialPort, PortMode_RawFile); gVBoxAPI.UISerialPort.SetHostMode(serialPort, PortMode_RawFile);
} else { } else {
@ -1505,7 +1505,7 @@ vboxAttachParallel(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
IParallelPort *parallelPort = NULL; IParallelPort *parallelPort = NULL;
PRUnichar *pathUtf16 = NULL; PRUnichar *pathUtf16 = NULL;
VIR_DEBUG("ParallelPort(%zu): Type: %d", i, def->parallels[i]->source.type); VIR_DEBUG("ParallelPort(%zu): Type: %d", i, def->parallels[i]->source->type);
VIR_DEBUG("ParallelPort(%zu): target.port: %d", i, VIR_DEBUG("ParallelPort(%zu): target.port: %d", i,
def->parallels[i]->target.port); def->parallels[i]->target.port);
@ -1513,28 +1513,28 @@ vboxAttachParallel(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
if (!parallelPort) if (!parallelPort)
continue; continue;
VBOX_UTF8_TO_UTF16(def->parallels[i]->source.data.file.path, &pathUtf16); VBOX_UTF8_TO_UTF16(def->parallels[i]->source->data.file.path, &pathUtf16);
/* For now hard code the parallel ports to /* For now hard code the parallel ports to
* LPT1 (Base Addr: 0x378 (decimal: 888), IRQ: 7) * LPT1 (Base Addr: 0x378 (decimal: 888), IRQ: 7)
* LPT2 (Base Addr: 0x278 (decimal: 632), IRQ: 5) * LPT2 (Base Addr: 0x278 (decimal: 632), IRQ: 5)
* TODO: make this more flexible * TODO: make this more flexible
*/ */
if ((def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_DEV) || if ((def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_DEV) ||
(def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_PTY) || (def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_PTY) ||
(def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_FILE) || (def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_FILE) ||
(def->parallels[i]->source.type == VIR_DOMAIN_CHR_TYPE_PIPE)) { (def->parallels[i]->source->type == VIR_DOMAIN_CHR_TYPE_PIPE)) {
gVBoxAPI.UIParallelPort.SetPath(parallelPort, pathUtf16); gVBoxAPI.UIParallelPort.SetPath(parallelPort, pathUtf16);
if (i == 0) { if (i == 0) {
gVBoxAPI.UIParallelPort.SetIRQ(parallelPort, 7); gVBoxAPI.UIParallelPort.SetIRQ(parallelPort, 7);
gVBoxAPI.UIParallelPort.SetIOBase(parallelPort, 888); gVBoxAPI.UIParallelPort.SetIOBase(parallelPort, 888);
VIR_DEBUG(" parallePort-%zu irq: %d, iobase 0x%x, path: %s", VIR_DEBUG(" parallePort-%zu irq: %d, iobase 0x%x, path: %s",
i, 7, 888, def->parallels[i]->source.data.file.path); i, 7, 888, def->parallels[i]->source->data.file.path);
} else if (i == 1) { } else if (i == 1) {
gVBoxAPI.UIParallelPort.SetIRQ(parallelPort, 5); gVBoxAPI.UIParallelPort.SetIRQ(parallelPort, 5);
gVBoxAPI.UIParallelPort.SetIOBase(parallelPort, 632); gVBoxAPI.UIParallelPort.SetIOBase(parallelPort, 632);
VIR_DEBUG(" parallePort-%zu irq: %d, iobase 0x%x, path: %s", VIR_DEBUG(" parallePort-%zu irq: %d, iobase 0x%x, path: %s",
i, 5, 632, def->parallels[i]->source.data.file.path); i, 5, 632, def->parallels[i]->source->data.file.path);
} }
} }
@ -3706,15 +3706,15 @@ vboxDumpSerial(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine, PRU
gVBoxAPI.UISerialPort.GetHostMode(serialPort, &hostMode); gVBoxAPI.UISerialPort.GetHostMode(serialPort, &hostMode);
if (hostMode == PortMode_HostPipe) { if (hostMode == PortMode_HostPipe) {
def->serials[serialPortIncCount]->source.type = VIR_DOMAIN_CHR_TYPE_PIPE; def->serials[serialPortIncCount]->source->type = VIR_DOMAIN_CHR_TYPE_PIPE;
} else if (hostMode == PortMode_HostDevice) { } else if (hostMode == PortMode_HostDevice) {
def->serials[serialPortIncCount]->source.type = VIR_DOMAIN_CHR_TYPE_DEV; def->serials[serialPortIncCount]->source->type = VIR_DOMAIN_CHR_TYPE_DEV;
} else if (gVBoxAPI.APIVersion >= 2002051 && } else if (gVBoxAPI.APIVersion >= 2002051 &&
hostMode == PortMode_RawFile) { hostMode == PortMode_RawFile) {
/* PortMode RawFile is used for vbox 3.0 or later */ /* PortMode RawFile is used for vbox 3.0 or later */
def->serials[serialPortIncCount]->source.type = VIR_DOMAIN_CHR_TYPE_FILE; def->serials[serialPortIncCount]->source->type = VIR_DOMAIN_CHR_TYPE_FILE;
} else { } else {
def->serials[serialPortIncCount]->source.type = VIR_DOMAIN_CHR_TYPE_NULL; def->serials[serialPortIncCount]->source->type = VIR_DOMAIN_CHR_TYPE_NULL;
} }
def->serials[serialPortIncCount]->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL; def->serials[serialPortIncCount]->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL;
@ -3731,7 +3731,7 @@ vboxDumpSerial(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine, PRU
if (pathUtf16) { if (pathUtf16) {
VBOX_UTF16_TO_UTF8(pathUtf16, &path); VBOX_UTF16_TO_UTF8(pathUtf16, &path);
ignore_value(VIR_STRDUP(def->serials[serialPortIncCount]->source.data.file.path, path)); ignore_value(VIR_STRDUP(def->serials[serialPortIncCount]->source->data.file.path, path));
} }
serialPortIncCount++; serialPortIncCount++;
@ -3800,13 +3800,13 @@ vboxDumpParallel(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine, P
def->parallels[parallelPortIncCount]->target.port = 1; def->parallels[parallelPortIncCount]->target.port = 1;
} }
def->parallels[parallelPortIncCount]->source.type = VIR_DOMAIN_CHR_TYPE_FILE; def->parallels[parallelPortIncCount]->source->type = VIR_DOMAIN_CHR_TYPE_FILE;
def->parallels[parallelPortIncCount]->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL; def->parallels[parallelPortIncCount]->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL;
gVBoxAPI.UIParallelPort.GetPath(parallelPort, &pathUtf16); gVBoxAPI.UIParallelPort.GetPath(parallelPort, &pathUtf16);
VBOX_UTF16_TO_UTF8(pathUtf16, &path); VBOX_UTF16_TO_UTF8(pathUtf16, &path);
ignore_value(VIR_STRDUP(def->parallels[parallelPortIncCount]->source.data.file.path, path)); ignore_value(VIR_STRDUP(def->parallels[parallelPortIncCount]->source->data.file.path, path));
parallelPortIncCount++; parallelPortIncCount++;

View File

@ -2806,17 +2806,17 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
*/ */
if (!fileType || STRCASEEQ(fileType, "device")) { if (!fileType || STRCASEEQ(fileType, "device")) {
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_DEV; (*def)->source->type = VIR_DOMAIN_CHR_TYPE_DEV;
(*def)->source.data.file.path = fileName; (*def)->source->data.file.path = fileName;
fileName = NULL; fileName = NULL;
} else if (STRCASEEQ(fileType, "file")) { } else if (STRCASEEQ(fileType, "file")) {
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_FILE; (*def)->source->type = VIR_DOMAIN_CHR_TYPE_FILE;
(*def)->source.data.file.path = ctx->parseFileName(fileName, (*def)->source->data.file.path = ctx->parseFileName(fileName,
ctx->opaque); ctx->opaque);
if ((*def)->source.data.file.path == NULL) if ((*def)->source->data.file.path == NULL)
goto cleanup; goto cleanup;
} else if (STRCASEEQ(fileType, "pipe")) { } else if (STRCASEEQ(fileType, "pipe")) {
/* /*
@ -2824,13 +2824,13 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
* not representable in domain XML form * not representable in domain XML form
*/ */
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_PIPE; (*def)->source->type = VIR_DOMAIN_CHR_TYPE_PIPE;
(*def)->source.data.file.path = fileName; (*def)->source->data.file.path = fileName;
fileName = NULL; fileName = NULL;
} else if (STRCASEEQ(fileType, "network")) { } else if (STRCASEEQ(fileType, "network")) {
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_TCP; (*def)->source->type = VIR_DOMAIN_CHR_TYPE_TCP;
if (!(parsedUri = virURIParse(fileName))) if (!(parsedUri = virURIParse(fileName)))
goto cleanup; goto cleanup;
@ -2842,10 +2842,10 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
goto cleanup; goto cleanup;
} }
if (VIR_STRDUP((*def)->source.data.tcp.host, parsedUri->server) < 0) if (VIR_STRDUP((*def)->source->data.tcp.host, parsedUri->server) < 0)
goto cleanup; goto cleanup;
if (virAsprintf(&(*def)->source.data.tcp.service, "%d", if (virAsprintf(&(*def)->source->data.tcp.service, "%d",
parsedUri->port) < 0) parsedUri->port) < 0)
goto cleanup; goto cleanup;
@ -2854,18 +2854,18 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
STRCASEEQ(parsedUri->scheme, "tcp") || STRCASEEQ(parsedUri->scheme, "tcp") ||
STRCASEEQ(parsedUri->scheme, "tcp4") || STRCASEEQ(parsedUri->scheme, "tcp4") ||
STRCASEEQ(parsedUri->scheme, "tcp6")) { STRCASEEQ(parsedUri->scheme, "tcp6")) {
(*def)->source.data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW; (*def)->source->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW;
} else if (STRCASEEQ(parsedUri->scheme, "telnet")) { } else if (STRCASEEQ(parsedUri->scheme, "telnet")) {
(*def)->source.data.tcp.protocol (*def)->source->data.tcp.protocol
= VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET; = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET;
} else if (STRCASEEQ(parsedUri->scheme, "telnets")) { } else if (STRCASEEQ(parsedUri->scheme, "telnets")) {
(*def)->source.data.tcp.protocol (*def)->source->data.tcp.protocol
= VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNETS; = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNETS;
} else if (STRCASEEQ(parsedUri->scheme, "ssl") || } else if (STRCASEEQ(parsedUri->scheme, "ssl") ||
STRCASEEQ(parsedUri->scheme, "tcp+ssl") || STRCASEEQ(parsedUri->scheme, "tcp+ssl") ||
STRCASEEQ(parsedUri->scheme, "tcp4+ssl") || STRCASEEQ(parsedUri->scheme, "tcp4+ssl") ||
STRCASEEQ(parsedUri->scheme, "tcp6+ssl")) { STRCASEEQ(parsedUri->scheme, "tcp6+ssl")) {
(*def)->source.data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS; (*def)->source->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS;
} else { } else {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("VMX entry '%s' contains unsupported scheme '%s'"), _("VMX entry '%s' contains unsupported scheme '%s'"),
@ -2874,9 +2874,9 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
} }
if (network_endPoint == NULL || STRCASEEQ(network_endPoint, "server")) { if (network_endPoint == NULL || STRCASEEQ(network_endPoint, "server")) {
(*def)->source.data.tcp.listen = true; (*def)->source->data.tcp.listen = true;
} else if (STRCASEEQ(network_endPoint, "client")) { } else if (STRCASEEQ(network_endPoint, "client")) {
(*def)->source.data.tcp.listen = false; (*def)->source->data.tcp.listen = false;
} else { } else {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'server' or 'client' " _("Expecting VMX entry '%s' to be 'server' or 'client' "
@ -2983,17 +2983,17 @@ virVMXParseParallel(virVMXContext *ctx, virConfPtr conf, int port,
/* Setup virDomainChrDef */ /* Setup virDomainChrDef */
if (STRCASEEQ(fileType, "device")) { if (STRCASEEQ(fileType, "device")) {
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_DEV; (*def)->source->type = VIR_DOMAIN_CHR_TYPE_DEV;
(*def)->source.data.file.path = fileName; (*def)->source->data.file.path = fileName;
fileName = NULL; fileName = NULL;
} else if (STRCASEEQ(fileType, "file")) { } else if (STRCASEEQ(fileType, "file")) {
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_FILE; (*def)->source->type = VIR_DOMAIN_CHR_TYPE_FILE;
(*def)->source.data.file.path = ctx->parseFileName(fileName, (*def)->source->data.file.path = ctx->parseFileName(fileName,
ctx->opaque); ctx->opaque);
if ((*def)->source.data.file.path == NULL) if ((*def)->source->data.file.path == NULL)
goto cleanup; goto cleanup;
} else { } else {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
@ -3827,19 +3827,19 @@ virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
virBufferAsprintf(buffer, "serial%d.present = \"true\"\n", def->target.port); virBufferAsprintf(buffer, "serial%d.present = \"true\"\n", def->target.port);
/* def:type -> vmx:fileType and def:data.file.path -> vmx:fileName */ /* def:type -> vmx:fileType and def:data.file.path -> vmx:fileName */
switch (def->source.type) { switch (def->source->type) {
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
virBufferAsprintf(buffer, "serial%d.fileType = \"device\"\n", virBufferAsprintf(buffer, "serial%d.fileType = \"device\"\n",
def->target.port); def->target.port);
virBufferAsprintf(buffer, "serial%d.fileName = \"%s\"\n", virBufferAsprintf(buffer, "serial%d.fileName = \"%s\"\n",
def->target.port, def->source.data.file.path); def->target.port, def->source->data.file.path);
break; break;
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
virBufferAsprintf(buffer, "serial%d.fileType = \"file\"\n", virBufferAsprintf(buffer, "serial%d.fileType = \"file\"\n",
def->target.port); def->target.port);
fileName = ctx->formatFileName(def->source.data.file.path, ctx->opaque); fileName = ctx->formatFileName(def->source->data.file.path, ctx->opaque);
if (fileName == NULL) if (fileName == NULL)
return -1; return -1;
@ -3860,11 +3860,11 @@ virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
virBufferAsprintf(buffer, "serial%d.tryNoRxLoss = \"false\"\n", virBufferAsprintf(buffer, "serial%d.tryNoRxLoss = \"false\"\n",
def->target.port); def->target.port);
virBufferAsprintf(buffer, "serial%d.fileName = \"%s\"\n", virBufferAsprintf(buffer, "serial%d.fileName = \"%s\"\n",
def->target.port, def->source.data.file.path); def->target.port, def->source->data.file.path);
break; break;
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
switch (def->source.data.tcp.protocol) { switch (def->source->data.tcp.protocol) {
case VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW: case VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW:
protocol = "tcp"; protocol = "tcp";
break; break;
@ -3885,24 +3885,24 @@ virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported character device TCP protocol '%s'"), _("Unsupported character device TCP protocol '%s'"),
virDomainChrTcpProtocolTypeToString( virDomainChrTcpProtocolTypeToString(
def->source.data.tcp.protocol)); def->source->data.tcp.protocol));
return -1; return -1;
} }
virBufferAsprintf(buffer, "serial%d.fileType = \"network\"\n", virBufferAsprintf(buffer, "serial%d.fileType = \"network\"\n",
def->target.port); def->target.port);
virBufferAsprintf(buffer, "serial%d.fileName = \"%s://%s:%s\"\n", virBufferAsprintf(buffer, "serial%d.fileName = \"%s://%s:%s\"\n",
def->target.port, protocol, def->source.data.tcp.host, def->target.port, protocol, def->source->data.tcp.host,
def->source.data.tcp.service); def->source->data.tcp.service);
virBufferAsprintf(buffer, "serial%d.network.endPoint = \"%s\"\n", virBufferAsprintf(buffer, "serial%d.network.endPoint = \"%s\"\n",
def->target.port, def->target.port,
def->source.data.tcp.listen ? "server" : "client"); def->source->data.tcp.listen ? "server" : "client");
break; break;
default: default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported character device type '%s'"), _("Unsupported character device type '%s'"),
virDomainChrTypeToString(def->source.type)); virDomainChrTypeToString(def->source->type));
return -1; return -1;
} }
@ -3933,19 +3933,19 @@ virVMXFormatParallel(virVMXContext *ctx, virDomainChrDefPtr def,
def->target.port); def->target.port);
/* def:type -> vmx:fileType and def:data.file.path -> vmx:fileName */ /* def:type -> vmx:fileType and def:data.file.path -> vmx:fileName */
switch (def->source.type) { switch (def->source->type) {
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
virBufferAsprintf(buffer, "parallel%d.fileType = \"device\"\n", virBufferAsprintf(buffer, "parallel%d.fileType = \"device\"\n",
def->target.port); def->target.port);
virBufferAsprintf(buffer, "parallel%d.fileName = \"%s\"\n", virBufferAsprintf(buffer, "parallel%d.fileName = \"%s\"\n",
def->target.port, def->source.data.file.path); def->target.port, def->source->data.file.path);
break; break;
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
virBufferAsprintf(buffer, "parallel%d.fileType = \"file\"\n", virBufferAsprintf(buffer, "parallel%d.fileType = \"file\"\n",
def->target.port); def->target.port);
fileName = ctx->formatFileName(def->source.data.file.path, ctx->opaque); fileName = ctx->formatFileName(def->source->data.file.path, ctx->opaque);
if (fileName == NULL) if (fileName == NULL)
return -1; return -1;
@ -3959,7 +3959,7 @@ virVMXFormatParallel(virVMXContext *ctx, virDomainChrDefPtr def,
default: default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported character device type '%s'"), _("Unsupported character device type '%s'"),
virDomainChrTypeToString(def->source.type)); virDomainChrTypeToString(def->source->type));
return -1; return -1;
} }

View File

@ -1148,46 +1148,46 @@ prlsdkGetSerialInfo(PRL_HANDLE serialPort, virDomainChrDefPtr chr)
switch (emulatedType) { switch (emulatedType) {
case PDT_USE_OUTPUT_FILE: case PDT_USE_OUTPUT_FILE:
chr->source.type = VIR_DOMAIN_CHR_TYPE_FILE; chr->source->type = VIR_DOMAIN_CHR_TYPE_FILE;
chr->source.data.file.path = friendlyName; chr->source->data.file.path = friendlyName;
friendlyName = NULL; friendlyName = NULL;
break; break;
case PDT_USE_SERIAL_PORT_SOCKET_MODE: case PDT_USE_SERIAL_PORT_SOCKET_MODE:
chr->source.type = VIR_DOMAIN_CHR_TYPE_UNIX; chr->source->type = VIR_DOMAIN_CHR_TYPE_UNIX;
chr->source.data.nix.path = friendlyName; chr->source->data.nix.path = friendlyName;
chr->source.data.nix.listen = socket_mode == PSP_SERIAL_SOCKET_SERVER; chr->source->data.nix.listen = socket_mode == PSP_SERIAL_SOCKET_SERVER;
friendlyName = NULL; friendlyName = NULL;
break; break;
case PDT_USE_REAL_DEVICE: case PDT_USE_REAL_DEVICE:
chr->source.type = VIR_DOMAIN_CHR_TYPE_DEV; chr->source->type = VIR_DOMAIN_CHR_TYPE_DEV;
chr->source.data.file.path = friendlyName; chr->source->data.file.path = friendlyName;
friendlyName = NULL; friendlyName = NULL;
break; break;
case PDT_USE_TCP: case PDT_USE_TCP:
chr->source.type = VIR_DOMAIN_CHR_TYPE_TCP; chr->source->type = VIR_DOMAIN_CHR_TYPE_TCP;
if (virAsprintf(&uristr, "tcp://%s", friendlyName) < 0) if (virAsprintf(&uristr, "tcp://%s", friendlyName) < 0)
goto cleanup; goto cleanup;
if (!(uri = virURIParse(uristr))) if (!(uri = virURIParse(uristr)))
goto cleanup; goto cleanup;
if (VIR_STRDUP(chr->source.data.tcp.host, uri->server) < 0) if (VIR_STRDUP(chr->source->data.tcp.host, uri->server) < 0)
goto cleanup; goto cleanup;
if (virAsprintf(&chr->source.data.tcp.service, "%d", uri->port) < 0) if (virAsprintf(&chr->source->data.tcp.service, "%d", uri->port) < 0)
goto cleanup; goto cleanup;
chr->source.data.tcp.listen = socket_mode == PSP_SERIAL_SOCKET_SERVER; chr->source->data.tcp.listen = socket_mode == PSP_SERIAL_SOCKET_SERVER;
break; break;
case PDT_USE_UDP: case PDT_USE_UDP:
chr->source.type = VIR_DOMAIN_CHR_TYPE_UDP; chr->source->type = VIR_DOMAIN_CHR_TYPE_UDP;
if (virAsprintf(&uristr, "udp://%s", friendlyName) < 0) if (virAsprintf(&uristr, "udp://%s", friendlyName) < 0)
goto cleanup; goto cleanup;
if (!(uri = virURIParse(uristr))) if (!(uri = virURIParse(uristr)))
goto cleanup; goto cleanup;
if (VIR_STRDUP(chr->source.data.udp.bindHost, uri->server) < 0) if (VIR_STRDUP(chr->source->data.udp.bindHost, uri->server) < 0)
goto cleanup; goto cleanup;
if (virAsprintf(&chr->source.data.udp.bindService, "%d", uri->port) < 0) if (virAsprintf(&chr->source->data.udp.bindService, "%d", uri->port) < 0)
goto cleanup; goto cleanup;
if (VIR_STRDUP(chr->source.data.udp.connectHost, uri->server) < 0) if (VIR_STRDUP(chr->source->data.udp.connectHost, uri->server) < 0)
goto cleanup; goto cleanup;
if (virAsprintf(&chr->source.data.udp.connectService, "%d", uri->port) < 0) if (virAsprintf(&chr->source->data.udp.connectService, "%d", uri->port) < 0)
goto cleanup; goto cleanup;
break; break;
default: default:
@ -2768,11 +2768,11 @@ static int prlsdkCheckSerialUnsupportedParams(virDomainChrDefPtr chr)
return -1; return -1;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_DEV && if (chr->source->type != VIR_DOMAIN_CHR_TYPE_DEV &&
chr->source.type != VIR_DOMAIN_CHR_TYPE_FILE && chr->source->type != VIR_DOMAIN_CHR_TYPE_FILE &&
chr->source.type != VIR_DOMAIN_CHR_TYPE_UNIX && chr->source->type != VIR_DOMAIN_CHR_TYPE_UNIX &&
chr->source.type != VIR_DOMAIN_CHR_TYPE_TCP && chr->source->type != VIR_DOMAIN_CHR_TYPE_TCP &&
chr->source.type != VIR_DOMAIN_CHR_TYPE_UDP) { chr->source->type != VIR_DOMAIN_CHR_TYPE_UDP) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@ -2795,20 +2795,20 @@ static int prlsdkCheckSerialUnsupportedParams(virDomainChrDefPtr chr)
return -1; return -1;
} }
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_TCP && if (chr->source->type == VIR_DOMAIN_CHR_TYPE_TCP &&
chr->source.data.tcp.protocol != VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW) { chr->source->data.tcp.protocol != VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Protocol '%s' is not supported for " _("Protocol '%s' is not supported for "
"tcp character device."), "tcp character device."),
virDomainChrTcpProtocolTypeToString(chr->source.data.tcp.protocol)); virDomainChrTcpProtocolTypeToString(chr->source->data.tcp.protocol));
return -1; return -1;
} }
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_UDP && if (chr->source->type == VIR_DOMAIN_CHR_TYPE_UDP &&
(STRNEQ(chr->source.data.udp.bindHost, (STRNEQ(chr->source->data.udp.bindHost,
chr->source.data.udp.connectHost) || chr->source->data.udp.connectHost) ||
STRNEQ(chr->source.data.udp.bindService, STRNEQ(chr->source->data.udp.bindService,
chr->source.data.udp.connectService))) { chr->source->data.udp.connectService))) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Different bind and connect parameters for " _("Different bind and connect parameters for "
"udp character device is not supported.")); "udp character device is not supported."));
@ -3025,36 +3025,36 @@ static int prlsdkAddSerial(PRL_HANDLE sdkdom, virDomainChrDefPtr chr)
pret = PrlVmCfg_CreateVmDev(sdkdom, PDE_SERIAL_PORT, &sdkchr); pret = PrlVmCfg_CreateVmDev(sdkdom, PDE_SERIAL_PORT, &sdkchr);
prlsdkCheckRetGoto(pret, cleanup); prlsdkCheckRetGoto(pret, cleanup);
switch (chr->source.type) { switch (chr->source->type) {
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
emutype = PDT_USE_REAL_DEVICE; emutype = PDT_USE_REAL_DEVICE;
path = chr->source.data.file.path; path = chr->source->data.file.path;
break; break;
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
emutype = PDT_USE_OUTPUT_FILE; emutype = PDT_USE_OUTPUT_FILE;
path = chr->source.data.file.path; path = chr->source->data.file.path;
break; break;
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
emutype = PDT_USE_SERIAL_PORT_SOCKET_MODE; emutype = PDT_USE_SERIAL_PORT_SOCKET_MODE;
path = chr->source.data.nix.path; path = chr->source->data.nix.path;
if (!chr->source.data.nix.listen) if (!chr->source->data.nix.listen)
socket_mode = PSP_SERIAL_SOCKET_CLIENT; socket_mode = PSP_SERIAL_SOCKET_CLIENT;
break; break;
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
emutype = PDT_USE_TCP; emutype = PDT_USE_TCP;
if (virAsprintf(&url, "%s:%s", if (virAsprintf(&url, "%s:%s",
chr->source.data.tcp.host, chr->source->data.tcp.host,
chr->source.data.tcp.service) < 0) chr->source->data.tcp.service) < 0)
goto cleanup; goto cleanup;
if (!chr->source.data.tcp.listen) if (!chr->source->data.tcp.listen)
socket_mode = PSP_SERIAL_SOCKET_CLIENT; socket_mode = PSP_SERIAL_SOCKET_CLIENT;
path = url; path = url;
break; break;
case VIR_DOMAIN_CHR_TYPE_UDP: case VIR_DOMAIN_CHR_TYPE_UDP:
emutype = PDT_USE_UDP; emutype = PDT_USE_UDP;
if (virAsprintf(&url, "%s:%s", if (virAsprintf(&url, "%s:%s",
chr->source.data.udp.bindHost, chr->source->data.udp.bindHost,
chr->source.data.udp.bindService) < 0) chr->source->data.udp.bindService) < 0)
goto cleanup; goto cleanup;
path = url; path = url;
break; break;

View File

@ -2542,14 +2542,14 @@ xenUnifiedDomainOpenConsole(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
if (chr->source.type != VIR_DOMAIN_CHR_TYPE_PTY) { if (chr->source->type != VIR_DOMAIN_CHR_TYPE_PTY) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("character device %s is not using a PTY"), _("character device %s is not using a PTY"),
dev_name ? dev_name : NULLSTR(chr->info.alias)); dev_name ? dev_name : NULLSTR(chr->info.alias));
goto cleanup; goto cleanup;
} }
if (virFDStreamOpenFile(st, chr->source.data.file.path, if (virFDStreamOpenFile(st, chr->source->data.file.path,
0, 0, O_RDWR) < 0) 0, 0, O_RDWR) < 0)
goto cleanup; goto cleanup;

View File

@ -196,8 +196,8 @@ xenParseSxprChar(const char *value,
prefix = value; prefix = value;
if (value[0] == '/') { if (value[0] == '/') {
def->source.type = VIR_DOMAIN_CHR_TYPE_DEV; def->source->type = VIR_DOMAIN_CHR_TYPE_DEV;
if (VIR_STRDUP(def->source.data.file.path, value) < 0) if (VIR_STRDUP(def->source->data.file.path, value) < 0)
goto error; goto error;
} else { } else {
if ((tmp = strchr(value, ':')) != NULL) { if ((tmp = strchr(value, ':')) != NULL) {
@ -206,10 +206,10 @@ xenParseSxprChar(const char *value,
} }
if (STRPREFIX(prefix, "telnet")) { if (STRPREFIX(prefix, "telnet")) {
def->source.type = VIR_DOMAIN_CHR_TYPE_TCP; def->source->type = VIR_DOMAIN_CHR_TYPE_TCP;
def->source.data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET; def->source->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET;
} else { } else {
if ((def->source.type = virDomainChrTypeFromString(prefix)) < 0) { if ((def->source->type = virDomainChrTypeFromString(prefix)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown chr device type '%s'"), prefix); _("unknown chr device type '%s'"), prefix);
goto error; goto error;
@ -217,15 +217,15 @@ xenParseSxprChar(const char *value,
} }
} }
switch (def->source.type) { switch (def->source->type) {
case VIR_DOMAIN_CHR_TYPE_PTY: case VIR_DOMAIN_CHR_TYPE_PTY:
if (VIR_STRDUP(def->source.data.file.path, tty) < 0) if (VIR_STRDUP(def->source->data.file.path, tty) < 0)
goto error; goto error;
break; break;
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
case VIR_DOMAIN_CHR_TYPE_PIPE: case VIR_DOMAIN_CHR_TYPE_PIPE:
if (VIR_STRDUP(def->source.data.file.path, value) < 0) if (VIR_STRDUP(def->source->data.file.path, value) < 0)
goto error; goto error;
break; break;
@ -241,17 +241,17 @@ xenParseSxprChar(const char *value,
} }
if (offset != value && if (offset != value &&
VIR_STRNDUP(def->source.data.tcp.host, value, offset - value) < 0) VIR_STRNDUP(def->source->data.tcp.host, value, offset - value) < 0)
goto error; goto error;
offset2 = strchr(offset, ','); offset2 = strchr(offset, ',');
offset++; offset++;
if (VIR_STRNDUP(def->source.data.tcp.service, offset, if (VIR_STRNDUP(def->source->data.tcp.service, offset,
offset2 ? offset2 - offset : -1) < 0) offset2 ? offset2 - offset : -1) < 0)
goto error; goto error;
if (offset2 && strstr(offset2, ",server")) if (offset2 && strstr(offset2, ",server"))
def->source.data.tcp.listen = true; def->source->data.tcp.listen = true;
} }
break; break;
@ -267,12 +267,12 @@ xenParseSxprChar(const char *value,
} }
if (offset != value && if (offset != value &&
VIR_STRNDUP(def->source.data.udp.connectHost, value, offset - value) < 0) VIR_STRNDUP(def->source->data.udp.connectHost, value, offset - value) < 0)
goto error; goto error;
offset2 = strchr(offset, '@'); offset2 = strchr(offset, '@');
if (offset2 != NULL) { if (offset2 != NULL) {
if (VIR_STRNDUP(def->source.data.udp.connectService, if (VIR_STRNDUP(def->source->data.udp.connectService,
offset + 1, offset2 - offset - 1) < 0) offset + 1, offset2 - offset - 1) < 0)
goto error; goto error;
@ -284,14 +284,14 @@ xenParseSxprChar(const char *value,
} }
if (offset3 > (offset2 + 1) && if (offset3 > (offset2 + 1) &&
VIR_STRNDUP(def->source.data.udp.bindHost, VIR_STRNDUP(def->source->data.udp.bindHost,
offset2 + 1, offset3 - offset2 - 1) < 0) offset2 + 1, offset3 - offset2 - 1) < 0)
goto error; goto error;
if (VIR_STRDUP(def->source.data.udp.bindService, offset3 + 1) < 0) if (VIR_STRDUP(def->source->data.udp.bindService, offset3 + 1) < 0)
goto error; goto error;
} else { } else {
if (VIR_STRDUP(def->source.data.udp.connectService, offset + 1) < 0) if (VIR_STRDUP(def->source->data.udp.connectService, offset + 1) < 0)
goto error; goto error;
} }
} }
@ -300,13 +300,13 @@ xenParseSxprChar(const char *value,
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
{ {
const char *offset = strchr(value, ','); const char *offset = strchr(value, ',');
if (VIR_STRNDUP(def->source.data.nix.path, value, if (VIR_STRNDUP(def->source->data.nix.path, value,
offset ? offset - value : -1) < 0) offset ? offset - value : -1) < 0)
goto error; goto error;
if (offset != NULL && if (offset != NULL &&
strstr(offset, ",server") != NULL) strstr(offset, ",server") != NULL)
def->source.data.nix.listen = true; def->source->data.nix.listen = true;
} }
break; break;
} }
@ -1630,7 +1630,7 @@ int
xenFormatSxprChr(virDomainChrDefPtr def, xenFormatSxprChr(virDomainChrDefPtr def,
virBufferPtr buf) virBufferPtr buf)
{ {
const char *type = virDomainChrTypeToString(def->source.type); const char *type = virDomainChrTypeToString(def->source->type);
if (!type) { if (!type) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
@ -1638,7 +1638,7 @@ xenFormatSxprChr(virDomainChrDefPtr def,
return -1; return -1;
} }
switch (def->source.type) { switch (def->source->type) {
case VIR_DOMAIN_CHR_TYPE_NULL: case VIR_DOMAIN_CHR_TYPE_NULL:
case VIR_DOMAIN_CHR_TYPE_STDIO: case VIR_DOMAIN_CHR_TYPE_STDIO:
case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_VC:
@ -1649,42 +1649,42 @@ xenFormatSxprChr(virDomainChrDefPtr def,
case VIR_DOMAIN_CHR_TYPE_FILE: case VIR_DOMAIN_CHR_TYPE_FILE:
case VIR_DOMAIN_CHR_TYPE_PIPE: case VIR_DOMAIN_CHR_TYPE_PIPE:
virBufferAsprintf(buf, "%s:", type); virBufferAsprintf(buf, "%s:", type);
virBufferEscapeSexpr(buf, "%s", def->source.data.file.path); virBufferEscapeSexpr(buf, "%s", def->source->data.file.path);
break; break;
case VIR_DOMAIN_CHR_TYPE_DEV: case VIR_DOMAIN_CHR_TYPE_DEV:
virBufferEscapeSexpr(buf, "%s", def->source.data.file.path); virBufferEscapeSexpr(buf, "%s", def->source->data.file.path);
break; break;
case VIR_DOMAIN_CHR_TYPE_TCP: case VIR_DOMAIN_CHR_TYPE_TCP:
virBufferAsprintf(buf, "%s:%s:%s%s", virBufferAsprintf(buf, "%s:%s:%s%s",
(def->source.data.tcp.protocol (def->source->data.tcp.protocol
== VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW ? == VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW ?
"tcp" : "telnet"), "tcp" : "telnet"),
(def->source.data.tcp.host ? (def->source->data.tcp.host ?
def->source.data.tcp.host : ""), def->source->data.tcp.host : ""),
(def->source.data.tcp.service ? (def->source->data.tcp.service ?
def->source.data.tcp.service : ""), def->source->data.tcp.service : ""),
(def->source.data.tcp.listen ? (def->source->data.tcp.listen ?
",server,nowait" : "")); ",server,nowait" : ""));
break; break;
case VIR_DOMAIN_CHR_TYPE_UDP: case VIR_DOMAIN_CHR_TYPE_UDP:
virBufferAsprintf(buf, "%s:%s:%s@%s:%s", type, virBufferAsprintf(buf, "%s:%s:%s@%s:%s", type,
(def->source.data.udp.connectHost ? (def->source->data.udp.connectHost ?
def->source.data.udp.connectHost : ""), def->source->data.udp.connectHost : ""),
(def->source.data.udp.connectService ? (def->source->data.udp.connectService ?
def->source.data.udp.connectService : ""), def->source->data.udp.connectService : ""),
(def->source.data.udp.bindHost ? (def->source->data.udp.bindHost ?
def->source.data.udp.bindHost : ""), def->source->data.udp.bindHost : ""),
(def->source.data.udp.bindService ? (def->source->data.udp.bindService ?
def->source.data.udp.bindService : "")); def->source->data.udp.bindService : ""));
break; break;
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
virBufferAsprintf(buf, "%s:", type); virBufferAsprintf(buf, "%s:", type);
virBufferEscapeSexpr(buf, "%s", def->source.data.nix.path); virBufferEscapeSexpr(buf, "%s", def->source->data.nix.path);
if (def->source.data.nix.listen) if (def->source->data.nix.listen)
virBufferAddLit(buf, ",server,nowait"); virBufferAddLit(buf, ",server,nowait");
break; break;

View File

@ -741,11 +741,11 @@ xenParseXLChannel(virConfPtr conf, virDomainDefPtr def)
goto cleanup; goto cleanup;
if (STRPREFIX(type, "socket")) { if (STRPREFIX(type, "socket")) {
channel->source.type = VIR_DOMAIN_CHR_TYPE_UNIX; channel->source->type = VIR_DOMAIN_CHR_TYPE_UNIX;
channel->source.data.nix.path = path; channel->source->data.nix.path = path;
channel->source.data.nix.listen = 1; channel->source->data.nix.listen = 1;
} else if (STRPREFIX(type, "pty")) { } else if (STRPREFIX(type, "pty")) {
channel->source.type = VIR_DOMAIN_CHR_TYPE_PTY; channel->source->type = VIR_DOMAIN_CHR_TYPE_PTY;
VIR_FREE(path); VIR_FREE(path);
} else { } else {
goto cleanup; goto cleanup;
@ -1442,7 +1442,7 @@ static int
xenFormatXLChannel(virConfValuePtr list, virDomainChrDefPtr channel) xenFormatXLChannel(virConfValuePtr list, virDomainChrDefPtr channel)
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
int sourceType = channel->source.type; int sourceType = channel->source->type;
virConfValuePtr val, tmp; virConfValuePtr val, tmp;
/* connection */ /* connection */
@ -1454,9 +1454,9 @@ xenFormatXLChannel(virConfValuePtr list, virDomainChrDefPtr channel)
case VIR_DOMAIN_CHR_TYPE_UNIX: case VIR_DOMAIN_CHR_TYPE_UNIX:
virBufferAddLit(&buf, "socket,"); virBufferAddLit(&buf, "socket,");
/* path */ /* path */
if (channel->source.data.nix.path) if (channel->source->data.nix.path)
virBufferAsprintf(&buf, "path=%s,", virBufferAsprintf(&buf, "path=%s,",
channel->source.data.nix.path); channel->source->data.nix.path);
break; break;
default: default:
goto cleanup; goto cleanup;

View File

@ -202,17 +202,17 @@ testSELinuxLoadDef(const char *testname)
} }
for (i = 0; i < def->nserials; i++) { for (i = 0; i < def->nserials; i++) {
if (def->serials[i]->source.type != VIR_DOMAIN_CHR_TYPE_FILE && if (def->serials[i]->source->type != VIR_DOMAIN_CHR_TYPE_FILE &&
def->serials[i]->source.type != VIR_DOMAIN_CHR_TYPE_PIPE && def->serials[i]->source->type != VIR_DOMAIN_CHR_TYPE_PIPE &&
def->serials[i]->source.type != VIR_DOMAIN_CHR_TYPE_DEV && def->serials[i]->source->type != VIR_DOMAIN_CHR_TYPE_DEV &&
def->serials[i]->source.type != VIR_DOMAIN_CHR_TYPE_UNIX) def->serials[i]->source->type != VIR_DOMAIN_CHR_TYPE_UNIX)
continue; continue;
if (def->serials[i]->source.type == VIR_DOMAIN_CHR_TYPE_UNIX) { if (def->serials[i]->source->type == VIR_DOMAIN_CHR_TYPE_UNIX) {
if (testSELinuxMungePath(&def->serials[i]->source.data.nix.path) < 0) if (testSELinuxMungePath(&def->serials[i]->source->data.nix.path) < 0)
goto cleanup; goto cleanup;
} else { } else {
if (testSELinuxMungePath(&def->serials[i]->source.data.file.path) < 0) if (testSELinuxMungePath(&def->serials[i]->source->data.file.path) < 0)
goto cleanup; goto cleanup;
} }
} }