• Peter Oskolkov's avatar
    net: tcp: prefer listeners bound to an address · d9fbc7f6
    Peter Oskolkov authored
    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 patch eliminates lookups into port-only hashtable,
    as lookups by (addr,port) tuple are easily available.
    
    In addition, compute_score() is tweaked to _not_ match
    addr_any sockets to specific addresses, as hash collisions
    could result in the unwanted behavior described above.
    
    Tested: the patch compiles; full test in the last patch in this
    patchset. Existing reuseport_* selftests also pass.
    Suggested-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarPeter Oskolkov <posk@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d9fbc7f6
inet_hashtables.c 20.9 KB