From: Richard W.M. Jones Date: Wed, 27 Feb 2008 16:14:44 +0000 (+0000) Subject: virMacAddrCompare for comparing MAC addresses X-Git-Tag: LIBVIRT_0_4_1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92a1e14b0b6122d615bde31f4a078cdd0242d466;p=thirdparty%2Flibvirt.git virMacAddrCompare for comparing MAC addresses * src/util.c, src/util.h, src/libvirt_sym.version: Added virMacAddrCompare utility function for comparing MAC addresses. * src/virsh.c, src/xm_internal.c: Use virMacAddrCompare to compare addresses. (Shigeki Sakamoto and Richard Jones). --- diff --git a/ChangeLog b/ChangeLog index cfb239d326..0caae5e971 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Wed Feb 27 16:11:00 UTC 2008 Richard W.M. Jones + + virMacAddrCompare for comparing MAC addresses + * src/util.c, src/util.h, src/libvirt_sym.version: Added + virMacAddrCompare utility function for comparing MAC + addresses. + * src/virsh.c, src/xm_internal.c: Use virMacAddrCompare + to compare addresses. (Shigeki Sakamoto and Richard Jones). + Wed Feb 27 15:39:10 CET 2008 Jim Meyering Avoid "make distcheck" failure. diff --git a/src/internal.h b/src/internal.h index 7c6e13e455..d3a566459a 100644 --- a/src/internal.h +++ b/src/internal.h @@ -54,7 +54,6 @@ extern "C" { #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. */ diff --git a/src/libvirt_sym.version b/src/libvirt_sym.version index 38b631e118..15c05dc357 100644 --- a/src/libvirt_sym.version +++ b/src/libvirt_sym.version @@ -185,5 +185,7 @@ __virBufferAdd; __virBufferAddChar; + __virMacAddrCompare; + local: *; }; diff --git a/src/util.c b/src/util.c index 91a5f813a2..4d6154077c 100644 --- a/src/util.c +++ b/src/util.c @@ -654,6 +654,16 @@ virParseNumber(const char **str) return (ret); } +/* 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 diff --git a/src/util.h b/src/util.h index 4c12200c9f..25a3ab8319 100644 --- a/src/util.h +++ b/src/util.h @@ -79,8 +79,10 @@ int __virStrToLong_ull(char const *s, 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)) + void virSkipSpaces(const char **str); int virParseNumber(const char **str); - #endif /* __VIR_UTIL_H__ */ diff --git a/src/virsh.c b/src/virsh.c index 356c496361..caeea458e8 100644 --- a/src/virsh.c +++ b/src/virsh.c @@ -4742,7 +4742,7 @@ cmdDetachInterface(vshControl * ctl, vshCmd * cmd) 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; diff --git a/src/xm_internal.c b/src/xm_internal.c index b12d99cecf..6b4b4d740d 100644 --- a/src/xm_internal.c +++ b/src/xm_internal.c @@ -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); @@ -2813,7 +2814,7 @@ xenXMAttachInterface(virDomainPtr domain, xmlXPathContextPtr ctxt, int hvm, key = nextkey; } - if (!(strcmp(dommac, (const char *) mac))) { + if (virMacAddrCompare (dommac, (const char *) mac) == 0) { if (autoassign) { free(mac); mac = NULL; @@ -3088,7 +3089,7 @@ xenXMDomainDetachDevice(virDomainPtr domain, const char *xml) { mac = nextmac; } - if (!(strcmp(dommac, (const char *) key))) + if (virMacAddrCompare (dommac, (const char *) key) == 0) break; } skip: