Commands in node device group moved from virsh.c to virsh-nodedev.c,
* virsh.c: Remove commands in node device group.
* virsh-nodedev.c: New file, filled with commands in node device group
---
tools/virsh-nodedev.c | 383 +++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh.c | 360 +---------------------------------------------
2 files changed, 385 insertions(+), 358 deletions(-)
create mode 100644 tools/virsh-nodedev.c
diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
new file mode 100644
index 0000000..ee9a6fd
--- /dev/null
+++ b/tools/virsh-nodedev.c
@@ -0,0 +1,383 @@
+/*
+ * virsh-nodedev.c: Commands in node device group
+ *
+ * Copyright (C) 2005, 2007-2012 Red Hat, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; If not, see
+ * <
http://www.gnu.org/licenses/>.
+ *
+ * Daniel Veillard <veillard(a)redhat.com>
+ * Karel Zak <kzak(a)redhat.com>
+ * Daniel P. Berrange <berrange(a)redhat.com>
+ *
+ */
+
+/*
+ * "nodedev-create" command
+ */
+static const vshCmdInfo info_node_device_create[] = {
+ {"help", N_("create a device defined "
+ "by an XML file on the node")},
+ {"desc", N_("Create a device on the node. Note that this "
+ "command creates devices on the physical host "
+ "that can then be assigned to a virtual machine.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_node_device_create[] = {
+ {"file", VSH_OT_DATA, VSH_OFLAG_REQ,
+ N_("file containing an XML description of the device")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeDeviceCreate(vshControl *ctl, const vshCmd *cmd)
+{
+ virNodeDevicePtr dev = NULL;
+ const char *from = NULL;
+ bool ret = true;
+ char *buffer;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+
+ if (vshCommandOptString(cmd, "file", &from) <= 0)
+ return false;
+
+ if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ return false;
+
+ dev = virNodeDeviceCreateXML(ctl->conn, buffer, 0);
+ VIR_FREE(buffer);
+
+ if (dev != NULL) {
+ vshPrint(ctl, _("Node device %s created from %s\n"),
+ virNodeDeviceGetName(dev), from);
+ virNodeDeviceFree(dev);
+ } else {
+ vshError(ctl, _("Failed to create node device from %s"), from);
+ ret = false;
+ }
+
+ return ret;
+}
+
+
+/*
+ * "nodedev-destroy" command
+ */
+static const vshCmdInfo info_node_device_destroy[] = {
+ {"help", N_("destroy (stop) a device on the node")},
+ {"desc", N_("Destroy a device on the node. Note that this "
+ "command destroys devices on the physical host")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_node_device_destroy[] = {
+ {"name", VSH_OT_DATA, VSH_OFLAG_REQ,
+ N_("name of the device to be destroyed")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeDeviceDestroy(vshControl *ctl, const vshCmd *cmd)
+{
+ virNodeDevicePtr dev = NULL;
+ bool ret = true;
+ const char *name = NULL;
+
+ if (!vshConnectionUsability(ctl, ctl->conn)) {
+ return false;
+ }
+
+ if (vshCommandOptString(cmd, "name", &name) <= 0)
+ return false;
+
+ dev = virNodeDeviceLookupByName(ctl->conn, name);
+
+ if (virNodeDeviceDestroy(dev) == 0) {
+ vshPrint(ctl, _("Destroyed node device '%s'\n"), name);
+ } else {
+ vshError(ctl, _("Failed to destroy node device '%s'"), name);
+ ret = false;
+ }
+
+ virNodeDeviceFree(dev);
+ return ret;
+}
+
+struct vshNodeList {
+ char **names;
+ char **parents;
+};
+
+static const char *
+vshNodeListLookup(int devid, bool parent, void *opaque)
+{
+ struct vshNodeList *arrays = opaque;
+ if (parent)
+ return arrays->parents[devid];
+ return arrays->names[devid];
+}
+
+/*
+ * "nodedev-list" command
+ */
+static const vshCmdInfo info_node_list_devices[] = {
+ {"help", N_("enumerate devices on this host")},
+ {"desc", ""},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_node_list_devices[] = {
+ {"tree", VSH_OT_BOOL, 0, N_("list devices in a tree")},
+ {"cap", VSH_OT_STRING, VSH_OFLAG_NONE, N_("capability name")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
+{
+ const char *cap = NULL;
+ char **devices;
+ int num_devices, i;
+ bool tree = vshCommandOptBool(cmd, "tree");
+ bool ret = true;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+
+ if (vshCommandOptString(cmd, "cap", &cap) <= 0)
+ cap = NULL;
+
+ num_devices = virNodeNumOfDevices(ctl->conn, cap, 0);
+ if (num_devices < 0) {
+ vshError(ctl, "%s", _("Failed to count node devices"));
+ return false;
+ } else if (num_devices == 0) {
+ return true;
+ }
+
+ devices = vshMalloc(ctl, sizeof(char *) * num_devices);
+ num_devices =
+ virNodeListDevices(ctl->conn, cap, devices, num_devices, 0);
+ if (num_devices < 0) {
+ vshError(ctl, "%s", _("Failed to list node devices"));
+ VIR_FREE(devices);
+ return false;
+ }
+ qsort(&devices[0], num_devices, sizeof(char*), vshNameSorter);
+ if (tree) {
+ char **parents = vshMalloc(ctl, sizeof(char *) * num_devices);
+ struct vshNodeList arrays = { devices, parents };
+
+ for (i = 0; i < num_devices; i++) {
+ virNodeDevicePtr dev = virNodeDeviceLookupByName(ctl->conn, devices[i]);
+ if (dev && STRNEQ(devices[i], "computer")) {
+ const char *parent = virNodeDeviceGetParent(dev);
+ parents[i] = parent ? vshStrdup(ctl, parent) : NULL;
+ } else {
+ parents[i] = NULL;
+ }
+ virNodeDeviceFree(dev);
+ }
+ for (i = 0 ; i < num_devices ; i++) {
+ if (parents[i] == NULL &&
+ vshTreePrint(ctl, vshNodeListLookup, &arrays, num_devices,
+ i) < 0)
+ ret = false;
+ }
+ for (i = 0 ; i < num_devices ; i++) {
+ VIR_FREE(devices[i]);
+ VIR_FREE(parents[i]);
+ }
+ VIR_FREE(parents);
+ } else {
+ for (i = 0; i < num_devices; i++) {
+ vshPrint(ctl, "%s\n", devices[i]);
+ VIR_FREE(devices[i]);
+ }
+ }
+ VIR_FREE(devices);
+ return ret;
+}
+
+/*
+ * "nodedev-dumpxml" command
+ */
+static const vshCmdInfo info_node_device_dumpxml[] = {
+ {"help", N_("node device details in XML")},
+ {"desc", N_("Output the node device details as an XML dump to
stdout.")},
+ {NULL, NULL}
+};
+
+
+static const vshCmdOptDef opts_node_device_dumpxml[] = {
+ {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeDeviceDumpXML(vshControl *ctl, const vshCmd *cmd)
+{
+ const char *name = NULL;
+ virNodeDevicePtr device;
+ char *xml;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
+ return false;
+ if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
+ vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
+ return false;
+ }
+
+ xml = virNodeDeviceGetXMLDesc(device, 0);
+ if (!xml) {
+ virNodeDeviceFree(device);
+ return false;
+ }
+
+ vshPrint(ctl, "%s\n", xml);
+ VIR_FREE(xml);
+ virNodeDeviceFree(device);
+ return true;
+}
+
+/*
+ * "nodedev-detach" command
+ */
+static const vshCmdInfo info_node_device_detach[] = {
+ {"help", N_("detach node device from its device driver")},
+ {"desc", N_("Detach node device from its device driver before
assigning to a domain.")},
+ {NULL, NULL}
+};
+
+
+static const vshCmdOptDef opts_node_device_detach[] = {
+ {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeDeviceDetach(vshControl *ctl, const vshCmd *cmd)
+{
+ const char *name = NULL;
+ virNodeDevicePtr device;
+ bool ret = true;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
+ return false;
+ if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
+ vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
+ return false;
+ }
+
+ /* Yes, our public API is misspelled. At least virsh can accept
+ * either spelling. */
+ if (virNodeDeviceDettach(device) == 0) {
+ vshPrint(ctl, _("Device %s detached\n"), name);
+ } else {
+ vshError(ctl, _("Failed to detach device %s"), name);
+ ret = false;
+ }
+ virNodeDeviceFree(device);
+ return ret;
+}
+
+/*
+ * "nodedev-reattach" command
+ */
+static const vshCmdInfo info_node_device_reattach[] = {
+ {"help", N_("reattach node device to its device driver")},
+ {"desc", N_("Reattach node device to its device driver once released
by the domain.")},
+ {NULL, NULL}
+};
+
+
+static const vshCmdOptDef opts_node_device_reattach[] = {
+ {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeDeviceReAttach(vshControl *ctl, const vshCmd *cmd)
+{
+ const char *name = NULL;
+ virNodeDevicePtr device;
+ bool ret = true;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
+ return false;
+ if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
+ vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
+ return false;
+ }
+
+ if (virNodeDeviceReAttach(device) == 0) {
+ vshPrint(ctl, _("Device %s re-attached\n"), name);
+ } else {
+ vshError(ctl, _("Failed to re-attach device %s"), name);
+ ret = false;
+ }
+ virNodeDeviceFree(device);
+ return ret;
+}
+
+/*
+ * "nodedev-reset" command
+ */
+static const vshCmdInfo info_node_device_reset[] = {
+ {"help", N_("reset node device")},
+ {"desc", N_("Reset node device before or after assigning to a
domain.")},
+ {NULL, NULL}
+};
+
+
+static const vshCmdOptDef opts_node_device_reset[] = {
+ {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdNodeDeviceReset(vshControl *ctl, const vshCmd *cmd)
+{
+ const char *name = NULL;
+ virNodeDevicePtr device;
+ bool ret = true;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+ if (vshCommandOptString(cmd, "device", &name) <= 0)
+ return false;
+ if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
+ vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
+ return false;
+ }
+
+ if (virNodeDeviceReset(device) == 0) {
+ vshPrint(ctl, _("Device %s reset\n"), name);
+ } else {
+ vshError(ctl, _("Failed to reset device %s"), name);
+ ret = false;
+ }
+ virNodeDeviceFree(device);
+ return ret;
+}
+
diff --git a/tools/virsh.c b/tools/virsh.c
index 1d878b9..e461410 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -746,100 +746,6 @@ cmdHelp(vshControl *ctl, const vshCmd *cmd)
}
}
-/*
- * "nodedev-create" command
- */
-static const vshCmdInfo info_node_device_create[] = {
- {"help", N_("create a device defined "
- "by an XML file on the node")},
- {"desc", N_("Create a device on the node. Note that this "
- "command creates devices on the physical host "
- "that can then be assigned to a virtual machine.")},
- {NULL, NULL}
-};
-
-static const vshCmdOptDef opts_node_device_create[] = {
- {"file", VSH_OT_DATA, VSH_OFLAG_REQ,
- N_("file containing an XML description of the device")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeDeviceCreate(vshControl *ctl, const vshCmd *cmd)
-{
- virNodeDevicePtr dev = NULL;
- const char *from = NULL;
- bool ret = true;
- char *buffer;
-
- if (!vshConnectionUsability(ctl, ctl->conn))
- return false;
-
- if (vshCommandOptString(cmd, "file", &from) <= 0)
- return false;
-
- if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
- return false;
-
- dev = virNodeDeviceCreateXML(ctl->conn, buffer, 0);
- VIR_FREE(buffer);
-
- if (dev != NULL) {
- vshPrint(ctl, _("Node device %s created from %s\n"),
- virNodeDeviceGetName(dev), from);
- virNodeDeviceFree(dev);
- } else {
- vshError(ctl, _("Failed to create node device from %s"), from);
- ret = false;
- }
-
- return ret;
-}
-
-
-/*
- * "nodedev-destroy" command
- */
-static const vshCmdInfo info_node_device_destroy[] = {
- {"help", N_("destroy (stop) a device on the node")},
- {"desc", N_("Destroy a device on the node. Note that this "
- "command destroys devices on the physical host")},
- {NULL, NULL}
-};
-
-static const vshCmdOptDef opts_node_device_destroy[] = {
- {"name", VSH_OT_DATA, VSH_OFLAG_REQ,
- N_("name of the device to be destroyed")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeDeviceDestroy(vshControl *ctl, const vshCmd *cmd)
-{
- virNodeDevicePtr dev = NULL;
- bool ret = true;
- const char *name = NULL;
-
- if (!vshConnectionUsability(ctl, ctl->conn)) {
- return false;
- }
-
- if (vshCommandOptString(cmd, "name", &name) <= 0)
- return false;
-
- dev = virNodeDeviceLookupByName(ctl->conn, name);
-
- if (virNodeDeviceDestroy(dev) == 0) {
- vshPrint(ctl, _("Destroyed node device '%s'\n"), name);
- } else {
- vshError(ctl, _("Failed to destroy node device '%s'"), name);
- ret = false;
- }
-
- virNodeDeviceFree(dev);
- return ret;
-}
-
/* Tree listing helpers. */
/* Given an index, return either the name of that device (non-NULL) or
@@ -928,270 +834,6 @@ vshTreePrint(vshControl *ctl, vshTreeLookup lookup, void *opaque,
return ret;
}
-struct vshNodeList {
- char **names;
- char **parents;
-};
-
-static const char *
-vshNodeListLookup(int devid, bool parent, void *opaque)
-{
- struct vshNodeList *arrays = opaque;
- if (parent)
- return arrays->parents[devid];
- return arrays->names[devid];
-}
-
-/*
- * "nodedev-list" command
- */
-static const vshCmdInfo info_node_list_devices[] = {
- {"help", N_("enumerate devices on this host")},
- {"desc", ""},
- {NULL, NULL}
-};
-
-static const vshCmdOptDef opts_node_list_devices[] = {
- {"tree", VSH_OT_BOOL, 0, N_("list devices in a tree")},
- {"cap", VSH_OT_STRING, VSH_OFLAG_NONE, N_("capability name")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
-{
- const char *cap = NULL;
- char **devices;
- int num_devices, i;
- bool tree = vshCommandOptBool(cmd, "tree");
- bool ret = true;
-
- if (!vshConnectionUsability(ctl, ctl->conn))
- return false;
-
- if (vshCommandOptString(cmd, "cap", &cap) <= 0)
- cap = NULL;
-
- num_devices = virNodeNumOfDevices(ctl->conn, cap, 0);
- if (num_devices < 0) {
- vshError(ctl, "%s", _("Failed to count node devices"));
- return false;
- } else if (num_devices == 0) {
- return true;
- }
-
- devices = vshMalloc(ctl, sizeof(char *) * num_devices);
- num_devices =
- virNodeListDevices(ctl->conn, cap, devices, num_devices, 0);
- if (num_devices < 0) {
- vshError(ctl, "%s", _("Failed to list node devices"));
- VIR_FREE(devices);
- return false;
- }
- qsort(&devices[0], num_devices, sizeof(char*), vshNameSorter);
- if (tree) {
- char **parents = vshMalloc(ctl, sizeof(char *) * num_devices);
- struct vshNodeList arrays = { devices, parents };
-
- for (i = 0; i < num_devices; i++) {
- virNodeDevicePtr dev = virNodeDeviceLookupByName(ctl->conn, devices[i]);
- if (dev && STRNEQ(devices[i], "computer")) {
- const char *parent = virNodeDeviceGetParent(dev);
- parents[i] = parent ? vshStrdup(ctl, parent) : NULL;
- } else {
- parents[i] = NULL;
- }
- virNodeDeviceFree(dev);
- }
- for (i = 0 ; i < num_devices ; i++) {
- if (parents[i] == NULL &&
- vshTreePrint(ctl, vshNodeListLookup, &arrays, num_devices,
- i) < 0)
- ret = false;
- }
- for (i = 0 ; i < num_devices ; i++) {
- VIR_FREE(devices[i]);
- VIR_FREE(parents[i]);
- }
- VIR_FREE(parents);
- } else {
- for (i = 0; i < num_devices; i++) {
- vshPrint(ctl, "%s\n", devices[i]);
- VIR_FREE(devices[i]);
- }
- }
- VIR_FREE(devices);
- return ret;
-}
-
-/*
- * "nodedev-dumpxml" command
- */
-static const vshCmdInfo info_node_device_dumpxml[] = {
- {"help", N_("node device details in XML")},
- {"desc", N_("Output the node device details as an XML dump to
stdout.")},
- {NULL, NULL}
-};
-
-
-static const vshCmdOptDef opts_node_device_dumpxml[] = {
- {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeDeviceDumpXML(vshControl *ctl, const vshCmd *cmd)
-{
- const char *name = NULL;
- virNodeDevicePtr device;
- char *xml;
-
- if (!vshConnectionUsability(ctl, ctl->conn))
- return false;
- if (vshCommandOptString(cmd, "device", &name) <= 0)
- return false;
- if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
- vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
- return false;
- }
-
- xml = virNodeDeviceGetXMLDesc(device, 0);
- if (!xml) {
- virNodeDeviceFree(device);
- return false;
- }
-
- vshPrint(ctl, "%s\n", xml);
- VIR_FREE(xml);
- virNodeDeviceFree(device);
- return true;
-}
-
-/*
- * "nodedev-detach" command
- */
-static const vshCmdInfo info_node_device_detach[] = {
- {"help", N_("detach node device from its device driver")},
- {"desc", N_("Detach node device from its device driver before
assigning to a domain.")},
- {NULL, NULL}
-};
-
-
-static const vshCmdOptDef opts_node_device_detach[] = {
- {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeDeviceDetach(vshControl *ctl, const vshCmd *cmd)
-{
- const char *name = NULL;
- virNodeDevicePtr device;
- bool ret = true;
-
- if (!vshConnectionUsability(ctl, ctl->conn))
- return false;
- if (vshCommandOptString(cmd, "device", &name) <= 0)
- return false;
- if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
- vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
- return false;
- }
-
- /* Yes, our public API is misspelled. At least virsh can accept
- * either spelling. */
- if (virNodeDeviceDettach(device) == 0) {
- vshPrint(ctl, _("Device %s detached\n"), name);
- } else {
- vshError(ctl, _("Failed to detach device %s"), name);
- ret = false;
- }
- virNodeDeviceFree(device);
- return ret;
-}
-
-/*
- * "nodedev-reattach" command
- */
-static const vshCmdInfo info_node_device_reattach[] = {
- {"help", N_("reattach node device to its device driver")},
- {"desc", N_("Reattach node device to its device driver once released
by the domain.")},
- {NULL, NULL}
-};
-
-
-static const vshCmdOptDef opts_node_device_reattach[] = {
- {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeDeviceReAttach(vshControl *ctl, const vshCmd *cmd)
-{
- const char *name = NULL;
- virNodeDevicePtr device;
- bool ret = true;
-
- if (!vshConnectionUsability(ctl, ctl->conn))
- return false;
- if (vshCommandOptString(cmd, "device", &name) <= 0)
- return false;
- if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
- vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
- return false;
- }
-
- if (virNodeDeviceReAttach(device) == 0) {
- vshPrint(ctl, _("Device %s re-attached\n"), name);
- } else {
- vshError(ctl, _("Failed to re-attach device %s"), name);
- ret = false;
- }
- virNodeDeviceFree(device);
- return ret;
-}
-
-/*
- * "nodedev-reset" command
- */
-static const vshCmdInfo info_node_device_reset[] = {
- {"help", N_("reset node device")},
- {"desc", N_("Reset node device before or after assigning to a
domain.")},
- {NULL, NULL}
-};
-
-
-static const vshCmdOptDef opts_node_device_reset[] = {
- {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("device key")},
- {NULL, 0, 0, NULL}
-};
-
-static bool
-cmdNodeDeviceReset(vshControl *ctl, const vshCmd *cmd)
-{
- const char *name = NULL;
- virNodeDevicePtr device;
- bool ret = true;
-
- if (!vshConnectionUsability(ctl, ctl->conn))
- return false;
- if (vshCommandOptString(cmd, "device", &name) <= 0)
- return false;
- if (!(device = virNodeDeviceLookupByName(ctl->conn, name))) {
- vshError(ctl, "%s '%s'", _("Could not find matching
device"), name);
- return false;
- }
-
- if (virNodeDeviceReset(device) == 0) {
- vshPrint(ctl, _("Device %s reset\n"), name);
- } else {
- vshError(ctl, _("Failed to reset device %s"), name);
- ret = false;
- }
- virNodeDeviceFree(device);
- return ret;
-}
-
/* Common code for the edit / net-edit / pool-edit functions which follow. */
static char *
editWriteToTempFile(vshControl *ctl, const char *doc)
@@ -3709,6 +3351,8 @@ static const vshCmdDef networkCmds[] = {
{NULL, NULL, NULL, NULL, 0}
};
+#include "virsh-nodedev.c"
+
static const vshCmdDef nodedevCmds[] = {
{"nodedev-create", cmdNodeDeviceCreate, opts_node_device_create,
info_node_device_create, 0},
--
1.7.7.3