[Libvirt-cim] [PATCH 1 of 6] Make the 'default' NetRASD allocation include a randomly-generated MAC

Dan Smith danms at us.ibm.com
Wed Apr 9 21:31:41 UTC 2008


# HG changeset patch
# User Dan Smith <danms at us.ibm.com>
# Date 1207776499 25200
# Node ID d297967bad1fb290230fa9f42dee9a4e5e68f7bb
# Parent  ad9a40f4e04defe60897169cd7b93ef115bfcaf8
Make the 'default' NetRASD allocation include a randomly-generated MAC

Signed-off-by: Dan Smith <danms at us.ibm.com>

diff -r ad9a40f4e04d -r d297967bad1f src/Virt_SettingsDefineCapabilities.c
--- a/src/Virt_SettingsDefineCapabilities.c	Wed Apr 09 14:28:18 2008 -0700
+++ b/src/Virt_SettingsDefineCapabilities.c	Wed Apr 09 14:28:19 2008 -0700
@@ -25,6 +25,7 @@
 #include <stdbool.h>
 #include <sys/vfs.h>
 #include <errno.h>
+#include <time.h>
 
 #include <libvirt/libvirt.h>
 
@@ -52,6 +53,8 @@ const static CMPIBroker *_BROKER;
 #define SDC_DISK_MIN 2000
 #define SDC_DISK_DEF 5000
 #define SDC_DISK_INC 250
+
+#define DEFAULT_MAC_PREFIX "00:16:3e"
 
 static bool rasd_prop_copy_value(struct sdc_rasd_prop src, 
                                  struct sdc_rasd_prop *dest)
@@ -430,6 +433,45 @@ static struct sdc_rasd_prop *net_max(con
         return rasd;
 }
 
+static const char *_net_rand_mac(void)
+{
+        int r;
+        int ret;
+        unsigned int s;
+        char *mac = NULL;
+        CMPIString *str = NULL;
+        CMPIStatus status;
+
+        srand(time(NULL));
+        r = rand_r(&s);
+
+        ret = asprintf(&mac,
+                       "%s:%02x:%02x:%02x",
+                       DEFAULT_MAC_PREFIX,
+                       r & 0xFF,
+                       (r & 0xFF00) >> 8,
+                       (r & 0xFF0000) >> 16);
+
+        if (ret == -1)
+                goto out;
+
+        str = CMNewString(_BROKER, mac, &status);
+        if ((str == NULL) || (status.rc != CMPI_RC_OK)) {
+                str = NULL;
+                CU_DEBUG("Failed to create string");
+                goto out;
+        }
+ out:
+        free(mac);
+
+        if (str != NULL)
+                mac = CMGetCharPtr(str);
+        else
+                mac = NULL;
+
+        return mac;
+}
+
 static struct sdc_rasd_prop *net_def(const CMPIObjectPath *ref,
                                      CMPIStatus *s)
 {
@@ -440,6 +482,7 @@ static struct sdc_rasd_prop *net_def(con
         struct sdc_rasd_prop tmp[] = {
                 {"InstanceID", (CMPIValue *)"Default", CMPI_chars},
                 {"VirtualQuantity", (CMPIValue *)&num_nics, CMPI_uint16},
+                {"Address", (CMPIValue *)_net_rand_mac(), CMPI_chars},
                 PROP_END
         };
  




More information about the Libvirt-cim mailing list