}
-char *
-qemuBuildWatchdogDevStr(const virDomainDef *def,
- virDomainWatchdogDef *dev,
- virQEMUCaps *qemuCaps G_GNUC_UNUSED)
+virJSONValue *
+qemuBuildWatchdogDevProps(const virDomainDef *def,
+ virDomainWatchdogDef *dev)
{
- g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+ g_autoptr(virJSONValue) props = NULL;
- virBufferAsprintf(&buf, "%s,id=%s",
- virDomainWatchdogModelTypeToString(dev->model),
- dev->info.alias);
+ if (virJSONValueObjectCreate(&props,
+ "s:driver", virDomainWatchdogModelTypeToString(dev->model),
+ "s:id", dev->info.alias,
+ NULL) < 0)
+ return NULL;
- if (qemuBuildDeviceAddressStr(&buf, def, &dev->info) < 0)
+ if (qemuBuildDeviceAddressProps(props, def, &dev->info) < 0)
return NULL;
- return virBufferContentAndReset(&buf);
+ return g_steal_pointer(&props);
}
virQEMUCaps *qemuCaps)
{
virDomainWatchdogDef *watchdog = def->watchdog;
- g_autofree char *optstr = NULL;
+ g_autoptr(virJSONValue) props = NULL;
const char *action;
int actualAction;
if (qemuCommandAddExtDevice(cmd, &def->watchdog->info) < 0)
return -1;
- virCommandAddArg(cmd, "-device");
-
- optstr = qemuBuildWatchdogDevStr(def, watchdog, qemuCaps);
- if (!optstr)
+ if (!(props = qemuBuildWatchdogDevProps(def, watchdog)))
return -1;
- virCommandAddArg(cmd, optstr);
+ if (qemuBuildDeviceCommandlineFromJSON(cmd, props, qemuCaps))
+ return -1;
/* qemu doesn't have a 'dump' action; we tell qemu to 'pause', then
libvirt listens for the watchdog event, and we perform the dump
virQEMUCaps *qemuCaps)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
-char *qemuBuildWatchdogDevStr(const virDomainDef *def,
- virDomainWatchdogDef *dev,
- virQEMUCaps *qemuCaps);
+virJSONValue *
+qemuBuildWatchdogDevProps(const virDomainDef *def,
+ virDomainWatchdogDef *dev);
int qemuBuildInputDevStr(char **devstr,
const virDomainDef *def,
int ret = -1;
qemuDomainObjPrivate *priv = vm->privateData;
virDomainDeviceDef dev = { VIR_DOMAIN_DEVICE_WATCHDOG, { .watchdog = watchdog } };
- g_autofree char *watchdogstr = NULL;
+ g_autoptr(virJSONValue) props = NULL;
bool releaseAddress = false;
int rv;
goto cleanup;
}
- if (!(watchdogstr = qemuBuildWatchdogDevStr(vm->def, watchdog, priv->qemuCaps)))
+ if (!(props = qemuBuildWatchdogDevProps(vm->def, watchdog)))
goto cleanup;
qemuDomainObjEnterMonitor(driver, vm);
}
if (rv >= 0)
- rv = qemuMonitorAddDevice(priv->mon, watchdogstr);
+ rv = qemuMonitorAddDeviceProps(priv->mon, &props);
if (qemuDomainObjExitMonitor(driver, vm) < 0) {
releaseAddress = false;