[libvirt] Adding and Clearing bridge addresses

Gene Czarcinski gene at czarc.net
Wed Mar 13 12:34:33 UTC 2013


On 03/12/2013 03:23 PM, Daniel P. Berrange wrote:
> On Tue, Mar 12, 2013 at 03:11:56PM -0400, Laine Stump wrote:
>> On 03/12/2013 01:45 PM, Gene Czarcinski wrote:
>>> I have been working on this patch to have libvirt optionally set
>>> static routes.
>>>
>>> So I found the function that adds both IPv4 and IPv6 addresses to the
>>> bridge in virnetdev.c. I found that besides the
>>> virNetDevAddIPv4Address() there is also virNetDevCleanIPv4Address().
>>> I patterned my virNetDevAddGateway() after the
>>> virNetDevAddIPv4Address() function.
>>>
>>> What I am puzzled about is that it appears that nobody calls the Clear
>>> function.  What don't I understand?
>> Probably it's there just for completeness of API.
>>
>> The thing that I find strange is that these functions include "IPv4" in
>> their names, in spite of working just as well for IPv6. It's very likely
>> that if I dig back through the blame history (which won't be simple
>> since the code has been moved into different files), I'll find that I
>> originally wrote it (I have a vague memory of it), but don't think I
>> would purposefully add IPv4 to the names... :-/
> The virNetDevGetIPv4Address method uses an ioctl to get the address
> and this only works on IPv4 addrs. The intent was to turn the other
> two calls into ioctl() calls too, to kill off shell commands.
>
> Setting IPv6 addresses would require netlink usage instead IIRC
>
I seem to recall some comments in some source code I have browsed in the 
last couple days which stated that ioctl was NOT to be used because it 
could not be guaranteed long term ... I think it was in libvert code but 
it may have been in NetworkManager code.  When you jump around to 
different projects, the details get confusing.

Anyway, I like the way /usr/sbin/ip works because things just seem to 
work.  A couple of things I have learned:

1.  For IPv6 addr and route, the order does not seem to matter and the 
bridge can be offline.

2.  Both IPv4 and IPv6 addr can be done on the offline bridge.

3.  To set an IPv4 static route, the addresses need to be defined and 
the bridge online (IPv6 is not so picky).

4.  You better have the unmasked portion of the address specified zero 
for the route ... that is, it better be a network address rather than a 
host address [I need to add some checks for this rather than letter the 
system issue a cryptic error message]

5.  I have yet to figure out how to test for dhcp, etc. when via is 
defined so that I can issue an error message when it is created/defined 
[the xml is being parsed and read in].

6.  When the xml is being written for an IP definition, I currently 
error out.  A better approach might be to issue an error message and 
suppress writing the xml.  This needs further thought.

7.  I have not come up with any tests.  The only thing that might be 
meaningful is if a bad network definition was created so that it would 
get errors.  I am not sure how to do this with the tests. There might be 
something in the networkxml2xmltest.

I should have something with works real soon and will send the patch up 
for review.

Gene





More information about the libvir-list mailing list