]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/commit
flush secondary addresses before primary ones
authorSimon Horman <horms@verge.net.au>
Thu, 3 Dec 2009 01:08:27 +0000 (12:08 +1100)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Sat, 26 Dec 2009 18:11:02 +0000 (10:11 -0800)
commitb49240ec7eab91418d2f090536bf8cd2205988d6
treec0647bb8c9bef3bc02a9d2877aa854314ec87732
parenta36ceb85d7ae6a9742c35417e80ae837ce9f146d
flush secondary addresses before primary ones

Unless promote_secondaries has been active deleting the primary address of
an interface will automatically delete all the secondary addresses.

In the case where ip flush requests the primary then secondary addresses to
be removed - which is the order the addresses are returned by the kernel -
this will cause an error as by the time the request to remove a secondary
address is made it will be missing as it will have been deleted in the
course of deleting the primary address.

This approach to solving this problem orders requests for the
deletion of secondary addresses before primary ones providing
rtnl_dump_filter_l(), a version of rtnl_dump_filter() that
iterates over a list of filters. And by providing two specialised
filters print_addrinfo_secondary() and print_addrinfo_primary().

rtnl_dump_filter_l() first iterates over all addresses using
print_addrinfo_secondary(), which appends secondary addresses to the
request buffer.  Then again using print_addrinfo_primary() which appends
primary addresses.

This approach should work regardless of it promote_secondaries is
active or not. And regardless of if any primary of secondary addresses
are present or not.

Signed-off-by: Simon Horman <horms@verge.net.au>
include/libnetlink.h
ip/ipaddress.c
lib/libnetlink.c