[Libvir] [PATCH]Change MAC address to case insensitive
Richard W.M. Jones
rjones at redhat.com
Tue Feb 26 13:11:00 UTC 2008
On Tue, Feb 26, 2008 at 12:54:15PM +0000, Daniel P. Berrange wrote:
> On Tue, Feb 26, 2008 at 12:13:43PM +0100, Jim Meyering wrote:
> > "Richard W.M. Jones" <rjones at redhat.com> wrote:
> > > I'll apply this today (using our STRCASEEQ macros) if no one else
> > > objects.
> >
> > Hi,
> >
> > What do you think about using a MAC-address-specific comparison
> > function? I.e., one that is not only case-independent, but that also
> > knows leading zeros are unnecessary?
> >
> > i.e., it would admit that these two match:
> >
> > 00:0A:FF:3A:00:09
> > 0:a:ff:3a:0:9
> >
> > That would be a little more user friendly.
>
> Yes, we should add a helper function for comparing mac addresses for
> equality.
OK, try this patch.
Jim, not sure I understood to full complexities of making static
linking work without duplicate symbols, so this patch may be wrong in
that regard.
Rich.
--
Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v
-------------- next part --------------
Index: src/internal.h
===================================================================
RCS file: /data/cvs/libvirt/src/internal.h,v
retrieving revision 1.63
diff -u -r1.63 internal.h
--- src/internal.h 20 Feb 2008 15:06:53 -0000 1.63
+++ src/internal.h 26 Feb 2008 13:10:46 -0000
@@ -54,7 +54,6 @@
#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0)
#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0)
-
/* If configured with --enable-debug=yes then library calls
* are printed to stderr for debugging.
*/
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 26 Feb 2008 13:10:46 -0000
@@ -185,5 +185,7 @@
__virBufferAdd;
__virBufferAddChar;
+ __virMacAddrCompare;
+
local: *;
};
Index: src/util.c
===================================================================
RCS file: /data/cvs/libvirt/src/util.c,v
retrieving revision 1.22
diff -u -r1.22 util.c
--- src/util.c 26 Feb 2008 07:05:18 -0000 1.22
+++ src/util.c 26 Feb 2008 13:10:46 -0000
@@ -602,6 +602,16 @@
return 0;
}
+/* Use this function when comparing two MAC addresses. It deals with
+ * string case compare and will eventually be extended to understand
+ * that 01:02:03:04:05:06 is the same as 1:2:3:4:5:6.
+ */
+int
+__virMacAddrCompare (const char *mac1, const char *mac2)
+{
+ return strcasecmp (mac1, mac2);
+}
+
/*
* Local variables:
* indent-tabs-mode: nil
Index: src/util.h
===================================================================
RCS file: /data/cvs/libvirt/src/util.h,v
retrieving revision 1.11
diff -u -r1.11 util.h
--- src/util.h 26 Feb 2008 07:05:18 -0000 1.11
+++ src/util.h 26 Feb 2008 13:10:46 -0000
@@ -79,4 +79,7 @@
unsigned long long *result);
#define virStrToLong_ull(s,e,b,r) __virStrToLong_ull((s),(e),(b),(r))
+int __virMacAddrCompare (const char *mac1, const char *mac2);
+#define virMacAddrCompare(mac1,mac2) __virMacAddrCompare((mac1),(mac2))
+
#endif /* __VIR_UTIL_H__ */
Index: src/virsh.c
===================================================================
RCS file: /data/cvs/libvirt/src/virsh.c,v
retrieving revision 1.133
diff -u -r1.133 virsh.c
--- src/virsh.c 22 Feb 2008 15:55:04 -0000 1.133
+++ src/virsh.c 26 Feb 2008 13:10:50 -0000
@@ -4742,7 +4742,7 @@
while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE && xmlStrEqual(cur->name, BAD_CAST "mac")) {
tmp_mac = xmlGetProp(cur, BAD_CAST "address");
- diff_mac = xmlStrcasecmp(tmp_mac, BAD_CAST mac);
+ diff_mac = virMacAddrCompare ((char *) tmp_mac, mac);
xmlFree(tmp_mac);
if (!diff_mac) {
goto hit;
Index: src/xm_internal.c
===================================================================
RCS file: /data/cvs/libvirt/src/xm_internal.c,v
retrieving revision 1.64
diff -u -r1.64 xm_internal.c
--- src/xm_internal.c 20 Feb 2008 15:29:13 -0000 1.64
+++ src/xm_internal.c 26 Feb 2008 13:10:52 -0000
@@ -53,6 +53,7 @@
#include "xml.h"
#include "buf.h"
#include "uuid.h"
+#include "util.h"
static int xenXMConfigSetString(virConfPtr conf, const char *setting,
const char *str);
@@ -2812,7 +2813,7 @@
key = nextkey;
}
- if (!(strcmp(dommac, (const char *) mac))) {
+ if (virMacAddrCompare (dommac, (const char *) mac) == 0) {
if (autoassign) {
free(mac);
mac = NULL;
@@ -3087,7 +3088,7 @@
mac = nextmac;
}
- if (!(strcmp(dommac, (const char *) key)))
+ if (virMacAddrCompare (dommac, (const char *) key) == 0)
break;
}
skip:
More information about the libvir-list
mailing list