[libvirt] [PATCH 10/11] virsh: Split cmds in node device group from virsh.c

Osier Yang jyang at redhat.com
Mon Jul 23 07:29:29 UTC 2012


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 at redhat.com>
+ *  Karel Zak <kzak at redhat.com>
+ *  Daniel P. Berrange <berrange at 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




More information about the libvir-list mailing list