From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Oskolkov Subject: [PATCH net-next 0/5] net: prefer listeners bound to an address Date: Wed, 12 Dec 2018 13:15:32 -0800 Message-ID: <20181212211537.199044-1-posk@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Cc: Peter Oskolkov , Eric Dumazet , Peter Oskolkov To: David Miller , netdev@vger.kernel.org Return-path: Received: from mail-pl1-f201.google.com ([209.85.214.201]:38422 "EHLO mail-pl1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726263AbeLLVQC (ORCPT ); Wed, 12 Dec 2018 16:16:02 -0500 Received: by mail-pl1-f201.google.com with SMTP id 4so13737639plc.5 for ; Wed, 12 Dec 2018 13:16:02 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: A relatively common use case is to have several IPs configured on a host, and have different listeners for each of them. We would like to add a "catch all" listener on addr_any, to match incoming connections not served by any of the listeners bound to a specific address. However, port-only lookups can match addr_any sockets when sockets listening on specific addresses are present if so_reuseport flag is set. This patchset eliminates lookups into port-only hashtable, as lookups by (addr,port) tuple are easily available. In a future patchset I plan to explore whether it is possible to remove port-only hashtables completely: additional refactoring will be required, as some non-lookup code uses the hashtables. Peter Oskolkov (5): net: udp: prefer listeners bound to an address net: udp6: prefer listeners bound to an address net: tcp: prefer listeners bound to an address net: tcp6: prefer listeners bound to an address selftests: net: test that listening sockets match on address properly net/ipv4/inet_hashtables.c | 60 +--- net/ipv4/udp.c | 76 ++--- net/ipv6/inet6_hashtables.c | 54 +--- net/ipv6/udp.c | 79 ++---- tools/testing/selftests/net/.gitignore | 1 + tools/testing/selftests/net/Makefile | 4 +- .../selftests/net/reuseport_addr_any.c | 264 ++++++++++++++++++ .../selftests/net/reuseport_addr_any.sh | 4 + 8 files changed, 325 insertions(+), 217 deletions(-) create mode 100644 tools/testing/selftests/net/reuseport_addr_any.c create mode 100755 tools/testing/selftests/net/reuseport_addr_any.sh -- 2.20.0.rc2.403.gdbc3b29805-goog