• David Ahern's avatar
    nexthop: Add support for nexthop groups · 430a0491
    David Ahern authored
    Allow the creation of nexthop groups which reference other nexthop
    objects to create multipath routes:
    
                          +--------------+
       +------------+   +--------------+ |
       | nh  nh_grp --->| nh_grp_entry |-+
       +------------+   +---------|----+
         ^                |       |    +------------+
         +----------------+       +--->| nh, weight |
            nh_parent                  +------------+
    
    A group entry points to a nexthop with a weight for that hop within the
    group. The nexthop has a list_head, grp_list, for tracking which groups
    it is a member of and the group entry has a reference back to the parent.
    The grp_list is used when a nexthop is deleted - to efficiently remove
    it from groups using it.
    
    If a nexthop group spec is given, no other attributes can be set. Each
    nexthop id in a group spec must already exist.
    
    Similar to single nexthops, the specification of a nexthop group can be
    updated so that data is managed with rcu locking.
    
    Add path selection function to account for multiple paths and add
    ipv{4,6}_good_nh helpers to know that if a neighbor entry exists it is
    in a good state.
    
    Update NETDEV event handling to rebalance multipath nexthop groups if
    a nexthop is deleted due to a link event (down or unregister).
    
    When a nexthop is removed any groups using it are updated. Groups using a
    nexthop a tracked via a grp_list.
    
    Nexthop dumps can be limited to groups only by adding NHA_GROUPS to the
    request.
    Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    430a0491
nexthop.c 31.9 KB