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

Sheldon shaohef at linux.vnet.ibm.com
Fri Jan 24 16:06:10 UTC 2014


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()  ?

>
> 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


-- 
Thanks and best regards!

Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center




More information about the libvir-list mailing list