Format the address using the helper instead of having similar code in multiple places. This patch also fixes leak of the MAC address string in ebtablesRemoveForwardAllowIn() and ebtablesAddForwardAllowIn() in src/util/virebtables.c --- src/conf/domain_conf.c | 20 ++++++++++---------- src/qemu/qemu_command.c | 15 +++++++-------- src/uml/uml_conf.c | 7 +++---- src/util/virebtables.c | 26 +++++++------------------- src/util/virnetdevmacvlan.c | 9 +++------ src/util/virnetdevtap.c | 9 ++++----- src/xen/xend_internal.c | 9 +++------ src/xenxs/xen_sxpr.c | 8 +++----- src/xenxs/xen_xm.c | 8 +++----- 9 files changed, 43 insertions(+), 68 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 371d80c..cc26f21 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -11521,14 +11521,15 @@ static bool virDomainNetDefCheckABIStability(virDomainNetDefPtr src, virDomainNetDefPtr dst) { + char srcmac[VIR_MAC_STRING_BUFLEN]; + char dstmac[VIR_MAC_STRING_BUFLEN]; + if (virMacAddrCmp(&src->mac, &dst->mac) != 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Target network card mac %02x:%02x:%02x:%02x:%02x:%02x" - " does not match source %02x:%02x:%02x:%02x:%02x:%02x"), - dst->mac.addr[0], dst->mac.addr[1], dst->mac.addr[2], - dst->mac.addr[3], dst->mac.addr[4], dst->mac.addr[5], - src->mac.addr[0], src->mac.addr[1], src->mac.addr[2], - src->mac.addr[3], src->mac.addr[4], src->mac.addr[5]); + _("Target network card mac %s" + " does not match source %s"), + virMacAddrFormat(&dst->mac, dstmac), + virMacAddrFormat(&src->mac, srcmac)); return false; } @@ -13389,6 +13390,7 @@ virDomainNetDefFormat(virBufferPtr buf, unsigned int flags) { const char *type = virDomainNetTypeToString(def->type); + char macstr[VIR_MAC_STRING_BUFLEN]; if (!type) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -13404,10 +13406,8 @@ virDomainNetDefFormat(virBufferPtr buf, virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 6); - virBufferAsprintf(buf, - "<mac address='%02x:%02x:%02x:%02x:%02x:%02x'/>\n", - def->mac.addr[0], def->mac.addr[1], def->mac.addr[2], - def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]); + virBufferAsprintf(buf, "<mac address='%s'/>\n", + virMacAddrFormat(&def->mac, macstr)); switch (def->type) { case VIR_DOMAIN_NET_TYPE_NETWORK: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c80218d..17b0a9f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3638,12 +3638,12 @@ qemuBuildNicStr(virDomainNetDefPtr net, int vlan) { char *str; + char macaddr[VIR_MAC_STRING_BUFLEN]; + if (virAsprintf(&str, - "%smacaddr=%02x:%02x:%02x:%02x:%02x:%02x,vlan=%d%s%s%s%s", + "%smacaddr=%s,vlan=%d%s%s%s%s", prefix ? prefix : "", - net->mac.addr[0], net->mac.addr[1], - net->mac.addr[2], net->mac.addr[3], - net->mac.addr[4], net->mac.addr[5], + virMacAddrFormat(&net->mac, macaddr), vlan, (net->model ? ",model=" : ""), (net->model ? net->model : ""), @@ -3666,6 +3666,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, virBuffer buf = VIR_BUFFER_INITIALIZER; const char *nic; bool usingVirtio = false; + char macaddr[VIR_MAC_STRING_BUFLEN]; if (!net->model) { nic = "rtl8139"; @@ -3722,10 +3723,8 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, else virBufferAsprintf(&buf, ",vlan=%d", vlan); virBufferAsprintf(&buf, ",id=%s", net->info.alias); - virBufferAsprintf(&buf, ",mac=%02x:%02x:%02x:%02x:%02x:%02x", - net->mac.addr[0], net->mac.addr[1], - net->mac.addr[2], net->mac.addr[3], - net->mac.addr[4], net->mac.addr[5]); + virBufferAsprintf(&buf, ",mac=%s", + virMacAddrFormat(&net->mac, macaddr)); if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCaps) < 0) goto error; if (qemuBuildRomStr(&buf, &net->info, qemuCaps) < 0) diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index b3ac326..0fe59fb 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -1,7 +1,7 @@ /* * uml_conf.c: UML driver configuration * - * Copyright (C) 2006-2012 Red Hat, Inc. + * Copyright (C) 2006-2013 Red Hat, Inc. * Copyright (C) 2006 Daniel P. Berrange * * This library is free software; you can redistribute it and/or @@ -164,6 +164,7 @@ umlBuildCommandLineNet(virConnectPtr conn, int idx) { virBuffer buf = VIR_BUFFER_INITIALIZER; + char macaddr[VIR_MAC_STRING_BUFLEN]; /* General format: ethNN=type,options */ @@ -264,9 +265,7 @@ umlBuildCommandLineNet(virConnectPtr conn, goto error; } - virBufferAsprintf(&buf, ",%02x:%02x:%02x:%02x:%02x:%02x", - def->mac.addr[0], def->mac.addr[1], def->mac.addr[2], - def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]); + virBufferAsprintf(&buf, ",%s", virMacAddrFormat(&def->mac, macaddr)); if (def->type == VIR_DOMAIN_NET_TYPE_MCAST) { virBufferAsprintf(&buf, ",%s,%d", diff --git a/src/util/virebtables.c b/src/util/virebtables.c index ded62d7..65c0ac3 100644 --- a/src/util/virebtables.c +++ b/src/util/virebtables.c @@ -1,7 +1,7 @@ /* * virebtables.c: Helper APIs for managing ebtables * - * Copyright (C) 2007-2012 Red Hat, Inc. + * Copyright (C) 2007-2013 Red Hat, Inc. * Copyright (C) 2009 IBM Corp. * * This library is free software; you can redistribute it and/or @@ -446,15 +446,9 @@ ebtablesAddForwardAllowIn(ebtablesContext *ctx, const char *iface, const virMacAddrPtr mac) { - char *macaddr; - - if (virAsprintf(&macaddr, - "%02x:%02x:%02x:%02x:%02x:%02x", - mac->addr[0], mac->addr[1], - mac->addr[2], mac->addr[3], - mac->addr[4], mac->addr[5]) < 0) { - return -1; - } + char macaddr[VIR_MAC_STRING_BUFLEN]; + + virMacAddrFormat(mac, macaddr); return ebtablesForwardAllowIn(ctx, iface, macaddr, ADD); } @@ -475,14 +469,8 @@ ebtablesRemoveForwardAllowIn(ebtablesContext *ctx, const char *iface, const virMacAddrPtr mac) { - char *macaddr; - - if (virAsprintf(&macaddr, - "%02x:%02x:%02x:%02x:%02x:%02x", - mac->addr[0], mac->addr[1], - mac->addr[2], mac->addr[3], - mac->addr[4], mac->addr[5]) < 0) { - return -1; - } + char macaddr[VIR_MAC_STRING_BUFLEN]; + + virMacAddrFormat(mac, macaddr); return ebtablesForwardAllowIn(ctx, iface, macaddr, REMOVE); } diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index ddea11f..2578ff0 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2012 Red Hat, Inc. + * Copyright (C) 2010-2013 Red Hat, Inc. * Copyright (C) 2010-2012 IBM Corporation * * This library is free software; you can redistribute it and/or @@ -518,6 +518,7 @@ virNetDevMacVLanVPortProfileCallback(unsigned char *msg, virNetlinkCallbackDataPtr calld = opaque; pid_t lldpad_pid = 0; pid_t virip_pid = 0; + char macaddr[VIR_MAC_STRING_BUFLEN]; hdr = (struct nlmsghdr *) msg; data = nlmsg_data(hdr); @@ -707,11 +708,7 @@ virNetDevMacVLanVPortProfileCallback(unsigned char *msg, VIR_INFO("Re-send 802.1qbg associate request:"); VIR_INFO(" if: %s", calld->cr_ifname); VIR_INFO(" lf: %s", calld->linkdev); - VIR_INFO(" mac: %02x:%02x:%02x:%02x:%02x:%02x", - calld->macaddress.addr[0], calld->macaddress.addr[1], - calld->macaddress.addr[2], calld->macaddress.addr[3], - calld->macaddress.addr[4], calld->macaddress.addr[5]); - + VIR_INFO(" mac: %s", virMacAddrFormat(&calld->macaddress, macaddr)); ignore_value(virNetDevVPortProfileAssociate(calld->cr_ifname, calld->virtPortProfile, &calld->macaddress, diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c index a884de1..871376e 100644 --- a/src/util/virnetdevtap.c +++ b/src/util/virnetdevtap.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Red Hat, Inc. + * Copyright (C) 2007-2013 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -286,6 +286,7 @@ int virNetDevTapCreateInBridgePort(const char *brname, unsigned int flags) { virMacAddr tapmac; + char macaddrstr[VIR_MAC_STRING_BUFLEN]; if (virNetDevTapCreate(ifname, tapfd, flags) < 0) return -1; @@ -306,10 +307,8 @@ int virNetDevTapCreateInBridgePort(const char *brname, */ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unable to use MAC address starting with " - "reserved value 0xFE - '%02X:%02X:%02X:%02X:%02X:%02X' - "), - macaddr->addr[0], macaddr->addr[1], - macaddr->addr[2], macaddr->addr[3], - macaddr->addr[4], macaddr->addr[5]); + "reserved value 0xFE - '%s' - "), + virMacAddrFormat(macaddr, macaddrstr)); goto error; } tapmac.addr[0] = 0xFE; /* Discourage bridge from using TAP dev MAC */ diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index 398da0d..7abc030 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -3730,17 +3730,14 @@ virDomainXMLDevID(virDomainPtr domain, if (tmp == NULL) return -1; } else if (dev->type == VIR_DOMAIN_DEVICE_NET) { - char mac[30]; + char mac[VIR_MAC_STRING_BUFLEN]; virDomainNetDefPtr def = dev->data.net; - snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", - def->mac.addr[0], def->mac.addr[1], def->mac.addr[2], - def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]); + virMacAddrFormat(&def->mac, mac); strcpy(class, "vif"); xenUnifiedLock(priv); - xref = xenStoreDomainGetNetworkID(domain->conn, domain->id, - mac); + xref = xenStoreDomainGetNetworkID(domain->conn, domain->id, mac); xenUnifiedUnlock(priv); if (xref == NULL) return -1; diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c index 83b7c74..cc4225b 100644 --- a/src/xenxs/xen_sxpr.c +++ b/src/xenxs/xen_sxpr.c @@ -1,7 +1,7 @@ /* * xen_sxpr.c: Xen SEXPR parsing functions * - * Copyright (C) 2010-2012 Red Hat, Inc. + * Copyright (C) 2010-2013 Red Hat, Inc. * Copyright (C) 2011 Univention GmbH * Copyright (C) 2005 Anthony Liguori <aliguori@xxxxxxxxxx> * @@ -1914,6 +1914,7 @@ xenFormatSxprNet(virConnectPtr conn, int isAttach) { const char *script = DEFAULT_VIF_SCRIPT; + char macaddr[VIR_MAC_STRING_BUFLEN]; if (def->type != VIR_DOMAIN_NET_TYPE_BRIDGE && def->type != VIR_DOMAIN_NET_TYPE_NETWORK && @@ -1936,10 +1937,7 @@ xenFormatSxprNet(virConnectPtr conn, virBufferAddLit(buf, "(vif "); - virBufferAsprintf(buf, - "(mac '%02x:%02x:%02x:%02x:%02x:%02x')", - def->mac.addr[0], def->mac.addr[1], def->mac.addr[2], - def->mac.addr[3], def->mac.addr[4], def->mac.addr[5]); + virBufferAsprintf(buf, "(mac '%s')", virMacAddrFormat(&def->mac, macaddr)); switch (def->type) { case VIR_DOMAIN_NET_TYPE_BRIDGE: diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c index 73ba06b..405ebf3 100644 --- a/src/xenxs/xen_xm.c +++ b/src/xenxs/xen_xm.c @@ -1,7 +1,7 @@ /* * xen_xm.c: Xen XM parsing functions * - * Copyright (C) 2006-2007, 2009-2010, 2012 Red Hat, Inc. + * Copyright (C) 2006-2007, 2009-2010, 2012, 2013 Red Hat, Inc. * Copyright (C) 2011 Univention GmbH * Copyright (C) 2006 Daniel P. Berrange * @@ -1335,11 +1335,9 @@ static int xenFormatXMNet(virConnectPtr conn, { virBuffer buf = VIR_BUFFER_INITIALIZER; virConfValuePtr val, tmp; + char macaddr[VIR_MAC_STRING_BUFLEN]; - virBufferAsprintf(&buf, "mac=%02x:%02x:%02x:%02x:%02x:%02x", - net->mac.addr[0], net->mac.addr[1], - net->mac.addr[2], net->mac.addr[3], - net->mac.addr[4], net->mac.addr[5]); + virBufferAsprintf(&buf, "mac=%s", virMacAddrFormat(&net->mac, macaddr)); switch (net->type) { case VIR_DOMAIN_NET_TYPE_BRIDGE: -- 1.8.1.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list