All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Ahern <dsahern@gmail.com>
To: netdev@vger.kernel.org
Cc: idosch@idosch.org, davem@davemloft.net,
	roopa@cumulusnetworks.com, nikolay@cumulusnetworks.com,
	tom@herbertland.com, David Ahern <dsahern@gmail.com>
Subject: [PATCH v2 net-next 00/10] net/ipv6: Add support for path selection using hash of 5-tuple
Date: Thu,  1 Mar 2018 19:29:40 -0800	[thread overview]
Message-ID: <20180302032950.21154-1-dsahern@gmail.com> (raw)

Hardware supports multipath selection using the standard L4 5-tuple
instead of just L3 and the flow label. In addition, some network
operators prefer IPv6 path selection to use the 5-tuple. To that end,
add support to IPv6 for multipath hash policy similar to
bf4e0a3db97eb ("net: ipv4: add support for ECMP hash policy choice").
The default is still L3 which covers source and destination addresses
along with flow label and IPv6 protocol. This gives users a choice in
hash algorithms if they believe L3 only and the IPv6 flow label are not
sufficient for their use case.

A separate sysctl is added for IPv6, allowing IPv4 and IPv6 to use
different algorithms if desired.

The first 3 patches modify the IPv4 variant so that at the end of the
patch set the ipv4 and ipv6 implementations are direct parallels.

Patch 4 refactors the existing rt6_multipath_hash in preparation for
adding the policy option.

Patch 5 renames the existing netevent to have IPv4 in the name so ipv4
changes can be distinguished from IPv6 if the netevent handler cares.

Patch 6 adds the skb as an argument through the FIB lookup functions
to the multipath selection. Needed for the forwarding case.
 
Patch 7 adds the L4 hash support.

Patch 8 adds the hook for the netevent to the spectrum driver to update
the ASIC.

Patch 9 removes no longer used code.

Patch 10 adds a testcase for IPv6 multipath with L4 hash.

v1 to v2
- rebased to top of tree
- added refactor of fib_multipath_hash following recent change
- plumb skb through lookup functions to multipath selection
- fix sysctl setting; was missing the data set in ipv6_sysctl_net_init
- added test case

RFC to v1:
- rebase to top of net-next
- fix addr_type in hash_keys and removed flow label as noticed by Ido
- added a comment to cover letter about choice in algorithms based on
  use case per Or's comments

David Ahern (10):
  net/ipv4: Pass net to fib_multipath_hash instead of fib_info
  net: Align ip_multipath_l3_keys and ip6_multipath_l3_keys
  net/ipv4: Simplify fib_multipath_hash with optional flow keys
  net/ipv6: Make rt6_multipath_hash similar to fib_multipath_hash
  net: Rename NETEVENT_MULTIPATH_HASH_UPDATE
  net/ipv6: Pass skb to route lookup
  net/ipv6: Add support for path selection using hash of 5-tuple
  mlxsw: spectrum_router: Add support for ipv6 hash policy update
  net: Remove unused get_hash_from_flow functions
  selftests: forwarding: Add multipath test for L4 hashing

 Documentation/networking/ip-sysctl.txt             |   7 ++
 drivers/infiniband/core/cma.c                      |   2 +-
 .../net/ethernet/mellanox/mlxsw/spectrum_router.c  |  13 +-
 drivers/net/ipvlan/ipvlan_core.c                   |   3 +-
 drivers/net/vrf.c                                  |   7 +-
 include/net/fib_rules.h                            |   1 +
 include/net/flow.h                                 |  15 ---
 include/net/ip6_fib.h                              |   4 +-
 include/net/ip6_route.h                            |  15 ++-
 include/net/ip_fib.h                               |   5 +-
 include/net/netevent.h                             |   3 +-
 include/net/netns/ipv6.h                           |   1 +
 net/core/flow_dissector.c                          |  16 ---
 net/ipv4/fib_semantics.c                           |   2 +-
 net/ipv4/route.c                                   |  53 ++++----
 net/ipv4/sysctl_net_ipv4.c                         |   2 +-
 net/ipv6/anycast.c                                 |   2 +-
 net/ipv6/fib6_rules.c                              |   8 +-
 net/ipv6/icmp.c                                    |   5 +-
 net/ipv6/ip6_fib.c                                 |   3 +-
 net/ipv6/ip6_gre.c                                 |   2 +-
 net/ipv6/ip6_tunnel.c                              |   4 +-
 net/ipv6/ip6_vti.c                                 |   2 +-
 net/ipv6/mcast.c                                   |   4 +-
 net/ipv6/netfilter/ip6t_rpfilter.c                 |   2 +-
 net/ipv6/netfilter/nft_fib_ipv6.c                  |   3 +-
 net/ipv6/route.c                                   | 134 +++++++++++++++------
 net/ipv6/seg6_local.c                              |   4 +-
 net/ipv6/sysctl_net_ipv6.c                         |  27 +++++
 .../selftests/net/forwarding/router_multipath.sh   |  44 +++++++
 30 files changed, 261 insertions(+), 132 deletions(-)

-- 
2.11.0

             reply	other threads:[~2018-03-02  3:29 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-02  3:29 David Ahern [this message]
2018-03-02  3:29 ` [PATCH v2 net-next 01/10] net/ipv4: Pass net to fib_multipath_hash instead of fib_info David Ahern
2018-03-02 13:12   ` Ido Schimmel
2018-03-02 15:28     ` David Ahern
2018-03-02  3:29 ` [PATCH v2 net-next 02/10] net: Align ip_multipath_l3_keys and ip6_multipath_l3_keys David Ahern
2018-03-02 13:22   ` Ido Schimmel
2018-03-02  3:29 ` [PATCH v2 net-next 03/10] net/ipv4: Simplify fib_multipath_hash with optional flow keys David Ahern
2018-03-02 13:26   ` Ido Schimmel
2018-03-02  3:29 ` [PATCH v2 net-next 04/10] net/ipv6: Make rt6_multipath_hash similar to fib_multipath_hash David Ahern
2018-03-02 13:35   ` Ido Schimmel
2018-03-02  3:29 ` [PATCH v2 net-next 05/10] net: Rename NETEVENT_MULTIPATH_HASH_UPDATE David Ahern
2018-03-02 13:36   ` Ido Schimmel
2018-03-02  3:29 ` [PATCH v2 net-next 06/10] net/ipv6: Pass skb to route lookup David Ahern
2018-03-02 13:49   ` Ido Schimmel
2018-03-02  3:29 ` [PATCH v2 net-next 07/10] net/ipv6: Add support for path selection using hash of 5-tuple David Ahern
2018-03-02 13:52   ` Ido Schimmel
2018-03-02  3:29 ` [PATCH v2 net-next 08/10] mlxsw: spectrum_router: Add support for ipv6 hash policy update David Ahern
2018-03-02 14:02   ` Ido Schimmel
2018-03-02 15:33     ` David Ahern
2018-03-02  3:29 ` [PATCH v2 net-next 09/10] net: Remove unused get_hash_from_flow functions David Ahern
2018-03-02 14:09   ` Ido Schimmel
2018-03-02 15:33     ` David Ahern
2018-03-02  3:29 ` [PATCH v2 net-next 10/10] selftests: forwarding: Add multipath test for L4 hashing David Ahern
2018-03-02 14:10   ` Ido Schimmel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180302032950.21154-1-dsahern@gmail.com \
    --to=dsahern@gmail.com \
    --cc=davem@davemloft.net \
    --cc=idosch@idosch.org \
    --cc=netdev@vger.kernel.org \
    --cc=nikolay@cumulusnetworks.com \
    --cc=roopa@cumulusnetworks.com \
    --cc=tom@herbertland.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.