• David Ahern's avatar
    ipv4: Plumb support for nexthop object in a fib_info · 4c7e8084
    David Ahern authored
    Add 'struct nexthop' and nh_list list_head to fib_info. nh_list is the
    fib_info side of the nexthop <-> fib_info relationship.
    
    Add fi_list list_head to 'struct nexthop' to track fib_info entries
    using a nexthop instance. Add __remove_nexthop_fib and add it to
    __remove_nexthop to walk the new list_head and mark those fib entries
    as dead when the nexthop is deleted.
    
    Add a few nexthop helpers for use when a nexthop is added to fib_info:
    - nexthop_cmp to determine if 2 nexthops are the same
    - nexthop_path_fib_result to select a path for a multipath
      'struct nexthop'
    - nexthop_fib_nhc to select a specific fib_nh_common within a
      multipath 'struct nexthop'
    
    Update existing fib_info_nhc to use nexthop_fib_nhc if a fib_info uses
    a 'struct nexthop', and mark fib_info_nh as only used for the non-nexthop
    case.
    
    Update the fib_info functions to check for fi->nh and take a different
    path as needed:
    - free_fib_info_rcu - put the nexthop object reference
    - fib_release_info - remove the fib_info from the nexthop's fi_list
    - nh_comp - use nexthop_cmp when either fib_info references a nexthop
      object
    - fib_info_hashfn - use the nexthop id for the hashing vs the oif of
      each fib_nh in a fib_info
    - fib_nlmsg_size - add space for the RTA_NH_ID attribute
    - fib_create_info - verify nexthop reference can be taken, verify
      nexthop spec is valid for fib entry, and add fib_info to fi_list for
      a nexthop
    - fib_select_multipath - use the new nexthop_path_fib_result to select a
      path when nexthop objects are used
    - fib_table_lookup - if the 'struct nexthop' is a blackhole nexthop, treat
      it the same as a fib entry using 'blackhole'
    
    The bulk of the changes are in fib_semantics.c and most of that is
    moving the existing change_nexthops into an else branch.
    
    Update the nexthop code to walk fi_list on a nexthop deleted to remove
    fib entries referencing it.
    Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4c7e8084
fib_semantics.c 50.3 KB