mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemuBuildChannelChrDeviceStr: Remove formatting of properties for -netdev
The output of the function is fed as argument to '-device' command line argument or 'device_add' monitor command except for 'guestfwd' channels where it needs to be fed to -netdev/netdev_add. This is confusing and error prone. Split it up since the caller needs to know which command/option to use anyways, so the caller can call the appropriate function without any magic. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
63e5124ac1
commit
202bb53cc2
@ -8546,7 +8546,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
|||||||
|
|
||||||
switch ((virDomainChrChannelTargetType) channel->targetType) {
|
switch ((virDomainChrChannelTargetType) channel->targetType) {
|
||||||
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
|
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
|
||||||
if (qemuBuildChrDeviceStr(&netdevstr, def, channel, qemuCaps) < 0)
|
if (!(netdevstr = qemuBuildChannelGuestfwdNetdevProps(channel)))
|
||||||
return -1;
|
return -1;
|
||||||
virCommandAddArgList(cmd, "-netdev", netdevstr, NULL);
|
virCommandAddArgList(cmd, "-netdev", netdevstr, NULL);
|
||||||
break;
|
break;
|
||||||
@ -9814,36 +9814,40 @@ qemuBuildParallelChrDeviceStr(char **deviceStr,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
qemuBuildChannelGuestfwdNetdevProps(virDomainChrDefPtr chr)
|
||||||
|
{
|
||||||
|
g_autofree char *addr = NULL;
|
||||||
|
int port;
|
||||||
|
|
||||||
|
if (!(addr = virSocketAddrFormat(chr->target.addr)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
port = virSocketAddrGetPort(chr->target.addr);
|
||||||
|
|
||||||
|
return g_strdup_printf("user,guestfwd=tcp:%s:%i-chardev:char%s,id=%s",
|
||||||
|
addr, port, chr->info.alias, chr->info.alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildChannelChrDeviceStr(char **deviceStr,
|
qemuBuildChannelChrDeviceStr(char **deviceStr,
|
||||||
const virDomainDef *def,
|
const virDomainDef *def,
|
||||||
virDomainChrDefPtr chr)
|
virDomainChrDefPtr chr)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
|
||||||
g_autofree char *addr = NULL;
|
|
||||||
int port;
|
|
||||||
|
|
||||||
switch ((virDomainChrChannelTargetType)chr->targetType) {
|
switch ((virDomainChrChannelTargetType)chr->targetType) {
|
||||||
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
|
|
||||||
|
|
||||||
addr = virSocketAddrFormat(chr->target.addr);
|
|
||||||
if (!addr)
|
|
||||||
return ret;
|
|
||||||
port = virSocketAddrGetPort(chr->target.addr);
|
|
||||||
|
|
||||||
*deviceStr = g_strdup_printf("user,guestfwd=tcp:%s:%i-chardev:char%s,id=%s",
|
|
||||||
addr, port, chr->info.alias, chr->info.alias);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
|
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
|
||||||
if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(def, chr)))
|
if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(def, chr)))
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
|
||||||
|
/* guestfwd is as a netdev handled separately */
|
||||||
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
|
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN:
|
||||||
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_NONE:
|
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_NONE:
|
||||||
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST:
|
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST:
|
||||||
return ret;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -86,6 +86,9 @@ qemuBuildChrDeviceStr(char **deviceStr,
|
|||||||
virDomainChrDefPtr chr,
|
virDomainChrDefPtr chr,
|
||||||
virQEMUCapsPtr qemuCaps);
|
virQEMUCapsPtr qemuCaps);
|
||||||
|
|
||||||
|
char *
|
||||||
|
qemuBuildChannelGuestfwdNetdevProps(virDomainChrDefPtr chr);
|
||||||
|
|
||||||
char *qemuBuildHostNetStr(virDomainNetDefPtr net,
|
char *qemuBuildHostNetStr(virDomainNetDefPtr net,
|
||||||
char **tapfd,
|
char **tapfd,
|
||||||
size_t tapfdSize,
|
size_t tapfdSize,
|
||||||
|
@ -2108,6 +2108,7 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
|
|||||||
virErrorPtr orig_err;
|
virErrorPtr orig_err;
|
||||||
virDomainDefPtr vmdef = vm->def;
|
virDomainDefPtr vmdef = vm->def;
|
||||||
g_autofree char *devstr = NULL;
|
g_autofree char *devstr = NULL;
|
||||||
|
g_autofree char *netdevstr = NULL;
|
||||||
virDomainChrSourceDefPtr dev = chr->source;
|
virDomainChrSourceDefPtr dev = chr->source;
|
||||||
g_autofree char *charAlias = NULL;
|
g_autofree char *charAlias = NULL;
|
||||||
bool chardevAttached = false;
|
bool chardevAttached = false;
|
||||||
@ -2146,8 +2147,13 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
teardowncgroup = true;
|
teardowncgroup = true;
|
||||||
|
|
||||||
if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0)
|
if (guestfwd) {
|
||||||
goto cleanup;
|
if (!(netdevstr = qemuBuildChannelGuestfwdNetdevProps(chr)))
|
||||||
|
goto cleanup;
|
||||||
|
} else {
|
||||||
|
if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(charAlias = qemuAliasChardevFromDevAlias(chr->info.alias)))
|
if (!(charAlias = qemuAliasChardevFromDevAlias(chr->info.alias)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2166,11 +2172,13 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
|
|||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
chardevAttached = true;
|
chardevAttached = true;
|
||||||
|
|
||||||
if (guestfwd) {
|
if (netdevstr) {
|
||||||
if (qemuMonitorAddNetdev(priv->mon, devstr,
|
if (qemuMonitorAddNetdev(priv->mon, netdevstr,
|
||||||
NULL, NULL, 0, NULL, NULL, 0, -1, NULL) < 0)
|
NULL, NULL, 0, NULL, NULL, 0, -1, NULL) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (devstr) {
|
||||||
if (qemuMonitorAddDevice(priv->mon, devstr) < 0)
|
if (qemuMonitorAddDevice(priv->mon, devstr) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user