1. 07 2月, 2017 6 次提交
  2. 06 2月, 2017 30 次提交
  3. 05 2月, 2017 4 次提交
    • D
      Merge branch 'ipv6-Improve-user-experience-with-multipath-routes' · 3976001c
      David S. Miller 提交于
      David Ahern says:
      
      ====================
      net: ipv6: Improve user experience with multipath routes
      
      This series closes a couple of gaps between IPv4 and IPv6 with respect
      to multipath routes:
      
      1. IPv4 allows all nexthops of multipath routes to be deleted using just
         the prefix and length; IPv6 only deletes the first nexthop for the
         route if only the prefix and length are given.
      
      2. IPv4 returns multipath routes encoded in the RTA_MULTIPATH attribute.
         IPv6 returns a series of routes with the same prefix and length - one
         for each nexthop. This happens for both dumps and notifications.
      
      IPv6 does accept RTA_MULTIPATH encoded routes, but installs them as a
      series of routes.
      
      Patch 1 addresses the first item by allowing IPv6 multipath routes to be
      deleted using just the prefix and length. Patch 2 addresses the second
      allowing IPv6 multipath routes to be returned encoded in the RTA_MULTIPATH.
      
      Patches 3 and 4 upate the RTM_{NEW,DEL}ROUTE notifications to generate
      1 notification with RTA_MULTIPATH where applicable.
      
      Patch 5 prints IPv6 addresses in compressed format when showing route
      replace errors. This was noticed testing REPLACE failures.
      
      The end result for multipath routes:
      1. Dump
         - RTA_MULTIPATH used for multipath routes
      
          $ ip -6 ro ls vrf red
          2001:db8:1::/120 dev eth1 proto kernel metric 256  pref medium
          2001:db8:2::/120 dev eth2 proto kernel metric 256  pref medium
          2001:db8:200::/120 metric 1024
      	    nexthop via 2001:db8:1::2  dev eth1 weight 1
      	    nexthop via 2001:db8:2::2  dev eth2 weight 1
          ...
      
      2. Route Add
         - one notification with RTA_MULTIPATH attribute
      
          $ ip -6 ro add vrf red 2001:db8:200::/120 nexthop via 2001:db8:1::2 nexthop via 2001:db8:2::2
      
          $ ip mon route
          2001:db8:200::/120 table red metric 1024
      	nexthop via 2001:db8:1::2  dev eth1 weight 1
      	nexthop via 2001:db8:2::2  dev eth2 weight 1
      
      2. Route Replace
         - one notification with RTA_MULTIPATH attribute
      
          $ ip -6 ro replace vrf red 2001:db8:200::/120 nexthop via 2001:db8:1::16 nexthop via 2001:db8:2::16
      
          $ ip mon route
          Replaced 2001:db8:200::/120 table red metric 1024
      	    nexthop via 2001:db8:1::16  dev eth1 weight 1
      	    nexthop via 2001:db8:2::16  dev eth2 weight 1
      
         - on a failure after the insertion of the first nexthop (which means
           the original route has been replaced in the FIB), a notification is
           sent with the successful nexthops and then the nexthops are deleted
           with one notification per hop. This is consistent with how it works
           today except the successful additions are coalesced into 1
           notification.
      
      3. Route Delete
         - delete of entire multipath route using prefix/length only 1
           notification is generated:
          $ ip -6 ro del vrf red 2001:db8:200::/120
      
          $ ip mon route
          Deleted 2001:db8:200::/120 table red metric 1024
      	    nexthop via 2001:db8:1::16  dev eth1 weight 1
      	    nexthop via 2001:db8:2::16  dev eth2 weight 1
      
         - if a delete request contains nexthops one notification is
           generated per nexthop deleted. This is unavoidable since IPv6
           alllows a single nexthop to be deleted within a multipath route
      
      4. Route Appends
         - IPv6 allows nexthops to be appended to an existing route. In this
           case one notification is sent for the new route with the append
           flag set.
      
          $ ip -6 ro append vrf red 2001:db8:200::/120 nexthop via 2001:db8:2::20 nexthop via 2001:db8:1::20
      
          $ ip mon route
          Append 2001:db8:200::/120 table red metric 1024
      	    nexthop via 2001:db8:1::2  dev eth1 weight 1
      	    nexthop via 2001:db8:2::2  dev eth2 weight 1
      	    nexthop via 2001:db8:2::20  dev eth2 weight 1
      	    nexthop via 2001:db8:1::20  dev eth1 weight 1
      
        - on failure of an append, a notification is sent with the route
          containing all of the nexthops successfully added, and it is
          followed by delete notifications as the hops are removed
          returning the route to its prior state. This is consistent with
          how it works today except the successful additions are coalesced
          into 1 notification.
      
      Addresses some of the inconsistencies also noted by Roopa at netdev0.1:
      https://www.netdev01.org/docs/prabhu-linux_ipv4_ipv6_inconsistencies_talk_slides.pdf
      
      v4
      - changed series to do encoding in 1 patch and updating notificatons
        in separate patches to make it easier to review and understand
      
      - 1 notification for delete when using prefix/length; 1 notification for
        append
      
      - handle delete of a single nexthop without RTA_MULTIPATH in delete request
      
      - upated commit messages and cover letter
      
      v3
      - removed the need for a user API to opt-in to change. Requiring an
        API just shifts the difference from same API with different
        behavior to different API to achieve equivalent behavior
      - route notifications changed to use RTA_MULTIPATH for add and replace
      - upated commit messages and cover letter
      
      v2
      - fixed locking in patch 1 as noted by DaveM
      - changed user API for patch 2 to require an rtmsg with RTM_F_ALL_NEXTHOPS
        set in rtm_flags
      - revamped explanation of patch 2 and cover letter
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3976001c
    • D
      net: ipv6: Use compressed IPv6 addresses showing route replace error · 7d4d5065
      David Ahern 提交于
      ip6_print_replace_route_err logs an error if a route replace fails with
      IPv6 addresses in the full format. e.g,:
      
      IPv6: IPV6: multipath route replace failed (check consistency of installed routes): 2001:0db8:0200:0000:0000:0000:0000:0000 nexthop 2001:0db8:0001:0000:0000:0000:0000:0016 ifi 0
      
      Change the message to dump the addresses in the compressed format.
      Signed-off-by: NDavid Ahern <dsa@cumulusnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7d4d5065
    • D
      net: ipv6: Change notifications for multipath delete to RTA_MULTIPATH · 16a16cd3
      David Ahern 提交于
      If an entire multipath route is deleted using prefix and len (without any
      nexthops), send a single RTM_DELROUTE notification with the full route
      using RTA_MULTIPATH. This is done by generating the skb before the route
      delete when all of the sibling routes are still present but sending it
      after the route has been removed from the FIB. The skip_notify flag
      is used to tell the lower fib code not to send notifications for the
      individual nexthop routes.
      
      If a route is deleted using RTA_MULTIPATH for any nexthops or a single
      nexthop entry is deleted, then the nexthops are deleted one at a time with
      notifications sent as each hop is deleted. This is necessary given that
      IPv6 allows individual hops within a route to be deleted.
      Signed-off-by: NDavid Ahern <dsa@cumulusnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      16a16cd3
    • D
      net: ipv6: Change notifications for multipath add to RTA_MULTIPATH · 3b1137fe
      David Ahern 提交于
      Change ip6_route_multipath_add to send one notifciation with the full
      route encoded with RTA_MULTIPATH instead of a series of individual routes.
      This is done by adding a skip_notify flag to the nl_info struct. The
      flag is used to skip sending of the notification in the fib code that
      actually inserts the route. Once the full route has been added, a
      notification is generated with all nexthops.
      
      ip6_route_multipath_add handles 3 use cases: new routes, route replace,
      and route append. The multipath notification generated needs to be
      consistent with the order of the nexthops and it should be consistent
      with the order in a FIB dump which means the route with the first nexthop
      needs to be used as the route reference. For the first 2 cases (new and
      replace), a reference to the route used to send the notification is
      obtained by saving the first route added. For the append case, the last
      route added is used to loop back to its first sibling route which is
      the first nexthop in the multipath route.
      Signed-off-by: NDavid Ahern <dsa@cumulusnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3b1137fe