[Libvir] 1/4 Additions to the public API

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


This just adds the four new functions to the public API.

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/libvirt.c
===================================================================
RCS file: /data/cvs/libvirt/src/libvirt.c,v
retrieving revision 1.123
diff -u -r1.123 libvirt.c
--- src/libvirt.c	20 Feb 2008 16:54:36 -0000	1.123
+++ src/libvirt.c	21 Feb 2008 20:43:11 -0000
@@ -3683,6 +3683,194 @@
     return -1;
 }
 
+/**
+ * virNetworkNumOfDHCPHostMappings:
+ * @network: a network object
+ *
+ * Returns the number of DHCP host mappings, or -1 in case of error.
+ */
+int
+virNetworkNumOfDHCPHostMappings (virNetworkPtr network)
+{
+    virConnectPtr conn;
+    DEBUG("network=%p", network);
+
+    if (!VIR_IS_NETWORK(network)) {
+        virLibNetworkError (NULL, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
+        return -1;
+    }
+
+    conn = network->conn;
+
+    if (conn->networkDriver &&
+        conn->networkDriver->networkNumOfDHCPHostMappings)
+        return conn->networkDriver->networkNumOfDHCPHostMappings (network);
+
+    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+    return -1;
+}
+
+/**
+ * virNetworkListDHCPHostMappings:
+ * @network: a network object
+ * @mappings: an array of virNetworkDHCPHostMappingPtr
+ * @maxmappings: the length of the array
+ *
+ * This can be used to return a list of DHCP host mappings for the
+ * network.
+ *
+ * Use virNetworkFreeDHCPHostMappings to free the returned list.
+ *
+ * Returns the number of DHCP host mappings, or -1 in case of error.
+ */
+int
+virNetworkListDHCPHostMappings (virNetworkPtr network,
+                                virNetworkDHCPHostMappingPtr *const mappings,
+                                int maxmappings)
+{
+    virConnectPtr conn;
+    DEBUG("network=%p, mappings=%p, maxmappings=%d",
+          network, mappings, maxmappings);
+
+    if (!VIR_IS_NETWORK(network)) {
+        virLibNetworkError (NULL, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
+        return -1;
+    }
+
+    conn = network->conn;
+
+    if (!mappings) {
+        virLibNetworkError (conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
+        return -1;
+    }
+
+    if (maxmappings == 0) return 0;
+
+    memset (mappings, 0, sizeof (virNetworkDHCPHostMappingPtr) * maxmappings);
+
+    if (conn->networkDriver &&
+        conn->networkDriver->networkListDHCPHostMappings)
+        return conn->networkDriver->networkListDHCPHostMappings (network,
+                                                                 mappings,
+                                                                 maxmappings);
+
+    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+    return -1;
+}
+
+/**
+ * virNetworkFreeDHCPHostMappings:
+ * @mappings: an array of virNetworkDHCPHostMappingPtr
+ * @maxmappings: the length of the array
+ *
+ * Free the array of mappings returned by virNetworkListDHCPHostMappings.
+ *
+ * Return -1 on error or 0 on success.
+ */
+int
+virNetworkFreeDHCPHostMappings (virNetworkDHCPHostMappingPtr *const mappings,
+                                int maxmappings)
+{
+    int i;
+
+    DEBUG("mappings=%p, maxmappings=%d", mappings, maxmappings);
+
+    if (!mappings) {
+        virLibNetworkError (NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
+        return -1;
+    }
+
+    for (i = 0; i < maxmappings; ++i) {
+        if (mappings[maxmappings]) {
+            free (mappings[maxmappings]->hwaddr);
+            free (mappings[maxmappings]->hostname);
+            free (mappings[maxmappings]->ipaddr);
+            free (mappings[maxmappings]);
+        }
+    }
+
+    return 0;
+}
+
+/**
+ * virNetworkAddDHCPHostMapping:
+ * @network: a network object
+ * @hwaddr: hardware (MAC) address
+ * @ipaddr: IP address
+ * @hostname: hostname
+ * @flags: unused, pass 0
+ *
+ * Add a DHCP hardware address to IP address mapping, and optionally
+ * a DHCP hostname for the IP address (if hostname is not NULL).
+ *
+ * The mappings are keyed on the hardware (MAC) address.  If the hardware
+ * address already has a mapping, then this call replaces it.
+ *
+ * Return -1 on error or 0 on success.
+ */
+int
+virNetworkAddDHCPHostMapping (virNetworkPtr network,
+                              const char *hwaddr,
+                              const char *ipaddr,
+                              const char *hostname,
+                              unsigned int flags)
+{
+    virConnectPtr conn;
+    DEBUG("network=%p, hwaddr=%s, hostname=%s, ipaddr=%s, flags=%d",
+          network, hwaddr, hostname, ipaddr, flags);
+
+    if (!VIR_IS_NETWORK(network)) {
+        virLibNetworkError (NULL, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
+        return -1;
+    }
+
+    conn = network->conn;
+
+    if (flags != 0) {
+        virLibNetworkError (NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
+        return -1;
+    }
+
+    if (conn->networkDriver &&
+        conn->networkDriver->networkAddDHCPHostMapping)
+        return conn->networkDriver->networkAddDHCPHostMapping
+            (network, hwaddr, ipaddr, hostname, flags);
+
+    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+    return -1;
+}
+
+/**
+ * virNetworkDeleteDHCPHostMapping:
+ * @network: a network object
+ * @hwaddr: hardware (MAC) address
+ *
+ * Delete an existing DHCP host mapping.
+ *
+ * Return -1 on error or 0 on success.
+ */
+int
+virNetworkDeleteDHCPHostMapping (virNetworkPtr network,
+                                 const char *hwaddr)
+{
+    virConnectPtr conn;
+    DEBUG("network=%p, hwaddr=%s", network, hwaddr);
+
+    if (!VIR_IS_NETWORK(network)) {
+        virLibNetworkError (NULL, VIR_ERR_INVALID_NETWORK, __FUNCTION__);
+        return -1;
+    }
+
+    conn = network->conn;
+
+    if (conn->networkDriver &&
+        conn->networkDriver->networkDeleteDHCPHostMapping)
+        return conn->networkDriver->networkDeleteDHCPHostMapping (network,
+                                                                  hwaddr);
+
+    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+    return -1;
+}
 
 /**
  * virStoragePoolGetConnect:
Index: src/libvirt_sym.version
===================================================================
RCS file: /data/cvs/libvirt/src/libvirt_sym.version,v
retrieving revision 1.36
diff -u -r1.36 libvirt_sym.version
--- src/libvirt_sym.version	21 Feb 2008 03:53:03 -0000	1.36
+++ src/libvirt_sym.version	21 Feb 2008 20:43:11 -0000
@@ -99,6 +99,11 @@
 	virNetworkGetBridgeName;
 	virNetworkGetAutostart;
 	virNetworkSetAutostart;
+	virNetworkNumOfDHCPHostMappings;
+	virNetworkListDHCPHostMappings;
+	virNetworkFreeDHCPHostMappings;
+	virNetworkAddDHCPHostMapping;
+	virNetworkDeleteDHCPHostMapping;
 
         virStoragePoolGetConnect;
 	virConnectNumOfStoragePools;
Index: include/libvirt/libvirt.h.in
===================================================================
RCS file: /data/cvs/libvirt/include/libvirt/libvirt.h.in,v
retrieving revision 1.42
diff -u -r1.42 libvirt.h.in
--- include/libvirt/libvirt.h.in	20 Feb 2008 14:57:39 -0000	1.42
+++ include/libvirt/libvirt.h.in	21 Feb 2008 20:43:12 -0000
@@ -684,6 +684,19 @@
  */
 typedef virNetwork *virNetworkPtr;
 
+/**
+ * virNetworkDHCPHostMapping:
+ *
+ * hostname mappings are returned by virNetworkListDHCPHostMapping.
+ */
+typedef struct _virNetworkDHCPHostMapping {
+  char *hwaddr;
+  char *ipaddr;
+  char *hostname;
+} virNetworkDHCPHostMapping;
+
+typedef virNetworkDHCPHostMapping *virNetworkDHCPHostMappingPtr;
+
 /*
  * Get connection from network.
  */
@@ -760,6 +773,28 @@
 int			virNetworkSetAutostart	(virNetworkPtr network,
 						 int autostart);
 
+/*
+ * DHCP host mappings
+ */
+int                     virNetworkNumOfDHCPHostMappings
+                                                (virNetworkPtr network);
+int                     virNetworkListDHCPHostMappings
+                                                (virNetworkPtr network,
+				  virNetworkDHCPHostMappingPtr *const mappings,
+			          int maxmappings);
+int                     virNetworkFreeDHCPHostMappings
+                                 (virNetworkDHCPHostMappingPtr *const mappings,
+			          int maxmappings);
+
+int                     virNetworkAddDHCPHostMapping
+                                                (virNetworkPtr network,
+						 const char *hwaddr,
+						 const char *hostname,
+						 const char *ipaddr,
+						 unsigned int flags);
+int                     virNetworkDeleteDHCPHostMapping
+                                                (virNetworkPtr network,
+						 const char *hwaddr);
 
 /**
  * virStoragePool:


More information about the libvir-list mailing list