• Martin KaFai Lau's avatar
    ipv6: Consider RTF_CACHE when searching the fib6 tree · 1f56a01f
    Martin KaFai Lau authored
    It is a prep work for the later bug-fix patch which will stop /128 route
    from disappearing after pmtu update.
    
    The later bug-fix patch will allow a /128 route and its RTF_CACHE clone
    both exist at the same fib6_node.  To do this, we need to prepare the
    existing fib6 tree search to expect RTF_CACHE for /128 route.
    
    Note that the fn->leaf is sorted by rt6i_metric.  Hence,
    RTF_CACHE (if there is any) is always at the front.  This property
    leads to the following:
    
    1. When doing ip6_route_del(), it should honor the RTF_CACHE flag which
       the caller is used to ask for deleting clone or non-clone.
       The rtm_to_fib6_config() should also check the RTM_F_CLONED and
       then set RTF_CACHE accordingly so that:
       - 'ip -6 r del...' will make ip6_route_del() to delete a route
         and all its clones. Note that its clones is flushed by fib6_del()
       - 'ip -6 r flush table cache' will make ip6_route_del() to
          only delete clone(s).
    
    2. Exclude RTF_CACHE from addrconf_get_prefix_route() which
       should not configure on a cloned route.
    
    3. No change is need for rt6_device_match() since it currently could
       return a RTF_CACHE clone route, so the later bug-fix patch will not
       affect it.
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Reviewed-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1f56a01f
route.c 79.1 KB