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