[libvirt] [PATCH] xenapi: Convert to virMacAddr
by Jiri Denemark
---
Can't we just get rid of this horrific and mostly unmaintained xenapi code
completely? :-)
src/xenapi/xenapi_driver.c | 3 ++-
src/xenapi/xenapi_utils.c | 36 ++++++++++++++----------------------
2 files changed, 16 insertions(+), 23 deletions(-)
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index 298ab21..a91f497 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -1512,7 +1512,8 @@ xenapiDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
}
xen_vif_get_record(session, &vif_rec, vif);
if (vif_rec != NULL) {
- if (virMacAddrParse((const char *)vif_rec->mac,defPtr->nets[i]->mac) < 0)
+ if (virMacAddrParse((const char *)vif_rec->mac,
+ &defPtr->nets[i]->mac) < 0)
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
_("Unable to parse given mac address"));
xen_vif_record_free(vif_rec);
diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c
index e5a9cc5..c8b12de 100644
--- a/src/xenapi/xenapi_utils.c
+++ b/src/xenapi/xenapi_utils.c
@@ -453,7 +453,6 @@ createVMRecordFromXml (virConnectPtr conn, virDomainDefPtr def,
char uuidStr[VIR_UUID_STRING_BUFLEN];
xen_string_string_map *strings = NULL;
int device_number = 0;
- char *bridge = NULL, *mac = NULL;
int i;
*record = xen_vm_record_alloc();
@@ -542,28 +541,21 @@ createVMRecordFromXml (virConnectPtr conn, virDomainDefPtr def,
}
for (i = 0; i < def->nnets; i++) {
- if (def->nets[i]->type == VIR_DOMAIN_NET_TYPE_BRIDGE) {
- if (def->nets[i]->data.bridge.brname)
- if (!(bridge = strdup(def->nets[i]->data.bridge.brname)))
- goto error_cleanup;
- if (def->nets[i]->mac) {
- char macStr[VIR_MAC_STRING_BUFLEN];
- virMacAddrFormat(def->nets[i]->mac, macStr);
- if (!(mac = strdup(macStr))) {
- VIR_FREE(bridge);
- goto error_cleanup;
- }
- }
- if (mac != NULL && bridge != NULL) {
- if (createVifNetwork(conn, *vm, device_number, bridge,
- mac) < 0) {
- VIR_FREE(bridge);
- goto error_cleanup;
- }
- VIR_FREE(bridge);
- device_number++;
+ if (def->nets[i]->type == VIR_DOMAIN_NET_TYPE_BRIDGE &&
+ def->nets[i]->data.bridge.brname) {
+ char *mac;
+
+ if (VIR_ALLOC_N(mac, VIR_MAC_STRING_BUFLEN) < 0)
+ goto error_cleanup;
+ virMacAddrFormat(&def->nets[i]->mac, mac);
+
+ if (createVifNetwork(conn, *vm, device_number,
+ def->nets[i]->data.bridge.brname,
+ mac) < 0) {
+ VIR_FREE(mac);
+ goto error_cleanup;
}
- VIR_FREE(bridge);
+ device_number++;
}
}
return 0;
--
1.7.11.1
12 years, 5 months
[libvirt] IPs via DHCP for guest domains
by Fong Vang
I'm curious to know how you are providing IPs for your Windows VMs
when connected via a bridge. Since broadcasts from the VMs are going
out the bridged interface, I'm thinking about implementing ebtables to
block dhcp broadcasts from going in/out the interface so that dnsmasq
would only respond to dhcp requests from the local guest VMs. Before
I venture down this path, I thought I might ask if there's an easier
way to do this with libvirt.
Thanks for any help.
12 years, 5 months
[libvirt] [PATCH] nwfilter: Convert to virMacAddrPtr not virMacAddrPtr*
by Michal Privoznik
My previous patch wasn't complete as it converted from
(unsigned char *) to (virMacAddrPtr *). It should be
(virMacAddrPtr) only.
---
Again, pushed under build breaker.
src/nwfilter/nwfilter_dhcpsnoop.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c
index 312fada..b38e780 100644
--- a/src/nwfilter/nwfilter_dhcpsnoop.c
+++ b/src/nwfilter/nwfilter_dhcpsnoop.c
@@ -2200,7 +2200,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
enum virDomainNetType nettype ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED,
- const virMacAddrPtr *macaddr ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddr ATTRIBUTE_UNUSED,
const char *filtername ATTRIBUTE_UNUSED,
virNWFilterHashTablePtr filterparams ATTRIBUTE_UNUSED,
virNWFilterDriverStatePtr driver ATTRIBUTE_UNUSED)
--
1.7.8.6
12 years, 5 months
[libvirt] [PATCH 0/4] qemu: configurable port boundaries for remote displays
by Martin Kletzander
This series introduces a possibility to change default minimal and
maximal port numbers that are used to specify a remote display port
for both VNC and SPICE.
Because the code was a bit messy, PATCH 1/4 cleans up few things
needed to make a clean run of PATCH 2/4, that does the main change in
the code.
I also noticed two things that could be changed and it made sense for
me to do that, but these are nowhere near any importance, so feel free
to reject them if your heart feels that way.
PATCH 3/4 rewords three messages and applying it would mean that they are not translated. Even though I think it makes more sense this way, I'm not a good English speaker, so that's more like an RFC.
PATCH 4/4 makes more flexible port searching available, but is used on one place and because there are so many ports, it won't be that used, I guess.
P.S.: this is basically v2 for
https://www.redhat.com/archives/libvir-list/2012-May/msg01081.html but
it changed a lot and the name is also different, so I didn't want to
create any confision.
Martin Kletzander (4):
qemu: Unify port-wise SPICE and VNC behavior
qemu: configurable remote display port boundaries
qemu: modify 3 error messages
qemu: allow searching for all open ports
src/conf/domain_conf.c | 2 +-
src/qemu/libvirtd_qemu.aug | 4 ++
src/qemu/qemu.conf | 14 ++++++
src/qemu/qemu_command.h | 11 ++++-
src/qemu/qemu_conf.c | 40 +++++++++++++++++-
src/qemu/qemu_conf.h | 4 +-
src/qemu/qemu_driver.c | 19 ++++-----
src/qemu/qemu_process.c | 81 +++++++++++++++++++++---------------
src/qemu/test_libvirtd_qemu.aug.in | 2 +
9 files changed, 128 insertions(+), 49 deletions(-)
--
1.7.8.6
12 years, 5 months
[libvirt] [PATCH] nwfilter: Convert to virMacAddrPtr completely
by Michal Privoznik
The previous commit (387117ad92) was incomplete leaving those
who does not use libpcap with uncompilable sources beacuse
of incomplete conversion of virNWFilterDHCPSnoopReq function.
---
Pushing under build breaker and trivial rules.
src/nwfilter/nwfilter_dhcpsnoop.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c
index d712b15..312fada 100644
--- a/src/nwfilter/nwfilter_dhcpsnoop.c
+++ b/src/nwfilter/nwfilter_dhcpsnoop.c
@@ -2200,7 +2200,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
enum virDomainNetType nettype ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED,
- const unsigned char *macaddr ATTRIBUTE_UNUSED,
+ const virMacAddrPtr *macaddr ATTRIBUTE_UNUSED,
const char *filtername ATTRIBUTE_UNUSED,
virNWFilterHashTablePtr filterparams ATTRIBUTE_UNUSED,
virNWFilterDriverStatePtr driver ATTRIBUTE_UNUSED)
--
1.7.8.6
12 years, 5 months
[libvirt] [PATCH] configure: rbd doesn't need -lcrypto
by Cole Robinson
See https://www.redhat.com/archives/libvir-list/2012-July/msg00493.html
Basically building against librbd doesn't seem to actually require -lcrypto.
Also report the rbd linker flags in configure output
Signed-off-by: Cole Robinson <crobinso(a)redhat.com>
---
configure.ac | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index d45f4f1..ae814cb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1999,7 +1999,7 @@ if test "$with_storage_rbd" = "yes" || test "$with_storage_rbd" = "check"; then
if test "$LIBRBD_FOUND" = "yes"; then
with_storage_rbd=yes
- LIBRBD_LIBS="-lrbd -lrados -lcrypto"
+ LIBRBD_LIBS="-lrbd -lrados"
AC_DEFINE_UNQUOTED([WITH_STORAGE_RBD], [1],
[whether RBD backend for storage driver is enabled])
else
@@ -2962,6 +2962,12 @@ AC_MSG_NOTICE([ xdr: $XDR_CFLAGS])
else
AC_MSG_NOTICE([ xdr: no])
fi
+if test "$with_storage_rbd" = "yes" ; then
+AC_MSG_NOTICE([ rbd: $LIBRBD_LIBS])
+else
+AC_MSG_NOTICE([ rbd: no])
+fi
+
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Test suite])
AC_MSG_NOTICE([])
--
1.7.10.4
12 years, 5 months
[libvirt] [PATCH v2] Convert 'raw MAC address' usages to use virMacAddr
by Stefan Berger
Introduce new members in the virMacAddr 'class'
- virMacAddrSet: set virMacAddr from a virMacAddr
- virMacAddrSetRaw: setting virMacAddr from raw 6 byte MAC address buffer
- virMacAddrGetRaw: writing virMacAddr into raw 6 byte MAC address buffer
- virMacAddrCmp: comparing two virMacAddr
- virMacAddrCmpRaw: comparing a virMacAddr with a raw 6 byte MAC address buffer
then replace raw MAC addresses by replacing
- 'unsigned char *' with virMacAddrPtr
- 'unsigned char ... [VIR_MAC_BUFLEN]' with virMacAddr
and introduce usage of above functions where necessary.
---
src/conf/capabilities.c | 4 -
src/conf/capabilities.h | 4 -
src/conf/domain_audit.c | 6 -
src/conf/domain_conf.c | 32 ++++-----
src/conf/domain_conf.h | 6 -
src/conf/network_conf.c | 14 ++--
src/conf/network_conf.h | 2
src/conf/nwfilter_conf.c | 17 +---
src/conf/nwfilter_conf.h | 14 +---
src/conf/nwfilter_params.h | 1
src/libvirt_private.syms | 5 +
src/libxl/libxl_conf.c | 2
src/lxc/lxc_driver.c | 6 -
src/network/bridge_driver.c | 2
src/nwfilter/nwfilter_dhcpsnoop.c | 16 ++--
src/nwfilter/nwfilter_dhcpsnoop.h | 2
src/nwfilter/nwfilter_ebiptables_driver.c | 6 -
src/nwfilter/nwfilter_gentech_driver.c | 8 +-
src/nwfilter/nwfilter_gentech_driver.h | 2
src/nwfilter/nwfilter_learnipaddr.c | 29 +++-----
src/nwfilter/nwfilter_learnipaddr.h | 4 -
src/openvz/openvz_conf.c | 2
src/openvz/openvz_driver.c | 8 +-
src/qemu/qemu_bridge_filter.c | 4 -
src/qemu/qemu_bridge_filter.h | 4 -
src/qemu/qemu_command.c | 22 +++---
src/qemu/qemu_driver.c | 16 ++--
src/qemu/qemu_hostdev.c | 8 +-
src/qemu/qemu_hotplug.c | 14 ++--
src/qemu/qemu_migration.c | 6 -
src/qemu/qemu_process.c | 4 -
src/uml/uml_conf.c | 6 -
src/util/ebtables.c | 16 ++--
src/util/ebtables.h | 6 +
src/util/virmacaddr.c | 104 +++++++++++++++++++++++++-----
src/util/virmacaddr.h | 25 +++++--
src/util/virnetdev.c | 61 ++++++++---------
src/util/virnetdev.h | 11 +--
src/util/virnetdevmacvlan.c | 38 +++++-----
src/util/virnetdevmacvlan.h | 11 +--
src/util/virnetdevopenvswitch.c | 2
src/util/virnetdevopenvswitch.h | 2
src/util/virnetdevtap.c | 19 ++---
src/util/virnetdevtap.h | 2
src/util/virnetdevvportprofile.c | 18 ++---
src/util/virnetdevvportprofile.h | 5 -
src/util/virnetlink.c | 15 ++--
src/util/virnetlink.h | 7 +-
src/vbox/vbox_tmpl.c | 16 ++--
src/vmx/vmx.c | 10 +-
src/xen/xend_internal.c | 6 -
src/xen/xm_internal.c | 4 -
src/xenxs/xen_sxpr.c | 6 -
src/xenxs/xen_xm.c | 8 +-
tools/virsh.c | 8 +-
55 files changed, 377 insertions(+), 299 deletions(-)
Index: libvirt-acl/src/conf/domain_conf.h
===================================================================
--- libvirt-acl.orig/src/conf/domain_conf.h
+++ libvirt-acl/src/conf/domain_conf.h
@@ -785,7 +785,7 @@ struct _virDomainActualNetDef {
/* Stores the virtual network interface configuration */
struct _virDomainNetDef {
enum virDomainNetType type;
- unsigned char mac[VIR_MAC_BUFLEN];
+ virMacAddr mac;
char *model;
union {
struct {
@@ -1998,12 +1998,12 @@ virDomainDiskRemove(virDomainDefPtr def,
virDomainDiskDefPtr
virDomainDiskRemoveByName(virDomainDefPtr def, const char *name);
-int virDomainNetIndexByMac(virDomainDefPtr def, const unsigned char *mac);
+int virDomainNetIndexByMac(virDomainDefPtr def, const virMacAddrPtr mac);
int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net);
virDomainNetDefPtr
virDomainNetRemove(virDomainDefPtr def, size_t i);
virDomainNetDefPtr
-virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac);
+virDomainNetRemoveByMac(virDomainDefPtr def, const virMacAddrPtr mac);
int virDomainHostdevInsert(virDomainDefPtr def, virDomainHostdevDefPtr hostdev);
virDomainHostdevDefPtr
Index: libvirt-acl/src/util/virmacaddr.c
===================================================================
--- libvirt-acl.orig/src/util/virmacaddr.c
+++ libvirt-acl/src/util/virmacaddr.c
@@ -62,6 +62,76 @@ virMacAddrCompare(const char *p, const c
}
/**
+ * virMacAddrCmp:
+ * @mac1: pointer to 1st MAC address
+ * @mac2: pointer to 2nd MAC address
+ *
+ * Return 0 if MAC addresses are equal,
+ * < 0 if mac1 < mac2,
+ * > 0 if mac1 > mac2
+ */
+int
+virMacAddrCmp(const virMacAddrPtr mac1, const virMacAddrPtr mac2)
+{
+ return memcmp(mac1->addr, mac2->addr, VIR_MAC_BUFLEN);
+}
+
+/**
+ * virMacAddrCmpRaw:
+ * @mac1: pointer to 1st MAC address
+ * @mac2: pointer to 2nd MAC address in plain buffer
+ *
+ * Return 0 if MAC addresses are equal,
+ * < 0 if mac1 < mac2,
+ * > 0 if mac1 > mac2
+ */
+int
+virMacAddrCmpRaw(const virMacAddrPtr mac1,
+ const unsigned char mac2[VIR_MAC_BUFLEN])
+{
+ return memcmp(mac1->addr, mac2, VIR_MAC_BUFLEN);
+}
+
+/**
+ * virMacAddrSet
+ * @dst: pointer to destination
+ * @src: pointer to source
+ *
+ * Copy src to dst
+ */
+void
+virMacAddrSet(virMacAddrPtr dst, const virMacAddrPtr src)
+{
+ memcpy(dst, src, sizeof(*src));
+}
+
+/**
+ * virMacAddrSetRaw
+ * @dst: pointer to destination to hold MAC address
+ * @src: raw MAC address data
+ *
+ * Set the MAC address to the given value
+ */
+void
+virMacAddrSetRaw(virMacAddrPtr dst, const unsigned char src[VIR_MAC_BUFLEN])
+{
+ memcpy(dst->addr, src, VIR_MAC_BUFLEN);
+}
+
+/**
+ * virMacAddrGetRaw
+ * @src: pointer to MAC address
+ * @dst: pointer to raw memory to write MAC address into
+ *
+ * Copies the MAC address into raw memory
+ */
+void
+virMacAddrGetRaw(virMacAddrPtr src, unsigned char dst[VIR_MAC_BUFLEN])
+{
+ memcpy(dst, src->addr, VIR_MAC_BUFLEN);
+}
+
+/**
* virMacAddrParse:
* @str: string representation of MAC address, e.g., "0:1E:FC:E:3a:CB"
* @addr: 6-byte MAC address
@@ -71,7 +141,7 @@ virMacAddrCompare(const char *p, const c
* Return 0 upon success, or -1 in case of error.
*/
int
-virMacAddrParse(const char* str, unsigned char *addr)
+virMacAddrParse(const char* str, virMacAddrPtr addr)
{
int i;
@@ -93,7 +163,7 @@ virMacAddrParse(const char* str, unsigne
(0xFF < result))
break;
- addr[i] = (unsigned char) result;
+ addr->addr[i] = (unsigned char) result;
if ((i == 5) && (*end_ptr == '\0'))
return 0;
@@ -106,36 +176,36 @@ virMacAddrParse(const char* str, unsigne
return -1;
}
-void virMacAddrFormat(const unsigned char *addr,
+void virMacAddrFormat(const virMacAddrPtr addr,
char *str)
{
snprintf(str, VIR_MAC_STRING_BUFLEN,
"%02X:%02X:%02X:%02X:%02X:%02X",
- addr[0], addr[1], addr[2],
- addr[3], addr[4], addr[5]);
+ addr->addr[0], addr->addr[1], addr->addr[2],
+ addr->addr[3], addr->addr[4], addr->addr[5]);
str[VIR_MAC_STRING_BUFLEN-1] = '\0';
}
-void virMacAddrGenerate(const unsigned char *prefix,
- unsigned char *addr)
+void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
+ virMacAddrPtr addr)
{
- addr[0] = prefix[0];
- addr[1] = prefix[1];
- addr[2] = prefix[2];
- addr[3] = virRandomBits(8);
- addr[4] = virRandomBits(8);
- addr[5] = virRandomBits(8);
+ addr->addr[0] = prefix[0];
+ addr->addr[1] = prefix[1];
+ addr->addr[2] = prefix[2];
+ addr->addr[3] = virRandomBits(8);
+ addr->addr[4] = virRandomBits(8);
+ addr->addr[5] = virRandomBits(8);
}
/* The low order bit of the first byte is the "multicast" bit. */
bool
-virMacAddrIsMulticast(const unsigned char *addr)
+virMacAddrIsMulticast(const virMacAddrPtr mac)
{
- return !!(addr[0] & 1);
+ return !!(mac->addr[0] & 1);
}
bool
-virMacAddrIsUnicast(const unsigned char *addr)
+virMacAddrIsUnicast(const virMacAddrPtr mac)
{
- return !(addr[0] & 1);
+ return !(mac->addr[0] & 1);
}
Index: libvirt-acl/src/util/virmacaddr.h
===================================================================
--- libvirt-acl.orig/src/util/virmacaddr.h
+++ libvirt-acl/src/util/virmacaddr.h
@@ -30,15 +30,26 @@
# define VIR_MAC_PREFIX_BUFLEN 3
# define VIR_MAC_STRING_BUFLEN (VIR_MAC_BUFLEN * 3)
-typedef unsigned char virMacAddr[VIR_MAC_BUFLEN];
+typedef struct _virMacAddr virMacAddr;
+typedef virMacAddr *virMacAddrPtr;
+
+struct _virMacAddr {
+ unsigned char addr[VIR_MAC_BUFLEN];
+};
int virMacAddrCompare(const char *mac1, const char *mac2);
-void virMacAddrFormat(const unsigned char *addr,
+int virMacAddrCmp(const virMacAddrPtr mac1, const virMacAddrPtr mac2);
+int virMacAddrCmpRaw(const virMacAddrPtr mac1,
+ const unsigned char s[VIR_MAC_BUFLEN]);
+void virMacAddrSet(virMacAddrPtr dst, const virMacAddrPtr src);
+void virMacAddrSetRaw(virMacAddrPtr dst, const unsigned char s[VIR_MAC_BUFLEN]);
+void virMacAddrGetRaw(virMacAddrPtr src, unsigned char dst[VIR_MAC_BUFLEN]);
+void virMacAddrFormat(const virMacAddrPtr addr,
char *str);
-void virMacAddrGenerate(const unsigned char *prefix,
- unsigned char *addr);
+void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
+ virMacAddrPtr addr);
int virMacAddrParse(const char* str,
- unsigned char *addr) ATTRIBUTE_RETURN_CHECK;
-bool virMacAddrIsUnicast(const unsigned char *addr);
-bool virMacAddrIsMulticast(const unsigned char *addr);
+ virMacAddrPtr addr) ATTRIBUTE_RETURN_CHECK;
+bool virMacAddrIsUnicast(const virMacAddrPtr addr);
+bool virMacAddrIsMulticast(const virMacAddrPtr addr);
#endif /* __VIR_MACADDR_H__ */
Index: libvirt-acl/src/util/virnetdev.c
===================================================================
--- libvirt-acl.orig/src/util/virnetdev.c
+++ libvirt-acl/src/util/virnetdev.c
@@ -137,7 +137,7 @@ int virNetDevExists(const char *ifname)
/**
* virNetDevSetMAC:
* @ifname: interface name to set MTU for
- * @macaddr: MAC address (VIR_MAC_BUFLEN in size)
+ * @macaddr: MAC address
*
* This function sets the @macaddr for a given interface @ifname. This
* gets rid of the kernel's automatically assigned random MAC.
@@ -145,7 +145,7 @@ int virNetDevExists(const char *ifname)
* Returns 0 in case of success or -1 on failure
*/
int virNetDevSetMAC(const char *ifname,
- const unsigned char *macaddr)
+ const virMacAddrPtr macaddr)
{
int fd = -1;
int ret = -1;
@@ -162,7 +162,7 @@ int virNetDevSetMAC(const char *ifname,
goto cleanup;
}
- memcpy(ifr.ifr_hwaddr.sa_data, macaddr, VIR_MAC_BUFLEN);
+ virMacAddrGetRaw(macaddr, (unsigned char *)ifr.ifr_hwaddr.sa_data);
if (ioctl(fd, SIOCSIFHWADDR, &ifr) < 0) {
virReportSystemError(errno,
@@ -179,7 +179,7 @@ cleanup:
}
#else
int virNetDevSetMAC(const char *ifname,
- const unsigned char *macaddr ATTRIBUTE_UNUSED)
+ const virMacAddrPtr macaddr ATTRIBUTE_UNUSED)
{
virReportSystemError(ENOSYS,
_("Cannot set interface MAC on '%s'"),
@@ -193,14 +193,14 @@ int virNetDevSetMAC(const char *ifname,
/**
* virNetDevGetMAC:
* @ifname: interface name to set MTU for
- * @macaddr: MAC address (VIR_MAC_BUFLEN in size)
+ * @macaddr: MAC address
*
* This function gets the @macaddr for a given interface @ifname.
*
* Returns 0 in case of success or -1 on failure
*/
int virNetDevGetMAC(const char *ifname,
- unsigned char *macaddr)
+ virMacAddrPtr macaddr)
{
int fd = -1;
int ret = -1;
@@ -216,7 +216,7 @@ int virNetDevGetMAC(const char *ifname,
goto cleanup;
}
- memcpy(macaddr, ifr.ifr_hwaddr.sa_data, VIR_MAC_BUFLEN);
+ virMacAddrSetRaw(macaddr, (unsigned char *)ifr.ifr_hwaddr.sa_data);
ret = 0;
@@ -226,7 +226,7 @@ cleanup:
}
#else
int virNetDevGetMAC(const char *ifname,
- unsigned char *macaddr ATTRIBUTE_UNUSED)
+ virMacAddrPtr macaddr ATTRIBUTE_UNUSED)
{
virReportSystemError(ENOSYS,
_("Cannot get interface MAC on '%s'"),
@@ -248,14 +248,14 @@ int virNetDevGetMAC(const char *ifname,
*/
int
virNetDevReplaceMacAddress(const char *linkdev,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *stateDir)
{
- unsigned char oldmac[6];
+ virMacAddr oldmac;
char *path = NULL;
char macstr[VIR_MAC_STRING_BUFLEN];
- if (virNetDevGetMAC(linkdev, oldmac) < 0)
+ if (virNetDevGetMAC(linkdev, &oldmac) < 0)
return -1;
@@ -265,7 +265,7 @@ virNetDevReplaceMacAddress(const char *l
virReportOOMError();
return -1;
}
- virMacAddrFormat(oldmac, macstr);
+ virMacAddrFormat(&oldmac, macstr);
if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) {
virReportSystemError(errno, _("Unable to preserve mac for %s"),
linkdev);
@@ -294,7 +294,7 @@ virNetDevRestoreMacAddress(const char *l
char *oldmacname = NULL;
char *macstr = NULL;
char *path = NULL;
- unsigned char oldmac[6];
+ virMacAddr oldmac;
if (virAsprintf(&path, "%s/%s",
stateDir,
@@ -306,7 +306,7 @@ virNetDevRestoreMacAddress(const char *l
if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0)
return -1;
- if (virMacAddrParse(macstr, &oldmac[0]) != 0) {
+ if (virMacAddrParse(macstr, &oldmac) != 0) {
virNetDevError(VIR_ERR_INTERNAL_ERROR,
_("Cannot parse MAC address from '%s'"),
oldmacname);
@@ -315,7 +315,7 @@ virNetDevRestoreMacAddress(const char *l
}
/*reset mac and remove file-ignore results*/
- rc = virNetDevSetMAC(linkdev, oldmac);
+ rc = virNetDevSetMAC(linkdev, &oldmac);
ignore_value(unlink(path));
VIR_FREE(macstr);
@@ -876,7 +876,7 @@ int virNetDevGetIPv4Address(const char *
*/
#if defined(HAVE_STRUCT_IFREQ)
int virNetDevValidateConfig(const char *ifname,
- const unsigned char *macaddr, int ifindex)
+ const virMacAddrPtr macaddr, int ifindex)
{
int fd = -1;
int ret = -1;
@@ -906,7 +906,8 @@ int virNetDevValidateConfig(const char *
goto cleanup;
}
- if (memcmp(&ifr.ifr_hwaddr.sa_data, macaddr, VIR_MAC_BUFLEN) != 0) {
+ if (virMacAddrCmpRaw(macaddr,
+ (unsigned char *)ifr.ifr_hwaddr.sa_data) != 0) {
ret = 0;
goto cleanup;
}
@@ -1333,7 +1334,7 @@ buffer_too_small:
static int
virNetDevSetVfConfig(const char *ifname, int ifindex, int vf,
- bool nltarget_kernel, const unsigned char *macaddr,
+ bool nltarget_kernel, const virMacAddrPtr macaddr,
int vlanid, uint32_t (*getPidFunc)(void))
{
int rc = -1;
@@ -1378,7 +1379,7 @@ virNetDevSetVfConfig(const char *ifname,
.mac = { 0, },
};
- memcpy(ifla_vf_mac.mac, macaddr, VIR_MAC_BUFLEN);
+ virMacAddrGetRaw(macaddr, ifla_vf_mac.mac);
if (nla_put(nl_msg, IFLA_VF_MAC, sizeof(ifla_vf_mac),
&ifla_vf_mac) < 0)
@@ -1456,7 +1457,7 @@ buffer_too_small:
}
static int
-virNetDevParseVfConfig(struct nlattr **tb, int32_t vf, unsigned char *mac,
+virNetDevParseVfConfig(struct nlattr **tb, int32_t vf, virMacAddrPtr mac,
int *vlanid)
{
const char *msg = NULL;
@@ -1483,7 +1484,7 @@ virNetDevParseVfConfig(struct nlattr **t
if (tb[IFLA_VF_MAC]) {
vf_mac = RTA_DATA(tb_vf[IFLA_VF_MAC]);
if (vf_mac && vf_mac->vf == vf) {
- memcpy(mac, vf_mac->mac, VIR_MAC_BUFLEN);
+ virMacAddrSetRaw(mac, vf_mac->mac);
found = 1;
}
}
@@ -1510,7 +1511,7 @@ cleanup:
}
static int
-virNetDevGetVfConfig(const char *ifname, int vf, unsigned char *mac,
+virNetDevGetVfConfig(const char *ifname, int vf, virMacAddrPtr mac,
int *vlanid)
{
int rc = -1;
@@ -1531,17 +1532,17 @@ virNetDevGetVfConfig(const char *ifname,
static int
virNetDevReplaceVfConfig(const char *pflinkdev, int vf,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
int vlanid,
const char *stateDir)
{
- unsigned char oldmac[6];
+ virMacAddr oldmac;
int oldvlanid = -1;
char *path = NULL;
char macstr[VIR_MAC_STRING_BUFLEN];
int ifindex = -1;
- if (virNetDevGetVfConfig(pflinkdev, vf, oldmac, &oldvlanid) < 0)
+ if (virNetDevGetVfConfig(pflinkdev, vf, &oldmac, &oldvlanid) < 0)
return -1;
if (virAsprintf(&path, "%s/%s_vf%d",
@@ -1550,7 +1551,7 @@ virNetDevReplaceVfConfig(const char *pfl
return -1;
}
- virMacAddrFormat(oldmac, macstr);
+ virMacAddrFormat(&oldmac, macstr);
if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) {
virReportSystemError(errno, _("Unable to preserve mac for pf = %s,"
" vf = %d"), pflinkdev, vf);
@@ -1571,7 +1572,7 @@ virNetDevRestoreVfConfig(const char *pfl
int rc = -1;
char *macstr = NULL;
char *path = NULL;
- unsigned char oldmac[6];
+ virMacAddr oldmac;
int vlanid = -1;
int ifindex = -1;
@@ -1585,7 +1586,7 @@ virNetDevRestoreVfConfig(const char *pfl
goto cleanup;
}
- if (virMacAddrParse(macstr, &oldmac[0]) != 0) {
+ if (virMacAddrParse(macstr, &oldmac) != 0) {
virNetDevError(VIR_ERR_INTERNAL_ERROR,
_("Cannot parse MAC address from '%s'"),
macstr);
@@ -1594,7 +1595,7 @@ virNetDevRestoreVfConfig(const char *pfl
/*reset mac and remove file-ignore results*/
rc = virNetDevSetVfConfig(pflinkdev, ifindex, vf, true,
- oldmac, vlanid, NULL);
+ &oldmac, vlanid, NULL);
ignore_value(unlink(path));
cleanup:
@@ -1617,7 +1618,7 @@ cleanup:
*/
int
virNetDevReplaceNetConfig(char *linkdev, int vf,
- const unsigned char *macaddress, int vlanid,
+ const virMacAddrPtr macaddress, int vlanid,
char *stateDir)
{
if (vf == -1)
Index: libvirt-acl/src/util/virnetdev.h
===================================================================
--- libvirt-acl.orig/src/util/virnetdev.h
+++ libvirt-acl/src/util/virnetdev.h
@@ -25,6 +25,7 @@
# include "virsocketaddr.h"
# include "virnetlink.h"
+# include "virmacaddr.h"
int virNetDevExists(const char *brname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
@@ -49,14 +50,14 @@ int virNetDevGetIPv4Address(const char *
int virNetDevSetMAC(const char *ifname,
- const unsigned char *macaddr)
+ const virMacAddrPtr macaddr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevGetMAC(const char *ifname,
- unsigned char *macaddr)
+ virMacAddrPtr macaddr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevReplaceMacAddress(const char *linkdev,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *stateDir)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
ATTRIBUTE_RETURN_CHECK;
@@ -86,7 +87,7 @@ int virNetDevGetVLanID(const char *ifnam
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevValidateConfig(const char *ifname,
- const unsigned char *macaddr, int ifindex)
+ const virMacAddrPtr macaddr, int ifindex)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevIsVirtualFunction(const char *ifname)
@@ -113,7 +114,7 @@ int virNetDevLinkDump(const char *ifname
ATTRIBUTE_RETURN_CHECK;
int virNetDevReplaceNetConfig(char *linkdev, int vf,
- const unsigned char *macaddress, int vlanid,
+ const virMacAddrPtr macaddress, int vlanid,
char *stateDir)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(5);
Index: libvirt-acl/src/util/virnetdevmacvlan.c
===================================================================
--- libvirt-acl.orig/src/util/virnetdevmacvlan.c
+++ libvirt-acl/src/util/virnetdevmacvlan.c
@@ -95,7 +95,7 @@ VIR_ENUM_IMPL(virNetDevMacVLanMode, VIR_
int
virNetDevMacVLanCreate(const char *ifname,
const char *type,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *srcdev,
uint32_t macvlan_mode,
int *retry)
@@ -435,7 +435,7 @@ static const uint32_t modeMap[VIR_NETDEV
struct virNetlinkCallbackData {
char *cr_ifname;
virNetDevVPortProfilePtr virtPortProfile;
- unsigned char macaddress[VIR_MAC_BUFLEN];
+ virMacAddr macaddress;
char *linkdev;
int vf;
unsigned char vmuuid[VIR_UUID_BUFLEN];
@@ -589,13 +589,13 @@ virNetDevMacVLanVPortProfileCallback(uns
VIR_DEBUG("IFLA_VF_MAC = %2x:%2x:%2x:%2x:%2x:%2x",
m[0], m[1], m[2], m[3], m[4], m[5]);
- if (memcmp(calld->macaddress, m, VIR_MAC_BUFLEN))
+ if (virMacAddrCmpRaw(&calld->macaddress, mac->mac))
{
/* Repeat the same check for a broadcast mac */
int i;
for (i = 0;i < VIR_MAC_BUFLEN; i++) {
- if (calld->macaddress[i] != 0xff) {
+ if (calld->macaddress.addr[i] != 0xff) {
VIR_DEBUG("MAC address match failed (wasn't broadcast)");
return;
}
@@ -697,13 +697,13 @@ virNetDevMacVLanVPortProfileCallback(uns
VIR_INFO(" if: %s", calld->cr_ifname);
VIR_INFO(" lf: %s", calld->linkdev);
VIR_INFO(" mac: %02x:%02x:%02x:%02x:%02x:%02x",
- calld->macaddress[0], calld->macaddress[1],
- calld->macaddress[2], calld->macaddress[3],
- calld->macaddress[4], calld->macaddress[5]);
+ calld->macaddress.addr[0], calld->macaddress.addr[1],
+ calld->macaddress.addr[2], calld->macaddress.addr[3],
+ calld->macaddress.addr[4], calld->macaddress.addr[5]);
ignore_value(virNetDevVPortProfileAssociate(calld->cr_ifname,
calld->virtPortProfile,
- calld->macaddress,
+ &calld->macaddress,
calld->linkdev,
calld->vf,
calld->vmuuid,
@@ -746,7 +746,7 @@ virNetlinkCallbackDataFree(virNetlinkCal
*/
static void
virNetDevMacVLanVPortProfileDestroyCallback(int watch ATTRIBUTE_UNUSED,
- const unsigned char *macaddr ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddr ATTRIBUTE_UNUSED,
void *opaque)
{
virNetlinkCallbackDataFree((virNetlinkCallbackDataPtr)opaque);
@@ -754,7 +754,7 @@ virNetDevMacVLanVPortProfileDestroyCallb
int
virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *linkdev,
const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile,
@@ -770,7 +770,7 @@ virNetDevMacVLanVPortProfileRegisterCall
if (VIR_ALLOC(calld->virtPortProfile) < 0)
goto memory_error;
memcpy(calld->virtPortProfile, virtPortProfile, sizeof(*virtPortProfile));
- memcpy(calld->macaddress, macaddress, sizeof(calld->macaddress));
+ virMacAddrSet(&calld->macaddress, macaddress);
if ((calld->linkdev = strdup(linkdev)) == NULL)
goto memory_error;
memcpy(calld->vmuuid, vmuuid, sizeof(calld->vmuuid));
@@ -813,7 +813,7 @@ error:
* otherwise returns 0; returns -1 on error.
*/
int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *linkdev,
enum virNetDevMacVLanMode mode,
bool withTap,
@@ -980,7 +980,7 @@ link_del_exit:
* were provided.
*/
int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *linkdev,
int mode,
virNetDevVPortProfilePtr virtPortProfile,
@@ -1025,7 +1025,7 @@ int virNetDevMacVLanDeleteWithVPortProfi
* Returns 0; returns -1 on error.
*/
int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *linkdev,
const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile,
@@ -1055,7 +1055,7 @@ error:
#else /* ! WITH_MACVTAP */
int virNetDevMacVLanCreate(const char *ifname ATTRIBUTE_UNUSED,
const char *type ATTRIBUTE_UNUSED,
- const unsigned char *macaddress ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *srcdev ATTRIBUTE_UNUSED,
uint32_t macvlan_mode ATTRIBUTE_UNUSED,
int *retry ATTRIBUTE_UNUSED)
@@ -1073,7 +1073,7 @@ int virNetDevMacVLanDelete(const char *i
}
int virNetDevMacVLanCreateWithVPortProfile(const char *ifname ATTRIBUTE_UNUSED,
- const unsigned char *macaddress ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
enum virNetDevMacVLanMode mode ATTRIBUTE_UNUSED,
bool withTap ATTRIBUTE_UNUSED,
@@ -1091,7 +1091,7 @@ int virNetDevMacVLanCreateWithVPortProfi
}
int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname ATTRIBUTE_UNUSED,
- const unsigned char *macaddress ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
int mode ATTRIBUTE_UNUSED,
virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED,
@@ -1103,7 +1103,7 @@ int virNetDevMacVLanDeleteWithVPortProfi
}
int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname ATTRIBUTE_UNUSED,
- const unsigned char *macaddress ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED,
virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED,
@@ -1115,7 +1115,7 @@ int virNetDevMacVLanRestartWithVPortProf
}
int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname ATTRIBUTE_UNUSED,
- const unsigned char *macaddress ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED,
virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED,
Index: libvirt-acl/src/util/virnetdevmacvlan.h
===================================================================
--- libvirt-acl.orig/src/util/virnetdevmacvlan.h
+++ libvirt-acl/src/util/virnetdevmacvlan.h
@@ -24,6 +24,7 @@
# define __UTIL_MACVTAP_H__
# include "internal.h"
+# include "virmacaddr.h"
# include "virsocketaddr.h"
# include "virnetdevbandwidth.h"
# include "virnetdevvportprofile.h"
@@ -41,7 +42,7 @@ VIR_ENUM_DECL(virNetDevMacVLanMode)
int virNetDevMacVLanCreate(const char *ifname,
const char *type,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *srcdev,
uint32_t macvlan_mode,
int *retry)
@@ -52,7 +53,7 @@ int virNetDevMacVLanDelete(const char *i
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanCreateWithVPortProfile(const char *ifname,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *linkdev,
enum virNetDevMacVLanMode mode,
bool withTap,
@@ -67,7 +68,7 @@ int virNetDevMacVLanCreateWithVPortProfi
ATTRIBUTE_NONNULL(9) ATTRIBUTE_NONNULL(11) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *linkdev,
int mode,
virNetDevVPortProfilePtr virtPortProfile,
@@ -76,7 +77,7 @@ int virNetDevMacVLanDeleteWithVPortProfi
ATTRIBUTE_NONNULL(6) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
- const unsigned char *macaddress,
+ const virMacAddrPtr macaddress,
const char *linkdev,
const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile,
@@ -85,7 +86,7 @@ int virNetDevMacVLanRestartWithVPortProf
ATTRIBUTE_NONNULL(4) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
- const unsigned char *macaddress ,
+ const virMacAddrPtr macaddress ,
const char *linkdev,
const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile,
Index: libvirt-acl/src/util/virnetdevvportprofile.h
===================================================================
--- libvirt-acl.orig/src/util/virnetdevvportprofile.h
+++ libvirt-acl/src/util/virnetdevvportprofile.h
@@ -28,6 +28,7 @@
# include "internal.h"
# include "uuid.h"
# include "util.h"
+# include "virmacaddr.h"
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40
@@ -83,7 +84,7 @@ bool virNetDevVPortProfileEqual(virNetDe
int virNetDevVPortProfileAssociate(const char *ifname,
const virNetDevVPortProfilePtr virtPort,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *linkdev,
int vf,
const unsigned char *vmuuid,
@@ -94,7 +95,7 @@ int virNetDevVPortProfileAssociate(const
int virNetDevVPortProfileDisassociate(const char *ifname,
const virNetDevVPortProfilePtr virtPort,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *linkdev,
int vf,
enum virNetDevVPortProfileOp vmOp)
Index: libvirt-acl/src/util/virnetlink.c
===================================================================
--- libvirt-acl.orig/src/util/virnetlink.c
+++ libvirt-acl/src/util/virnetlink.c
@@ -56,7 +56,7 @@ struct virNetlinkEventHandle {
virNetlinkEventHandleCallback handleCB;
virNetlinkEventRemoveCallback removeCB;
void *opaque;
- unsigned char macaddr[VIR_MAC_BUFLEN];
+ virMacAddr macaddr;
int deleted;
};
@@ -278,7 +278,7 @@ virNetlinkEventRemoveClientPrimitive(siz
if (removeCB) {
(removeCB)(server->handles[i].watch,
- server->handles[i].macaddr,
+ &server->handles[i].macaddr,
server->handles[i].opaque);
}
server->handles[i].deleted = VIR_NETLINK_HANDLE_DELETED;
@@ -506,7 +506,7 @@ error_locked:
int
virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB,
virNetlinkEventRemoveCallback removeCB,
- void *opaque, const unsigned char *macaddr)
+ void *opaque, const virMacAddrPtr macaddr)
{
int i, r, ret = -1;
virNetlinkEventSrvPrivatePtr srv = server;
@@ -548,9 +548,10 @@ addentry:
srv->handles[r].opaque = opaque;
srv->handles[r].deleted = VIR_NETLINK_HANDLE_VALID;
if (macaddr)
- memcpy(srv->handles[r].macaddr, macaddr, VIR_MAC_BUFLEN);
+ virMacAddrSet(&srv->handles[r].macaddr, macaddr);
else
- memset(srv->handles[r].macaddr, 0, VIR_MAC_BUFLEN);
+ virMacAddrSetRaw(&srv->handles[r].macaddr,
+ (unsigned char[VIR_MAC_BUFLEN]){0,0,0,0,0,0});
VIR_DEBUG("added client to loop slot: %d. with macaddr ptr=%p", r, macaddr);
@@ -573,7 +574,7 @@ error:
* Returns -1 if the file handle was not registered, 0 upon success
*/
int
-virNetlinkEventRemoveClient(int watch, const unsigned char *macaddr)
+virNetlinkEventRemoveClient(int watch, const virMacAddrPtr macaddr)
{
int i;
int ret = -1;
@@ -594,7 +595,7 @@ virNetlinkEventRemoveClient(int watch, c
if ((watch && srv->handles[i].watch == watch) ||
(!watch &&
- memcmp(macaddr, srv->handles[i].macaddr, VIR_MAC_BUFLEN) == 0)) {
+ virMacAddrCmp(macaddr, &srv->handles[i].macaddr) == 0)) {
VIR_DEBUG("removed client: %d by %s.",
srv->handles[i].watch, watch ? "index" : "mac");
Index: libvirt-acl/src/util/virnetlink.h
===================================================================
--- libvirt-acl.orig/src/util/virnetlink.h
+++ libvirt-acl/src/util/virnetlink.h
@@ -22,6 +22,7 @@
# include "config.h"
# include "internal.h"
+# include "virmacaddr.h"
# include <stdint.h>
@@ -46,7 +47,7 @@ int virNetlinkCommand(struct nl_msg *nl_
typedef void (*virNetlinkEventHandleCallback)(unsigned char *msg, int length, struct sockaddr_nl *peer, bool *handled, void *opaque);
-typedef void (*virNetlinkEventRemoveCallback)(int watch, const unsigned char *macaddr, void *opaque);
+typedef void (*virNetlinkEventRemoveCallback)(int watch, const virMacAddrPtr macaddr, void *opaque);
/**
* stopNetlinkEventServer: stop the monitor to receive netlink messages for libvirtd
@@ -73,11 +74,11 @@ int virNetlinkEventServiceLocalPid(void)
*/
int virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB,
virNetlinkEventRemoveCallback removeCB,
- void *opaque, const unsigned char *macaddr);
+ void *opaque, const virMacAddrPtr macaddr);
/**
* virNetlinkEventRemoveClient: unregister a callback from a netlink monitor
*/
-int virNetlinkEventRemoveClient(int watch, const unsigned char *macaddr);
+int virNetlinkEventRemoveClient(int watch, const virMacAddrPtr macaddr);
#endif /* __VIR_NETLINK_H__ */
Index: libvirt-acl/src/conf/capabilities.c
===================================================================
--- libvirt-acl.orig/src/conf/capabilities.c
+++ libvirt-acl/src/conf/capabilities.c
@@ -859,14 +859,14 @@ virCapabilitiesFormatXML(virCapsPtr caps
extern void
virCapabilitiesSetMacPrefix(virCapsPtr caps,
- unsigned char *prefix)
+ const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN])
{
memcpy(caps->macPrefix, prefix, sizeof(caps->macPrefix));
}
extern void
virCapabilitiesGenerateMac(virCapsPtr caps,
- unsigned char *mac)
+ virMacAddrPtr mac)
{
virMacAddrGenerate(caps->macPrefix, mac);
}
Index: libvirt-acl/src/conf/capabilities.h
===================================================================
--- libvirt-acl.orig/src/conf/capabilities.h
+++ libvirt-acl/src/conf/capabilities.h
@@ -172,11 +172,11 @@ virCapabilitiesFreeNUMAInfo(virCapsPtr c
extern void
virCapabilitiesSetMacPrefix(virCapsPtr caps,
- unsigned char *prefix);
+ const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN]);
extern void
virCapabilitiesGenerateMac(virCapsPtr caps,
- unsigned char *mac);
+ virMacAddrPtr mac);
extern void
virCapabilitiesSetEmulatorRequired(virCapsPtr caps);
Index: libvirt-acl/src/conf/domain_audit.c
===================================================================
--- libvirt-acl.orig/src/conf/domain_audit.c
+++ libvirt-acl/src/conf/domain_audit.c
@@ -160,9 +160,9 @@ virDomainAuditNet(virDomainObjPtr vm,
virUUIDFormat(vm->def->uuid, uuidstr);
if (oldDef)
- virMacAddrFormat(oldDef->mac, oldMacstr);
+ virMacAddrFormat(&oldDef->mac, oldMacstr);
if (newDef)
- virMacAddrFormat(newDef->mac, newMacstr);
+ virMacAddrFormat(&newDef->mac, newMacstr);
if (!(vmname = virAuditEncode("vm", vm->def->name))) {
VIR_WARN("OOM while encoding audit message");
return;
@@ -206,7 +206,7 @@ virDomainAuditNetDevice(virDomainDefPtr
const char *virt;
virUUIDFormat(vmDef->uuid, uuidstr);
- virMacAddrFormat(netDef->mac, macstr);
+ virMacAddrFormat(&netDef->mac, macstr);
rdev = virDomainAuditGetRdev(device);
if (!(vmname = virAuditEncode("vm", vmDef->name)) ||
Index: libvirt-acl/src/conf/domain_conf.c
===================================================================
--- libvirt-acl.orig/src/conf/domain_conf.c
+++ libvirt-acl/src/conf/domain_conf.c
@@ -4641,20 +4641,20 @@ virDomainNetDefParseXML(virCapsPtr caps,
}
if (macaddr) {
- if (virMacAddrParse((const char *)macaddr, def->mac) < 0) {
+ if (virMacAddrParse((const char *)macaddr, &def->mac) < 0) {
virDomainReportError(VIR_ERR_XML_ERROR,
_("unable to parse mac address '%s'"),
(const char *)macaddr);
goto error;
}
- if (virMacAddrIsMulticast(def->mac)) {
+ if (virMacAddrIsMulticast(&def->mac)) {
virDomainReportError(VIR_ERR_XML_ERROR,
_("expected unicast mac address, found multicast '%s'"),
(const char *)macaddr);
goto error;
}
} else {
- virCapabilitiesGenerateMac(caps, def->mac);
+ virCapabilitiesGenerateMac(caps, &def->mac);
}
if (devaddr) {
@@ -7443,12 +7443,12 @@ int virDomainNetInsert(virDomainDefPtr d
return 0;
}
-int virDomainNetIndexByMac(virDomainDefPtr def, const unsigned char *mac)
+int virDomainNetIndexByMac(virDomainDefPtr def, const virMacAddrPtr mac)
{
int i;
for (i = 0; i < def->nnets; i++)
- if (!memcmp(def->nets[i]->mac, mac, VIR_MAC_BUFLEN))
+ if (!virMacAddrCmp(&def->nets[i]->mac, mac))
return i;
return -1;
}
@@ -7489,7 +7489,7 @@ virDomainNetRemove(virDomainDefPtr def,
}
virDomainNetDefPtr
-virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac)
+virDomainNetRemoveByMac(virDomainDefPtr def, const virMacAddrPtr mac)
{
int i = virDomainNetIndexByMac(def, mac);
@@ -9712,14 +9712,14 @@ static bool virDomainNetDefCheckABIStabi
{
bool identical = false;
- if (memcmp(src->mac, dst->mac, VIR_MAC_BUFLEN) != 0) {
+ if (virMacAddrCmp(&src->mac, &dst->mac) != 0) {
virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Target network card mac %02x:%02x:%02x:%02x:%02x:%02x"
"does not match source %02x:%02x:%02x:%02x:%02x:%02x"),
- dst->mac[0], dst->mac[1], dst->mac[2],
- dst->mac[3], dst->mac[4], dst->mac[5],
- src->mac[0], src->mac[1], src->mac[2],
- src->mac[3], src->mac[4], src->mac[5]);
+ dst->mac.addr[0], dst->mac.addr[1], dst->mac.addr[2],
+ dst->mac.addr[3], dst->mac.addr[4], dst->mac.addr[5],
+ src->mac.addr[0], src->mac.addr[1], src->mac.addr[2],
+ src->mac.addr[3], src->mac.addr[4], src->mac.addr[5]);
goto cleanup;
}
@@ -11575,8 +11575,8 @@ virDomainNetDefFormat(virBufferPtr buf,
virBufferAsprintf(buf,
" <mac address='%02x:%02x:%02x:%02x:%02x:%02x'/>\n",
- def->mac[0], def->mac[1], def->mac[2],
- def->mac[3], def->mac[4], def->mac[5]);
+ def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
+ def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
switch (def->type) {
case VIR_DOMAIN_NET_TYPE_NETWORK:
@@ -15146,15 +15146,15 @@ virDomainNetFind(virDomainDefPtr def, co
{
bool isMac = false;
virDomainNetDefPtr net = NULL;
- unsigned char mac[VIR_MAC_BUFLEN];
+ virMacAddr mac;
int i;
- if (virMacAddrParse(device, mac) == 0)
+ if (virMacAddrParse(device, &mac) == 0)
isMac = true;
if (isMac) {
for (i = 0; i < def->nnets; i++) {
- if (memcmp(mac, def->nets[i]->mac, VIR_MAC_BUFLEN) == 0) {
+ if (virMacAddrCmp(&mac, &def->nets[i]->mac) == 0) {
net = def->nets[i];
break;
}
Index: libvirt-acl/src/conf/network_conf.c
===================================================================
--- libvirt-acl.orig/src/conf/network_conf.c
+++ libvirt-acl/src/conf/network_conf.c
@@ -420,19 +420,19 @@ virNetworkDHCPRangeDefParseXML(const cha
} else if (cur->type == XML_ELEMENT_NODE &&
xmlStrEqual(cur->name, BAD_CAST "host")) {
char *mac = NULL, *name = NULL, *ip;
- unsigned char addr[6];
+ virMacAddr addr;
virSocketAddr inaddr;
mac = virXMLPropString(cur, "mac");
if (mac != NULL) {
- if (virMacAddrParse(mac, &addr[0]) < 0) {
+ if (virMacAddrParse(mac, &addr) < 0) {
virNetworkReportError(VIR_ERR_XML_ERROR,
_("Cannot parse MAC address '%s' in network '%s'"),
mac, networkName);
VIR_FREE(mac);
return -1;
}
- if (virMacAddrIsMulticast(addr)) {
+ if (virMacAddrIsMulticast(&addr)) {
virNetworkReportError(VIR_ERR_XML_ERROR,
_("expected unicast mac address, found multicast '%s' in network '%s'"),
(const char *)mac, networkName);
@@ -989,14 +989,14 @@ virNetworkDefParseXML(xmlXPathContextPtr
tmp = virXPathString("string(./mac[1]/@address)", ctxt);
if (tmp) {
- if (virMacAddrParse(tmp, def->mac) < 0) {
+ if (virMacAddrParse(tmp, &def->mac) < 0) {
virNetworkReportError(VIR_ERR_XML_ERROR,
_("Invalid bridge mac address '%s' in network '%s'"),
tmp, def->name);
VIR_FREE(tmp);
goto error;
}
- if (virMacAddrIsMulticast(def->mac)) {
+ if (virMacAddrIsMulticast(&def->mac)) {
virNetworkReportError(VIR_ERR_XML_ERROR,
_("Invalid multicast bridge mac address '%s' in network '%s'"),
tmp, def->name);
@@ -1520,7 +1520,7 @@ char *virNetworkDefFormat(const virNetwo
if (def->mac_specified) {
char macaddr[VIR_MAC_STRING_BUFLEN];
- virMacAddrFormat(def->mac, macaddr);
+ virMacAddrFormat(&def->mac, macaddr);
virBufferAsprintf(&buf, " <mac address='%s'/>\n", macaddr);
}
@@ -1848,7 +1848,7 @@ void virNetworkSetBridgeMacAddr(virNetwo
* autogenerate a random one.
*/
virMacAddrGenerate((unsigned char[]){ 0x52, 0x54, 0 },
- def->mac);
+ &def->mac);
def->mac_specified = true;
}
}
Index: libvirt-acl/src/conf/network_conf.h
===================================================================
--- libvirt-acl.orig/src/conf/network_conf.h
+++ libvirt-acl/src/conf/network_conf.h
@@ -154,7 +154,7 @@ struct _virNetworkDef {
char *domain;
unsigned long delay; /* Bridge forward delay (ms) */
unsigned int stp :1; /* Spanning tree protocol */
- unsigned char mac[VIR_MAC_BUFLEN]; /* mac address of bridge device */
+ virMacAddr mac; /* mac address of bridge device */
bool mac_specified;
int forwardType; /* One of virNetworkForwardType constants */
Index: libvirt-acl/src/conf/nwfilter_conf.c
===================================================================
--- libvirt-acl.orig/src/conf/nwfilter_conf.c
+++ libvirt-acl/src/conf/nwfilter_conf.c
@@ -1775,15 +1775,6 @@ static const virAttributes virAttr[] = {
PROTOCOL_ENTRY_LAST
};
-
-static int
-virNWMACAddressParser(const char *input,
- nwMACAddressPtr output)
-{
- return virMacAddrParse(input, &output->addr[0]);
-}
-
-
static int
virNWFilterRuleDetailsParse(xmlNodePtr node,
virNWFilterRuleDefPtr nwf,
@@ -1916,8 +1907,8 @@ virNWFilterRuleDetailsParse(xmlNodePtr n
break;
case DATATYPE_MACADDR:
- if (virNWMACAddressParser(prop,
- &item->u.macaddr) < 0) {
+ if (virMacAddrParse(prop,
+ &item->u.macaddr) < 0) {
rc = -1;
}
found = 1;
@@ -1925,8 +1916,8 @@ virNWFilterRuleDetailsParse(xmlNodePtr n
case DATATYPE_MACMASK:
validator = checkMACMask;
- if (virNWMACAddressParser(prop,
- &item->u.macaddr) < 0) {
+ if (virMacAddrParse(prop,
+ &item->u.macaddr) < 0) {
rc = -1;
}
data.v = &item->u.macaddr;
Index: libvirt-acl/src/conf/nwfilter_conf.h
===================================================================
--- libvirt-acl.orig/src/conf/nwfilter_conf.h
+++ libvirt-acl/src/conf/nwfilter_conf.h
@@ -36,6 +36,7 @@
# include "xml.h"
# include "buf.h"
# include "virsocketaddr.h"
+# include "virmacaddr.h"
/* XXX
* The config parser/structs should not be using platform specific
@@ -113,13 +114,6 @@ enum attrDatatype {
# define NWFILTER_MAC_BGA "01:80:c2:00:00:00"
-typedef struct _nwMACAddress nwMACAddress;
-typedef nwMACAddress *nwMACAddressPtr;
-struct _nwMACAddress {
- unsigned char addr[6];
-};
-
-
typedef struct _nwItemDesc nwItemDesc;
typedef nwItemDesc *nwItemDescPtr;
struct _nwItemDesc {
@@ -127,7 +121,7 @@ struct _nwItemDesc {
virNWFilterVarAccessPtr varAccess;
enum attrDatatype datatype;
union {
- nwMACAddress macaddr;
+ virMacAddr macaddr;
virSocketAddr ipaddr;
bool boolean;
uint8_t u8;
@@ -633,10 +627,10 @@ typedef int (*virNWFilterRuleDisplayInst
typedef int (*virNWFilterCanApplyBasicRules)(void);
typedef int (*virNWFilterApplyBasicRules)(const char *ifname,
- const unsigned char *macaddr);
+ const virMacAddrPtr macaddr);
typedef int (*virNWFilterApplyDHCPOnlyRules)(const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
virNWFilterVarValuePtr dhcpsrvs,
bool leaveTemporary);
Index: libvirt-acl/src/conf/nwfilter_params.h
===================================================================
--- libvirt-acl.orig/src/conf/nwfilter_params.h
+++ libvirt-acl/src/conf/nwfilter_params.h
@@ -25,6 +25,7 @@
# include "virhash.h"
# include "buf.h"
+# include "virmacaddr.h"
enum virNWFilterVarValueType {
NWFILTER_VALUE_TYPE_SIMPLE,
Index: libvirt-acl/src/network/bridge_driver.c
===================================================================
--- libvirt-acl.orig/src/network/bridge_driver.c
+++ libvirt-acl/src/network/bridge_driver.c
@@ -1765,7 +1765,7 @@ networkStartNetworkVirtual(struct networ
goto err0;
}
if (virNetDevTapCreateInBridgePort(network->def->bridge,
- &macTapIfName, network->def->mac,
+ &macTapIfName, &network->def->mac,
NULL, NULL, NULL,
VIR_NETDEV_TAP_CREATE_USE_MAC_FOR_BRIDGE) < 0) {
VIR_FREE(macTapIfName);
Index: libvirt-acl/src/nwfilter/nwfilter_dhcpsnoop.c
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_dhcpsnoop.c
+++ libvirt-acl/src/nwfilter/nwfilter_dhcpsnoop.c
@@ -484,7 +484,7 @@ virNWFilterSnoopIPLeaseInstallRule(virNW
req->ifindex,
req->linkdev,
req->nettype,
- req->macaddr,
+ &req->macaddr,
req->filtername,
req->vars,
req->driver);
@@ -875,7 +875,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterS
req->ifindex,
req->linkdev,
req->nettype,
- req->macaddr,
+ &req->macaddr,
req->filtername,
req->vars,
req->driver);
@@ -884,7 +884,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterS
virHashLookup(req->vars->hashTable, NWFILTER_VARNAME_DHCPSERVER);
if (req->techdriver &&
- req->techdriver->applyDHCPOnlyRules(req->ifname, req->macaddr,
+ req->techdriver->applyDHCPOnlyRules(req->ifname, &req->macaddr,
dhcpsrvrs, false) < 0) {
virNWFilterReportError(VIR_ERR_INTERNAL_ERROR,
_("virNWFilterSnoopListDel failed"));
@@ -1071,7 +1071,7 @@ virNWFilterSnoopDHCPOpen(const char *ifn
char macaddr[VIR_MAC_STRING_BUFLEN];
const char *ext;
- virMacAddrFormat((unsigned char *)mac, macaddr);
+ virMacAddrFormat(mac, macaddr);
if (dir == PCAP_D_IN /* from VM */) {
/*
@@ -1560,7 +1560,7 @@ exit:
static void
virNWFilterSnoopIFKeyFMT(char *ifkey, const unsigned char *vmuuid,
- unsigned const char *macaddr)
+ const virMacAddrPtr macaddr)
{
virUUIDFormat(vmuuid, ifkey);
ifkey[VIR_UUID_STRING_BUFLEN - 1] = '-';
@@ -1573,7 +1573,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechD
const char *linkdev,
enum virDomainNetType nettype,
const unsigned char *vmuuid,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver)
@@ -1609,7 +1609,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechD
req->linkdev = linkdev ? strdup(linkdev) : NULL;
req->nettype = nettype;
req->ifname = strdup(ifname);
- memcpy(req->macaddr, macaddr, sizeof(req->macaddr));
+ virMacAddrSet(&req->macaddr, macaddr);
req->filtername = strdup(filtername);
req->vars = virNWFilterHashTableCreate(0);
@@ -1631,7 +1631,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechD
dhcpsrvrs = virHashLookup(filterparams->hashTable,
NWFILTER_VARNAME_DHCPSERVER);
- if (techdriver->applyDHCPOnlyRules(req->ifname, req->macaddr,
+ if (techdriver->applyDHCPOnlyRules(req->ifname, &req->macaddr,
dhcpsrvrs, false) < 0) {
virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, _("applyDHCPOnlyRules "
"failed - spoofing not protected!"));
Index: libvirt-acl/src/nwfilter/nwfilter_ebiptables_driver.c
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_ebiptables_driver.c
+++ libvirt-acl/src/nwfilter/nwfilter_ebiptables_driver.c
@@ -306,7 +306,7 @@ _printDataType(virNWFilterVarCombIterPtr
return -1;
}
- virMacAddrFormat(item->u.macaddr.addr, buf);
+ virMacAddrFormat(&item->u.macaddr, buf);
break;
case DATATYPE_IPV6MASK:
@@ -3189,7 +3189,7 @@ ebiptablesCanApplyBasicRules(void) {
*/
static int
ebtablesApplyBasicRules(const char *ifname,
- const unsigned char *macaddr)
+ const virMacAddrPtr macaddr)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
char chain[MAX_CHAINNAME_LENGTH];
@@ -3282,7 +3282,7 @@ tear_down_tmpebchains:
*/
static int
ebtablesApplyDHCPOnlyRules(const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
virNWFilterVarValuePtr dhcpsrvrs,
bool leaveTemporary)
{
Index: libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_gentech_driver.c
+++ libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c
@@ -656,7 +656,7 @@ virNWFilterInstantiate(const unsigned ch
virNWFilterHashTablePtr vars,
enum instCase useNewFilter, bool *foundNewFilter,
bool teardownOld,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
virNWFilterDriverStatePtr driver,
bool forceWithPendingReq)
{
@@ -817,7 +817,7 @@ __virNWFilterInstantiateFilter(const uns
int ifindex,
const char *linkdev,
enum virDomainNetType nettype,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
enum instCase useNewFilter,
@@ -967,7 +967,7 @@ _virNWFilterInstantiateFilter(virConnect
ifindex,
linkdev,
net->type,
- net->mac,
+ &net->mac,
net->filter,
net->filterparams,
useNewFilter,
@@ -988,7 +988,7 @@ virNWFilterInstantiateFilterLate(const u
int ifindex,
const char *linkdev,
enum virDomainNetType nettype,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver)
Index: libvirt-acl/src/nwfilter/nwfilter_gentech_driver.h
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_gentech_driver.h
+++ libvirt-acl/src/nwfilter/nwfilter_gentech_driver.h
@@ -50,7 +50,7 @@ int virNWFilterInstantiateFilterLate(con
int ifindex,
const char *linkdev,
enum virDomainNetType nettype,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver);
Index: libvirt-acl/src/nwfilter/nwfilter_learnipaddr.c
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_learnipaddr.c
+++ libvirt-acl/src/nwfilter/nwfilter_learnipaddr.c
@@ -404,12 +404,12 @@ learnIPAddressThread(void *arg)
goto done;
}
- virMacAddrFormat(req->macaddr, macaddr);
+ virMacAddrFormat(&req->macaddr, macaddr);
switch (req->howDetect) {
case DETECT_DHCP:
if (techdriver->applyDHCPOnlyRules(req->ifname,
- req->macaddr,
+ &req->macaddr,
NULL, false) < 0) {
req->status = EINVAL;
goto done;
@@ -420,7 +420,7 @@ learnIPAddressThread(void *arg)
break;
default:
if (techdriver->applyBasicRules(req->ifname,
- req->macaddr) < 0) {
+ &req->macaddr) < 0) {
req->status = EINVAL;
goto done;
}
@@ -493,9 +493,7 @@ learnIPAddressThread(void *arg)
continue;
}
- if (memcmp(ether_hdr->ether_shost,
- req->macaddr,
- VIR_MAC_BUFLEN) == 0) {
+ if (virMacAddrCmpRaw(&req->macaddr, ether_hdr->ether_shost) == 0) {
/* packets from the VM */
if (etherType == ETHERTYPE_IP &&
@@ -530,9 +528,8 @@ learnIPAddressThread(void *arg)
break;
}
}
- } else if (memcmp(ether_hdr->ether_dhost,
- req->macaddr,
- VIR_MAC_BUFLEN) == 0) {
+ } else if (virMacAddrCmpRaw(&req->macaddr,
+ ether_hdr->ether_dhost) == 0) {
/* packets to the VM */
if (etherType == ETHERTYPE_IP &&
(header.len >= ethHdrSize +
@@ -554,9 +551,9 @@ learnIPAddressThread(void *arg)
struct dhcp *dhcp = (struct dhcp *)
((char *)udphdr + sizeof(udphdr));
if (dhcp->op == 2 /* BOOTREPLY */ &&
- !memcmp(&dhcp->chaddr[0],
- req->macaddr,
- 6)) {
+ virMacAddrCmpRaw(
+ &req->macaddr,
+ &dhcp->chaddr[0]) == 0) {
dhcp_opts_len = header.len -
(ethHdrSize + iphdr->ihl * 4 +
sizeof(struct udphdr) +
@@ -602,7 +599,7 @@ learnIPAddressThread(void *arg)
req->ifindex,
req->linkdev,
req->nettype,
- req->macaddr,
+ &req->macaddr,
req->filtername,
req->filterparams,
req->driver);
@@ -662,7 +659,7 @@ virNWFilterLearnIPAddress(virNWFilterTec
int ifindex,
const char *linkdev,
enum virDomainNetType nettype,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver,
@@ -720,7 +717,7 @@ virNWFilterLearnIPAddress(virNWFilterTec
req->ifindex = ifindex;
req->nettype = nettype;
- memcpy(req->macaddr, macaddr, sizeof(req->macaddr));
+ virMacAddrSet(&req->macaddr, macaddr);
req->driver = driver;
req->filterparams = ht;
ht = NULL;
@@ -758,7 +755,7 @@ virNWFilterLearnIPAddress(virNWFilterTec
int ifindex ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
enum virDomainNetType nettype ATTRIBUTE_UNUSED,
- const unsigned char *macaddr ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macaddr ATTRIBUTE_UNUSED,
const char *filtername ATTRIBUTE_UNUSED,
virNWFilterHashTablePtr filterparams ATTRIBUTE_UNUSED,
virNWFilterDriverStatePtr driver ATTRIBUTE_UNUSED,
Index: libvirt-acl/src/nwfilter/nwfilter_learnipaddr.h
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_learnipaddr.h
+++ libvirt-acl/src/nwfilter/nwfilter_learnipaddr.h
@@ -40,7 +40,7 @@ struct _virNWFilterIPAddrLearnReq {
int ifindex;
char linkdev[IF_NAMESIZE];
enum virDomainNetType nettype;
- unsigned char macaddr[VIR_MAC_BUFLEN];
+ virMacAddr macaddr;
char *filtername;
virNWFilterHashTablePtr filterparams;
virNWFilterDriverStatePtr driver;
@@ -56,7 +56,7 @@ int virNWFilterLearnIPAddress(virNWFilte
int ifindex,
const char *linkdev,
enum virDomainNetType nettype,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver,
Index: libvirt-acl/src/openvz/openvz_conf.c
===================================================================
--- libvirt-acl.orig/src/openvz/openvz_conf.c
+++ libvirt-acl/src/openvz/openvz_conf.c
@@ -335,7 +335,7 @@ openvzReadNetworkConf(virDomainDefPtr de
_("MAC address %s too long for destination"), p);
goto error;
}
- if (virMacAddrParse(cpy_temp, net->mac) < 0) {
+ if (virMacAddrParse(cpy_temp, &net->mac) < 0) {
openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Wrong MAC address"));
goto error;
Index: libvirt-acl/src/openvz/openvz_driver.c
===================================================================
--- libvirt-acl.orig/src/openvz/openvz_driver.c
+++ libvirt-acl/src/openvz/openvz_driver.c
@@ -735,7 +735,7 @@ openvzDomainSetNetwork(virConnectPtr con
int rc = 0, narg;
const char *prog[OPENVZ_MAX_ARG];
char macaddr[VIR_MAC_STRING_BUFLEN];
- unsigned char host_mac[VIR_MAC_BUFLEN];
+ virMacAddr host_mac;
char host_macaddr[VIR_MAC_STRING_BUFLEN];
struct openvz_driver *driver = conn->privateData;
char *opt = NULL;
@@ -770,9 +770,9 @@ openvzDomainSetNetwork(virConnectPtr con
ADD_ARG_LIT(vpsid);
}
- virMacAddrFormat(net->mac, macaddr);
- virCapabilitiesGenerateMac(driver->caps, host_mac);
- virMacAddrFormat(host_mac, host_macaddr);
+ virMacAddrFormat(&net->mac, macaddr);
+ virCapabilitiesGenerateMac(driver->caps, &host_mac);
+ virMacAddrFormat(&host_mac, host_macaddr);
if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
(net->type == VIR_DOMAIN_NET_TYPE_ETHERNET &&
Index: libvirt-acl/src/qemu/qemu_bridge_filter.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_bridge_filter.c
+++ libvirt-acl/src/qemu/qemu_bridge_filter.c
@@ -66,7 +66,7 @@ networkDisableAllFrames(struct qemud_dri
int
networkAllowMacOnPort(struct qemud_driver *driver,
const char * ifname,
- const unsigned char * mac) {
+ const virMacAddrPtr mac) {
int err;
@@ -87,7 +87,7 @@ networkAllowMacOnPort(struct qemud_drive
int
networkDisallowMacOnPort(struct qemud_driver *driver,
const char * ifname,
- const unsigned char * mac) {
+ const virMacAddrPtr mac) {
int err;
Index: libvirt-acl/src/qemu/qemu_bridge_filter.h
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_bridge_filter.h
+++ libvirt-acl/src/qemu/qemu_bridge_filter.h
@@ -26,10 +26,10 @@
int networkAllowMacOnPort(struct qemud_driver *driver,
const char * ifname,
- const unsigned char * mac);
+ const virMacAddrPtr mac);
int networkDisallowMacOnPort(struct qemud_driver *driver,
const char * ifname,
- const unsigned char * mac);
+ const virMacAddrPtr mac);
int networkDisableAllFrames(struct qemud_driver *driver);
int networkAddEbtablesRules(struct qemud_driver *driver);
Index: libvirt-acl/src/qemu/qemu_command.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_command.c
+++ libvirt-acl/src/qemu/qemu_command.c
@@ -157,7 +157,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def
vnet_hdr = 1;
rc = virNetDevMacVLanCreateWithVPortProfile(
- net->ifname, net->mac,
+ net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net),
true, vnet_hdr, def->uuid,
@@ -251,7 +251,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr
tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_HDR;
}
- err = virNetDevTapCreateInBridgePort(brname, &net->ifname, net->mac,
+ err = virNetDevTapCreateInBridgePort(brname, &net->ifname, &net->mac,
def->uuid, &tapfd,
virDomainNetGetActualVirtPortProfile(net),
tap_create_flags);
@@ -263,7 +263,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr
}
if (driver->macFilter) {
- if ((err = networkAllowMacOnPort(driver, net->ifname, net->mac))) {
+ if ((err = networkAllowMacOnPort(driver, net->ifname, &net->mac))) {
virReportSystemError(err,
_("failed to add ebtables rule to allow MAC address on '%s'"),
net->ifname);
@@ -2857,9 +2857,9 @@ qemuBuildNicStr(virDomainNetDefPtr net,
if (virAsprintf(&str,
"%smacaddr=%02x:%02x:%02x:%02x:%02x:%02x,vlan=%d%s%s%s%s",
prefix ? prefix : "",
- net->mac[0], net->mac[1],
- net->mac[2], net->mac[3],
- net->mac[4], net->mac[5],
+ net->mac.addr[0], net->mac.addr[1],
+ net->mac.addr[2], net->mac.addr[3],
+ net->mac.addr[4], net->mac.addr[5],
vlan,
(net->model ? ",model=" : ""),
(net->model ? net->model : ""),
@@ -2937,9 +2937,9 @@ qemuBuildNicDevStr(virDomainNetDefPtr ne
virBufferAsprintf(&buf, ",vlan=%d", vlan);
virBufferAsprintf(&buf, ",id=%s", net->info.alias);
virBufferAsprintf(&buf, ",mac=%02x:%02x:%02x:%02x:%02x:%02x",
- net->mac[0], net->mac[1],
- net->mac[2], net->mac[3],
- net->mac[4], net->mac[5]);
+ net->mac.addr[0], net->mac.addr[1],
+ net->mac.addr[2], net->mac.addr[3],
+ net->mac.addr[4], net->mac.addr[5]);
if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCaps) < 0)
goto error;
if (qemuBuildRomStr(&buf, &net->info, qemuCaps) < 0)
@@ -7038,7 +7038,7 @@ qemuParseCommandLineNet(virCapsPtr caps,
for (i = 0 ; i < nkeywords ; i++) {
if (STREQ(keywords[i], "macaddr")) {
genmac = 0;
- if (virMacAddrParse(values[i], def->mac) < 0) {
+ if (virMacAddrParse(values[i], &def->mac) < 0) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
_("unable to parse mac address '%s'"),
values[i]);
@@ -7068,7 +7068,7 @@ qemuParseCommandLineNet(virCapsPtr caps,
}
if (genmac)
- virCapabilitiesGenerateMac(caps, def->mac);
+ virCapabilitiesGenerateMac(caps, &def->mac);
cleanup:
for (i = 0 ; i < nkeywords ; i++) {
Index: libvirt-acl/src/qemu/qemu_driver.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_driver.c
+++ libvirt-acl/src/qemu/qemu_driver.c
@@ -443,7 +443,7 @@ static void qemuDomainNetsRestart(void *
VIR_DEBUG("VEPA mode device %s active in domain %s. Reassociating.",
net->ifname, def->name);
ignore_value(virNetDevMacVLanRestartWithVPortProfile(net->ifname,
- net->mac,
+ &net->mac,
virDomainNetGetActualDirectDev(net),
def->uuid,
virDomainNetGetActualVirtPortProfile(net),
@@ -5560,9 +5560,10 @@ qemuDomainAttachDeviceConfig(virDomainDe
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- if (virDomainNetIndexByMac(vmdef, net->mac) >= 0) {
+ if (virDomainNetIndexByMac(vmdef, &net->mac) >= 0) {
char macbuf[VIR_MAC_STRING_BUFLEN];
- virMacAddrFormat(net->mac, macbuf);
+
+ virMacAddrFormat(&net->mac, macbuf);
qemuReportError(VIR_ERR_INVALID_ARG,
_("mac %s already exists"), macbuf);
return -1;
@@ -5638,10 +5639,10 @@ qemuDomainDetachDeviceConfig(virDomainDe
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- if (!(det_net = virDomainNetRemoveByMac(vmdef, net->mac))) {
+ if (!(det_net = virDomainNetRemoveByMac(vmdef, &net->mac))) {
char macbuf[VIR_MAC_STRING_BUFLEN];
- virMacAddrFormat(net->mac, macbuf);
+ virMacAddrFormat(&net->mac, macbuf);
qemuReportError(VIR_ERR_INVALID_ARG,
_("no nic of mac %s"), macbuf);
return -1;
@@ -5729,9 +5730,10 @@ qemuDomainUpdateDeviceConfig(virDomainDe
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- if ((pos = virDomainNetIndexByMac(vmdef, net->mac)) < 0) {
+ if ((pos = virDomainNetIndexByMac(vmdef, &net->mac)) < 0) {
char macbuf[VIR_MAC_STRING_BUFLEN];
- virMacAddrFormat(net->mac, macbuf);
+
+ virMacAddrFormat(&net->mac, macbuf);
qemuReportError(VIR_ERR_INVALID_ARG,
_("mac %s doesn't exist"), macbuf);
return -1;
Index: libvirt-acl/src/qemu/qemu_hostdev.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_hostdev.c
+++ libvirt-acl/src/qemu/qemu_hostdev.c
@@ -257,7 +257,7 @@ cleanup:
static int
qemuDomainHostdevNetConfigVirtPortProfile(const char *linkdev, int vf,
virNetDevVPortProfilePtr virtPort,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const unsigned char *uuid,
int associate)
{
@@ -320,12 +320,12 @@ qemuDomainHostdevNetConfigReplace(virDom
hostdev->parent.data.net);
if (virtPort)
ret = qemuDomainHostdevNetConfigVirtPortProfile(linkdev, vf,
- virtPort, hostdev->parent.data.net->mac, uuid,
+ virtPort, &hostdev->parent.data.net->mac, uuid,
port_profile_associate);
else
/* Set only mac */
ret = virNetDevReplaceNetConfig(linkdev, vf,
- hostdev->parent.data.net->mac, vlanid,
+ &hostdev->parent.data.net->mac, vlanid,
stateDir);
VIR_FREE(linkdev);
@@ -358,7 +358,7 @@ qemuDomainHostdevNetConfigRestore(virDom
hostdev->parent.data.net);
if (virtPort)
ret = qemuDomainHostdevNetConfigVirtPortProfile(linkdev, vf, virtPort,
- hostdev->parent.data.net->mac, NULL,
+ &hostdev->parent.data.net->mac, NULL,
port_profile_associate);
else
ret = virNetDevRestoreNetConfig(linkdev, vf, stateDir);
Index: libvirt-acl/src/qemu/qemu_hotplug.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_hotplug.c
+++ libvirt-acl/src/qemu/qemu_hotplug.c
@@ -1226,7 +1226,7 @@ static virDomainNetDefPtr qemuDomainFind
int i;
for (i = 0; i < vm->def->nnets; i++) {
- if (memcmp(vm->def->nets[i]->mac, dev->mac, VIR_MAC_BUFLEN) == 0)
+ if (virMacAddrCmp(&vm->def->nets[i]->mac, &dev->mac) == 0)
return vm->def->nets[i];
}
@@ -2190,7 +2190,7 @@ qemuDomainDetachNetDevice(struct qemud_d
for (i = 0 ; i < vm->def->nnets ; i++) {
virDomainNetDefPtr net = vm->def->nets[i];
- if (!memcmp(net->mac, dev->data.net->mac, sizeof(net->mac))) {
+ if (!virMacAddrCmp(&net->mac, &dev->data.net->mac)) {
detach = net;
break;
}
@@ -2199,9 +2199,9 @@ qemuDomainDetachNetDevice(struct qemud_d
if (!detach) {
qemuReportError(VIR_ERR_OPERATION_FAILED,
_("network device %02x:%02x:%02x:%02x:%02x:%02x not found"),
- dev->data.net->mac[0], dev->data.net->mac[1],
- dev->data.net->mac[2], dev->data.net->mac[3],
- dev->data.net->mac[4], dev->data.net->mac[5]);
+ dev->data.net->mac.addr[0], dev->data.net->mac.addr[1],
+ dev->data.net->mac.addr[2], dev->data.net->mac.addr[3],
+ dev->data.net->mac.addr[4], dev->data.net->mac.addr[5]);
goto cleanup;
}
@@ -2280,7 +2280,7 @@ qemuDomainDetachNetDevice(struct qemud_d
if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
- detach->ifname, detach->mac,
+ detach->ifname, &detach->mac,
virDomainNetGetActualDirectDev(detach),
virDomainNetGetActualDirectMode(detach),
virDomainNetGetActualVirtPortProfile(detach),
@@ -2291,7 +2291,7 @@ qemuDomainDetachNetDevice(struct qemud_d
if ((driver->macFilter) && (detach->ifname != NULL)) {
if ((errno = networkDisallowMacOnPort(driver,
detach->ifname,
- detach->mac))) {
+ &detach->mac))) {
virReportSystemError(errno,
_("failed to remove ebtables rule on '%s'"),
detach->ifname);
Index: libvirt-acl/src/qemu/qemu_migration.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_migration.c
+++ libvirt-acl/src/qemu/qemu_migration.c
@@ -2857,7 +2857,7 @@ qemuMigrationVPAssociatePortProfiles(vir
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
if (virNetDevVPortProfileAssociate(net->ifname,
virDomainNetGetActualVirtPortProfile(net),
- net->mac,
+ &net->mac,
virDomainNetGetActualDirectDev(net),
-1,
def->uuid,
@@ -2870,7 +2870,7 @@ qemuMigrationVPAssociatePortProfiles(vir
}
VIR_DEBUG("Port profile Associate succeeded for %s", net->ifname);
- if (virNetDevMacVLanVPortProfileRegisterCallback(net->ifname, net->mac,
+ if (virNetDevMacVLanVPortProfileRegisterCallback(net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net), def->uuid,
virDomainNetGetActualVirtPortProfile(net),
VIR_NETDEV_VPORT_PROFILE_OP_CREATE))
@@ -2887,7 +2887,7 @@ err_exit:
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevVPortProfileDisassociate(net->ifname,
virDomainNetGetActualVirtPortProfile(net),
- net->mac,
+ &net->mac,
virDomainNetGetActualDirectDev(net),
-1,
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH));
Index: libvirt-acl/src/qemu/qemu_process.c
===================================================================
--- libvirt-acl.orig/src/qemu/qemu_process.c
+++ libvirt-acl/src/qemu/qemu_process.c
@@ -4027,7 +4027,7 @@ void qemuProcessStop(struct qemud_driver
if (net->ifname == NULL)
continue;
if ((errno = networkDisallowMacOnPort(driver, net->ifname,
- net->mac))) {
+ &net->mac))) {
virReportSystemError(errno,
_("failed to remove ebtables rule to allow MAC address on '%s'"),
net->ifname);
@@ -4100,7 +4100,7 @@ void qemuProcessStop(struct qemud_driver
virDomainNetDefPtr net = def->nets[i];
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
- net->ifname, net->mac,
+ net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net),
virDomainNetGetActualVirtPortProfile(net),
Index: libvirt-acl/src/uml/uml_conf.c
===================================================================
--- libvirt-acl.orig/src/uml/uml_conf.c
+++ libvirt-acl/src/uml/uml_conf.c
@@ -138,7 +138,7 @@ umlConnectTapDevice(virConnectPtr conn,
template_ifname = true;
}
- if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, net->mac,
+ if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, &net->mac,
vm->uuid, NULL,
virDomainNetGetActualVirtPortProfile(net),
VIR_NETDEV_TAP_CREATE_IFUP) < 0) {
@@ -271,8 +271,8 @@ umlBuildCommandLineNet(virConnectPtr con
}
virBufferAsprintf(&buf, ",%02x:%02x:%02x:%02x:%02x:%02x",
- def->mac[0], def->mac[1], def->mac[2],
- def->mac[3], def->mac[4], def->mac[5]);
+ def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
+ def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
if (def->type == VIR_DOMAIN_NET_TYPE_MCAST) {
virBufferAsprintf(&buf, ",%s,%d",
Index: libvirt-acl/src/util/ebtables.c
===================================================================
--- libvirt-acl.orig/src/util/ebtables.c
+++ libvirt-acl/src/util/ebtables.c
@@ -392,15 +392,15 @@ ebtablesForwardAllowIn(ebtablesContext *
int
ebtablesAddForwardAllowIn(ebtablesContext *ctx,
const char *iface,
- const unsigned char *mac)
+ const virMacAddrPtr mac)
{
char *macaddr;
if (virAsprintf(&macaddr,
"%02x:%02x:%02x:%02x:%02x:%02x",
- mac[0], mac[1],
- mac[2], mac[3],
- mac[4], mac[5]) < 0) {
+ mac->addr[0], mac->addr[1],
+ mac->addr[2], mac->addr[3],
+ mac->addr[4], mac->addr[5]) < 0) {
return -1;
}
return ebtablesForwardAllowIn(ctx, iface, macaddr, ADD);
@@ -421,15 +421,15 @@ ebtablesAddForwardAllowIn(ebtablesContex
int
ebtablesRemoveForwardAllowIn(ebtablesContext *ctx,
const char *iface,
- const unsigned char *mac)
+ const virMacAddrPtr mac)
{
char *macaddr;
if (virAsprintf(&macaddr,
"%02x:%02x:%02x:%02x:%02x:%02x",
- mac[0], mac[1],
- mac[2], mac[3],
- mac[4], mac[5]) < 0) {
+ mac->addr[0], mac->addr[1],
+ mac->addr[2], mac->addr[3],
+ mac->addr[4], mac->addr[5]) < 0) {
return -1;
}
return ebtablesForwardAllowIn(ctx, iface, macaddr, REMOVE);
Index: libvirt-acl/src/util/ebtables.h
===================================================================
--- libvirt-acl.orig/src/util/ebtables.h
+++ libvirt-acl/src/util/ebtables.h
@@ -24,6 +24,8 @@
#ifndef __QEMUD_EBTABLES_H__
# define __QEMUD_EBTABLES_H__
+# include "virmacaddr.h"
+
typedef struct
{
char *rule;
@@ -50,10 +52,10 @@ void ebtablesSaveRules
int ebtablesAddForwardAllowIn (ebtablesContext *ctx,
const char *iface,
- const unsigned char *mac);
+ const virMacAddrPtr mac);
int ebtablesRemoveForwardAllowIn (ebtablesContext *ctx,
const char *iface,
- const unsigned char *mac);
+ const virMacAddrPtr mac);
int ebtablesAddForwardPolicyReject(ebtablesContext *ctx);
Index: libvirt-acl/src/util/virnetdevopenvswitch.c
===================================================================
--- libvirt-acl.orig/src/util/virnetdevopenvswitch.c
+++ libvirt-acl/src/util/virnetdevopenvswitch.c
@@ -44,7 +44,7 @@
* Returns 0 in case of success or -1 in case of failure.
*/
int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const unsigned char *vmuuid,
virNetDevVPortProfilePtr ovsport)
{
Index: libvirt-acl/src/util/virnetdevopenvswitch.h
===================================================================
--- libvirt-acl.orig/src/util/virnetdevopenvswitch.h
+++ libvirt-acl/src/util/virnetdevopenvswitch.h
@@ -31,7 +31,7 @@
int virNetDevOpenvswitchAddPort(const char *brname,
const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const unsigned char *vmuuid,
virNetDevVPortProfilePtr ovsport)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
Index: libvirt-acl/src/util/virnetdevtap.c
===================================================================
--- libvirt-acl.orig/src/util/virnetdevtap.c
+++ libvirt-acl/src/util/virnetdevtap.c
@@ -256,7 +256,7 @@ int virNetDevTapDelete(const char *ifnam
* virNetDevTapCreateInBridgePort:
* @brname: the bridge name
* @ifname: the interface name (or name template)
- * @macaddr: desired MAC address (VIR_MAC_BUFLEN long)
+ * @macaddr: desired MAC address
* @tapfd: file descriptor return value for the new tap device
* @virtPortProfile: bridge/port specific configuration
* @flags: OR of virNetDevTapCreateFlags:
@@ -280,13 +280,13 @@ int virNetDevTapDelete(const char *ifnam
*/
int virNetDevTapCreateInBridgePort(const char *brname,
char **ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const unsigned char *vmuuid,
int *tapfd,
virNetDevVPortProfilePtr virtPortProfile,
unsigned int flags)
{
- unsigned char tapmac[VIR_MAC_BUFLEN];
+ virMacAddr tapmac;
if (virNetDevTapCreate(ifname, tapfd, flags) < 0)
return -1;
@@ -297,9 +297,9 @@ int virNetDevTapCreateInBridgePort(const
* seeing the kernel allocate random MAC for the TAP
* device before we set our static MAC.
*/
- memcpy(tapmac, macaddr, VIR_MAC_BUFLEN);
+ virMacAddrSet(&tapmac, macaddr);
if (!(flags & VIR_NETDEV_TAP_CREATE_USE_MAC_FOR_BRIDGE)) {
- if (macaddr[0] == 0xFE) {
+ if (macaddr->addr[0] == 0xFE) {
/* For normal use, the tap device's MAC address cannot
* match the MAC address used by the guest. This results
* in "received packet on vnetX with own address as source
@@ -308,14 +308,15 @@ int virNetDevTapCreateInBridgePort(const
virNetDevTapError(VIR_ERR_CONFIG_UNSUPPORTED,
"Unable to use MAC address starting with "
"reserved value 0xFE - '%02X:%02X:%02X:%02X:%02X:%02X' - ",
- macaddr[0], macaddr[1], macaddr[2],
- macaddr[3], macaddr[4], macaddr[5]);
+ macaddr->addr[0], macaddr->addr[1],
+ macaddr->addr[2], macaddr->addr[3],
+ macaddr->addr[4], macaddr->addr[5]);
goto error;
}
- tapmac[0] = 0xFE; /* Discourage bridge from using TAP dev MAC */
+ tapmac.addr[0] = 0xFE; /* Discourage bridge from using TAP dev MAC */
}
- if (virNetDevSetMAC(*ifname, tapmac) < 0)
+ if (virNetDevSetMAC(*ifname, &tapmac) < 0)
goto error;
/* We need to set the interface MTU before adding it
Index: libvirt-acl/src/util/virnetdevtap.h
===================================================================
--- libvirt-acl.orig/src/util/virnetdevtap.h
+++ libvirt-acl/src/util/virnetdevtap.h
@@ -46,7 +46,7 @@ typedef enum {
int virNetDevTapCreateInBridgePort(const char *brname,
char **ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const unsigned char *vmuuid,
int *tapfd,
virNetDevVPortProfilePtr virtPortProfile,
Index: libvirt-acl/src/util/virnetdevvportprofile.c
===================================================================
--- libvirt-acl.orig/src/util/virnetdevvportprofile.c
+++ libvirt-acl/src/util/virnetdevvportprofile.c
@@ -264,7 +264,7 @@ cleanup:
static int
virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex,
bool nltarget_kernel,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
int vlanid,
const char *profileId,
struct ifla_port_vsi *portVsi,
@@ -315,7 +315,7 @@ virNetDevVPortProfileOpSetLink(const cha
.mac = { 0, },
};
- memcpy(ifla_vf_mac.mac, macaddr, 6);
+ virMacAddrGetRaw(macaddr, ifla_vf_mac.mac);
if (nla_put(nl_msg, IFLA_VF_MAC, sizeof(ifla_vf_mac),
&ifla_vf_mac) < 0)
@@ -515,7 +515,7 @@ virNetDevVPortProfileGetNthParent(const
static int
virNetDevVPortProfileOpCommon(const char *ifname, int ifindex,
bool nltarget_kernel,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
int vlanid,
const char *profileId,
struct ifla_port_vsi *portVsi,
@@ -633,7 +633,7 @@ virNetDevVPortProfileGetPhysdevAndVlan(c
/* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int
virNetDevVPortProfileOp8021Qbg(const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
int vf,
const virNetDevVPortProfilePtr virtPort,
enum virNetDevVPortProfileLinkOp virtPortOp,
@@ -701,7 +701,7 @@ cleanup:
/* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int
virNetDevVPortProfileOp8021Qbh(const char *ifname,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
int32_t vf,
const virNetDevVPortProfilePtr virtPort,
const unsigned char *vm_uuid,
@@ -825,7 +825,7 @@ cleanup:
int
virNetDevVPortProfileAssociate(const char *macvtap_ifname,
const virNetDevVPortProfilePtr virtPort,
- const unsigned char *macvtap_macaddr,
+ const virMacAddrPtr macvtap_macaddr,
const char *linkdev,
int vf,
const unsigned char *vmuuid,
@@ -889,7 +889,7 @@ virNetDevVPortProfileAssociate(const cha
int
virNetDevVPortProfileDisassociate(const char *macvtap_ifname,
const virNetDevVPortProfilePtr virtPort,
- const unsigned char *macvtap_macaddr,
+ const virMacAddrPtr macvtap_macaddr,
const char *linkdev,
int vf,
enum virNetDevVPortProfileOp vmOp)
@@ -933,7 +933,7 @@ virNetDevVPortProfileDisassociate(const
#else /* ! WITH_VIRTUALPORT */
int virNetDevVPortProfileAssociate(const char *macvtap_ifname ATTRIBUTE_UNUSED,
const virNetDevVPortProfilePtr virtPort ATTRIBUTE_UNUSED,
- const unsigned char *macvtap_macaddr ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macvtap_macaddr ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
int vf ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED,
@@ -947,7 +947,7 @@ int virNetDevVPortProfileAssociate(const
int virNetDevVPortProfileDisassociate(const char *macvtap_ifname ATTRIBUTE_UNUSED,
const virNetDevVPortProfilePtr virtPort ATTRIBUTE_UNUSED,
- const unsigned char *macvtap_macaddr ATTRIBUTE_UNUSED,
+ const virMacAddrPtr macvtap_macaddr ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED,
int vf ATTRIBUTE_UNUSED,
enum virNetDevVPortProfileOp vmOp ATTRIBUTE_UNUSED)
Index: libvirt-acl/src/vbox/vbox_tmpl.c
===================================================================
--- libvirt-acl.orig/src/vbox/vbox_tmpl.c
+++ libvirt-acl/src/vbox/vbox_tmpl.c
@@ -3038,7 +3038,7 @@ sharedFoldersCleanup:
MACAddress[8], MACAddress[9], MACAddress[10], MACAddress[11]);
/* XXX some real error handling here some day ... */
- if (virMacAddrParse(macaddr, def->nets[netAdpIncCnt]->mac) < 0)
+ if (virMacAddrParse(macaddr, &def->nets[netAdpIncCnt]->mac) < 0)
{}
netAdpIncCnt++;
@@ -4387,15 +4387,15 @@ vboxAttachNetwork(virDomainDefPtr def, v
char macaddr[VIR_MAC_STRING_BUFLEN] = {0};
char macaddrvbox[VIR_MAC_STRING_BUFLEN - 5] = {0};
- virMacAddrFormat(def->nets[i]->mac, macaddr);
+ virMacAddrFormat(&def->nets[i]->mac, macaddr);
snprintf(macaddrvbox, VIR_MAC_STRING_BUFLEN - 5,
"%02X%02X%02X%02X%02X%02X",
- def->nets[i]->mac[0],
- def->nets[i]->mac[1],
- def->nets[i]->mac[2],
- def->nets[i]->mac[3],
- def->nets[i]->mac[4],
- def->nets[i]->mac[5]);
+ def->nets[i]->mac.addr[0],
+ def->nets[i]->mac.addr[1],
+ def->nets[i]->mac.addr[2],
+ def->nets[i]->mac.addr[3],
+ def->nets[i]->mac.addr[4],
+ def->nets[i]->mac.addr[5]);
macaddrvbox[VIR_MAC_STRING_BUFLEN - 6] = '\0';
VIR_DEBUG("NIC(%d): Type: %d", i, def->nets[i]->type);
Index: libvirt-acl/src/vmx/vmx.c
===================================================================
--- libvirt-acl.orig/src/vmx/vmx.c
+++ libvirt-acl/src/vmx/vmx.c
@@ -2365,7 +2365,7 @@ virVMXParseEthernet(virConfPtr conf, int
if (addressType == NULL || STRCASEEQ(addressType, "generated") ||
STRCASEEQ(addressType, "vpx")) {
if (generatedAddress != NULL) {
- if (virMacAddrParse(generatedAddress, (*def)->mac) < 0) {
+ if (virMacAddrParse(generatedAddress, &(*def)->mac) < 0) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be MAC address but "
"found '%s'"), generatedAddress_name,
@@ -2375,7 +2375,7 @@ virVMXParseEthernet(virConfPtr conf, int
}
} else if (STRCASEEQ(addressType, "static")) {
if (address != NULL) {
- if (virMacAddrParse(address, (*def)->mac) < 0) {
+ if (virMacAddrParse(address, &(*def)->mac) < 0) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be MAC address but "
"found '%s'"), address_name, address);
@@ -3567,10 +3567,10 @@ virVMXFormatEthernet(virDomainNetDefPtr
}
/* def:mac -> vmx:addressType, vmx:(generated)Address, vmx:checkMACAddress */
- virMacAddrFormat(def->mac, mac_string);
+ virMacAddrFormat(&def->mac, mac_string);
- prefix = (def->mac[0] << 16) | (def->mac[1] << 8) | def->mac[2];
- suffix = (def->mac[3] << 16) | (def->mac[4] << 8) | def->mac[5];
+ prefix = (def->mac.addr[0] << 16) | (def->mac.addr[1] << 8) | def->mac.addr[2];
+ suffix = (def->mac.addr[3] << 16) | (def->mac.addr[4] << 8) | def->mac.addr[5];
if (prefix == 0x000c29) {
virBufferAsprintf(buffer, "ethernet%d.addressType = \"generated\"\n",
Index: libvirt-acl/src/xen/xend_internal.c
===================================================================
--- libvirt-acl.orig/src/xen/xend_internal.c
+++ libvirt-acl/src/xen/xend_internal.c
@@ -2718,7 +2718,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
goto cleanup;
char macStr[VIR_MAC_STRING_BUFLEN];
- virMacAddrFormat(dev->data.net->mac, macStr);
+ virMacAddrFormat(&dev->data.net->mac, macStr);
if (!(target = strdup(macStr))) {
virReportOOMError();
@@ -3955,8 +3955,8 @@ virDomainXMLDevID(virDomainPtr domain,
char mac[30];
virDomainNetDefPtr def = dev->data.net;
snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x",
- def->mac[0], def->mac[1], def->mac[2],
- def->mac[3], def->mac[4], def->mac[5]);
+ def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
+ def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
strcpy(class, "vif");
Index: libvirt-acl/src/xen/xm_internal.c
===================================================================
--- libvirt-acl.orig/src/xen/xm_internal.c
+++ libvirt-acl/src/xen/xm_internal.c
@@ -1533,9 +1533,7 @@ xenXMDomainDetachDeviceFlags(virDomainPt
case VIR_DOMAIN_DEVICE_NET:
{
for (i = 0 ; i < def->nnets ; i++) {
- if (!memcmp(def->nets[i]->mac,
- dev->data.net->mac,
- sizeof(def->nets[i]->mac))) {
+ if (!virMacAddrCmp(&def->nets[i]->mac, &dev->data.net->mac)) {
virDomainNetDefFree(def->nets[i]);
if (i < (def->nnets - 1))
memmove(def->nets + i,
Index: libvirt-acl/src/xenxs/xen_sxpr.c
===================================================================
--- libvirt-acl.orig/src/xenxs/xen_sxpr.c
+++ libvirt-acl/src/xenxs/xen_sxpr.c
@@ -600,7 +600,7 @@ xenParseSxprNets(virDomainDefPtr def,
tmp = sexpr_node(node, "device/vif/mac");
if (tmp) {
- if (virMacAddrParse(tmp, net->mac) < 0) {
+ if (virMacAddrParse(tmp, &net->mac) < 0) {
XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
_("malformed mac address '%s'"), tmp);
goto cleanup;
@@ -1932,8 +1932,8 @@ xenFormatSxprNet(virConnectPtr conn,
virBufferAsprintf(buf,
"(mac '%02x:%02x:%02x:%02x:%02x:%02x')",
- def->mac[0], def->mac[1], def->mac[2],
- def->mac[3], def->mac[4], def->mac[5]);
+ def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
+ def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
switch (def->type) {
case VIR_DOMAIN_NET_TYPE_BRIDGE:
Index: libvirt-acl/src/xenxs/xen_xm.c
===================================================================
--- libvirt-acl.orig/src/xenxs/xen_xm.c
+++ libvirt-acl/src/xenxs/xen_xm.c
@@ -742,7 +742,7 @@ xenParseXM(virConfPtr conf, int xendConf
goto no_memory;
if (mac[0]) {
- if (virMacAddrParse(mac, net->mac) < 0) {
+ if (virMacAddrParse(mac, &net->mac) < 0) {
XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
_("malformed mac address '%s'"), mac);
goto cleanup;
@@ -1326,9 +1326,9 @@ static int xenFormatXMNet(virConnectPtr
virConfValuePtr val, tmp;
virBufferAsprintf(&buf, "mac=%02x:%02x:%02x:%02x:%02x:%02x",
- net->mac[0], net->mac[1],
- net->mac[2], net->mac[3],
- net->mac[4], net->mac[5]);
+ net->mac.addr[0], net->mac.addr[1],
+ net->mac.addr[2], net->mac.addr[3],
+ net->mac.addr[4], net->mac.addr[5]);
switch (net->type) {
case VIR_DOMAIN_NET_TYPE_BRIDGE:
Index: libvirt-acl/tools/virsh.c
===================================================================
--- libvirt-acl.orig/tools/virsh.c
+++ libvirt-acl/tools/virsh.c
@@ -1935,7 +1935,7 @@ cmdDomIfSetLink(vshControl *ctl, const v
const char *state;
const char *value;
const char *desc;
- unsigned char macaddr[VIR_MAC_BUFLEN];
+ virMacAddr macaddr;
const char *element;
const char *attr;
bool config;
@@ -1997,7 +1997,7 @@ cmdDomIfSetLink(vshControl *ctl, const v
goto cleanup;
}
- if (virMacAddrParse(iface, macaddr) == 0) {
+ if (virMacAddrParse(iface, &macaddr) == 0) {
element = "mac";
attr = "address";
} else {
@@ -2111,7 +2111,7 @@ cmdDomIfGetLink(vshControl *ctl, const v
int flags = 0;
char *state = NULL;
char *value = NULL;
- unsigned char macaddr[VIR_MAC_BUFLEN];
+ virMacAddr macaddr;
const char *element;
const char *attr;
bool ret = false;
@@ -2156,7 +2156,7 @@ cmdDomIfGetLink(vshControl *ctl, const v
goto cleanup;
}
- if (virMacAddrParse(iface, macaddr) == 0) {
+ if (virMacAddrParse(iface, &macaddr) == 0) {
element = "mac";
attr = "address";
} else {
Index: libvirt-acl/src/lxc/lxc_driver.c
===================================================================
--- libvirt-acl.orig/src/lxc/lxc_driver.c
+++ libvirt-acl/src/lxc/lxc_driver.c
@@ -1202,11 +1202,11 @@ static int lxcSetupInterfaceBridged(virC
(*veths)[(*nveths)] = containerVeth;
(*nveths)++;
- if (virNetDevSetMAC(containerVeth, net->mac) < 0)
+ if (virNetDevSetMAC(containerVeth, &net->mac) < 0)
goto cleanup;
if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH)
- ret = virNetDevOpenvswitchAddPort(brname, parentVeth, net->mac,
+ ret = virNetDevOpenvswitchAddPort(brname, parentVeth, &net->mac,
vm->uuid, vport);
else
ret = virNetDevBridgeAddPort(brname, parentVeth);
@@ -1280,7 +1280,7 @@ static int lxcSetupInterfaceDirect(virCo
(*veths)[(*nveths)] = NULL;
if (virNetDevMacVLanCreateWithVPortProfile(
- net->ifname, net->mac,
+ net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net),
false, false, def->uuid,
Index: libvirt-acl/src/libvirt_private.syms
===================================================================
--- libvirt-acl.orig/src/libvirt_private.syms
+++ libvirt-acl/src/libvirt_private.syms
@@ -1277,12 +1277,17 @@ virKeyFileGetValueString;
# virmacaddr.h
+virMacAddrCmp;
+virMacAddrCmpRaw;
virMacAddrCompare;
virMacAddrFormat;
virMacAddrGenerate;
+virMacAddrGetRaw;
virMacAddrIsMulticast;
virMacAddrIsUnicast;
virMacAddrParse;
+virMacAddrSet;
+virMacAddrSetRaw;
# virnetclient.h
Index: libvirt-acl/src/libxl/libxl_conf.c
===================================================================
--- libvirt-acl.orig/src/libxl/libxl_conf.c
+++ libvirt-acl/src/libxl/libxl_conf.c
@@ -596,7 +596,7 @@ libxlMakeNic(virDomainDefPtr def, virDom
//x_nics[i].mtu = 1492;
x_nic->domid = def->id;
- memcpy(x_nic->mac, l_nic->mac, sizeof(libxl_mac));
+ virMacAddrGetRaw(&l_nic->mac, x_nic->mac);
if (l_nic->model && !STREQ(l_nic->model, "netfront")) {
if ((x_nic->model = strdup(l_nic->model)) == NULL) {
Index: libvirt-acl/src/nwfilter/nwfilter_dhcpsnoop.h
===================================================================
--- libvirt-acl.orig/src/nwfilter/nwfilter_dhcpsnoop.h
+++ libvirt-acl/src/nwfilter/nwfilter_dhcpsnoop.h
@@ -31,7 +31,7 @@ int virNWFilterDHCPSnoopReq(virNWFilterT
const char *linkdev,
enum virDomainNetType nettype,
const unsigned char *vmuuid,
- const unsigned char *macaddr,
+ const virMacAddrPtr macaddr,
const char *filtername,
virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver);
12 years, 5 months
[libvirt] ESX: failure while performing "CastFromAnyType"
by Ata E Husain Bohra
Hi All,
I am trying to extend “iscsi” support for iSCSI driver, currently am stuck at getting iSCSI target list from the hypervisor. I am using hostSystem object (propertyNameList is set to “config.storageDevice.hostBusAdapter”) to retrieve list of “HostHostBusAdapter” from ESX, but the call fails to perform “CastFromAnyType” from ObjectContent –> HostHostBusAdapter. The esx_vi_generator.input object definition looks like this:
object HostHostBusAdapter
String key o
String device r
Int bus r
String status r
String model r
String driver o
String pci o
end
esx_vi_generaor.py is modified as follows:
"HostHostBusAdapter" : Object.FEATURE__ANY_TYPE |
Object.FEATURE__LIST,
Using gdb, I see the failure occurs at: esx/esx_vi.c:esxVI_List_CastFromAnyType(..) line 1631:
..
if (esxVI_AnyType_Deserialize(childNode, &childAnyType) < 0 ||
castFromAnyTypeFunc(childAnyType, &item) < 0 ||
esxVI_List_Append(list, item) < 0) {
goto cleanup;
}
..
In one of my earlier patches (subject: Add routines to interface driver) I patched esx_vi_generator.py to deserialize “string list”; as the patch is still under review I manually applied the branch to this branch but no change (did not expect change as structure does not contain any list object). I am wondering what else is missing to make it work.
Any suggestion how to debug/fix this issue is highly appreciated.
Thanks!
Ata
12 years, 5 months
[libvirt] [ANNOUNCE] libvirt-glib 0.1.0 release
by Daniel P. Berrange
I am pleased to announce that a new release of the libvirt-glib package,
version 0.1.0 is now available from
ftp://libvirt.org/libvirt/glib/
The packages are GPG signed with
Key fingerprint: DAF3 A6FD B26B 6291 2D0E 8E3F BE86 EBB4 1510 4FDF (4096R)
New in this release:
- Add setters for capabilities CPU config object
- Add constructor for capabilities CPU config object
- Add config object for domain CPU schema
- Add bindings for domain save APIs
- Add bindings for storage volume upload/download
libvirt-glib comprises three distinct libraries:
- libvirt-glib - Integrate with the GLib event loop and error handling
- libvirt-gconfig - Representation of libvirt XML documents as GObjects
- libvirt-gobject - Mapping of libvirt APIs into the GObject type system
NB: While libvirt aims to be API/ABI stable forever, with libvirt-glib
we are not yet guaranteeing that libvirt-glib libraries are API/ABI
permanently stable. As of the 0.0.8 release, we have tentatively frozen
the API/ABI with the intent of being longterm stable hereafter, but
there is still a small chance we might find flaws requiring an API/ABI
change. The likelihood of this is low, however, and we will strive to
avoid it.
Follow up comments about libvirt-glib should be directed to the regular
libvir-list redhat com development list.
Thanks to all the people involved in contributing to this release.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
12 years, 5 months