[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 16:19:42 UTC 2014


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
-------------- 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/f49f3277/attachment-0001.sig>


More information about the libvir-list mailing list