• Simon Horman's avatar
    flush secondary addresses before primary ones · b49240ec
    Simon Horman authored
    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: default avatarSimon Horman <horms@verge.net.au>
    b49240ec
libnetlink.h 3.87 KB