}
+static int
+qemuBuildNetdevCommandlineFromJSON(virCommand *cmd,
+ virJSONValue *props,
+ virQEMUCaps *qemuCaps)
+{
+ g_autofree char *arg = NULL;
+
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NETDEV_JSON)) {
+ if (!(arg = virJSONValueToString(props, false)))
+ return -1;
+ } else {
+ const char *type = virJSONValueObjectGetString(props, "type");
+ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+
+ virBufferAsprintf(&buf, "%s,", type);
+
+ if (virQEMUBuildCommandLineJSON(props, &buf, "type",
+ virQEMUBuildCommandLineJSONArrayObjectsStr) < 0)
+ return -1;
+
+ arg = virBufferContentAndReset(&buf);
+ }
+
+ virCommandAddArgList(cmd, "-netdev", arg, NULL);
+ return 0;
+}
+
+
/**
* qemuBuildMasterKeyCommandLine:
* @cmd: the command to modify
virNetDevVPortProfileOp vmop,
bool standalone,
size_t *nnicindexes,
- int **nicindexes,
- unsigned int flags)
+ int **nicindexes)
{
virDomainDef *def = vm->def;
int ret = -1;
g_autofree char *nic = NULL;
- g_autofree char *host = NULL;
g_autofree char *chardev = NULL;
int *tapfd = NULL;
size_t tapfdSize = 0;
slirpfdName, vdpafdName)))
goto cleanup;
- if (!(host = virQEMUBuildNetdevCommandlineFromJSON(hostnetprops,
- (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON))))
+ if (qemuBuildNetdevCommandlineFromJSON(cmd, hostnetprops, qemuCaps) < 0)
goto cleanup;
- virCommandAddArgList(cmd, "-netdev", host, NULL);
-
/* Possible combinations:
*
* Old way: -netdev type=tap,id=netdev1 \
bool standalone,
size_t *nnicindexes,
int **nicindexes,
- unsigned int *bootHostdevNet,
- unsigned int flags)
+ unsigned int *bootHostdevNet)
{
size_t i;
int last_good_net = -1;
if (qemuBuildInterfaceCommandLine(driver, vm, logManager, secManager, cmd, net,
qemuCaps, bootNet, vmop,
standalone, nnicindexes,
- nicindexes, flags) < 0)
+ nicindexes) < 0)
goto error;
last_good_net = i;
virQEMUDriverConfig *cfg,
const virDomainDef *def,
virQEMUCaps *qemuCaps,
- bool chardevStdioLogd,
- unsigned int flags)
+ bool chardevStdioLogd)
{
size_t i;
unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
virDomainChrDef *channel = def->channels[i];
g_autofree char *chardevstr = NULL;
g_autoptr(virJSONValue) netdevprops = NULL;
- g_autofree char *netdevstr = NULL;
if (!(chardevstr = qemuBuildChrChardevStr(logManager, secManager,
cmd, cfg, def,
if (!(netdevprops = qemuBuildChannelGuestfwdNetdevProps(channel)))
return -1;
- if (!(netdevstr = virQEMUBuildNetdevCommandlineFromJSON(netdevprops,
- (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON))))
+ if (qemuBuildNetdevCommandlineFromJSON(cmd, netdevprops, qemuCaps) < 0)
return -1;
-
- virCommandAddArgList(cmd, "-netdev", netdevstr, NULL);
break;
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
if (qemuBuildNetCommandLine(driver, vm, logManager, secManager, cmd,
qemuCaps, vmop, standalone,
- nnicindexes, nicindexes, &bootHostdevNet, flags) < 0)
+ nnicindexes, nicindexes, &bootHostdevNet) < 0)
return NULL;
if (qemuBuildSmartcardCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps,
return NULL;
if (qemuBuildChannelsCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps,
- chardevStdioLogd, flags) < 0)
+ chardevStdioLogd) < 0)
return NULL;
if (qemuBuildConsoleCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps,