Convert 'raw MAC address' usages to use virMacAddr

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.
This commit is contained in:
Stefan Berger 2012-07-17 08:07:59 -04:00 committed by Stefan Berger
parent 87c8623161
commit 387117ad92
55 changed files with 378 additions and 300 deletions

View File

@ -859,14 +859,14 @@ virCapabilitiesFormatXML(virCapsPtr caps)
extern void extern void
virCapabilitiesSetMacPrefix(virCapsPtr caps, virCapabilitiesSetMacPrefix(virCapsPtr caps,
unsigned char *prefix) const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN])
{ {
memcpy(caps->macPrefix, prefix, sizeof(caps->macPrefix)); memcpy(caps->macPrefix, prefix, sizeof(caps->macPrefix));
} }
extern void extern void
virCapabilitiesGenerateMac(virCapsPtr caps, virCapabilitiesGenerateMac(virCapsPtr caps,
unsigned char *mac) virMacAddrPtr mac)
{ {
virMacAddrGenerate(caps->macPrefix, mac); virMacAddrGenerate(caps->macPrefix, mac);
} }

View File

@ -172,11 +172,11 @@ virCapabilitiesFreeNUMAInfo(virCapsPtr caps);
extern void extern void
virCapabilitiesSetMacPrefix(virCapsPtr caps, virCapabilitiesSetMacPrefix(virCapsPtr caps,
unsigned char *prefix); const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN]);
extern void extern void
virCapabilitiesGenerateMac(virCapsPtr caps, virCapabilitiesGenerateMac(virCapsPtr caps,
unsigned char *mac); virMacAddrPtr mac);
extern void extern void
virCapabilitiesSetEmulatorRequired(virCapsPtr caps); virCapabilitiesSetEmulatorRequired(virCapsPtr caps);

View File

@ -160,9 +160,9 @@ virDomainAuditNet(virDomainObjPtr vm,
virUUIDFormat(vm->def->uuid, uuidstr); virUUIDFormat(vm->def->uuid, uuidstr);
if (oldDef) if (oldDef)
virMacAddrFormat(oldDef->mac, oldMacstr); virMacAddrFormat(&oldDef->mac, oldMacstr);
if (newDef) if (newDef)
virMacAddrFormat(newDef->mac, newMacstr); virMacAddrFormat(&newDef->mac, newMacstr);
if (!(vmname = virAuditEncode("vm", vm->def->name))) { if (!(vmname = virAuditEncode("vm", vm->def->name))) {
VIR_WARN("OOM while encoding audit message"); VIR_WARN("OOM while encoding audit message");
return; return;
@ -206,7 +206,7 @@ virDomainAuditNetDevice(virDomainDefPtr vmDef, virDomainNetDefPtr netDef,
const char *virt; const char *virt;
virUUIDFormat(vmDef->uuid, uuidstr); virUUIDFormat(vmDef->uuid, uuidstr);
virMacAddrFormat(netDef->mac, macstr); virMacAddrFormat(&netDef->mac, macstr);
rdev = virDomainAuditGetRdev(device); rdev = virDomainAuditGetRdev(device);
if (!(vmname = virAuditEncode("vm", vmDef->name)) || if (!(vmname = virAuditEncode("vm", vmDef->name)) ||

View File

@ -4641,20 +4641,20 @@ virDomainNetDefParseXML(virCapsPtr caps,
} }
if (macaddr) { if (macaddr) {
if (virMacAddrParse((const char *)macaddr, def->mac) < 0) { if (virMacAddrParse((const char *)macaddr, &def->mac) < 0) {
virDomainReportError(VIR_ERR_XML_ERROR, virDomainReportError(VIR_ERR_XML_ERROR,
_("unable to parse mac address '%s'"), _("unable to parse mac address '%s'"),
(const char *)macaddr); (const char *)macaddr);
goto error; goto error;
} }
if (virMacAddrIsMulticast(def->mac)) { if (virMacAddrIsMulticast(&def->mac)) {
virDomainReportError(VIR_ERR_XML_ERROR, virDomainReportError(VIR_ERR_XML_ERROR,
_("expected unicast mac address, found multicast '%s'"), _("expected unicast mac address, found multicast '%s'"),
(const char *)macaddr); (const char *)macaddr);
goto error; goto error;
} }
} else { } else {
virCapabilitiesGenerateMac(caps, def->mac); virCapabilitiesGenerateMac(caps, &def->mac);
} }
if (devaddr) { if (devaddr) {
@ -7443,12 +7443,12 @@ int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net)
return 0; return 0;
} }
int virDomainNetIndexByMac(virDomainDefPtr def, const unsigned char *mac) int virDomainNetIndexByMac(virDomainDefPtr def, const virMacAddrPtr mac)
{ {
int i; int i;
for (i = 0; i < def->nnets; 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 i;
return -1; return -1;
} }
@ -7489,7 +7489,7 @@ virDomainNetRemove(virDomainDefPtr def, size_t i)
} }
virDomainNetDefPtr virDomainNetDefPtr
virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac) virDomainNetRemoveByMac(virDomainDefPtr def, const virMacAddrPtr mac)
{ {
int i = virDomainNetIndexByMac(def, mac); int i = virDomainNetIndexByMac(def, mac);
@ -9712,14 +9712,14 @@ static bool virDomainNetDefCheckABIStability(virDomainNetDefPtr src,
{ {
bool identical = false; 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, virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Target network card mac %02x:%02x:%02x:%02x:%02x:%02x" _("Target network card mac %02x:%02x:%02x:%02x:%02x:%02x"
"does not match source %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.addr[0], dst->mac.addr[1], dst->mac.addr[2],
dst->mac[3], dst->mac[4], dst->mac[5], dst->mac.addr[3], dst->mac.addr[4], dst->mac.addr[5],
src->mac[0], src->mac[1], src->mac[2], src->mac.addr[0], src->mac.addr[1], src->mac.addr[2],
src->mac[3], src->mac[4], src->mac[5]); src->mac.addr[3], src->mac.addr[4], src->mac.addr[5]);
goto cleanup; goto cleanup;
} }
@ -11575,8 +11575,8 @@ virDomainNetDefFormat(virBufferPtr buf,
virBufferAsprintf(buf, virBufferAsprintf(buf,
" <mac address='%02x:%02x:%02x:%02x:%02x:%02x'/>\n", " <mac address='%02x:%02x:%02x:%02x:%02x:%02x'/>\n",
def->mac[0], def->mac[1], def->mac[2], def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
def->mac[3], def->mac[4], def->mac[5]); def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
switch (def->type) { switch (def->type) {
case VIR_DOMAIN_NET_TYPE_NETWORK: case VIR_DOMAIN_NET_TYPE_NETWORK:
@ -15146,15 +15146,15 @@ virDomainNetFind(virDomainDefPtr def, const char *device)
{ {
bool isMac = false; bool isMac = false;
virDomainNetDefPtr net = NULL; virDomainNetDefPtr net = NULL;
unsigned char mac[VIR_MAC_BUFLEN]; virMacAddr mac;
int i; int i;
if (virMacAddrParse(device, mac) == 0) if (virMacAddrParse(device, &mac) == 0)
isMac = true; isMac = true;
if (isMac) { if (isMac) {
for (i = 0; i < def->nnets; i++) { 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]; net = def->nets[i];
break; break;
} }

View File

@ -785,7 +785,7 @@ struct _virDomainActualNetDef {
/* Stores the virtual network interface configuration */ /* Stores the virtual network interface configuration */
struct _virDomainNetDef { struct _virDomainNetDef {
enum virDomainNetType type; enum virDomainNetType type;
unsigned char mac[VIR_MAC_BUFLEN]; virMacAddr mac;
char *model; char *model;
union { union {
struct { struct {
@ -1998,12 +1998,12 @@ virDomainDiskRemove(virDomainDefPtr def, size_t i);
virDomainDiskDefPtr virDomainDiskDefPtr
virDomainDiskRemoveByName(virDomainDefPtr def, const char *name); 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); int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net);
virDomainNetDefPtr virDomainNetDefPtr
virDomainNetRemove(virDomainDefPtr def, size_t i); virDomainNetRemove(virDomainDefPtr def, size_t i);
virDomainNetDefPtr virDomainNetDefPtr
virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac); virDomainNetRemoveByMac(virDomainDefPtr def, const virMacAddrPtr mac);
int virDomainHostdevInsert(virDomainDefPtr def, virDomainHostdevDefPtr hostdev); int virDomainHostdevInsert(virDomainDefPtr def, virDomainHostdevDefPtr hostdev);
virDomainHostdevDefPtr virDomainHostdevDefPtr

View File

@ -420,19 +420,19 @@ virNetworkDHCPRangeDefParseXML(const char *networkName,
} else if (cur->type == XML_ELEMENT_NODE && } else if (cur->type == XML_ELEMENT_NODE &&
xmlStrEqual(cur->name, BAD_CAST "host")) { xmlStrEqual(cur->name, BAD_CAST "host")) {
char *mac = NULL, *name = NULL, *ip; char *mac = NULL, *name = NULL, *ip;
unsigned char addr[6]; virMacAddr addr;
virSocketAddr inaddr; virSocketAddr inaddr;
mac = virXMLPropString(cur, "mac"); mac = virXMLPropString(cur, "mac");
if (mac != NULL) { if (mac != NULL) {
if (virMacAddrParse(mac, &addr[0]) < 0) { if (virMacAddrParse(mac, &addr) < 0) {
virNetworkReportError(VIR_ERR_XML_ERROR, virNetworkReportError(VIR_ERR_XML_ERROR,
_("Cannot parse MAC address '%s' in network '%s'"), _("Cannot parse MAC address '%s' in network '%s'"),
mac, networkName); mac, networkName);
VIR_FREE(mac); VIR_FREE(mac);
return -1; return -1;
} }
if (virMacAddrIsMulticast(addr)) { if (virMacAddrIsMulticast(&addr)) {
virNetworkReportError(VIR_ERR_XML_ERROR, virNetworkReportError(VIR_ERR_XML_ERROR,
_("expected unicast mac address, found multicast '%s' in network '%s'"), _("expected unicast mac address, found multicast '%s' in network '%s'"),
(const char *)mac, networkName); (const char *)mac, networkName);
@ -989,14 +989,14 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
tmp = virXPathString("string(./mac[1]/@address)", ctxt); tmp = virXPathString("string(./mac[1]/@address)", ctxt);
if (tmp) { if (tmp) {
if (virMacAddrParse(tmp, def->mac) < 0) { if (virMacAddrParse(tmp, &def->mac) < 0) {
virNetworkReportError(VIR_ERR_XML_ERROR, virNetworkReportError(VIR_ERR_XML_ERROR,
_("Invalid bridge mac address '%s' in network '%s'"), _("Invalid bridge mac address '%s' in network '%s'"),
tmp, def->name); tmp, def->name);
VIR_FREE(tmp); VIR_FREE(tmp);
goto error; goto error;
} }
if (virMacAddrIsMulticast(def->mac)) { if (virMacAddrIsMulticast(&def->mac)) {
virNetworkReportError(VIR_ERR_XML_ERROR, virNetworkReportError(VIR_ERR_XML_ERROR,
_("Invalid multicast bridge mac address '%s' in network '%s'"), _("Invalid multicast bridge mac address '%s' in network '%s'"),
tmp, def->name); tmp, def->name);
@ -1520,7 +1520,7 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags)
if (def->mac_specified) { if (def->mac_specified) {
char macaddr[VIR_MAC_STRING_BUFLEN]; char macaddr[VIR_MAC_STRING_BUFLEN];
virMacAddrFormat(def->mac, macaddr); virMacAddrFormat(&def->mac, macaddr);
virBufferAsprintf(&buf, " <mac address='%s'/>\n", macaddr); virBufferAsprintf(&buf, " <mac address='%s'/>\n", macaddr);
} }
@ -1848,7 +1848,7 @@ void virNetworkSetBridgeMacAddr(virNetworkDefPtr def)
* autogenerate a random one. * autogenerate a random one.
*/ */
virMacAddrGenerate((unsigned char[]){ 0x52, 0x54, 0 }, virMacAddrGenerate((unsigned char[]){ 0x52, 0x54, 0 },
def->mac); &def->mac);
def->mac_specified = true; def->mac_specified = true;
} }
} }

View File

@ -154,7 +154,7 @@ struct _virNetworkDef {
char *domain; char *domain;
unsigned long delay; /* Bridge forward delay (ms) */ unsigned long delay; /* Bridge forward delay (ms) */
unsigned int stp :1; /* Spanning tree protocol */ 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; bool mac_specified;
int forwardType; /* One of virNetworkForwardType constants */ int forwardType; /* One of virNetworkForwardType constants */

View File

@ -1775,15 +1775,6 @@ static const virAttributes virAttr[] = {
PROTOCOL_ENTRY_LAST PROTOCOL_ENTRY_LAST
}; };
static int
virNWMACAddressParser(const char *input,
nwMACAddressPtr output)
{
return virMacAddrParse(input, &output->addr[0]);
}
static int static int
virNWFilterRuleDetailsParse(xmlNodePtr node, virNWFilterRuleDetailsParse(xmlNodePtr node,
virNWFilterRuleDefPtr nwf, virNWFilterRuleDefPtr nwf,
@ -1916,8 +1907,8 @@ virNWFilterRuleDetailsParse(xmlNodePtr node,
break; break;
case DATATYPE_MACADDR: case DATATYPE_MACADDR:
if (virNWMACAddressParser(prop, if (virMacAddrParse(prop,
&item->u.macaddr) < 0) { &item->u.macaddr) < 0) {
rc = -1; rc = -1;
} }
found = 1; found = 1;
@ -1925,8 +1916,8 @@ virNWFilterRuleDetailsParse(xmlNodePtr node,
case DATATYPE_MACMASK: case DATATYPE_MACMASK:
validator = checkMACMask; validator = checkMACMask;
if (virNWMACAddressParser(prop, if (virMacAddrParse(prop,
&item->u.macaddr) < 0) { &item->u.macaddr) < 0) {
rc = -1; rc = -1;
} }
data.v = &item->u.macaddr; data.v = &item->u.macaddr;

View File

@ -36,6 +36,7 @@
# include "xml.h" # include "xml.h"
# include "buf.h" # include "buf.h"
# include "virsocketaddr.h" # include "virsocketaddr.h"
# include "virmacaddr.h"
/* XXX /* XXX
* The config parser/structs should not be using platform specific * 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" # 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 struct _nwItemDesc nwItemDesc;
typedef nwItemDesc *nwItemDescPtr; typedef nwItemDesc *nwItemDescPtr;
struct _nwItemDesc { struct _nwItemDesc {
@ -127,7 +121,7 @@ struct _nwItemDesc {
virNWFilterVarAccessPtr varAccess; virNWFilterVarAccessPtr varAccess;
enum attrDatatype datatype; enum attrDatatype datatype;
union { union {
nwMACAddress macaddr; virMacAddr macaddr;
virSocketAddr ipaddr; virSocketAddr ipaddr;
bool boolean; bool boolean;
uint8_t u8; uint8_t u8;
@ -633,10 +627,10 @@ typedef int (*virNWFilterRuleDisplayInstanceData)(void *_inst);
typedef int (*virNWFilterCanApplyBasicRules)(void); typedef int (*virNWFilterCanApplyBasicRules)(void);
typedef int (*virNWFilterApplyBasicRules)(const char *ifname, typedef int (*virNWFilterApplyBasicRules)(const char *ifname,
const unsigned char *macaddr); const virMacAddrPtr macaddr);
typedef int (*virNWFilterApplyDHCPOnlyRules)(const char *ifname, typedef int (*virNWFilterApplyDHCPOnlyRules)(const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
virNWFilterVarValuePtr dhcpsrvs, virNWFilterVarValuePtr dhcpsrvs,
bool leaveTemporary); bool leaveTemporary);

View File

@ -25,6 +25,7 @@
# include "virhash.h" # include "virhash.h"
# include "buf.h" # include "buf.h"
# include "virmacaddr.h"
enum virNWFilterVarValueType { enum virNWFilterVarValueType {
NWFILTER_VALUE_TYPE_SIMPLE, NWFILTER_VALUE_TYPE_SIMPLE,

View File

@ -1277,12 +1277,17 @@ virKeyFileGetValueString;
# virmacaddr.h # virmacaddr.h
virMacAddrCmp;
virMacAddrCmpRaw;
virMacAddrCompare; virMacAddrCompare;
virMacAddrFormat; virMacAddrFormat;
virMacAddrGenerate; virMacAddrGenerate;
virMacAddrGetRaw;
virMacAddrIsMulticast; virMacAddrIsMulticast;
virMacAddrIsUnicast; virMacAddrIsUnicast;
virMacAddrParse; virMacAddrParse;
virMacAddrSet;
virMacAddrSetRaw;
# virnetclient.h # virnetclient.h

View File

@ -596,7 +596,7 @@ libxlMakeNic(virDomainDefPtr def, virDomainNetDefPtr l_nic,
//x_nics[i].mtu = 1492; //x_nics[i].mtu = 1492;
x_nic->domid = def->id; 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 (l_nic->model && !STREQ(l_nic->model, "netfront")) {
if ((x_nic->model = strdup(l_nic->model)) == NULL) { if ((x_nic->model = strdup(l_nic->model)) == NULL) {

View File

@ -1202,11 +1202,11 @@ static int lxcSetupInterfaceBridged(virConnectPtr conn,
(*veths)[(*nveths)] = containerVeth; (*veths)[(*nveths)] = containerVeth;
(*nveths)++; (*nveths)++;
if (virNetDevSetMAC(containerVeth, net->mac) < 0) if (virNetDevSetMAC(containerVeth, &net->mac) < 0)
goto cleanup; goto cleanup;
if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH)
ret = virNetDevOpenvswitchAddPort(brname, parentVeth, net->mac, ret = virNetDevOpenvswitchAddPort(brname, parentVeth, &net->mac,
vm->uuid, vport); vm->uuid, vport);
else else
ret = virNetDevBridgeAddPort(brname, parentVeth); ret = virNetDevBridgeAddPort(brname, parentVeth);
@ -1280,7 +1280,7 @@ static int lxcSetupInterfaceDirect(virConnectPtr conn,
(*veths)[(*nveths)] = NULL; (*veths)[(*nveths)] = NULL;
if (virNetDevMacVLanCreateWithVPortProfile( if (virNetDevMacVLanCreateWithVPortProfile(
net->ifname, net->mac, net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net), virDomainNetGetActualDirectMode(net),
false, false, def->uuid, false, false, def->uuid,

View File

@ -1765,7 +1765,7 @@ networkStartNetworkVirtual(struct network_driver *driver,
goto err0; goto err0;
} }
if (virNetDevTapCreateInBridgePort(network->def->bridge, if (virNetDevTapCreateInBridgePort(network->def->bridge,
&macTapIfName, network->def->mac, &macTapIfName, &network->def->mac,
NULL, NULL, NULL, NULL, NULL, NULL,
VIR_NETDEV_TAP_CREATE_USE_MAC_FOR_BRIDGE) < 0) { VIR_NETDEV_TAP_CREATE_USE_MAC_FOR_BRIDGE) < 0) {
VIR_FREE(macTapIfName); VIR_FREE(macTapIfName);

View File

@ -484,7 +484,7 @@ virNWFilterSnoopIPLeaseInstallRule(virNWFilterSnoopIPLeasePtr ipl,
req->ifindex, req->ifindex,
req->linkdev, req->linkdev,
req->nettype, req->nettype,
req->macaddr, &req->macaddr,
req->filtername, req->filtername,
req->vars, req->vars,
req->driver); req->driver);
@ -875,7 +875,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
req->ifindex, req->ifindex,
req->linkdev, req->linkdev,
req->nettype, req->nettype,
req->macaddr, &req->macaddr,
req->filtername, req->filtername,
req->vars, req->vars,
req->driver); req->driver);
@ -884,7 +884,7 @@ virNWFilterSnoopReqLeaseDel(virNWFilterSnoopReqPtr req,
virHashLookup(req->vars->hashTable, NWFILTER_VARNAME_DHCPSERVER); virHashLookup(req->vars->hashTable, NWFILTER_VARNAME_DHCPSERVER);
if (req->techdriver && if (req->techdriver &&
req->techdriver->applyDHCPOnlyRules(req->ifname, req->macaddr, req->techdriver->applyDHCPOnlyRules(req->ifname, &req->macaddr,
dhcpsrvrs, false) < 0) { dhcpsrvrs, false) < 0) {
virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, virNWFilterReportError(VIR_ERR_INTERNAL_ERROR,
_("virNWFilterSnoopListDel failed")); _("virNWFilterSnoopListDel failed"));
@ -1071,7 +1071,7 @@ virNWFilterSnoopDHCPOpen(const char *ifname, virMacAddr *mac,
char macaddr[VIR_MAC_STRING_BUFLEN]; char macaddr[VIR_MAC_STRING_BUFLEN];
const char *ext; const char *ext;
virMacAddrFormat((unsigned char *)mac, macaddr); virMacAddrFormat(mac, macaddr);
if (dir == PCAP_D_IN /* from VM */) { if (dir == PCAP_D_IN /* from VM */) {
/* /*
@ -1560,7 +1560,7 @@ exit:
static void static void
virNWFilterSnoopIFKeyFMT(char *ifkey, const unsigned char *vmuuid, virNWFilterSnoopIFKeyFMT(char *ifkey, const unsigned char *vmuuid,
unsigned const char *macaddr) const virMacAddrPtr macaddr)
{ {
virUUIDFormat(vmuuid, ifkey); virUUIDFormat(vmuuid, ifkey);
ifkey[VIR_UUID_STRING_BUFLEN - 1] = '-'; ifkey[VIR_UUID_STRING_BUFLEN - 1] = '-';
@ -1573,7 +1573,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *vmuuid, const unsigned char *vmuuid,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver) virNWFilterDriverStatePtr driver)
@ -1609,7 +1609,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver,
req->linkdev = linkdev ? strdup(linkdev) : NULL; req->linkdev = linkdev ? strdup(linkdev) : NULL;
req->nettype = nettype; req->nettype = nettype;
req->ifname = strdup(ifname); req->ifname = strdup(ifname);
memcpy(req->macaddr, macaddr, sizeof(req->macaddr)); virMacAddrSet(&req->macaddr, macaddr);
req->filtername = strdup(filtername); req->filtername = strdup(filtername);
req->vars = virNWFilterHashTableCreate(0); req->vars = virNWFilterHashTableCreate(0);
@ -1631,7 +1631,7 @@ virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver,
dhcpsrvrs = virHashLookup(filterparams->hashTable, dhcpsrvrs = virHashLookup(filterparams->hashTable,
NWFILTER_VARNAME_DHCPSERVER); NWFILTER_VARNAME_DHCPSERVER);
if (techdriver->applyDHCPOnlyRules(req->ifname, req->macaddr, if (techdriver->applyDHCPOnlyRules(req->ifname, &req->macaddr,
dhcpsrvrs, false) < 0) { dhcpsrvrs, false) < 0) {
virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, _("applyDHCPOnlyRules " virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, _("applyDHCPOnlyRules "
"failed - spoofing not protected!")); "failed - spoofing not protected!"));

View File

@ -31,7 +31,7 @@ int virNWFilterDHCPSnoopReq(virNWFilterTechDriverPtr techdriver,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *vmuuid, const unsigned char *vmuuid,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver); virNWFilterDriverStatePtr driver);

View File

@ -306,7 +306,7 @@ _printDataType(virNWFilterVarCombIterPtr vars,
return -1; return -1;
} }
virMacAddrFormat(item->u.macaddr.addr, buf); virMacAddrFormat(&item->u.macaddr, buf);
break; break;
case DATATYPE_IPV6MASK: case DATATYPE_IPV6MASK:
@ -3189,7 +3189,7 @@ ebiptablesCanApplyBasicRules(void) {
*/ */
static int static int
ebtablesApplyBasicRules(const char *ifname, ebtablesApplyBasicRules(const char *ifname,
const unsigned char *macaddr) const virMacAddrPtr macaddr)
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
char chain[MAX_CHAINNAME_LENGTH]; char chain[MAX_CHAINNAME_LENGTH];
@ -3282,7 +3282,7 @@ tear_down_tmpebchains:
*/ */
static int static int
ebtablesApplyDHCPOnlyRules(const char *ifname, ebtablesApplyDHCPOnlyRules(const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
virNWFilterVarValuePtr dhcpsrvrs, virNWFilterVarValuePtr dhcpsrvrs,
bool leaveTemporary) bool leaveTemporary)
{ {

View File

@ -656,7 +656,7 @@ virNWFilterInstantiate(const unsigned char *vmuuid ATTRIBUTE_UNUSED,
virNWFilterHashTablePtr vars, virNWFilterHashTablePtr vars,
enum instCase useNewFilter, bool *foundNewFilter, enum instCase useNewFilter, bool *foundNewFilter,
bool teardownOld, bool teardownOld,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
virNWFilterDriverStatePtr driver, virNWFilterDriverStatePtr driver,
bool forceWithPendingReq) bool forceWithPendingReq)
{ {
@ -817,7 +817,7 @@ __virNWFilterInstantiateFilter(const unsigned char *vmuuid,
int ifindex, int ifindex,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
enum instCase useNewFilter, enum instCase useNewFilter,
@ -967,7 +967,7 @@ _virNWFilterInstantiateFilter(virConnectPtr conn,
ifindex, ifindex,
linkdev, linkdev,
net->type, net->type,
net->mac, &net->mac,
net->filter, net->filter,
net->filterparams, net->filterparams,
useNewFilter, useNewFilter,
@ -988,7 +988,7 @@ virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
int ifindex, int ifindex,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver) virNWFilterDriverStatePtr driver)

View File

@ -50,7 +50,7 @@ int virNWFilterInstantiateFilterLate(const unsigned char *vmuuid,
int ifindex, int ifindex,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver); virNWFilterDriverStatePtr driver);

View File

@ -404,12 +404,12 @@ learnIPAddressThread(void *arg)
goto done; goto done;
} }
virMacAddrFormat(req->macaddr, macaddr); virMacAddrFormat(&req->macaddr, macaddr);
switch (req->howDetect) { switch (req->howDetect) {
case DETECT_DHCP: case DETECT_DHCP:
if (techdriver->applyDHCPOnlyRules(req->ifname, if (techdriver->applyDHCPOnlyRules(req->ifname,
req->macaddr, &req->macaddr,
NULL, false) < 0) { NULL, false) < 0) {
req->status = EINVAL; req->status = EINVAL;
goto done; goto done;
@ -420,7 +420,7 @@ learnIPAddressThread(void *arg)
break; break;
default: default:
if (techdriver->applyBasicRules(req->ifname, if (techdriver->applyBasicRules(req->ifname,
req->macaddr) < 0) { &req->macaddr) < 0) {
req->status = EINVAL; req->status = EINVAL;
goto done; goto done;
} }
@ -493,9 +493,7 @@ learnIPAddressThread(void *arg)
continue; continue;
} }
if (memcmp(ether_hdr->ether_shost, if (virMacAddrCmpRaw(&req->macaddr, ether_hdr->ether_shost) == 0) {
req->macaddr,
VIR_MAC_BUFLEN) == 0) {
/* packets from the VM */ /* packets from the VM */
if (etherType == ETHERTYPE_IP && if (etherType == ETHERTYPE_IP &&
@ -530,9 +528,8 @@ learnIPAddressThread(void *arg)
break; break;
} }
} }
} else if (memcmp(ether_hdr->ether_dhost, } else if (virMacAddrCmpRaw(&req->macaddr,
req->macaddr, ether_hdr->ether_dhost) == 0) {
VIR_MAC_BUFLEN) == 0) {
/* packets to the VM */ /* packets to the VM */
if (etherType == ETHERTYPE_IP && if (etherType == ETHERTYPE_IP &&
(header.len >= ethHdrSize + (header.len >= ethHdrSize +
@ -554,9 +551,9 @@ learnIPAddressThread(void *arg)
struct dhcp *dhcp = (struct dhcp *) struct dhcp *dhcp = (struct dhcp *)
((char *)udphdr + sizeof(udphdr)); ((char *)udphdr + sizeof(udphdr));
if (dhcp->op == 2 /* BOOTREPLY */ && if (dhcp->op == 2 /* BOOTREPLY */ &&
!memcmp(&dhcp->chaddr[0], virMacAddrCmpRaw(
req->macaddr, &req->macaddr,
6)) { &dhcp->chaddr[0]) == 0) {
dhcp_opts_len = header.len - dhcp_opts_len = header.len -
(ethHdrSize + iphdr->ihl * 4 + (ethHdrSize + iphdr->ihl * 4 +
sizeof(struct udphdr) + sizeof(struct udphdr) +
@ -602,7 +599,7 @@ learnIPAddressThread(void *arg)
req->ifindex, req->ifindex,
req->linkdev, req->linkdev,
req->nettype, req->nettype,
req->macaddr, &req->macaddr,
req->filtername, req->filtername,
req->filterparams, req->filterparams,
req->driver); req->driver);
@ -662,7 +659,7 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver,
int ifindex, int ifindex,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver, virNWFilterDriverStatePtr driver,
@ -720,7 +717,7 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver,
req->ifindex = ifindex; req->ifindex = ifindex;
req->nettype = nettype; req->nettype = nettype;
memcpy(req->macaddr, macaddr, sizeof(req->macaddr)); virMacAddrSet(&req->macaddr, macaddr);
req->driver = driver; req->driver = driver;
req->filterparams = ht; req->filterparams = ht;
ht = NULL; ht = NULL;
@ -758,7 +755,7 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver ATTRIBUTE_UNUSED,
int ifindex ATTRIBUTE_UNUSED, int ifindex ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED, const char *linkdev ATTRIBUTE_UNUSED,
enum virDomainNetType nettype ATTRIBUTE_UNUSED, enum virDomainNetType nettype ATTRIBUTE_UNUSED,
const unsigned char *macaddr ATTRIBUTE_UNUSED, const virMacAddrPtr macaddr ATTRIBUTE_UNUSED,
const char *filtername ATTRIBUTE_UNUSED, const char *filtername ATTRIBUTE_UNUSED,
virNWFilterHashTablePtr filterparams ATTRIBUTE_UNUSED, virNWFilterHashTablePtr filterparams ATTRIBUTE_UNUSED,
virNWFilterDriverStatePtr driver ATTRIBUTE_UNUSED, virNWFilterDriverStatePtr driver ATTRIBUTE_UNUSED,

View File

@ -40,7 +40,7 @@ struct _virNWFilterIPAddrLearnReq {
int ifindex; int ifindex;
char linkdev[IF_NAMESIZE]; char linkdev[IF_NAMESIZE];
enum virDomainNetType nettype; enum virDomainNetType nettype;
unsigned char macaddr[VIR_MAC_BUFLEN]; virMacAddr macaddr;
char *filtername; char *filtername;
virNWFilterHashTablePtr filterparams; virNWFilterHashTablePtr filterparams;
virNWFilterDriverStatePtr driver; virNWFilterDriverStatePtr driver;
@ -56,7 +56,7 @@ int virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver,
int ifindex, int ifindex,
const char *linkdev, const char *linkdev,
enum virDomainNetType nettype, enum virDomainNetType nettype,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *filtername, const char *filtername,
virNWFilterHashTablePtr filterparams, virNWFilterHashTablePtr filterparams,
virNWFilterDriverStatePtr driver, virNWFilterDriverStatePtr driver,

View File

@ -335,7 +335,7 @@ openvzReadNetworkConf(virDomainDefPtr def,
_("MAC address %s too long for destination"), p); _("MAC address %s too long for destination"), p);
goto error; goto error;
} }
if (virMacAddrParse(cpy_temp, net->mac) < 0) { if (virMacAddrParse(cpy_temp, &net->mac) < 0) {
openvzError(VIR_ERR_INTERNAL_ERROR, "%s", openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Wrong MAC address")); _("Wrong MAC address"));
goto error; goto error;

View File

@ -735,7 +735,7 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
int rc = 0, narg; int rc = 0, narg;
const char *prog[OPENVZ_MAX_ARG]; const char *prog[OPENVZ_MAX_ARG];
char macaddr[VIR_MAC_STRING_BUFLEN]; char macaddr[VIR_MAC_STRING_BUFLEN];
unsigned char host_mac[VIR_MAC_BUFLEN]; virMacAddr host_mac;
char host_macaddr[VIR_MAC_STRING_BUFLEN]; char host_macaddr[VIR_MAC_STRING_BUFLEN];
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
char *opt = NULL; char *opt = NULL;
@ -770,9 +770,9 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
ADD_ARG_LIT(vpsid); ADD_ARG_LIT(vpsid);
} }
virMacAddrFormat(net->mac, macaddr); virMacAddrFormat(&net->mac, macaddr);
virCapabilitiesGenerateMac(driver->caps, host_mac); virCapabilitiesGenerateMac(driver->caps, &host_mac);
virMacAddrFormat(host_mac, host_macaddr); virMacAddrFormat(&host_mac, host_macaddr);
if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE || if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
(net->type == VIR_DOMAIN_NET_TYPE_ETHERNET && (net->type == VIR_DOMAIN_NET_TYPE_ETHERNET &&

View File

@ -66,7 +66,7 @@ networkDisableAllFrames(struct qemud_driver *driver) {
int int
networkAllowMacOnPort(struct qemud_driver *driver, networkAllowMacOnPort(struct qemud_driver *driver,
const char * ifname, const char * ifname,
const unsigned char * mac) { const virMacAddrPtr mac) {
int err; int err;
@ -87,7 +87,7 @@ networkAllowMacOnPort(struct qemud_driver *driver,
int int
networkDisallowMacOnPort(struct qemud_driver *driver, networkDisallowMacOnPort(struct qemud_driver *driver,
const char * ifname, const char * ifname,
const unsigned char * mac) { const virMacAddrPtr mac) {
int err; int err;

View File

@ -26,10 +26,10 @@
int networkAllowMacOnPort(struct qemud_driver *driver, int networkAllowMacOnPort(struct qemud_driver *driver,
const char * ifname, const char * ifname,
const unsigned char * mac); const virMacAddrPtr mac);
int networkDisallowMacOnPort(struct qemud_driver *driver, int networkDisallowMacOnPort(struct qemud_driver *driver,
const char * ifname, const char * ifname,
const unsigned char * mac); const virMacAddrPtr mac);
int networkDisableAllFrames(struct qemud_driver *driver); int networkDisableAllFrames(struct qemud_driver *driver);
int networkAddEbtablesRules(struct qemud_driver *driver); int networkAddEbtablesRules(struct qemud_driver *driver);

View File

@ -157,7 +157,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
vnet_hdr = 1; vnet_hdr = 1;
rc = virNetDevMacVLanCreateWithVPortProfile( rc = virNetDevMacVLanCreateWithVPortProfile(
net->ifname, net->mac, net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net), virDomainNetGetActualDirectMode(net),
true, vnet_hdr, def->uuid, true, vnet_hdr, def->uuid,
@ -251,7 +251,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_HDR; 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, def->uuid, &tapfd,
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),
tap_create_flags); tap_create_flags);
@ -263,7 +263,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
} }
if (driver->macFilter) { if (driver->macFilter) {
if ((err = networkAllowMacOnPort(driver, net->ifname, net->mac))) { if ((err = networkAllowMacOnPort(driver, net->ifname, &net->mac))) {
virReportSystemError(err, virReportSystemError(err,
_("failed to add ebtables rule to allow MAC address on '%s'"), _("failed to add ebtables rule to allow MAC address on '%s'"),
net->ifname); net->ifname);
@ -2857,9 +2857,9 @@ qemuBuildNicStr(virDomainNetDefPtr net,
if (virAsprintf(&str, if (virAsprintf(&str,
"%smacaddr=%02x:%02x:%02x:%02x:%02x:%02x,vlan=%d%s%s%s%s", "%smacaddr=%02x:%02x:%02x:%02x:%02x:%02x,vlan=%d%s%s%s%s",
prefix ? prefix : "", prefix ? prefix : "",
net->mac[0], net->mac[1], net->mac.addr[0], net->mac.addr[1],
net->mac[2], net->mac[3], net->mac.addr[2], net->mac.addr[3],
net->mac[4], net->mac[5], net->mac.addr[4], net->mac.addr[5],
vlan, vlan,
(net->model ? ",model=" : ""), (net->model ? ",model=" : ""),
(net->model ? net->model : ""), (net->model ? net->model : ""),
@ -2937,9 +2937,9 @@ qemuBuildNicDevStr(virDomainNetDefPtr net,
virBufferAsprintf(&buf, ",vlan=%d", vlan); virBufferAsprintf(&buf, ",vlan=%d", vlan);
virBufferAsprintf(&buf, ",id=%s", net->info.alias); virBufferAsprintf(&buf, ",id=%s", net->info.alias);
virBufferAsprintf(&buf, ",mac=%02x:%02x:%02x:%02x:%02x:%02x", virBufferAsprintf(&buf, ",mac=%02x:%02x:%02x:%02x:%02x:%02x",
net->mac[0], net->mac[1], net->mac.addr[0], net->mac.addr[1],
net->mac[2], net->mac[3], net->mac.addr[2], net->mac.addr[3],
net->mac[4], net->mac[5]); net->mac.addr[4], net->mac.addr[5]);
if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCaps) < 0) if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCaps) < 0)
goto error; goto error;
if (qemuBuildRomStr(&buf, &net->info, qemuCaps) < 0) if (qemuBuildRomStr(&buf, &net->info, qemuCaps) < 0)
@ -7038,7 +7038,7 @@ qemuParseCommandLineNet(virCapsPtr caps,
for (i = 0 ; i < nkeywords ; i++) { for (i = 0 ; i < nkeywords ; i++) {
if (STREQ(keywords[i], "macaddr")) { if (STREQ(keywords[i], "macaddr")) {
genmac = 0; genmac = 0;
if (virMacAddrParse(values[i], def->mac) < 0) { if (virMacAddrParse(values[i], &def->mac) < 0) {
qemuReportError(VIR_ERR_INTERNAL_ERROR, qemuReportError(VIR_ERR_INTERNAL_ERROR,
_("unable to parse mac address '%s'"), _("unable to parse mac address '%s'"),
values[i]); values[i]);
@ -7068,7 +7068,7 @@ qemuParseCommandLineNet(virCapsPtr caps,
} }
if (genmac) if (genmac)
virCapabilitiesGenerateMac(caps, def->mac); virCapabilitiesGenerateMac(caps, &def->mac);
cleanup: cleanup:
for (i = 0 ; i < nkeywords ; i++) { for (i = 0 ; i < nkeywords ; i++) {

View File

@ -443,7 +443,7 @@ static void qemuDomainNetsRestart(void *payload,
VIR_DEBUG("VEPA mode device %s active in domain %s. Reassociating.", VIR_DEBUG("VEPA mode device %s active in domain %s. Reassociating.",
net->ifname, def->name); net->ifname, def->name);
ignore_value(virNetDevMacVLanRestartWithVPortProfile(net->ifname, ignore_value(virNetDevMacVLanRestartWithVPortProfile(net->ifname,
net->mac, &net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
def->uuid, def->uuid,
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),
@ -5560,9 +5560,10 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef,
case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net; net = dev->data.net;
if (virDomainNetIndexByMac(vmdef, net->mac) >= 0) { if (virDomainNetIndexByMac(vmdef, &net->mac) >= 0) {
char macbuf[VIR_MAC_STRING_BUFLEN]; char macbuf[VIR_MAC_STRING_BUFLEN];
virMacAddrFormat(net->mac, macbuf);
virMacAddrFormat(&net->mac, macbuf);
qemuReportError(VIR_ERR_INVALID_ARG, qemuReportError(VIR_ERR_INVALID_ARG,
_("mac %s already exists"), macbuf); _("mac %s already exists"), macbuf);
return -1; return -1;
@ -5638,10 +5639,10 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_NET:
net = dev->data.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]; char macbuf[VIR_MAC_STRING_BUFLEN];
virMacAddrFormat(net->mac, macbuf); virMacAddrFormat(&net->mac, macbuf);
qemuReportError(VIR_ERR_INVALID_ARG, qemuReportError(VIR_ERR_INVALID_ARG,
_("no nic of mac %s"), macbuf); _("no nic of mac %s"), macbuf);
return -1; return -1;
@ -5729,9 +5730,10 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef,
case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_NET:
net = dev->data.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]; char macbuf[VIR_MAC_STRING_BUFLEN];
virMacAddrFormat(net->mac, macbuf);
virMacAddrFormat(&net->mac, macbuf);
qemuReportError(VIR_ERR_INVALID_ARG, qemuReportError(VIR_ERR_INVALID_ARG,
_("mac %s doesn't exist"), macbuf); _("mac %s doesn't exist"), macbuf);
return -1; return -1;

View File

@ -257,7 +257,7 @@ cleanup:
static int static int
qemuDomainHostdevNetConfigVirtPortProfile(const char *linkdev, int vf, qemuDomainHostdevNetConfigVirtPortProfile(const char *linkdev, int vf,
virNetDevVPortProfilePtr virtPort, virNetDevVPortProfilePtr virtPort,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const unsigned char *uuid, const unsigned char *uuid,
int associate) int associate)
{ {
@ -320,12 +320,12 @@ qemuDomainHostdevNetConfigReplace(virDomainHostdevDefPtr hostdev,
hostdev->parent.data.net); hostdev->parent.data.net);
if (virtPort) if (virtPort)
ret = qemuDomainHostdevNetConfigVirtPortProfile(linkdev, vf, ret = qemuDomainHostdevNetConfigVirtPortProfile(linkdev, vf,
virtPort, hostdev->parent.data.net->mac, uuid, virtPort, &hostdev->parent.data.net->mac, uuid,
port_profile_associate); port_profile_associate);
else else
/* Set only mac */ /* Set only mac */
ret = virNetDevReplaceNetConfig(linkdev, vf, ret = virNetDevReplaceNetConfig(linkdev, vf,
hostdev->parent.data.net->mac, vlanid, &hostdev->parent.data.net->mac, vlanid,
stateDir); stateDir);
VIR_FREE(linkdev); VIR_FREE(linkdev);
@ -358,7 +358,7 @@ qemuDomainHostdevNetConfigRestore(virDomainHostdevDefPtr hostdev,
hostdev->parent.data.net); hostdev->parent.data.net);
if (virtPort) if (virtPort)
ret = qemuDomainHostdevNetConfigVirtPortProfile(linkdev, vf, virtPort, ret = qemuDomainHostdevNetConfigVirtPortProfile(linkdev, vf, virtPort,
hostdev->parent.data.net->mac, NULL, &hostdev->parent.data.net->mac, NULL,
port_profile_associate); port_profile_associate);
else else
ret = virNetDevRestoreNetConfig(linkdev, vf, stateDir); ret = virNetDevRestoreNetConfig(linkdev, vf, stateDir);

View File

@ -1226,7 +1226,7 @@ static virDomainNetDefPtr qemuDomainFindNet(virDomainObjPtr vm,
int i; int i;
for (i = 0; i < vm->def->nnets; 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]; return vm->def->nets[i];
} }
@ -2190,7 +2190,7 @@ qemuDomainDetachNetDevice(struct qemud_driver *driver,
for (i = 0 ; i < vm->def->nnets ; i++) { for (i = 0 ; i < vm->def->nnets ; i++) {
virDomainNetDefPtr net = vm->def->nets[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; detach = net;
break; break;
} }
@ -2199,9 +2199,9 @@ qemuDomainDetachNetDevice(struct qemud_driver *driver,
if (!detach) { if (!detach) {
qemuReportError(VIR_ERR_OPERATION_FAILED, qemuReportError(VIR_ERR_OPERATION_FAILED,
_("network device %02x:%02x:%02x:%02x:%02x:%02x not found"), _("network device %02x:%02x:%02x:%02x:%02x:%02x not found"),
dev->data.net->mac[0], dev->data.net->mac[1], dev->data.net->mac.addr[0], dev->data.net->mac.addr[1],
dev->data.net->mac[2], dev->data.net->mac[3], dev->data.net->mac.addr[2], dev->data.net->mac.addr[3],
dev->data.net->mac[4], dev->data.net->mac[5]); dev->data.net->mac.addr[4], dev->data.net->mac.addr[5]);
goto cleanup; goto cleanup;
} }
@ -2280,7 +2280,7 @@ qemuDomainDetachNetDevice(struct qemud_driver *driver,
if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevMacVLanDeleteWithVPortProfile( ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
detach->ifname, detach->mac, detach->ifname, &detach->mac,
virDomainNetGetActualDirectDev(detach), virDomainNetGetActualDirectDev(detach),
virDomainNetGetActualDirectMode(detach), virDomainNetGetActualDirectMode(detach),
virDomainNetGetActualVirtPortProfile(detach), virDomainNetGetActualVirtPortProfile(detach),
@ -2291,7 +2291,7 @@ qemuDomainDetachNetDevice(struct qemud_driver *driver,
if ((driver->macFilter) && (detach->ifname != NULL)) { if ((driver->macFilter) && (detach->ifname != NULL)) {
if ((errno = networkDisallowMacOnPort(driver, if ((errno = networkDisallowMacOnPort(driver,
detach->ifname, detach->ifname,
detach->mac))) { &detach->mac))) {
virReportSystemError(errno, virReportSystemError(errno,
_("failed to remove ebtables rule on '%s'"), _("failed to remove ebtables rule on '%s'"),
detach->ifname); detach->ifname);

View File

@ -2857,7 +2857,7 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
if (virNetDevVPortProfileAssociate(net->ifname, if (virNetDevVPortProfileAssociate(net->ifname,
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),
net->mac, &net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
-1, -1,
def->uuid, def->uuid,
@ -2870,7 +2870,7 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
} }
VIR_DEBUG("Port profile Associate succeeded for %s", net->ifname); 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, virDomainNetGetActualDirectDev(net), def->uuid,
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),
VIR_NETDEV_VPORT_PROFILE_OP_CREATE)) VIR_NETDEV_VPORT_PROFILE_OP_CREATE))
@ -2887,7 +2887,7 @@ err_exit:
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevVPortProfileDisassociate(net->ifname, ignore_value(virNetDevVPortProfileDisassociate(net->ifname,
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),
net->mac, &net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
-1, -1,
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH)); VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH));

View File

@ -4027,7 +4027,7 @@ void qemuProcessStop(struct qemud_driver *driver,
if (net->ifname == NULL) if (net->ifname == NULL)
continue; continue;
if ((errno = networkDisallowMacOnPort(driver, net->ifname, if ((errno = networkDisallowMacOnPort(driver, net->ifname,
net->mac))) { &net->mac))) {
virReportSystemError(errno, virReportSystemError(errno,
_("failed to remove ebtables rule to allow MAC address on '%s'"), _("failed to remove ebtables rule to allow MAC address on '%s'"),
net->ifname); net->ifname);
@ -4100,7 +4100,7 @@ void qemuProcessStop(struct qemud_driver *driver,
virDomainNetDefPtr net = def->nets[i]; virDomainNetDefPtr net = def->nets[i];
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
ignore_value(virNetDevMacVLanDeleteWithVPortProfile( ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
net->ifname, net->mac, net->ifname, &net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net), virDomainNetGetActualDirectMode(net),
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),

View File

@ -138,7 +138,7 @@ umlConnectTapDevice(virConnectPtr conn,
template_ifname = true; template_ifname = true;
} }
if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, net->mac, if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, &net->mac,
vm->uuid, NULL, vm->uuid, NULL,
virDomainNetGetActualVirtPortProfile(net), virDomainNetGetActualVirtPortProfile(net),
VIR_NETDEV_TAP_CREATE_IFUP) < 0) { VIR_NETDEV_TAP_CREATE_IFUP) < 0) {
@ -271,8 +271,8 @@ umlBuildCommandLineNet(virConnectPtr conn,
} }
virBufferAsprintf(&buf, ",%02x:%02x:%02x:%02x:%02x:%02x", virBufferAsprintf(&buf, ",%02x:%02x:%02x:%02x:%02x:%02x",
def->mac[0], def->mac[1], def->mac[2], def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
def->mac[3], def->mac[4], def->mac[5]); def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
if (def->type == VIR_DOMAIN_NET_TYPE_MCAST) { if (def->type == VIR_DOMAIN_NET_TYPE_MCAST) {
virBufferAsprintf(&buf, ",%s,%d", virBufferAsprintf(&buf, ",%s,%d",

View File

@ -392,15 +392,15 @@ ebtablesForwardAllowIn(ebtablesContext *ctx,
int int
ebtablesAddForwardAllowIn(ebtablesContext *ctx, ebtablesAddForwardAllowIn(ebtablesContext *ctx,
const char *iface, const char *iface,
const unsigned char *mac) const virMacAddrPtr mac)
{ {
char *macaddr; char *macaddr;
if (virAsprintf(&macaddr, if (virAsprintf(&macaddr,
"%02x:%02x:%02x:%02x:%02x:%02x", "%02x:%02x:%02x:%02x:%02x:%02x",
mac[0], mac[1], mac->addr[0], mac->addr[1],
mac[2], mac[3], mac->addr[2], mac->addr[3],
mac[4], mac[5]) < 0) { mac->addr[4], mac->addr[5]) < 0) {
return -1; return -1;
} }
return ebtablesForwardAllowIn(ctx, iface, macaddr, ADD); return ebtablesForwardAllowIn(ctx, iface, macaddr, ADD);
@ -421,15 +421,15 @@ ebtablesAddForwardAllowIn(ebtablesContext *ctx,
int int
ebtablesRemoveForwardAllowIn(ebtablesContext *ctx, ebtablesRemoveForwardAllowIn(ebtablesContext *ctx,
const char *iface, const char *iface,
const unsigned char *mac) const virMacAddrPtr mac)
{ {
char *macaddr; char *macaddr;
if (virAsprintf(&macaddr, if (virAsprintf(&macaddr,
"%02x:%02x:%02x:%02x:%02x:%02x", "%02x:%02x:%02x:%02x:%02x:%02x",
mac[0], mac[1], mac->addr[0], mac->addr[1],
mac[2], mac[3], mac->addr[2], mac->addr[3],
mac[4], mac[5]) < 0) { mac->addr[4], mac->addr[5]) < 0) {
return -1; return -1;
} }
return ebtablesForwardAllowIn(ctx, iface, macaddr, REMOVE); return ebtablesForwardAllowIn(ctx, iface, macaddr, REMOVE);

View File

@ -24,6 +24,8 @@
#ifndef __QEMUD_EBTABLES_H__ #ifndef __QEMUD_EBTABLES_H__
# define __QEMUD_EBTABLES_H__ # define __QEMUD_EBTABLES_H__
# include "virmacaddr.h"
typedef struct typedef struct
{ {
char *rule; char *rule;
@ -50,10 +52,10 @@ void ebtablesSaveRules (ebtablesContext *ctx);
int ebtablesAddForwardAllowIn (ebtablesContext *ctx, int ebtablesAddForwardAllowIn (ebtablesContext *ctx,
const char *iface, const char *iface,
const unsigned char *mac); const virMacAddrPtr mac);
int ebtablesRemoveForwardAllowIn (ebtablesContext *ctx, int ebtablesRemoveForwardAllowIn (ebtablesContext *ctx,
const char *iface, const char *iface,
const unsigned char *mac); const virMacAddrPtr mac);
int ebtablesAddForwardPolicyReject(ebtablesContext *ctx); int ebtablesAddForwardPolicyReject(ebtablesContext *ctx);

View File

@ -61,6 +61,76 @@ virMacAddrCompare(const char *p, const char *q)
return c > d ? 1 : c < d ? -1 : 0; 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: * virMacAddrParse:
* @str: string representation of MAC address, e.g., "0:1E:FC:E:3a:CB" * @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. * Return 0 upon success, or -1 in case of error.
*/ */
int int
virMacAddrParse(const char* str, unsigned char *addr) virMacAddrParse(const char* str, virMacAddrPtr addr)
{ {
int i; int i;
@ -93,7 +163,7 @@ virMacAddrParse(const char* str, unsigned char *addr)
(0xFF < result)) (0xFF < result))
break; break;
addr[i] = (unsigned char) result; addr->addr[i] = (unsigned char) result;
if ((i == 5) && (*end_ptr == '\0')) if ((i == 5) && (*end_ptr == '\0'))
return 0; return 0;
@ -106,36 +176,36 @@ virMacAddrParse(const char* str, unsigned char *addr)
return -1; return -1;
} }
void virMacAddrFormat(const unsigned char *addr, void virMacAddrFormat(const virMacAddrPtr addr,
char *str) char *str)
{ {
snprintf(str, VIR_MAC_STRING_BUFLEN, snprintf(str, VIR_MAC_STRING_BUFLEN,
"%02X:%02X:%02X:%02X:%02X:%02X", "%02X:%02X:%02X:%02X:%02X:%02X",
addr[0], addr[1], addr[2], addr->addr[0], addr->addr[1], addr->addr[2],
addr[3], addr[4], addr[5]); addr->addr[3], addr->addr[4], addr->addr[5]);
str[VIR_MAC_STRING_BUFLEN-1] = '\0'; str[VIR_MAC_STRING_BUFLEN-1] = '\0';
} }
void virMacAddrGenerate(const unsigned char *prefix, void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
unsigned char *addr) virMacAddrPtr addr)
{ {
addr[0] = prefix[0]; addr->addr[0] = prefix[0];
addr[1] = prefix[1]; addr->addr[1] = prefix[1];
addr[2] = prefix[2]; addr->addr[2] = prefix[2];
addr[3] = virRandomBits(8); addr->addr[3] = virRandomBits(8);
addr[4] = virRandomBits(8); addr->addr[4] = virRandomBits(8);
addr[5] = virRandomBits(8); addr->addr[5] = virRandomBits(8);
} }
/* The low order bit of the first byte is the "multicast" bit. */ /* The low order bit of the first byte is the "multicast" bit. */
bool bool
virMacAddrIsMulticast(const unsigned char *addr) virMacAddrIsMulticast(const virMacAddrPtr mac)
{ {
return !!(addr[0] & 1); return !!(mac->addr[0] & 1);
} }
bool bool
virMacAddrIsUnicast(const unsigned char *addr) virMacAddrIsUnicast(const virMacAddrPtr mac)
{ {
return !(addr[0] & 1); return !(mac->addr[0] & 1);
} }

View File

@ -30,15 +30,26 @@
# define VIR_MAC_PREFIX_BUFLEN 3 # define VIR_MAC_PREFIX_BUFLEN 3
# define VIR_MAC_STRING_BUFLEN (VIR_MAC_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); 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); char *str);
void virMacAddrGenerate(const unsigned char *prefix, void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
unsigned char *addr); virMacAddrPtr addr);
int virMacAddrParse(const char* str, int virMacAddrParse(const char* str,
unsigned char *addr) ATTRIBUTE_RETURN_CHECK; virMacAddrPtr addr) ATTRIBUTE_RETURN_CHECK;
bool virMacAddrIsUnicast(const unsigned char *addr); bool virMacAddrIsUnicast(const virMacAddrPtr addr);
bool virMacAddrIsMulticast(const unsigned char *addr); bool virMacAddrIsMulticast(const virMacAddrPtr addr);
#endif /* __VIR_MACADDR_H__ */ #endif /* __VIR_MACADDR_H__ */

View File

@ -137,7 +137,7 @@ int virNetDevExists(const char *ifname)
/** /**
* virNetDevSetMAC: * virNetDevSetMAC:
* @ifname: interface name to set MTU for * @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 * This function sets the @macaddr for a given interface @ifname. This
* gets rid of the kernel's automatically assigned random MAC. * 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 * Returns 0 in case of success or -1 on failure
*/ */
int virNetDevSetMAC(const char *ifname, int virNetDevSetMAC(const char *ifname,
const unsigned char *macaddr) const virMacAddrPtr macaddr)
{ {
int fd = -1; int fd = -1;
int ret = -1; int ret = -1;
@ -162,7 +162,7 @@ int virNetDevSetMAC(const char *ifname,
goto cleanup; 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) { if (ioctl(fd, SIOCSIFHWADDR, &ifr) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
@ -179,7 +179,7 @@ cleanup:
} }
#else #else
int virNetDevSetMAC(const char *ifname, int virNetDevSetMAC(const char *ifname,
const unsigned char *macaddr ATTRIBUTE_UNUSED) const virMacAddrPtr macaddr ATTRIBUTE_UNUSED)
{ {
virReportSystemError(ENOSYS, virReportSystemError(ENOSYS,
_("Cannot set interface MAC on '%s'"), _("Cannot set interface MAC on '%s'"),
@ -193,14 +193,14 @@ int virNetDevSetMAC(const char *ifname,
/** /**
* virNetDevGetMAC: * virNetDevGetMAC:
* @ifname: interface name to set MTU for * @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. * This function gets the @macaddr for a given interface @ifname.
* *
* Returns 0 in case of success or -1 on failure * Returns 0 in case of success or -1 on failure
*/ */
int virNetDevGetMAC(const char *ifname, int virNetDevGetMAC(const char *ifname,
unsigned char *macaddr) virMacAddrPtr macaddr)
{ {
int fd = -1; int fd = -1;
int ret = -1; int ret = -1;
@ -216,7 +216,7 @@ int virNetDevGetMAC(const char *ifname,
goto cleanup; goto cleanup;
} }
memcpy(macaddr, ifr.ifr_hwaddr.sa_data, VIR_MAC_BUFLEN); virMacAddrSetRaw(macaddr, (unsigned char *)ifr.ifr_hwaddr.sa_data);
ret = 0; ret = 0;
@ -226,7 +226,7 @@ cleanup:
} }
#else #else
int virNetDevGetMAC(const char *ifname, int virNetDevGetMAC(const char *ifname,
unsigned char *macaddr ATTRIBUTE_UNUSED) virMacAddrPtr macaddr ATTRIBUTE_UNUSED)
{ {
virReportSystemError(ENOSYS, virReportSystemError(ENOSYS,
_("Cannot get interface MAC on '%s'"), _("Cannot get interface MAC on '%s'"),
@ -248,14 +248,14 @@ int virNetDevGetMAC(const char *ifname,
*/ */
int int
virNetDevReplaceMacAddress(const char *linkdev, virNetDevReplaceMacAddress(const char *linkdev,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *stateDir) const char *stateDir)
{ {
unsigned char oldmac[6]; virMacAddr oldmac;
char *path = NULL; char *path = NULL;
char macstr[VIR_MAC_STRING_BUFLEN]; char macstr[VIR_MAC_STRING_BUFLEN];
if (virNetDevGetMAC(linkdev, oldmac) < 0) if (virNetDevGetMAC(linkdev, &oldmac) < 0)
return -1; return -1;
@ -265,7 +265,7 @@ virNetDevReplaceMacAddress(const char *linkdev,
virReportOOMError(); virReportOOMError();
return -1; return -1;
} }
virMacAddrFormat(oldmac, macstr); virMacAddrFormat(&oldmac, macstr);
if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) { if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) {
virReportSystemError(errno, _("Unable to preserve mac for %s"), virReportSystemError(errno, _("Unable to preserve mac for %s"),
linkdev); linkdev);
@ -294,7 +294,7 @@ virNetDevRestoreMacAddress(const char *linkdev,
char *oldmacname = NULL; char *oldmacname = NULL;
char *macstr = NULL; char *macstr = NULL;
char *path = NULL; char *path = NULL;
unsigned char oldmac[6]; virMacAddr oldmac;
if (virAsprintf(&path, "%s/%s", if (virAsprintf(&path, "%s/%s",
stateDir, stateDir,
@ -306,7 +306,7 @@ virNetDevRestoreMacAddress(const char *linkdev,
if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0) if (virFileReadAll(path, VIR_MAC_STRING_BUFLEN, &macstr) < 0)
return -1; return -1;
if (virMacAddrParse(macstr, &oldmac[0]) != 0) { if (virMacAddrParse(macstr, &oldmac) != 0) {
virNetDevError(VIR_ERR_INTERNAL_ERROR, virNetDevError(VIR_ERR_INTERNAL_ERROR,
_("Cannot parse MAC address from '%s'"), _("Cannot parse MAC address from '%s'"),
oldmacname); oldmacname);
@ -315,7 +315,7 @@ virNetDevRestoreMacAddress(const char *linkdev,
} }
/*reset mac and remove file-ignore results*/ /*reset mac and remove file-ignore results*/
rc = virNetDevSetMAC(linkdev, oldmac); rc = virNetDevSetMAC(linkdev, &oldmac);
ignore_value(unlink(path)); ignore_value(unlink(path));
VIR_FREE(macstr); VIR_FREE(macstr);
@ -876,7 +876,7 @@ int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
*/ */
#if defined(HAVE_STRUCT_IFREQ) #if defined(HAVE_STRUCT_IFREQ)
int virNetDevValidateConfig(const char *ifname, int virNetDevValidateConfig(const char *ifname,
const unsigned char *macaddr, int ifindex) const virMacAddrPtr macaddr, int ifindex)
{ {
int fd = -1; int fd = -1;
int ret = -1; int ret = -1;
@ -906,7 +906,8 @@ int virNetDevValidateConfig(const char *ifname,
goto cleanup; 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; ret = 0;
goto cleanup; goto cleanup;
} }
@ -1333,7 +1334,7 @@ buffer_too_small:
static int static int
virNetDevSetVfConfig(const char *ifname, int ifindex, int vf, 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 vlanid, uint32_t (*getPidFunc)(void))
{ {
int rc = -1; int rc = -1;
@ -1378,7 +1379,7 @@ virNetDevSetVfConfig(const char *ifname, int ifindex, int vf,
.mac = { 0, }, .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), if (nla_put(nl_msg, IFLA_VF_MAC, sizeof(ifla_vf_mac),
&ifla_vf_mac) < 0) &ifla_vf_mac) < 0)
@ -1456,7 +1457,7 @@ buffer_too_small:
} }
static int static int
virNetDevParseVfConfig(struct nlattr **tb, int32_t vf, unsigned char *mac, virNetDevParseVfConfig(struct nlattr **tb, int32_t vf, virMacAddrPtr mac,
int *vlanid) int *vlanid)
{ {
const char *msg = NULL; const char *msg = NULL;
@ -1483,7 +1484,7 @@ virNetDevParseVfConfig(struct nlattr **tb, int32_t vf, unsigned char *mac,
if (tb[IFLA_VF_MAC]) { if (tb[IFLA_VF_MAC]) {
vf_mac = RTA_DATA(tb_vf[IFLA_VF_MAC]); vf_mac = RTA_DATA(tb_vf[IFLA_VF_MAC]);
if (vf_mac && vf_mac->vf == vf) { if (vf_mac && vf_mac->vf == vf) {
memcpy(mac, vf_mac->mac, VIR_MAC_BUFLEN); virMacAddrSetRaw(mac, vf_mac->mac);
found = 1; found = 1;
} }
} }
@ -1510,7 +1511,7 @@ cleanup:
} }
static int static int
virNetDevGetVfConfig(const char *ifname, int vf, unsigned char *mac, virNetDevGetVfConfig(const char *ifname, int vf, virMacAddrPtr mac,
int *vlanid) int *vlanid)
{ {
int rc = -1; int rc = -1;
@ -1531,17 +1532,17 @@ virNetDevGetVfConfig(const char *ifname, int vf, unsigned char *mac,
static int static int
virNetDevReplaceVfConfig(const char *pflinkdev, int vf, virNetDevReplaceVfConfig(const char *pflinkdev, int vf,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
int vlanid, int vlanid,
const char *stateDir) const char *stateDir)
{ {
unsigned char oldmac[6]; virMacAddr oldmac;
int oldvlanid = -1; int oldvlanid = -1;
char *path = NULL; char *path = NULL;
char macstr[VIR_MAC_STRING_BUFLEN]; char macstr[VIR_MAC_STRING_BUFLEN];
int ifindex = -1; int ifindex = -1;
if (virNetDevGetVfConfig(pflinkdev, vf, oldmac, &oldvlanid) < 0) if (virNetDevGetVfConfig(pflinkdev, vf, &oldmac, &oldvlanid) < 0)
return -1; return -1;
if (virAsprintf(&path, "%s/%s_vf%d", if (virAsprintf(&path, "%s/%s_vf%d",
@ -1550,7 +1551,7 @@ virNetDevReplaceVfConfig(const char *pflinkdev, int vf,
return -1; return -1;
} }
virMacAddrFormat(oldmac, macstr); virMacAddrFormat(&oldmac, macstr);
if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) { if (virFileWriteStr(path, macstr, O_CREAT|O_TRUNC|O_WRONLY) < 0) {
virReportSystemError(errno, _("Unable to preserve mac for pf = %s," virReportSystemError(errno, _("Unable to preserve mac for pf = %s,"
" vf = %d"), pflinkdev, vf); " vf = %d"), pflinkdev, vf);
@ -1571,7 +1572,7 @@ virNetDevRestoreVfConfig(const char *pflinkdev, int vf,
int rc = -1; int rc = -1;
char *macstr = NULL; char *macstr = NULL;
char *path = NULL; char *path = NULL;
unsigned char oldmac[6]; virMacAddr oldmac;
int vlanid = -1; int vlanid = -1;
int ifindex = -1; int ifindex = -1;
@ -1585,7 +1586,7 @@ virNetDevRestoreVfConfig(const char *pflinkdev, int vf,
goto cleanup; goto cleanup;
} }
if (virMacAddrParse(macstr, &oldmac[0]) != 0) { if (virMacAddrParse(macstr, &oldmac) != 0) {
virNetDevError(VIR_ERR_INTERNAL_ERROR, virNetDevError(VIR_ERR_INTERNAL_ERROR,
_("Cannot parse MAC address from '%s'"), _("Cannot parse MAC address from '%s'"),
macstr); macstr);
@ -1594,7 +1595,7 @@ virNetDevRestoreVfConfig(const char *pflinkdev, int vf,
/*reset mac and remove file-ignore results*/ /*reset mac and remove file-ignore results*/
rc = virNetDevSetVfConfig(pflinkdev, ifindex, vf, true, rc = virNetDevSetVfConfig(pflinkdev, ifindex, vf, true,
oldmac, vlanid, NULL); &oldmac, vlanid, NULL);
ignore_value(unlink(path)); ignore_value(unlink(path));
cleanup: cleanup:
@ -1617,7 +1618,7 @@ cleanup:
*/ */
int int
virNetDevReplaceNetConfig(char *linkdev, int vf, virNetDevReplaceNetConfig(char *linkdev, int vf,
const unsigned char *macaddress, int vlanid, const virMacAddrPtr macaddress, int vlanid,
char *stateDir) char *stateDir)
{ {
if (vf == -1) if (vf == -1)

View File

@ -25,6 +25,7 @@
# include "virsocketaddr.h" # include "virsocketaddr.h"
# include "virnetlink.h" # include "virnetlink.h"
# include "virmacaddr.h"
int virNetDevExists(const char *brname) int virNetDevExists(const char *brname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
@ -49,14 +50,14 @@ int virNetDevGetIPv4Address(const char *ifname, virSocketAddrPtr addr)
int virNetDevSetMAC(const char *ifname, int virNetDevSetMAC(const char *ifname,
const unsigned char *macaddr) const virMacAddrPtr macaddr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevGetMAC(const char *ifname, int virNetDevGetMAC(const char *ifname,
unsigned char *macaddr) virMacAddrPtr macaddr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevReplaceMacAddress(const char *linkdev, int virNetDevReplaceMacAddress(const char *linkdev,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *stateDir) const char *stateDir)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_RETURN_CHECK;
@ -86,7 +87,7 @@ int virNetDevGetVLanID(const char *ifname, int *vlanid)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevValidateConfig(const char *ifname, int virNetDevValidateConfig(const char *ifname,
const unsigned char *macaddr, int ifindex) const virMacAddrPtr macaddr, int ifindex)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevIsVirtualFunction(const char *ifname) int virNetDevIsVirtualFunction(const char *ifname)
@ -113,7 +114,7 @@ int virNetDevLinkDump(const char *ifname, int ifindex,
ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_RETURN_CHECK;
int virNetDevReplaceNetConfig(char *linkdev, int vf, int virNetDevReplaceNetConfig(char *linkdev, int vf,
const unsigned char *macaddress, int vlanid, const virMacAddrPtr macaddress, int vlanid,
char *stateDir) char *stateDir)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(5); ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(5);

View File

@ -95,7 +95,7 @@ VIR_ENUM_IMPL(virNetDevMacVLanMode, VIR_NETDEV_MACVLAN_MODE_LAST,
int int
virNetDevMacVLanCreate(const char *ifname, virNetDevMacVLanCreate(const char *ifname,
const char *type, const char *type,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *srcdev, const char *srcdev,
uint32_t macvlan_mode, uint32_t macvlan_mode,
int *retry) int *retry)
@ -435,7 +435,7 @@ static const uint32_t modeMap[VIR_NETDEV_MACVLAN_MODE_LAST] = {
struct virNetlinkCallbackData { struct virNetlinkCallbackData {
char *cr_ifname; char *cr_ifname;
virNetDevVPortProfilePtr virtPortProfile; virNetDevVPortProfilePtr virtPortProfile;
unsigned char macaddress[VIR_MAC_BUFLEN]; virMacAddr macaddress;
char *linkdev; char *linkdev;
int vf; int vf;
unsigned char vmuuid[VIR_UUID_BUFLEN]; 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", VIR_DEBUG("IFLA_VF_MAC = %2x:%2x:%2x:%2x:%2x:%2x",
m[0], m[1], m[2], m[3], m[4], m[5]); 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 */ /* Repeat the same check for a broadcast mac */
int i; int i;
for (i = 0;i < VIR_MAC_BUFLEN; i++) { for (i = 0; i < VIR_MAC_BUFLEN; i++) {
if (calld->macaddress[i] != 0xff) { if (calld->macaddress.addr[i] != 0xff) {
VIR_DEBUG("MAC address match failed (wasn't broadcast)"); VIR_DEBUG("MAC address match failed (wasn't broadcast)");
return; return;
} }
@ -697,13 +697,13 @@ virNetDevMacVLanVPortProfileCallback(unsigned char *msg,
VIR_INFO(" if: %s", calld->cr_ifname); VIR_INFO(" if: %s", calld->cr_ifname);
VIR_INFO(" lf: %s", calld->linkdev); VIR_INFO(" lf: %s", calld->linkdev);
VIR_INFO(" mac: %02x:%02x:%02x:%02x:%02x:%02x", VIR_INFO(" mac: %02x:%02x:%02x:%02x:%02x:%02x",
calld->macaddress[0], calld->macaddress[1], calld->macaddress.addr[0], calld->macaddress.addr[1],
calld->macaddress[2], calld->macaddress[3], calld->macaddress.addr[2], calld->macaddress.addr[3],
calld->macaddress[4], calld->macaddress[5]); calld->macaddress.addr[4], calld->macaddress.addr[5]);
ignore_value(virNetDevVPortProfileAssociate(calld->cr_ifname, ignore_value(virNetDevVPortProfileAssociate(calld->cr_ifname,
calld->virtPortProfile, calld->virtPortProfile,
calld->macaddress, &calld->macaddress,
calld->linkdev, calld->linkdev,
calld->vf, calld->vf,
calld->vmuuid, calld->vmuuid,
@ -746,7 +746,7 @@ virNetlinkCallbackDataFree(virNetlinkCallbackDataPtr calld)
*/ */
static void static void
virNetDevMacVLanVPortProfileDestroyCallback(int watch ATTRIBUTE_UNUSED, virNetDevMacVLanVPortProfileDestroyCallback(int watch ATTRIBUTE_UNUSED,
const unsigned char *macaddr ATTRIBUTE_UNUSED, const virMacAddrPtr macaddr ATTRIBUTE_UNUSED,
void *opaque) void *opaque)
{ {
virNetlinkCallbackDataFree((virNetlinkCallbackDataPtr)opaque); virNetlinkCallbackDataFree((virNetlinkCallbackDataPtr)opaque);
@ -754,7 +754,7 @@ virNetDevMacVLanVPortProfileDestroyCallback(int watch ATTRIBUTE_UNUSED,
int int
virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname, virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
@ -770,7 +770,7 @@ virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
if (VIR_ALLOC(calld->virtPortProfile) < 0) if (VIR_ALLOC(calld->virtPortProfile) < 0)
goto memory_error; goto memory_error;
memcpy(calld->virtPortProfile, virtPortProfile, sizeof(*virtPortProfile)); memcpy(calld->virtPortProfile, virtPortProfile, sizeof(*virtPortProfile));
memcpy(calld->macaddress, macaddress, sizeof(calld->macaddress)); virMacAddrSet(&calld->macaddress, macaddress);
if ((calld->linkdev = strdup(linkdev)) == NULL) if ((calld->linkdev = strdup(linkdev)) == NULL)
goto memory_error; goto memory_error;
memcpy(calld->vmuuid, vmuuid, sizeof(calld->vmuuid)); memcpy(calld->vmuuid, vmuuid, sizeof(calld->vmuuid));
@ -813,7 +813,7 @@ error:
* otherwise returns 0; returns -1 on error. * otherwise returns 0; returns -1 on error.
*/ */
int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname, int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
enum virNetDevMacVLanMode mode, enum virNetDevMacVLanMode mode,
bool withTap, bool withTap,
@ -980,7 +980,7 @@ link_del_exit:
* were provided. * were provided.
*/ */
int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname, int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *linkdev, const char *linkdev,
int mode, int mode,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
@ -1025,7 +1025,7 @@ int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
* Returns 0; returns -1 on error. * Returns 0; returns -1 on error.
*/ */
int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname, int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
@ -1055,7 +1055,7 @@ error:
#else /* ! WITH_MACVTAP */ #else /* ! WITH_MACVTAP */
int virNetDevMacVLanCreate(const char *ifname ATTRIBUTE_UNUSED, int virNetDevMacVLanCreate(const char *ifname ATTRIBUTE_UNUSED,
const char *type ATTRIBUTE_UNUSED, const char *type ATTRIBUTE_UNUSED,
const unsigned char *macaddress ATTRIBUTE_UNUSED, const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *srcdev ATTRIBUTE_UNUSED, const char *srcdev ATTRIBUTE_UNUSED,
uint32_t macvlan_mode ATTRIBUTE_UNUSED, uint32_t macvlan_mode ATTRIBUTE_UNUSED,
int *retry ATTRIBUTE_UNUSED) int *retry ATTRIBUTE_UNUSED)
@ -1073,7 +1073,7 @@ int virNetDevMacVLanDelete(const char *ifname ATTRIBUTE_UNUSED)
} }
int virNetDevMacVLanCreateWithVPortProfile(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, const char *linkdev ATTRIBUTE_UNUSED,
enum virNetDevMacVLanMode mode ATTRIBUTE_UNUSED, enum virNetDevMacVLanMode mode ATTRIBUTE_UNUSED,
bool withTap ATTRIBUTE_UNUSED, bool withTap ATTRIBUTE_UNUSED,
@ -1091,7 +1091,7 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *ifname ATTRIBUTE_UNUSED,
} }
int virNetDevMacVLanDeleteWithVPortProfile(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, const char *linkdev ATTRIBUTE_UNUSED,
int mode ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED,
virNetDevVPortProfilePtr virtPortProfile 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, 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 char *linkdev ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED, const unsigned char *vmuuid ATTRIBUTE_UNUSED,
virNetDevVPortProfilePtr virtPortProfile 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, int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname ATTRIBUTE_UNUSED,
const unsigned char *macaddress ATTRIBUTE_UNUSED, const virMacAddrPtr macaddress ATTRIBUTE_UNUSED,
const char *linkdev ATTRIBUTE_UNUSED, const char *linkdev ATTRIBUTE_UNUSED,
const unsigned char *vmuuid ATTRIBUTE_UNUSED, const unsigned char *vmuuid ATTRIBUTE_UNUSED,
virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED, virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED,

View File

@ -24,6 +24,7 @@
# define __UTIL_MACVTAP_H__ # define __UTIL_MACVTAP_H__
# include "internal.h" # include "internal.h"
# include "virmacaddr.h"
# include "virsocketaddr.h" # include "virsocketaddr.h"
# include "virnetdevbandwidth.h" # include "virnetdevbandwidth.h"
# include "virnetdevvportprofile.h" # include "virnetdevvportprofile.h"
@ -41,7 +42,7 @@ VIR_ENUM_DECL(virNetDevMacVLanMode)
int virNetDevMacVLanCreate(const char *ifname, int virNetDevMacVLanCreate(const char *ifname,
const char *type, const char *type,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *srcdev, const char *srcdev,
uint32_t macvlan_mode, uint32_t macvlan_mode,
int *retry) int *retry)
@ -52,7 +53,7 @@ int virNetDevMacVLanDelete(const char *ifname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanCreateWithVPortProfile(const char *ifname, int virNetDevMacVLanCreateWithVPortProfile(const char *ifname,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
enum virNetDevMacVLanMode mode, enum virNetDevMacVLanMode mode,
bool withTap, bool withTap,
@ -67,7 +68,7 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *ifname,
ATTRIBUTE_NONNULL(9) ATTRIBUTE_NONNULL(11) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(9) ATTRIBUTE_NONNULL(11) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname, int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
int mode, int mode,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
@ -76,7 +77,7 @@ int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
ATTRIBUTE_NONNULL(6) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(6) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname, int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
const unsigned char *macaddress, const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
@ -85,7 +86,7 @@ int virNetDevMacVLanRestartWithVPortProfile(const char *cr_ifname,
ATTRIBUTE_NONNULL(4) ATTRIBUTE_RETURN_CHECK; ATTRIBUTE_NONNULL(4) ATTRIBUTE_RETURN_CHECK;
int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname, int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname,
const unsigned char *macaddress , const virMacAddrPtr macaddress,
const char *linkdev, const char *linkdev,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,

View File

@ -44,7 +44,7 @@
* Returns 0 in case of success or -1 in case of failure. * Returns 0 in case of success or -1 in case of failure.
*/ */
int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname, int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr ovsport) virNetDevVPortProfilePtr ovsport)
{ {

View File

@ -31,7 +31,7 @@
int virNetDevOpenvswitchAddPort(const char *brname, int virNetDevOpenvswitchAddPort(const char *brname,
const char *ifname, const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr ovsport) virNetDevVPortProfilePtr ovsport)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)

View File

@ -256,7 +256,7 @@ int virNetDevTapDelete(const char *ifname ATTRIBUTE_UNUSED)
* virNetDevTapCreateInBridgePort: * virNetDevTapCreateInBridgePort:
* @brname: the bridge name * @brname: the bridge name
* @ifname: the interface name (or name template) * @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 * @tapfd: file descriptor return value for the new tap device
* @virtPortProfile: bridge/port specific configuration * @virtPortProfile: bridge/port specific configuration
* @flags: OR of virNetDevTapCreateFlags: * @flags: OR of virNetDevTapCreateFlags:
@ -280,13 +280,13 @@ int virNetDevTapDelete(const char *ifname ATTRIBUTE_UNUSED)
*/ */
int virNetDevTapCreateInBridgePort(const char *brname, int virNetDevTapCreateInBridgePort(const char *brname,
char **ifname, char **ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
int *tapfd, int *tapfd,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
unsigned int flags) unsigned int flags)
{ {
unsigned char tapmac[VIR_MAC_BUFLEN]; virMacAddr tapmac;
if (virNetDevTapCreate(ifname, tapfd, flags) < 0) if (virNetDevTapCreate(ifname, tapfd, flags) < 0)
return -1; return -1;
@ -297,9 +297,9 @@ int virNetDevTapCreateInBridgePort(const char *brname,
* seeing the kernel allocate random MAC for the TAP * seeing the kernel allocate random MAC for the TAP
* device before we set our static MAC. * 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 (!(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 /* For normal use, the tap device's MAC address cannot
* match the MAC address used by the guest. This results * match the MAC address used by the guest. This results
* in "received packet on vnetX with own address as source * in "received packet on vnetX with own address as source
@ -308,14 +308,15 @@ int virNetDevTapCreateInBridgePort(const char *brname,
virNetDevTapError(VIR_ERR_CONFIG_UNSUPPORTED, virNetDevTapError(VIR_ERR_CONFIG_UNSUPPORTED,
"Unable to use MAC address starting with " "Unable to use MAC address starting with "
"reserved value 0xFE - '%02X:%02X:%02X:%02X:%02X:%02X' - ", "reserved value 0xFE - '%02X:%02X:%02X:%02X:%02X:%02X' - ",
macaddr[0], macaddr[1], macaddr[2], macaddr->addr[0], macaddr->addr[1],
macaddr[3], macaddr[4], macaddr[5]); macaddr->addr[2], macaddr->addr[3],
macaddr->addr[4], macaddr->addr[5]);
goto error; 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; goto error;
/* We need to set the interface MTU before adding it /* We need to set the interface MTU before adding it

View File

@ -46,7 +46,7 @@ typedef enum {
int virNetDevTapCreateInBridgePort(const char *brname, int virNetDevTapCreateInBridgePort(const char *brname,
char **ifname, char **ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
int *tapfd, int *tapfd,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,

View File

@ -264,7 +264,7 @@ cleanup:
static int static int
virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex, virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex,
bool nltarget_kernel, bool nltarget_kernel,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
int vlanid, int vlanid,
const char *profileId, const char *profileId,
struct ifla_port_vsi *portVsi, struct ifla_port_vsi *portVsi,
@ -315,7 +315,7 @@ virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex,
.mac = { 0, }, .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), if (nla_put(nl_msg, IFLA_VF_MAC, sizeof(ifla_vf_mac),
&ifla_vf_mac) < 0) &ifla_vf_mac) < 0)
@ -515,7 +515,7 @@ virNetDevVPortProfileGetNthParent(const char *ifname, int ifindex, unsigned int
static int static int
virNetDevVPortProfileOpCommon(const char *ifname, int ifindex, virNetDevVPortProfileOpCommon(const char *ifname, int ifindex,
bool nltarget_kernel, bool nltarget_kernel,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
int vlanid, int vlanid,
const char *profileId, const char *profileId,
struct ifla_port_vsi *portVsi, 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 */ /* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int static int
virNetDevVPortProfileOp8021Qbg(const char *ifname, virNetDevVPortProfileOp8021Qbg(const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
int vf, int vf,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
enum virNetDevVPortProfileLinkOp virtPortOp, enum virNetDevVPortProfileLinkOp virtPortOp,
@ -701,7 +701,7 @@ cleanup:
/* Returns 0 on success, -1 on general failure, and -2 on timeout */ /* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int static int
virNetDevVPortProfileOp8021Qbh(const char *ifname, virNetDevVPortProfileOp8021Qbh(const char *ifname,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
int32_t vf, int32_t vf,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
const unsigned char *vm_uuid, const unsigned char *vm_uuid,
@ -825,7 +825,7 @@ cleanup:
int int
virNetDevVPortProfileAssociate(const char *macvtap_ifname, virNetDevVPortProfileAssociate(const char *macvtap_ifname,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
const unsigned char *macvtap_macaddr, const virMacAddrPtr macvtap_macaddr,
const char *linkdev, const char *linkdev,
int vf, int vf,
const unsigned char *vmuuid, const unsigned char *vmuuid,
@ -889,7 +889,7 @@ virNetDevVPortProfileAssociate(const char *macvtap_ifname,
int int
virNetDevVPortProfileDisassociate(const char *macvtap_ifname, virNetDevVPortProfileDisassociate(const char *macvtap_ifname,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
const unsigned char *macvtap_macaddr, const virMacAddrPtr macvtap_macaddr,
const char *linkdev, const char *linkdev,
int vf, int vf,
enum virNetDevVPortProfileOp vmOp) enum virNetDevVPortProfileOp vmOp)
@ -933,7 +933,7 @@ virNetDevVPortProfileDisassociate(const char *macvtap_ifname,
#else /* ! WITH_VIRTUALPORT */ #else /* ! WITH_VIRTUALPORT */
int virNetDevVPortProfileAssociate(const char *macvtap_ifname ATTRIBUTE_UNUSED, int virNetDevVPortProfileAssociate(const char *macvtap_ifname ATTRIBUTE_UNUSED,
const virNetDevVPortProfilePtr virtPort 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, const char *linkdev ATTRIBUTE_UNUSED,
int vf ATTRIBUTE_UNUSED, int vf ATTRIBUTE_UNUSED,
const unsigned char *vmuuid 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, int virNetDevVPortProfileDisassociate(const char *macvtap_ifname ATTRIBUTE_UNUSED,
const virNetDevVPortProfilePtr virtPort 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, const char *linkdev ATTRIBUTE_UNUSED,
int vf ATTRIBUTE_UNUSED, int vf ATTRIBUTE_UNUSED,
enum virNetDevVPortProfileOp vmOp ATTRIBUTE_UNUSED) enum virNetDevVPortProfileOp vmOp ATTRIBUTE_UNUSED)

View File

@ -28,6 +28,7 @@
# include "internal.h" # include "internal.h"
# include "uuid.h" # include "uuid.h"
# include "util.h" # include "util.h"
# include "virmacaddr.h"
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40 # define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40
@ -83,7 +84,7 @@ bool virNetDevVPortProfileEqual(virNetDevVPortProfilePtr a,
int virNetDevVPortProfileAssociate(const char *ifname, int virNetDevVPortProfileAssociate(const char *ifname,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *linkdev, const char *linkdev,
int vf, int vf,
const unsigned char *vmuuid, const unsigned char *vmuuid,
@ -94,7 +95,7 @@ int virNetDevVPortProfileAssociate(const char *ifname,
int virNetDevVPortProfileDisassociate(const char *ifname, int virNetDevVPortProfileDisassociate(const char *ifname,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
const unsigned char *macaddr, const virMacAddrPtr macaddr,
const char *linkdev, const char *linkdev,
int vf, int vf,
enum virNetDevVPortProfileOp vmOp) enum virNetDevVPortProfileOp vmOp)

View File

@ -56,7 +56,7 @@ struct virNetlinkEventHandle {
virNetlinkEventHandleCallback handleCB; virNetlinkEventHandleCallback handleCB;
virNetlinkEventRemoveCallback removeCB; virNetlinkEventRemoveCallback removeCB;
void *opaque; void *opaque;
unsigned char macaddr[VIR_MAC_BUFLEN]; virMacAddr macaddr;
int deleted; int deleted;
}; };
@ -278,7 +278,7 @@ virNetlinkEventRemoveClientPrimitive(size_t i)
if (removeCB) { if (removeCB) {
(removeCB)(server->handles[i].watch, (removeCB)(server->handles[i].watch,
server->handles[i].macaddr, &server->handles[i].macaddr,
server->handles[i].opaque); server->handles[i].opaque);
} }
server->handles[i].deleted = VIR_NETLINK_HANDLE_DELETED; server->handles[i].deleted = VIR_NETLINK_HANDLE_DELETED;
@ -506,7 +506,7 @@ error_locked:
int int
virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB, virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB,
virNetlinkEventRemoveCallback removeCB, virNetlinkEventRemoveCallback removeCB,
void *opaque, const unsigned char *macaddr) void *opaque, const virMacAddrPtr macaddr)
{ {
int i, r, ret = -1; int i, r, ret = -1;
virNetlinkEventSrvPrivatePtr srv = server; virNetlinkEventSrvPrivatePtr srv = server;
@ -548,9 +548,10 @@ addentry:
srv->handles[r].opaque = opaque; srv->handles[r].opaque = opaque;
srv->handles[r].deleted = VIR_NETLINK_HANDLE_VALID; srv->handles[r].deleted = VIR_NETLINK_HANDLE_VALID;
if (macaddr) if (macaddr)
memcpy(srv->handles[r].macaddr, macaddr, VIR_MAC_BUFLEN); virMacAddrSet(&srv->handles[r].macaddr, macaddr);
else 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); 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 * Returns -1 if the file handle was not registered, 0 upon success
*/ */
int int
virNetlinkEventRemoveClient(int watch, const unsigned char *macaddr) virNetlinkEventRemoveClient(int watch, const virMacAddrPtr macaddr)
{ {
int i; int i;
int ret = -1; int ret = -1;
@ -594,7 +595,7 @@ virNetlinkEventRemoveClient(int watch, const unsigned char *macaddr)
if ((watch && srv->handles[i].watch == watch) || if ((watch && srv->handles[i].watch == 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.", VIR_DEBUG("removed client: %d by %s.",
srv->handles[i].watch, watch ? "index" : "mac"); srv->handles[i].watch, watch ? "index" : "mac");

View File

@ -22,6 +22,7 @@
# include "config.h" # include "config.h"
# include "internal.h" # include "internal.h"
# include "virmacaddr.h"
# include <stdint.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 (*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 * stopNetlinkEventServer: stop the monitor to receive netlink messages for libvirtd
@ -73,11 +74,11 @@ int virNetlinkEventServiceLocalPid(void);
*/ */
int virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB, int virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB,
virNetlinkEventRemoveCallback removeCB, virNetlinkEventRemoveCallback removeCB,
void *opaque, const unsigned char *macaddr); void *opaque, const virMacAddrPtr macaddr);
/** /**
* virNetlinkEventRemoveClient: unregister a callback from a netlink monitor * 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__ */ #endif /* __VIR_NETLINK_H__ */

View File

@ -3038,7 +3038,7 @@ sharedFoldersCleanup:
MACAddress[8], MACAddress[9], MACAddress[10], MACAddress[11]); MACAddress[8], MACAddress[9], MACAddress[10], MACAddress[11]);
/* XXX some real error handling here some day ... */ /* 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++; netAdpIncCnt++;
@ -4387,15 +4387,15 @@ vboxAttachNetwork(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
char macaddr[VIR_MAC_STRING_BUFLEN] = {0}; char macaddr[VIR_MAC_STRING_BUFLEN] = {0};
char macaddrvbox[VIR_MAC_STRING_BUFLEN - 5] = {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, snprintf(macaddrvbox, VIR_MAC_STRING_BUFLEN - 5,
"%02X%02X%02X%02X%02X%02X", "%02X%02X%02X%02X%02X%02X",
def->nets[i]->mac[0], def->nets[i]->mac.addr[0],
def->nets[i]->mac[1], def->nets[i]->mac.addr[1],
def->nets[i]->mac[2], def->nets[i]->mac.addr[2],
def->nets[i]->mac[3], def->nets[i]->mac.addr[3],
def->nets[i]->mac[4], def->nets[i]->mac.addr[4],
def->nets[i]->mac[5]); def->nets[i]->mac.addr[5]);
macaddrvbox[VIR_MAC_STRING_BUFLEN - 6] = '\0'; macaddrvbox[VIR_MAC_STRING_BUFLEN - 6] = '\0';
VIR_DEBUG("NIC(%d): Type: %d", i, def->nets[i]->type); VIR_DEBUG("NIC(%d): Type: %d", i, def->nets[i]->type);

View File

@ -2365,7 +2365,7 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
if (addressType == NULL || STRCASEEQ(addressType, "generated") || if (addressType == NULL || STRCASEEQ(addressType, "generated") ||
STRCASEEQ(addressType, "vpx")) { STRCASEEQ(addressType, "vpx")) {
if (generatedAddress != NULL) { if (generatedAddress != NULL) {
if (virMacAddrParse(generatedAddress, (*def)->mac) < 0) { if (virMacAddrParse(generatedAddress, &(*def)->mac) < 0) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR, VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be MAC address but " _("Expecting VMX entry '%s' to be MAC address but "
"found '%s'"), generatedAddress_name, "found '%s'"), generatedAddress_name,
@ -2375,7 +2375,7 @@ virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
} }
} else if (STRCASEEQ(addressType, "static")) { } else if (STRCASEEQ(addressType, "static")) {
if (address != NULL) { if (address != NULL) {
if (virMacAddrParse(address, (*def)->mac) < 0) { if (virMacAddrParse(address, &(*def)->mac) < 0) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR, VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be MAC address but " _("Expecting VMX entry '%s' to be MAC address but "
"found '%s'"), address_name, address); "found '%s'"), address_name, address);
@ -3567,10 +3567,10 @@ virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
} }
/* def:mac -> vmx:addressType, vmx:(generated)Address, vmx:checkMACAddress */ /* 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]; prefix = (def->mac.addr[0] << 16) | (def->mac.addr[1] << 8) | def->mac.addr[2];
suffix = (def->mac[3] << 16) | (def->mac[4] << 8) | def->mac[5]; suffix = (def->mac.addr[3] << 16) | (def->mac.addr[4] << 8) | def->mac.addr[5];
if (prefix == 0x000c29) { if (prefix == 0x000c29) {
virBufferAsprintf(buffer, "ethernet%d.addressType = \"generated\"\n", virBufferAsprintf(buffer, "ethernet%d.addressType = \"generated\"\n",

View File

@ -2718,7 +2718,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
goto cleanup; goto cleanup;
char macStr[VIR_MAC_STRING_BUFLEN]; char macStr[VIR_MAC_STRING_BUFLEN];
virMacAddrFormat(dev->data.net->mac, macStr); virMacAddrFormat(&dev->data.net->mac, macStr);
if (!(target = strdup(macStr))) { if (!(target = strdup(macStr))) {
virReportOOMError(); virReportOOMError();
@ -3955,8 +3955,8 @@ virDomainXMLDevID(virDomainPtr domain,
char mac[30]; char mac[30];
virDomainNetDefPtr def = dev->data.net; virDomainNetDefPtr def = dev->data.net;
snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x",
def->mac[0], def->mac[1], def->mac[2], def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
def->mac[3], def->mac[4], def->mac[5]); def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
strcpy(class, "vif"); strcpy(class, "vif");

View File

@ -1533,9 +1533,7 @@ xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_NET:
{ {
for (i = 0 ; i < def->nnets ; i++) { for (i = 0 ; i < def->nnets ; i++) {
if (!memcmp(def->nets[i]->mac, if (!virMacAddrCmp(&def->nets[i]->mac, &dev->data.net->mac)) {
dev->data.net->mac,
sizeof(def->nets[i]->mac))) {
virDomainNetDefFree(def->nets[i]); virDomainNetDefFree(def->nets[i]);
if (i < (def->nnets - 1)) if (i < (def->nnets - 1))
memmove(def->nets + i, memmove(def->nets + i,

View File

@ -600,7 +600,7 @@ xenParseSxprNets(virDomainDefPtr def,
tmp = sexpr_node(node, "device/vif/mac"); tmp = sexpr_node(node, "device/vif/mac");
if (tmp) { if (tmp) {
if (virMacAddrParse(tmp, net->mac) < 0) { if (virMacAddrParse(tmp, &net->mac) < 0) {
XENXS_ERROR(VIR_ERR_INTERNAL_ERROR, XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
_("malformed mac address '%s'"), tmp); _("malformed mac address '%s'"), tmp);
goto cleanup; goto cleanup;
@ -1932,8 +1932,8 @@ xenFormatSxprNet(virConnectPtr conn,
virBufferAsprintf(buf, virBufferAsprintf(buf,
"(mac '%02x:%02x:%02x:%02x:%02x:%02x')", "(mac '%02x:%02x:%02x:%02x:%02x:%02x')",
def->mac[0], def->mac[1], def->mac[2], def->mac.addr[0], def->mac.addr[1], def->mac.addr[2],
def->mac[3], def->mac[4], def->mac[5]); def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]);
switch (def->type) { switch (def->type) {
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:

View File

@ -742,7 +742,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
goto no_memory; goto no_memory;
if (mac[0]) { if (mac[0]) {
if (virMacAddrParse(mac, net->mac) < 0) { if (virMacAddrParse(mac, &net->mac) < 0) {
XENXS_ERROR(VIR_ERR_INTERNAL_ERROR, XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
_("malformed mac address '%s'"), mac); _("malformed mac address '%s'"), mac);
goto cleanup; goto cleanup;
@ -1326,9 +1326,9 @@ static int xenFormatXMNet(virConnectPtr conn,
virConfValuePtr val, tmp; virConfValuePtr val, tmp;
virBufferAsprintf(&buf, "mac=%02x:%02x:%02x:%02x:%02x:%02x", virBufferAsprintf(&buf, "mac=%02x:%02x:%02x:%02x:%02x:%02x",
net->mac[0], net->mac[1], net->mac.addr[0], net->mac.addr[1],
net->mac[2], net->mac[3], net->mac.addr[2], net->mac.addr[3],
net->mac[4], net->mac[5]); net->mac.addr[4], net->mac.addr[5]);
switch (net->type) { switch (net->type) {
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:

View File

@ -1935,7 +1935,7 @@ cmdDomIfSetLink(vshControl *ctl, const vshCmd *cmd)
const char *state; const char *state;
const char *value; const char *value;
const char *desc; const char *desc;
unsigned char macaddr[VIR_MAC_BUFLEN]; virMacAddr macaddr;
const char *element; const char *element;
const char *attr; const char *attr;
bool config; bool config;
@ -1997,7 +1997,7 @@ cmdDomIfSetLink(vshControl *ctl, const vshCmd *cmd)
goto cleanup; goto cleanup;
} }
if (virMacAddrParse(iface, macaddr) == 0) { if (virMacAddrParse(iface, &macaddr) == 0) {
element = "mac"; element = "mac";
attr = "address"; attr = "address";
} else { } else {
@ -2111,7 +2111,7 @@ cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
int flags = 0; int flags = 0;
char *state = NULL; char *state = NULL;
char *value = NULL; char *value = NULL;
unsigned char macaddr[VIR_MAC_BUFLEN]; virMacAddr macaddr;
const char *element; const char *element;
const char *attr; const char *attr;
bool ret = false; bool ret = false;
@ -2156,7 +2156,7 @@ cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
goto cleanup; goto cleanup;
} }
if (virMacAddrParse(iface, macaddr) == 0) { if (virMacAddrParse(iface, &macaddr) == 0) {
element = "mac"; element = "mac";
attr = "address"; attr = "address";
} else { } else {