[libvirt] [PATCH] Convert 'raw MAC address' usages to use virMacAddr

Eric Blake eblake at redhat.com
Mon Jun 4 23:26:47 UTC 2012


On 06/03/2012 07:08 PM, Stefan Berger wrote:
> 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.

Unfortunately, I tried applying this patch, but it failed:

$ git am -3 ../virMacAddr.eml
Applying: Convert 'raw MAC address' usages to use virMacAddr
fatal: corrupt patch at line 91
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.
Patch failed at 0001 Convert 'raw MAC address' usages to use virMacAddr
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

Can you investigate what might have happened on your end?

> 
> ---
>  src/conf/capabilities.c                   |    4 -
>  src/conf/capabilities.h                   |    4 -
>  src/conf/domain_audit.c                   |    6 -
>  src/conf/domain_conf.c                    |   34 ++++-----
>  src/conf/domain_conf.h                    |    6 -
>  src/conf/domain_nwfilter.c                |    2
>  src/conf/domain_nwfilter.h                |    4 -
>  src/conf/network_conf.c                   |   14 ++--
>  src/conf/network_conf.h                   |    2
>  src/conf/nwfilter_conf.c                  |   17 +---
>  src/conf/nwfilter_conf.h                  |   14 +---
>  src/conf/nwfilter_params.c                |    2
>  src/conf/nwfilter_params.h                |    3
>  src/libvirt_private.syms                  |    5 +
>  src/libxl/libxl_conf.c                    |    2
>  src/lxc/lxc_driver.c                      |    6 -
>  src/network/bridge_driver.c               |    2
>  src/nwfilter/nwfilter_dhcpsnoop.c         |   18 ++---
>  src/nwfilter/nwfilter_dhcpsnoop.h         |    4 -
>  src/nwfilter/nwfilter_driver.c            |    2
>  src/nwfilter/nwfilter_ebiptables_driver.c |    6 -
>  src/nwfilter/nwfilter_gentech_driver.c    |   10 +-
>  src/nwfilter/nwfilter_gentech_driver.h    |    4 -
>  src/nwfilter/nwfilter_learnipaddr.c       |   29 +++-----
>  src/nwfilter/nwfilter_learnipaddr.h       |    4 -
>  src/openvz/openvz_conf.c                  |    2
>  src/openvz/openvz_driver.c                |    8 +-
>  src/qemu/qemu_bridge_filter.c             |    4 -
>  src/qemu/qemu_bridge_filter.h             |    4 -
>  src/qemu/qemu_command.c                   |   22 +++---
>  src/qemu/qemu_driver.c                    |   16 ++--
>  src/qemu/qemu_hostdev.c                   |    8 +-
>  src/qemu/qemu_hotplug.c                   |   14 ++--
>  src/qemu/qemu_migration.c                 |    6 -
>  src/qemu/qemu_process.c                   |    4 -
>  src/uml/uml_conf.c                        |    6 -
>  src/util/ebtables.c                       |   16 ++--
>  src/util/ebtables.h                       |    6 +
>  src/util/virmacaddr.c                     |  104
> +++++++++++++++++++++++++-----

This is an example of the corruption - the diffstat is showing up with
line-wrapping.

>  src/util/virmacaddr.h                     |   25 +++++--
>  src/util/virnetdev.c                      |   61 ++++++++---------
>  src/util/virnetdev.h                      |   11 +--
>  src/util/virnetdevmacvlan.c               |   38 +++++-----
>  src/util/virnetdevmacvlan.h               |   11 +--
>  src/util/virnetdevopenvswitch.c           |    2
>  src/util/virnetdevopenvswitch.h           |    2
>  src/util/virnetdevtap.c                   |   19 ++---
>  src/util/virnetdevtap.h                   |    2
>  src/util/virnetdevvportprofile.c          |   18 ++---
>  src/util/virnetdevvportprofile.h          |    5 -
>  src/util/virnetlink.c                     |   15 ++--
>  src/util/virnetlink.h                     |    7 +-
>  src/vbox/vbox_tmpl.c                      |   16 ++--
>  src/vmx/vmx.c                             |   10 +-
>  src/xen/xend_internal.c                   |    6 -
>  src/xen/xm_internal.c                     |    4 -
>  src/xenxs/xen_sxpr.c                      |    6 -
>  src/xenxs/xen_xm.c                        |    8 +-
>  tools/virsh.c                             |    8 +-
>  59 files changed, 388 insertions(+), 310 deletions(-)
> 
> Index: libvirt-acl/src/conf/domain_conf.h
> ===================================================================
> --- libvirt-acl.orig/src/conf/domain_conf.h
> +++ libvirt-acl/src/conf/domain_conf.h
> @@ -777,7 +777,7 @@ struct _virDomainActualNetDef {
>  /* Stores the virtual network interface configuration */
>  struct _virDomainNetDef {
>      enum virDomainNetType type;
> -    unsigned char mac[VIR_MAC_BUFLEN];
> +    virMacAddr mac;
>      char *model;
>      union {
>          struct {

Overall, these sorts of changes look reasonable, but I'd really like to
apply and compile the test before approving it.


> +
> +/**
> + * virMacAddrCmp:

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);
> +}
> +

> +
> +/**
> + * 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])

Again some of the line wrapping that corrupted this patch.

> +{
> +    memcpy(dst->addr, src, VIR_MAC_BUFLEN);
> +}
> +
> +/**
> + * virMacAddrGet

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);
> +}
> +

> -void virMacAddrFormat(const unsigned char *addr,
> +void virMacAddrFormat(const virMacAddrPtr addr,
>                        char *str)
>  {
>      snprintf(str, VIR_MAC_STRING_BUFLEN,
>               "%02X:%02X:%02X:%02X:%02X:%02X",
> -             addr[0], addr[1], addr[2],
> -             addr[3], addr[4], addr[5]);
> +             addr->addr[0], addr->addr[1], addr->addr[2],
> +             addr->addr[3], addr->addr[4], addr->addr[5]);
>      str[VIR_MAC_STRING_BUFLEN-1] = '\0';

Pre-existing, but why do we need to set the NUL terminator?  snprintf
already takes care of that.


> Index: libvirt-acl/src/util/virnetdev.h

Everything else looks fairly mechanical given the initial changes I
reviewed above, so I didn't really spend any time looking closely at the
rest of this patch.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120604/91992cff/attachment-0001.sig>


More information about the libvir-list mailing list