Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Dec 2012 11:15:32 -0500
From:      Keith Arner <vornum@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   Re: Problems with ephemeral port selection
Message-ID:  <CAEo_tUHOtv2DQawyS85-gaoUPawRwLFinSXWsMGcKFWP0qCgYA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
> Date: Sat, 01 Dec 2012 09:28:05 +0100
> From: Andre Oppermann <andre@freebsd.org>
>
> On 30.11.2012 15:09, Keith Arner wrote:
>> I've noticed some issues with ephemeral port number selection from
>> tcp_connect(),
>
> this is an excellent analysis.  Could you please file it as a problem
> report too and post the PR-number here so we can better track it?

Done.  PR-number is: kern/174087

> From: Fernando Gont <fernando@gont.com.ar>
> Subject: Re: Problems with ephemeral port selection
>
> Please take a look at the discussion on how to "steal" incomming
> connections in Section 3.1 of RFC 6056.

Fair point.  I added your comment to kern/174087 when I filed it.
The points made in RFC 6056 actually answer a few outstanding
questions I had about why in_pcbbind_setup() behaves the way
it does.  In particular, I previously couldn't figure out why it was
taking special consideration for unconnected sockets.

With that in mind, I believe the criteria for check_suitable_port()
(as described bt RFC 6056) should be*:

  A candidate ephemeral port is suitable if and only if:
  1) There is no other existing local socket with the same 5-tuple.
  2) There is no local socket using the same local port number,
       and with either a wildcard fport or wildcard faddr.

I had previously suggested using in_pcblookup_hash() as
a check_suitable_port() function.  That would suffice for criterion
#1, but would fall short for criterion #2.  Looks like we need
yet another pcb lookup function.

Keith

* Yes, I realize that my terminology freely mixes the abstract
concepts in the RFC with the concrete language of the FreeBSD
implementation.

-- 
"A problem well put is half solved."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAEo_tUHOtv2DQawyS85-gaoUPawRwLFinSXWsMGcKFWP0qCgYA>