[Libvir] 4/4 virsh

Richard W.M. Jones rjones at redhat.com
Thu Feb 21 20:59:21 UTC 2008


This adds four new subcommands to virsh allowing you to control the
new functionality.

Rich.

-- 
Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom.  Registered in
England and Wales under Company Registration No. 03798903
-------------- next part --------------
Index: src/virsh.c
===================================================================
RCS file: /data/cvs/libvirt/src/virsh.c,v
retrieving revision 1.132
diff -u -r1.132 virsh.c
--- src/virsh.c	20 Feb 2008 15:29:13 -0000	1.132
+++ src/virsh.c	21 Feb 2008 20:44:28 -0000
@@ -2437,6 +2437,168 @@
 
 
 /*
+ * "net-dhcp-host-list" command
+ */
+static vshCmdInfo info_network_dhcp_host_list[] = {
+    {"syntax", "net-dhcp-host-list <network>"},
+    {"help", gettext_noop("list DHCP host mappings on a network")},
+    {"desc", gettext_noop("Returns list of DHCP host mappings on a network.")},
+    {NULL, NULL}
+};
+
+static vshCmdOptDef opts_network_dhcp_host_list[] = {
+    {"network", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("network name, id or uuid")},
+    {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNetworkDHCPHostList (vshControl *ctl, vshCmd *cmd)
+{
+    virNetworkPtr network;
+    int i, ret;
+    char *name;
+    virNetworkDHCPHostMappingPtr *mappings;
+    int nr_mappings;
+
+    if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+        return FALSE;
+
+    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", &name)))
+        return FALSE;
+
+    nr_mappings = virNetworkNumOfDHCPHostMappings (network);
+    if (nr_mappings == -1) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+
+    mappings =
+        vshMalloc (ctl,
+                   nr_mappings * sizeof (virNetworkDHCPHostMappingPtr));
+    ret = virNetworkListDHCPHostMappings (network, mappings, nr_mappings);
+
+    if (ret == -1) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+
+    for (i = 0; i < ret; ++i) {
+        printf ("%-20s %-20s ", mappings[i]->hwaddr, mappings[i]->ipaddr);
+        if (mappings[i]->hostname) printf ("%s", mappings[i]->hostname);
+        printf ("\n");
+    }
+
+    virNetworkFreeDHCPHostMappings (mappings, nr_mappings);
+    free (mappings);
+    virNetworkFree(network);
+
+    return TRUE;
+}
+
+
+/*
+ * "net-dhcp-host-add" command
+ */
+static vshCmdInfo info_network_dhcp_host_add[] = {
+    {"syntax", "net-dhcp-host-list <network> <hwaddr> <ipaddr> [<hostname>]"},
+    {"help", gettext_noop("add a DHCP host mappings")},
+    {"desc", gettext_noop("Adds a DHCP host mapping to the given network.")},
+    {NULL, NULL}
+};
+
+static vshCmdOptDef opts_network_dhcp_host_add[] = {
+    {"network", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("network name, id or uuid")},
+    {"hwaddr", VSH_OT_STRING, VSH_OFLAG_REQ, gettext_noop("hardware (MAC) address")},
+    {"ipaddr", VSH_OT_STRING, VSH_OFLAG_REQ, gettext_noop("IP address")},
+    {"hostname", VSH_OT_STRING, VSH_OFLAG_NONE, gettext_noop("optional hostname to assign over DHCP")},
+    {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNetworkDHCPHostAdd (vshControl *ctl, vshCmd *cmd)
+{
+    virNetworkPtr network;
+    int ret;
+    char *name;
+    char *hwaddr, *ipaddr, *hostname;
+
+    if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+        return FALSE;
+
+    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", &name)))
+        return FALSE;
+
+    if (!(hwaddr = vshCommandOptString (cmd, "hwaddr", NULL))) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+    if (!(ipaddr = vshCommandOptString (cmd, "ipaddr", NULL))) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+
+    hostname = vshCommandOptString (cmd, "hostname", NULL);
+
+    ret = virNetworkAddDHCPHostMapping (network, hwaddr, ipaddr, hostname, 0);
+    if (ret == -1) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+
+    virNetworkFree(network);
+
+    return TRUE;
+}
+
+
+/*
+ * "net-dhcp-host-delete" command
+ */
+static vshCmdInfo info_network_dhcp_host_delete[] = {
+    {"syntax", "net-dhcp-host-list <network> <hwaddr>"},
+    {"help", gettext_noop("delete a DHCP host mappings")},
+    {"desc", gettext_noop("Deletes a DHCP host mapping from the given network.")},
+    {NULL, NULL}
+};
+
+static vshCmdOptDef opts_network_dhcp_host_delete[] = {
+    {"network", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("network name, id or uuid")},
+    {"hwaddr", VSH_OT_STRING, VSH_OFLAG_REQ, gettext_noop("hardware (MAC) address")},
+    {NULL, 0, 0, NULL}
+};
+
+static int
+cmdNetworkDHCPHostDelete (vshControl *ctl, vshCmd *cmd)
+{
+    virNetworkPtr network;
+    int ret;
+    char *name;
+    char *hwaddr;
+
+    if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+        return FALSE;
+
+    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", &name)))
+        return FALSE;
+
+    if (!(hwaddr = vshCommandOptString (cmd, "hwaddr", NULL))) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+
+    ret = virNetworkDeleteDHCPHostMapping (network, hwaddr);
+    if (ret == -1) {
+        virNetworkFree (network);
+        return FALSE;
+    }
+
+    virNetworkFree(network);
+
+    return TRUE;
+}
+
+
+/*
  * "net-dumpxml" command
  */
 static vshCmdInfo info_network_dumpxml[] = {
@@ -5109,6 +5271,9 @@
     {"net-create", cmdNetworkCreate, opts_network_create, info_network_create},
     {"net-define", cmdNetworkDefine, opts_network_define, info_network_define},
     {"net-destroy", cmdNetworkDestroy, opts_network_destroy, info_network_destroy},
+    {"net-dhcp-host-add", cmdNetworkDHCPHostAdd, opts_network_dhcp_host_add, info_network_dhcp_host_add},
+    {"net-dhcp-host-delete", cmdNetworkDHCPHostDelete, opts_network_dhcp_host_delete, info_network_dhcp_host_delete},
+    {"net-dhcp-host-list", cmdNetworkDHCPHostList, opts_network_dhcp_host_list, info_network_dhcp_host_list},
     {"net-dumpxml", cmdNetworkDumpXML, opts_network_dumpxml, info_network_dumpxml},
     {"net-list", cmdNetworkList, opts_network_list, info_network_list},
     {"net-name", cmdNetworkName, opts_network_name, info_network_name},


More information about the libvir-list mailing list