]> xenbits.xensource.com Git - libvirt.git/commitdiff
Convert 'raw MAC address' usages to use virMacAddr
authorStefan Berger <stefanb@linux.vnet.ibm.com>
Tue, 17 Jul 2012 12:07:59 +0000 (08:07 -0400)
committerStefan Berger <stefanb@us.ibm.com>
Tue, 17 Jul 2012 12:07:59 +0000 (08:07 -0400)
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.

55 files changed:
src/conf/capabilities.c
src/conf/capabilities.h
src/conf/domain_audit.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/network_conf.c
src/conf/network_conf.h
src/conf/nwfilter_conf.c
src/conf/nwfilter_conf.h
src/conf/nwfilter_params.h
src/libvirt_private.syms
src/libxl/libxl_conf.c
src/lxc/lxc_driver.c
src/network/bridge_driver.c
src/nwfilter/nwfilter_dhcpsnoop.c
src/nwfilter/nwfilter_dhcpsnoop.h
src/nwfilter/nwfilter_ebiptables_driver.c
src/nwfilter/nwfilter_gentech_driver.c
src/nwfilter/nwfilter_gentech_driver.h
src/nwfilter/nwfilter_learnipaddr.c
src/nwfilter/nwfilter_learnipaddr.h
src/openvz/openvz_conf.c
src/openvz/openvz_driver.c
src/qemu/qemu_bridge_filter.c
src/qemu/qemu_bridge_filter.h
src/qemu/qemu_command.c
src/qemu/qemu_driver.c
src/qemu/qemu_hostdev.c
src/qemu/qemu_hotplug.c
src/qemu/qemu_migration.c
src/qemu/qemu_process.c
src/uml/uml_conf.c
src/util/ebtables.c
src/util/ebtables.h
src/util/virmacaddr.c
src/util/virmacaddr.h
src/util/virnetdev.c
src/util/virnetdev.h
src/util/virnetdevmacvlan.c
src/util/virnetdevmacvlan.h
src/util/virnetdevopenvswitch.c
src/util/virnetdevopenvswitch.h
src/util/virnetdevtap.c
src/util/virnetdevtap.h
src/util/virnetdevvportprofile.c
src/util/virnetdevvportprofile.h
src/util/virnetlink.c
src/util/virnetlink.h
src/vbox/vbox_tmpl.c
src/vmx/vmx.c
src/xen/xend_internal.c
src/xen/xm_internal.c
src/xenxs/xen_sxpr.c
src/xenxs/xen_xm.c
tools/virsh.c

index 542bf03ad26a0e067af1b5bfca29b49d325e82ec..cc7d0181d34a8734bbf22843ea926b1c17f56f9a 100644 (file)
@@ -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 421030d9c2ea855b5f137260f7bac6056de4eae2..9568b4c529d0d48c853701c52c6901fbee2e7432 100644 (file)
@@ -172,11 +172,11 @@ virCapabilitiesFreeNUMAInfo(virCapsPtr caps);
 
 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 e3f368170329735f94f23ee6b4b5bcccd15f32d3..cb81fa04bddef117dbd3f4e049c325e91e3e6d3a 100644 (file)
@@ -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 vmDef, virDomainNetDefPtr netDef,
     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 4f8c57a0b358c39e9d6172ae5089952b357f4128..398f630a17bf50525cf67039ec28865f1cddd942 100644 (file)
@@ -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 def, virDomainNetDefPtr net)
     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, size_t i)
 }
 
 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 virDomainNetDefCheckABIStability(virDomainNetDefPtr src,
 {
     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, const char *device)
 {
     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 5e5374af52fceec960b572d65f4e0319bf1b1b56..6c777e7aa8cd6f727a1164fc5560431a473f89e5 100644 (file)
@@ -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, size_t i);
 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 515bc36edc1618b7cbea64ef60af6e6fa27fddec..8fe1f7025c0fb7588c23cde5b83852c596e08731 100644 (file)
@@ -420,19 +420,19 @@ virNetworkDHCPRangeDefParseXML(const char *networkName,
         } 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 ctxt)
 
     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 virNetworkDefPtr def, unsigned int flags)
 
     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(virNetworkDefPtr def)
          * autogenerate a random one.
          */
         virMacAddrGenerate((unsigned char[]){ 0x52, 0x54, 0 },
-                           def->mac);
+                           &def->mac);
         def->mac_specified = true;
     }
 }
index 4339a6969da51e3725aecb38b19dd96d3d9ea6fc..745d97283334eedbb86e7e24e81a186bd91e0253 100644 (file)
@@ -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 57e5593d6fe701638aadc25fa17aff6a79ebf104..a13f705d5f75f00cca931e420eec3537fdc75f28 100644 (file)
@@ -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 node,
                         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 node,
 
                         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 a52826d2c3897038ba21b8cd02f14d372f515467..ad4a175fbb28ce01c43bed558fab6f84067f4e29 100644 (file)
@@ -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 (*virNWFilterRuleDisplayInstanceData)(void *_inst);
 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 8b9cf9c1cd4507f031149bb37a6f2050132c3848..f0fd2161def10304787a914465479a400d5256b6 100644 (file)
@@ -25,6 +25,7 @@
 
 # include "virhash.h"
 # include "buf.h"
+# include "virmacaddr.h"
 
 enum virNWFilterVarValueType {
     NWFILTER_VALUE_TYPE_SIMPLE,
index 737328127360c783092776e8d9945709f1557a10..03f7f3ecbe5e5f6bb0eb60b13f8cf9b182a6a82e 100644 (file)
@@ -1277,12 +1277,17 @@ virKeyFileGetValueString;
 
 
 # virmacaddr.h
+virMacAddrCmp;
+virMacAddrCmpRaw;
 virMacAddrCompare;
 virMacAddrFormat;
 virMacAddrGenerate;
+virMacAddrGetRaw;
 virMacAddrIsMulticast;
 virMacAddrIsUnicast;
 virMacAddrParse;
+virMacAddrSet;
+virMacAddrSetRaw;
 
 
 # virnetclient.h
index 62621f1f7e449016350a9f5ffd6c4781dfdb009a..201df7549be4e05ab70a9f40f16eea7af8411cf9 100644 (file)
@@ -596,7 +596,7 @@ libxlMakeNic(virDomainDefPtr def, virDomainNetDefPtr l_nic,
     //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 ae024fe6f29a50d084b0af069e105197344394d3..2d931db5d408dcfcf9fa79d8745e9c63340df984 100644 (file)
@@ -1202,11 +1202,11 @@ static int lxcSetupInterfaceBridged(virConnectPtr conn,
     (*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(virConnectPtr conn,
     (*veths)[(*nveths)] = NULL;
 
     if (virNetDevMacVLanCreateWithVPortProfile(
-            net->ifname, net->mac,
+            net->ifname, &net->mac,
             virDomainNetGetActualDirectDev(net),
             virDomainNetGetActualDirectMode(net),
             false, false, def->uuid,
index 7e8de199d17be861a94fdcc6b86c0942bbc3a798..9b1964b32b40bbe4d56fdde6fbfedd6b7b53650b 100644 (file)
@@ -1765,7 +1765,7 @@ networkStartNetworkVirtual(struct network_driver *driver,
             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 5dffaad40ab2d83102ab5899477aad082e839106..d712b1581d4546305854052b022d3f5046e9b9fb 100644 (file)
@@ -484,7 +484,7 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIPLeasePtr ipl,
                                               req->ifindex,
                                               req->linkdev,
                                               req->nettype,
-                                              req->macaddr,
+                                              &req->macaddr,
                                               req->filtername,
                                               req->vars,
                                               req->driver);
@@ -875,7 +875,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
                                                req->ifindex,
                                                req->linkdev,
                                                req->nettype,
-                                               req->macaddr,
+                                               &req->macaddr,
                                                req->filtername,
                                                req->vars,
                                                req->driver);
@@ -884,7 +884,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
             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 *ifname, virMacAddr *mac,
     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(virNWFilterTechDriverPtr techdriver,
                         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(virNWFilterTechDriverPtr techdriver,
     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(virNWFilterTechDriverPtr techdriver,
     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 ca7b6f054700253be32b80e5e1197ede4a8177a7..70ff5b2f56ab1ae8f4616f62b0565360e081ae21 100644 (file)
@@ -31,7 +31,7 @@ int virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver,
                             const char *linkdev,
                             enum virDomainNetType nettype,
                             const unsigned char *vmuuid,
-                            const unsigned char *macaddr,
+                            const virMacAddrPtr macaddr,
                             const char *filtername,
                             virNWFilterHashTablePtr filterparams,
                             virNWFilterDriverStatePtr driver);
index 1b0bbf42da6c5dce272838fb712dfb80206c2618..3ef627da1f9bfb67422bf2c2e177f4b3bc07337f 100644 (file)
@@ -306,7 +306,7 @@ _printDataType(virNWFilterVarCombIterPtr vars,
             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 d833bbb33e90b70f9fd46066540d5ccfe4f4fa97..0dd1aa24262b99d0fb454a2f0f9a5c4287fde054 100644 (file)
@@ -656,7 +656,7 @@ virNWFilterInstantiate(const unsigned char *vmuuid ATTRIBUTE_UNUSED,
                        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 unsigned char *vmuuid,
                                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(virConnectPtr conn,
                                         ifindex,
                                         linkdev,
                                         net->type,
-                                        net->mac,
+                                        &net->mac,
                                         net->filter,
                                         net->filterparams,
                                         useNewFilter,
@@ -988,7 +988,7 @@ virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
                                  int ifindex,
                                  const char *linkdev,
                                  enum virDomainNetType nettype,
-                                 const unsigned char *macaddr,
+                                 const virMacAddrPtr macaddr,
                                  const char *filtername,
                                  virNWFilterHashTablePtr filterparams,
                                  virNWFilterDriverStatePtr driver)
index 0579a9a27edc2a009c03e82ad497a00e0511c5ea..f0da42ce1da0c94d90e8bbbc3acc9bedf5c9bee4 100644 (file)
@@ -50,7 +50,7 @@ int virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
                                      int ifindex,
                                      const char *linkdev,
                                      enum virDomainNetType nettype,
-                                     const unsigned char *macaddr,
+                                     const virMacAddrPtr macaddr,
                                      const char *filtername,
                                      virNWFilterHashTablePtr filterparams,
                                      virNWFilterDriverStatePtr driver);
index a891377c1461952551bb25ee7f6f9ef9615ec9be..a04057f77dd0c9212edd18a34a1735d0efbf0852 100644 (file)
@@ -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(virNWFilterTechDriverPtr techdriver,
                           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(virNWFilterTechDriverPtr techdriver,
 
     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(virNWFilterTechDriverPtr techdriver ATTRIBUTE_UNUSED,
                           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 ce78923ec0276ee4814caab26f5b6124fa0b4ca3..5cb974f2ddb0d6e6c396e084759f1c373d3871e0 100644 (file)
@@ -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(virNWFilterTechDriverPtr techdriver,
                               int ifindex,
                               const char *linkdev,
                               enum virDomainNetType nettype,
-                              const unsigned char *macaddr,
+                              const virMacAddrPtr macaddr,
                               const char *filtername,
                               virNWFilterHashTablePtr filterparams,
                               virNWFilterDriverStatePtr driver,
index 8d7bc258cbca80f6d2f7a43dd9298e70cc9d2d14..bc54012258042e2d0c613ce60563ea11397e20df 100644 (file)
@@ -335,7 +335,7 @@ openvzReadNetworkConf(virDomainDefPtr def,
                                     _("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 c9150e0b74ba94b07930ccc52721ceeacb967591..8ecd83b4db260e66e440850c04403a5dbf10fb1e 100644 (file)
@@ -735,7 +735,7 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
     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 conn, const char *vpsid,
         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 f700631dffae742f5b60bf6c246efda24d083b0b..e55b0311b5908c8fe114b509ba6a2f87312745d9 100644 (file)
@@ -66,7 +66,7 @@ networkDisableAllFrames(struct qemud_driver *driver) {
 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_driver *driver,
 int
 networkDisallowMacOnPort(struct qemud_driver *driver,
                          const char * ifname,
-                         const unsigned char * mac) {
+                         const virMacAddrPtr mac) {
 
     int err;
 
index c0678ec3fb1de300dfb29b965c77d756f01faa85..85ca8d005707981cb83ccc0e3efa3e94b142fe22 100644 (file)
 
 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 ae48678083fdc9a7a01841fa526d6c9e3252d39c..09215afe1c765f93173ce3ed46d60f74d912fae8 100644 (file)
@@ -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 def,
         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 def,
     }
 
     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 net,
         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 451159abd81c30806003c3cbe1051a38214dc5d3..d3988b8655634f86f93b51c1aba00e771320a7ff 100644 (file)
@@ -443,7 +443,7 @@ static void qemuDomainNetsRestart(void *payload,
             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(virDomainDefPtr vmdef,
 
     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(virDomainDefPtr vmdef,
 
     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(virDomainDefPtr vmdef,
 
     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 ff133057a3624917612cd15497da976e42d13305..434aa0228264ddda3eb10e84550d0d71e66bc77b 100644 (file)
@@ -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(virDomainHostdevDefPtr hostdev,
                                  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(virDomainHostdevDefPtr hostdev,
                                  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 c2fa75ba466705053cb538856c82f6e124d09753..09c8c976073c3874cb5f5c37f5d84421e23bc101 100644 (file)
@@ -1226,7 +1226,7 @@ static virDomainNetDefPtr qemuDomainFindNet(virDomainObjPtr vm,
     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_driver *driver,
     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_driver *driver,
     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_driver *driver,
 
     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_driver *driver,
     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 f51c99ab1fb79c314bd678517e9b812200fc921c..d176e7d84d6f9c1488dcf1a037dc981ad4d7ffce 100644 (file)
@@ -2857,7 +2857,7 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
         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(virDomainDefPtr def) {
             }
             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 c120517d162a4563889365dbe9bc396473dc1d04..d8169e871bf3774c9eb7a749a1010c4a7c241e39 100644 (file)
@@ -4027,7 +4027,7 @@ void qemuProcessStop(struct qemud_driver *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 *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 79b249d82ed967ded555b80872e5a8ffe3a41cb2..1c401e19feb13e62d691c8759f2e3bfd591ef7c2 100644 (file)
@@ -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 conn,
     }
 
     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 dcb3eb91bb4fddf125dfefd08a611ab73cbf9d99..4943d1328c2e3b164c32a42b8ffa2a0e522be5ea 100644 (file)
@@ -392,15 +392,15 @@ ebtablesForwardAllowIn(ebtablesContext *ctx,
 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(ebtablesContext *ctx,
 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 a444432c7e5108f6680597e1c7f47e0f311c3aef..d4f3cf84fdb6d747a61a8bf6940a5dbd6390cd10 100644 (file)
@@ -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               (ebtablesContext *ctx);
 
 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 6c0fb245d209234fe3c98f6cfd478686fdca26bd..887e1ac2312a343d53c36a35ab0f0dd3a7bb866b 100644 (file)
@@ -61,6 +61,76 @@ virMacAddrCompare(const char *p, const char *q)
     return c > d ? 1 : c < d ? -1 : 0;
 }
 
+/**
+ * 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"
@@ -71,7 +141,7 @@ virMacAddrCompare(const char *p, const char *q)
  * 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, unsigned char *addr)
             (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, unsigned char *addr)
     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 2119d2be1ba6962c359f4efdd64a07fb5d964a7d..a76755742a3ecf9fcb94fd55af0b39e7ad3e9f68 100644 (file)
 # 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 d53352f39c882df9afdd3477aba24ac3651c73be..3ae9bfb3e3098f5bcd26e90a9fa66ec8a805afc0 100644 (file)
@@ -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 *linkdev,
         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 *linkdev,
     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 *linkdev,
     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 *linkdev,
     }
 
     /*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 *ifname ATTRIBUTE_UNUSED,
  */
 #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 *ifname,
             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, int ifindex, int vf,
              .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 **tb, int32_t vf, unsigned char *mac,
             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, int vf, unsigned char *mac,
 
 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 *pflinkdev, int vf,
         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 *pflinkdev, int vf,
     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 *pflinkdev, int vf,
         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 *pflinkdev, int vf,
 
     /*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 660d2db53f12e2d1cfb2c16f87ee6b1925b61d3a..4c1a0d9b2bd558022dac6c30f09804e88fa40f1b 100644 (file)
@@ -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 *ifname, virSocketAddrPtr addr)
 
 
 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 *ifname, int *vlanid)
     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, int ifindex,
     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 d168d427cad1de17346125058921e8f65c89540f..b047750310175339f031602f17cfa61c0cee2bb8 100644 (file)
@@ -95,7 +95,7 @@ VIR_ENUM_IMPL(virNetDevMacVLanMode, VIR_NETDEV_MACVLAN_MODE_LAST,
 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_MACVLAN_MODE_LAST] = {
 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(unsigned char *msg,
             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) {
+                for (i = 0; i < VIR_MAC_BUFLEN; i++) {
+                    if (calld->macaddress.addr[i] != 0xff) {
                         VIR_DEBUG("MAC address match failed (wasn't broadcast)");
                         return;
                     }
@@ -697,13 +697,13 @@ virNetDevMacVLanVPortProfileCallback(unsigned char *msg,
     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(virNetlinkCallbackDataPtr calld)
  */
 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 @@ virNetDevMacVLanVPortProfileDestroyCallback(int watch ATTRIBUTE_UNUSED,
 
 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 @@ virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
         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 virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
  * 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 *ifname ATTRIBUTE_UNUSED)
 }
 
 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 virNetDevMacVLanCreateWithVPortProfile(const char *ifname ATTRIBUTE_UNUSED,
 }
 
 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 virNetDevMacVLanDeleteWithVPortProfile(const char *ifname ATTRIBUTE_UNUSED,
 }
 
 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 virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname ATTRIBUTE_UNUS
 }
 
 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 07d54e271edd8f828ab7838147846096802156d5..3d5afcec98057d6db438b498091d82cc11e3c594 100644 (file)
@@ -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 *ifname)
     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 virNetDevMacVLanCreateWithVPortProfile(const char *ifname,
     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 virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
     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 virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
     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 61bb9e1eae1d5f03983e1dd4d67118b24f23a0fe..fda44394e789f7d1657241e76832c48174ba868c 100644 (file)
@@ -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 8141780cc138d1b67934b83b3dd34a695c07d4d3..5adfabda12d070ce609a18d38528fde8efc707e4 100644 (file)
@@ -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 5d21164c82e611d2a4a5c72f264dabbd62104e7e..e46dd36a7851041235d386848fd33ecdc8ab6758 100644 (file)
@@ -256,7 +256,7 @@ int virNetDevTapDelete(const char *ifname ATTRIBUTE_UNUSED)
  * 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 *ifname ATTRIBUTE_UNUSED)
  */
 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 char *brname,
      * 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 char *brname,
             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 d9a3593407687d96f123a4181021a08300433029..f14d1c9cbdddbf7f3ea4bf280d2c3959bfc08b72 100644 (file)
@@ -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 38261d11858d19ec57b32139a2e78454a3fa878e..34ec0b68ba06281dc3bbb5f622b80025a51c445c 100644 (file)
@@ -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 char *ifname, int ifindex,
                 .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 char *ifname, int ifindex, unsigned int
 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(const char *ifname, int *root_ifindex, ch
 /* 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 char *macvtap_ifname,
 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 char *macvtap_ifname,
 #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 char *macvtap_ifname ATTRIBUTE_UNUSED,
 
 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 dff594365b6f2db848da5abf5e4a7d9c36adfc1f..1c93f77e35cfa229383c63ab103bf763ef45c25d 100644 (file)
@@ -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(virNetDevVPortProfilePtr a,
 
 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 char *ifname,
 
 int virNetDevVPortProfileDisassociate(const char *ifname,
                                       const virNetDevVPortProfilePtr virtPort,
-                                      const unsigned char *macaddr,
+                                      const virMacAddrPtr macaddr,
                                       const char *linkdev,
                                       int vf,
                                       enum virNetDevVPortProfileOp vmOp)
index bb0dae9354897f0b5f9f75a8ef2a930fc4b966b5..19c9ad0863e91f2b92f38b07f06bda67f33acf15 100644 (file)
@@ -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(size_t i)
 
     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, const unsigned char *macaddr)
 
         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 8ec27c9016566d99e5a4bd842dfcfc8b7ded0b61..b7f64cada20235302706e8bd2f279eb2465891e3 100644 (file)
@@ -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_msg,
 
 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 ba7552c93515d8fec43faaa7fc885e59152db5e8..e0e6db78106bc9801e2f9e82ad82f73085f84997 100644 (file)
@@ -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, vboxGlobalData *data, IMachine *machine)
         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 3de706293a201c23741e6c6811e8c924862b7660..7357030f571f06e3f7607bd1a30eb404b558fd2a 100644 (file)
@@ -2365,7 +2365,7 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
     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 controller, virDomainNetDefPtr *def)
         }
     } 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, int controller,
     }
 
     /* 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 f1aa9b6f1cc6f10fcd7b322b5b2c69d78c517d7a..f96512931d7112d920b7ae5375b8868aab92bc02 100644 (file)
@@ -2718,7 +2718,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
             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 09f05a022fbf044b27f9525af97c13f1be2d9988..cde0abb6d3a2ad35d5b5d6e4c0c9291c4b0d77e7 100644 (file)
@@ -1533,9 +1533,7 @@ xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
     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 3a56345a9292e301b5e35a602c06966c3b87f946..2a240fc240682cde4cc24a27b3613b40be112e79 100644 (file)
@@ -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 bdf46bdf52589cb2be71d3ded4aad9170ab54fda..07cb9bd93bf70fb5823b092ec66104dd6061d575 100644 (file)
@@ -742,7 +742,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
                 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 conn,
     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 f9fe4b1e7b55fd15fa03e2bada05f7d09e898142..1e00049ca87dbbc02ba5e7eeac6e22cec6d684fc 100644 (file)
@@ -1935,7 +1935,7 @@ cmdDomIfSetLink(vshControl *ctl, const vshCmd *cmd)
     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 vshCmd *cmd)
         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 vshCmd *cmd)
     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 vshCmd *cmd)
         goto cleanup;
     }
 
-    if (virMacAddrParse(iface, macaddr) == 0) {
+    if (virMacAddrParse(iface, &macaddr) == 0) {
         element = "mac";
         attr = "address";
     } else {