On Sat, Jan 25, 2014 at 12:06:10AM +0800, Sheldon wrote: > On 01/24/2014 05:30 PM, Martin Kletzander wrote: > > 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 :-) > libvirt.virDomain.macAddrGenerate() or > libvirt.virConnect.macAddrGenerate() ? > I'd say it depends on what you want it to do. If you want it *only* to generate the mac address, then I see no point in exposing it; that'd be like exposing a STRPREFIX macro :) Martin
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list