[libvirt] [PATCH] Support reporting live interface IP/netmask.

Laine Stump laine at laine.org
Tue Oct 6 13:55:06 UTC 2009


On 10/06/2009 05:13 AM, Daniel P. Berrange wrote:
> On Mon, Oct 05, 2009 at 02:34:05PM -0700, David Lutterkort wrote:
>    
>> On Mon, 2009-10-05 at 17:34 +0100, Daniel P. Berrange wrote:
>>      
>>> With the domain XML format, we did have a few abortive attempts at
>>> indicating in the live XML, whether an attribute was from the
>>> persistent config, vs dynamically added to live config, but it all
>>> ended up as rather a mess.
>>>        
>> Here's a concrete example where this leads to headscratching, at a
>> minimum, with the netowrk configs. When the live XML contains
>>
>>          <protocol family="ipv4">
>>            <dhcp/>
>>            <ip address="192.168.0.5" prefix="24"/>
>>            <route gateway="192.168.0.1"/>
>>          </protocol>
>>
>> you at least think that the interface is configured to use DHCP, and
>> currently has the indicated address. Of course, if we ever poke around
>> to see if the interface _currently_ gets its address from DHCP, we have
>> no way to indicate that anymore, since we would indicate 'configured to
>> use DHCP' and 'currently gets its address from DHCP' in exactly the same
>> way.


Well, it's actually problematic no matter what we do, because it's not 
easy to differentiate between an IP address on an interface that was put 
there by dhclient, and one that was put there manually (and might be 
replaced as soon as dhclient decide's it's time to renew its lease, or 
might stay there forever, if the dhclient process has died or been 
killed).  We *could* parse dhclient.leases to find what dhclient 
believes to be the address, and compare it to what was returned from the 
ioctl, however my past experience with dhclient.leases was that there 
tended to be a lot of old leases in there, making it a real pain to find 
the correct lease.

Maybe what we *really* need is an attribute in the 'state' XML to 
indicate where the currently in-use addresses originated, ie 
source='dhcp', source='static-config', source='manual', or whatever. I 
don't know how much success we'd have at getting these correct, though...

>> Also, US $5 to anybody who knows whether the<route/>  tag above
>> says 'is configured to use that gateway' or 'routing is through that
>> gateway right now'.
>>      


Once I get all the address reporting correct, I'm going to see what I 
can do about reporting routes directly from the kernel, and once that is 
the case, it will always mean "routing is through that gateway right 
now". I don't think the current "route" node within the interface 
protocol will be adequate, though - for example, it has no 
destination/netmask, no metric, and no method to indicate if the route 
comes from a routing protocol, or is static. It's really only intended 
for setting up the default route. (Anyway, I don't know that the best 
way to report the current route table is by mixing it in with interface 
state - a separate API may be more appropriate)


> The live XML should *always* say what the inteface is doing right
> now.
>    


Up to the point that is possible, that's my intent.


>    
>> To belabor this point, when the live XML says
>>
>>          <protocol family="ipv4">
>>            <ip address="192.168.0.5" prefix="24"/>
>>            <ip address="192.168.0.6" prefix="24"/>
>>          </protocol>
>>
>> it's completely unclear what addresses are in the config files (maybe
>> both?) and which ones are actually assigned to the interface right now.
>>      
> I think there is a disconnect here about the behaviour we should
> be exposing.  In that example of live XML above with 2 IP addresses,
> both of those IP address *must* be currently assigned to the interface,
> since this is the live XML.  To determine which (if any) of those
> addresses are in the config file, the VIR_INTEFACE_XML_INACTIVE flag
> would be used.
>    

The summary of the two methods:

1) info about whether an address is the "live" address vs. from the 
config file is explicitly indicated by presence/absence of the 
"source='device'" attribute.

2) info about whether an address is the "live" address vs. from the 
config file is implied by which function was called / option flag was given.

Of course in both cases, no config-derived addresses are returned in the 
XML (when the INACTIVE flag isn't set), so it is guaranteed that any 
addresses will be "live".

I'm tending to lean towards (2) at the moment - having the extra 
attribute seems a bit redundant, as long as we guarantee that we're 
removing all the config-derived items before presentation.

If we were going to try and combine both live and config-derived items 
in the same XML, I would vote for (1). (We actually had a short 
discussion about whether or not to mix live and config data on the netcf 
mailing list, but didn't get much participation...)


> Looking at netcf, it does not appear to implement this correctly. If
> I query the live XML of an interface, it gives back a mixture of
> both the config file and active addresses. Indeed, if using a static
> IP address, it'll list the same IP address twice in the XML once it
> pulls it from the config file, and once from the interface.
>    

This was a bug in the original patch, corrected by this set of patches:

https://fedorahosted.org/pipermail/netcf-devel/2009-September/000280.html

Once those patches are applied, only the IP (v4) addresses currently on 
the device are returned (IPv6 address reporting will work rsn.)




More information about the libvir-list mailing list