[libvirt] [PATCH]: set and get the MAC of an interface
Daniel Veillard
veillard at redhat.com
Wed Jun 22 08:30:23 UTC 2011
On Mon, Jun 20, 2011 at 03:54:31PM +0200, Gerhard Stenzel wrote:
>
> The following patch renames the function to set the MAC of an interface
> from ifSetInterfaceMac() to brSetInterfaceMac() and makes it available
> to other components.
> It also adds brGetInterfaceMac() to retrieve the MAC.
>
> Signed-off-by: Gerhard Stenzel <gerhard.stenzel at de.ibm.com>
>
> Index: libvirt/src/util/bridge.c
> ===================================================================
> --- libvirt.orig/src/util/bridge.c
> +++ libvirt/src/util/bridge.c
> @@ -286,8 +286,41 @@ brDeleteInterface(brControl *ctl ATTRIBU
> }
> # endif
>
> +
> +/**
> + * brGetInterfaceMac:
> + * @ctl: bridge control pointer
> + * @ifname: interface name to set MTU for
> + * @macaddr: MAC address (VIR_MAC_BUFLEN in size)
> + *
> + * This function gets the @macaddr for a given interface @ifname.
> + *
> + * Returns 0 in case of success or an errno code in case of failure.
> + */
> +int brGetInterfaceMac(brControl *ctl, const char *ifname,
> + unsigned char *macaddr)
> +{
> + struct ifreq ifr;
> +
> + if (!ctl || !ifname)
> + return EINVAL;
> +
> + memset(&ifr, 0, sizeof(struct ifreq));
> + if (virStrcpyStatic(ifr.ifr_name, ifname) == NULL)
> + return EINVAL;
> +
> + if(ioctl(ctl->fd, SIOCGIFHWADDR, (char *)&ifr) != 0){
> + return errno;
> + }
> +
> + memcpy(macaddr, ifr.ifr_ifru.ifru_hwaddr.sa_data, VIR_MAC_BUFLEN);
> +
> + return 0;
> +}
> +
> +
> /**
> - * ifSetInterfaceMac:
> + * brSetInterfaceMac:
> * @ctl: bridge control pointer
> * @ifname: interface name to set MTU for
> * @macaddr: MAC address (VIR_MAC_BUFLEN in size)
> @@ -297,7 +330,7 @@ brDeleteInterface(brControl *ctl ATTRIBU
> *
> * Returns 0 in case of success or an errno code in case of failure.
> */
> -static int ifSetInterfaceMac(brControl *ctl, const char *ifname,
> +int brSetInterfaceMac(brControl *ctl, const char *ifname,
> const unsigned char *macaddr)
> {
> struct ifreq ifr;
> @@ -521,7 +554,7 @@ brAddTap(brControl *ctl,
> * seeing the kernel allocate random MAC for the TAP
> * device before we set our static MAC.
> */
> - if ((errno = ifSetInterfaceMac(ctl, ifr.ifr_name, macaddr)))
> + if ((errno = brSetInterfaceMac(ctl, ifr.ifr_name, macaddr)))
> goto error;
> /* We need to set the interface MTU before adding it
> * to the bridge, because the bridge will have its
> Index: libvirt/src/util/bridge.h
> ===================================================================
> --- libvirt.orig/src/util/bridge.h
> +++ libvirt/src/util/bridge.h
> @@ -106,6 +106,14 @@ int brGetEnableSTP (brContr
> const char *bridge,
> int *enable);
>
> +int brSetInterfaceMac (brControl *ctl,
> + const char *ifname,
> + const unsigned char *macaddr);
> +
> +int brGetInterfaceMac (brControl *ctl,
> + const char *ifname,
> + unsigned char *macaddr);
> +
> # endif /* WITH_BRIDGE */
>
> #endif /* __QEMUD_BRIDGE_H__ */
>
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list