[libvirt] [question]Is there a good way to get the mac of guest interface after I attached it to a guest

Martin Kletzander mkletzan at redhat.com
Fri Jan 24 09:30:24 UTC 2014


On Fri, Jan 24, 2014 at 04:34:12PM +0800, Sheldon wrote:
> On 01/24/2014 03:55 PM, Martin Kletzander wrote:
> > On Fri, Jan 24, 2014 at 10:37:20AM +0800, Sheldon wrote:
> >> Now I working on a new KVM management tool base on html5 and libvirt
> >>
> >> we will support a REST API for detach and attach guest interface.
> >>
> >> we want to use mac as the identifier of the network interface.
> >>
> >> That meas we should get the mac after the user create a interface.
> >> also other people may be doing the exact same thing at the exact same
> >> time to create a interface.
> >>
> >>
> >> Here are the demo codes:
> >>
> >> dom = self._get_vm(vm)
> >> xml = """
> >> <interface type='network'>
> >> <source network='default'/>
> >> </interface>
> >> """
> >> dom.attachDeviceFlags(xml, libvirt.VIR_DOMAIN_AFFECT_CURRENT)
> >> # now I want to get the mac, how to get it?
> >>
> > You have to parse the XML back and find it.
> >
> >> I have check libvirt use this code to generate a mac address.
> >> does libvirt can gurantee that the MAC address generated is unique?
> >>
> > No, as mentioned in the second subthread, the XML you provided is
> > incomplete and can cause address clashing.
> >
> > So te best answer to your question in $SUBJ would be "generate it
> > yourself and add it to the XML before attaching".
>
>
> now I define a  mac address  generator in our management tool.
> it will generate a mac and assign it xml before create the interface.
>
> +        def randomMAC():
> +            mac = [0x52, 0x54, 0x00,
> +                   random.randint(0x00, 0x7f),
> +                   random.randint(0x00, 0xff),
> +                   random.randint(0x00, 0xff)]
> +        mac = randomMAC()
>
> +        xml = """
> +        <interface type='network'>
> +        <source network='default'/>
> +        <mac address='%s' >
> +        </interface>
> +        """ % mac
>
> should I gurantee that the MAC address generated is unique by myself?
> check every interface mac of every guest, and make sure no address clashing?
>

Yes, exactly.  You may be trying how the systems behave when MAC
addresses clash, you may have different subnets which are not
connected and you want have the same MAC address, but libvirt will
never know if you want to connect them together, you may have two
machines defined with slight differences (one with numa one without)
and run the one you want each time, etc.  And libvirt can't possibly
know about this.  IIRC, virt-manager can do the thing you want, but
that's probably not applicable for you, so you'll have to go through
the list of VMs you don't want the addresses to clash and check
whether the MAC is ok or not.  Or assign a MAC using a function
according to some unique element of yours and you don't have to check
anything.

>
> I wonder can libvirt support a API to generate mac address?
>

Patches are welcome :-)

Martin

> >
> > Martin
> >
> >> void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
> >> virMacAddrPtr addr)
> >> {
> >> addr->addr[0] = prefix[0];
> >> addr->addr[1] = prefix[1];
> >> addr->addr[2] = prefix[2];
> >> addr->addr[3] = virRandomBits(8);
> >> addr->addr[4] = virRandomBits(8);
> >> addr->addr[5] = virRandomBits(8);
> >> }
> >> libvirt also use the KVM prefix as default as it's in the privately
> >> administered range:
> >> 52:54:00:XX:XX:XX
> >>
> >>
> >>
> >> --
> >> Thanks and best regards!
> >>
> >> Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
> >> IBM Linux Technology Center
> >>
> >> --
> >> libvir-list mailing list
> >> libvir-list at redhat.com
> >> https://www.redhat.com/mailman/listinfo/libvir-list
>
>
> --
> Thanks and best regards!
>
> Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
> IBM Linux Technology Center
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140124/ebd7edd9/attachment-0001.sig>


More information about the libvir-list mailing list