• R
    mpls: multipath route support · f8efb73c
    Roopa Prabhu 提交于
    This patch adds support for MPLS multipath routes.
    
    Includes following changes to support multipath:
    - splits struct mpls_route into 'struct mpls_route + struct mpls_nh'
    
    - 'struct mpls_nh' represents a mpls nexthop label forwarding entry
    
    - moves mpls route and nexthop structures into internal.h
    
    - A mpls_route can point to multiple mpls_nh structs
    
    - the nexthops are maintained as a array (similar to ipv4 fib)
    
    - In the process of restructuring, this patch also consistently changes
      all labels to u8
    
    - Adds support to parse/fill RTA_MULTIPATH netlink attribute for
    multipath routes similar to ipv4/v6 fib
    
    - In this patch, the multipath route nexthop selection algorithm
    simply returns the first nexthop. It is replaced by a
    hash based algorithm from Robert Shearman in the next patch
    
    - mpls_route_update cleanup: remove 'dev' handling in mpls_route_update.
    mpls_route_update though implemented to update based on dev, it was
    never used that way. And the dev handling gets tricky with multiple
    nexthops. Cannot match against any single nexthops dev. So, this patch
    removes the unused 'dev' handling in mpls_route_update.
    
    - dead route/path handling will be implemented in a subsequent patch
    
    Example:
    
    $ip -f mpls route add 100 nexthop as 200 via inet 10.1.1.2 dev swp1 \
                    nexthop as 700 via inet 10.1.1.6 dev swp2 \
                    nexthop as 800 via inet 40.1.1.2 dev swp3
    
    $ip  -f mpls route show
    100
            nexthop as to 200 via inet 10.1.1.2  dev swp1
            nexthop as to 700 via inet 10.1.1.6  dev swp2
            nexthop as to 800 via inet 40.1.1.2  dev swp3
    Signed-off-by: NRoopa Prabhu <roopa@cumulusnetworks.com>
    Acked-by: NRobert Shearman <rshearma@brocade.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    f8efb73c
af_mpls.c 32.1 KB