# HG changeset patch
# User Kaitlin Rupert <karupert(a)us.ibm.com>
# Date 1237266354 25200
# Node ID 69b7af00d9da92ce169d915bb6b17c493fe0b021
# Parent 160e1a86d82e8ed930e3006098f2af8b230c9834
Improve random MAC generator
Use microseconds since the epoch instead of seconds. When defining a guest
with multiple net devices specified (in which none of them have a MAC supplied),
it's possible for _net_rand_mac() to be called in rapid succession.
Also, initialize s - the seed value passed to rand_r().
Signed-off-by: Kaitlin Rupert <karupert(a)us.ibm.com>
diff -r 160e1a86d82e -r 69b7af00d9da src/Virt_VirtualSystemManagementService.c
--- a/src/Virt_VirtualSystemManagementService.c Mon Mar 16 13:55:02 2009 -0700
+++ b/src/Virt_VirtualSystemManagementService.c Mon Mar 16 22:05:54 2009 -0700
@@ -25,6 +25,7 @@
#include <stdbool.h>
#include <inttypes.h>
#include <time.h>
+#include <sys/time.h>
#include <libvirt/libvirt.h>
#include "cmpidt.h"
@@ -383,8 +384,14 @@
const char *_mac = NULL;
CMPIString *str = NULL;
CMPIStatus status;
+ struct timeval curr_time;
- srand(time(NULL));
+ ret = gettimeofday(&curr_time, NULL);
+ if (ret != 0)
+ goto out;
+
+ srand(curr_time.tv_usec);
+ s = curr_time.tv_usec;
r = rand_r(&s);
ret = asprintf(&mac,