return ret;
}
+int qemuMonitorSetLink(qemuMonitorPtr mon,
+ const char *name,
+ enum virDomainNetInterfaceLinkState state)
+{
+ int ret;
+ VIR_DEBUG("mon=%p, name=%p:%s, state=%u", mon, name, name, state);
+
+ if (!mon || !name) {
+ qemuReportError(VIR_ERR_INVALID_ARG,
+ _("monitor || name must not be NULL"));
+ return -1;
+ }
+
+ if (mon->json)
+ ret = qemuMonitorJSONSetLink(mon, name, state);
+ else
+ ret = qemuMonitorTextSetLink(mon, name, state);
+ return ret;
+}
int qemuMonitorGetVirtType(qemuMonitorPtr mon,
int *virtType)
int qemuMonitorRef(qemuMonitorPtr mon);
int qemuMonitorUnref(qemuMonitorPtr mon) ATTRIBUTE_RETURN_CHECK;
+int qemuMonitorSetLink(qemuMonitorPtr mon,
+ const char *name,
+ enum virDomainNetInterfaceLinkState state) ;
+
/* These APIs are for use by the internal Text/JSON monitor impl code only */
char *qemuMonitorNextCommandID(qemuMonitorPtr mon);
int qemuMonitorSend(qemuMonitorPtr mon,
return ret;
}
+int qemuMonitorJSONSetLink(qemuMonitorPtr mon,
+ const char *name,
+ enum virDomainNetInterfaceLinkState state)
+{
+
+ int ret;
+ virJSONValuePtr reply = NULL;
+ virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("set_link",
+ "s:name", name,
+ "b:up", state != VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN,
+ NULL);
+
+ if (!cmd)
+ return -1;
+
+ if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) == 0)
+ ret = qemuMonitorJSONCheckError(cmd, reply);
+
+ virJSONValueFree(cmd);
+ virJSONValueFree(reply);
+
+ return ret;
+}
int qemuMonitorJSONSystemReset(qemuMonitorPtr mon)
{
virDomainBlockJobInfoPtr info,
int mode);
+int qemuMonitorJSONSetLink(qemuMonitorPtr mon,
+ const char *name,
+ enum virDomainNetInterfaceLinkState state);
+
#endif /* QEMU_MONITOR_JSON_H */
return 0;
}
+int qemuMonitorTextSetLink(qemuMonitorPtr mon, const char *name, enum virDomainNetInterfaceLinkState state) {
+ char *info = NULL;
+ char *cmd = NULL;
+ const char *st_str = NULL;
+
+ /* determine state */
+ if (state == VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN)
+ st_str = "off";
+ else
+ st_str = "on";
+
+ if (virAsprintf(&cmd, "set_link %s %s", name, st_str) < 0) {
+ virReportOOMError();
+ goto error;
+ }
+ if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) {
+ qemuReportError(VIR_ERR_OPERATION_FAILED,
+ "%s", _("set_link operation failed"));
+ goto error;
+ }
+
+ /* check if set_link command is supported */
+ if (strstr(info, "\nunknown ")) {
+ qemuReportError(VIR_ERR_NO_SUPPORT,
+ "%s",
+ _("\'set_link\' not supported by this qemu"));
+ goto error;
+ }
+
+ /* check if qemu didn't reject device name */
+ if (strstr(info, "\nDevice ")) {
+ qemuReportError(VIR_ERR_OPERATION_FAILED,
+ "%s", _("device name rejected"));
+ goto error;
+ }
+
+ VIR_FREE(info);
+ VIR_FREE(cmd);
+ return 0;
+
+error:
+ VIR_FREE(info);
+ VIR_FREE(cmd);
+
+ return -1;
+}
int qemuMonitorTextSystemReset(qemuMonitorPtr mon) {
char *info;
virDomainBlockJobInfoPtr info,
int mode);
+int qemuMonitorTextSetLink(qemuMonitorPtr mon,
+ const char *name,
+ enum virDomainNetInterfaceLinkState state);
+
#endif /* QEMU_MONITOR_TEXT_H */