Re: [multipathtcp] Multipath Address Family

Andrew Yourtchenko <ayourtch@cisco.com> Wed, 25 November 2009 03:35 UTC

Return-Path: <ayourtch@cisco.com>
X-Original-To: multipathtcp@core3.amsl.com
Delivered-To: multipathtcp@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id B935D28C1C1 for <multipathtcp@core3.amsl.com>; Tue, 24 Nov 2009 19:35:40 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id utWDnhcajxrq for <multipathtcp@core3.amsl.com>; Tue, 24 Nov 2009 19:35:39 -0800 (PST)
Received: from av-tac-bru.cisco.com (weird-brew.cisco.com [144.254.15.118]) by core3.amsl.com (Postfix) with ESMTP id 9EE3228C177 for <multipathtcp@ietf.org>; Tue, 24 Nov 2009 19:35:39 -0800 (PST)
X-TACSUNS: Virus Scanned
Received: from strange-brew.cisco.com (localhost.cisco.com [127.0.0.1]) by av-tac-bru.cisco.com (8.13.8+Sun/8.13.8) with ESMTP id nAP3Vn1o022792; Wed, 25 Nov 2009 04:31:49 +0100 (CET)
Received: from dhcp-bru-peg2-vl25-144-254-8-244.cisco.com (dhcp-bru-peg2-vl25-144-254-8-244.cisco.com [144.254.8.244]) by strange-brew.cisco.com (8.13.8+Sun/8.13.8) with ESMTP id nAP3Vk37022180; Wed, 25 Nov 2009 04:31:46 +0100 (CET)
Date: Wed, 25 Nov 2009 04:31:47 +0100
From: Andrew Yourtchenko <ayourtch@cisco.com>
X-X-Sender: ayourtch@ayourtch-lnx.stdio.be
To: Joe Touch <touch@ISI.EDU>
In-Reply-To: <alpine.DEB.2.00.0911250211520.23603@ayourtch-lnx.stdio.be>
Message-ID: <alpine.DEB.2.00.0911250428590.23603@ayourtch-lnx.stdio.be>
References: <E9EE0C1A-C9D3-4EBC-97FD-E1B1628CD2E7@iki.fi> <3c3e3fca0911090542h54e45784qbdbf1f338a4c3e90@mail.gmail.com> <E03D46E1-51EA-4273-A8A7-4F37F88B2E92@iki.fi> <20091123.092214.140617438.nishida@sfc.wide.ad.jp> <48DA092B-F3BC-432E-A199-B265DDED39DA@iki.fi> <3c3e3fca0911240434p4d95ec7an34615ae218faa4f@mail.gmail.com> <C622F375-EE67-46AE-AC28-6617CFEF6D12@lurchi.franken.de> <BF345F63074F8040B58C00A186FCA57F1C65FB29B9@NALASEXMB04.na.qualcomm.com> <4B0C607A.6060503@isi.edu> <BF345F63074F8040B58C00A186FCA57F1C65FB29C0@NALASEXMB04.na.qualcomm.com> <4B0C6590.9010000@isi.edu> <BF345F63074F8040B58C00A186FCA57F1C65FB29C6@NALASEXMB04.na.qualcomm.com> <4B0C6C13.2060103@isi.edu> <BF345F63074F8040B58C00A186FCA57F1C65FB29CB@NALASEXMB04.na.qualcomm.com> <4B0C6FBE.40003@isi.edu> <alpine.DEB.2.00.0911250211520.23603@ayourtch-lnx.stdio.be>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset="US-ASCII"; format="flowed"
Cc: "multipathtcp@ietf.org" <multipathtcp@ietf.org>
Subject: Re: [multipathtcp] Multipath Address Family
X-BeenThere: multipathtcp@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
Reply-To: ayourtch@cisco.com
List-Id: Multi-path extensions for TCP <multipathtcp.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/multipathtcp>, <mailto:multipathtcp-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/multipathtcp>
List-Post: <mailto:multipathtcp@ietf.org>
List-Help: <mailto:multipathtcp-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/multipathtcp>, <mailto:multipathtcp-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 25 Nov 2009 03:35:40 -0000

On Wed, 25 Nov 2009, Andrew Yourtchenko wrote:

> On Tue, 24 Nov 2009, Joe Touch wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>> 
>> 
>> 
>> Laganier, Julien wrote:
>>> Joe Touch wrote:
>>>> Laganier, Julien wrote:
>>>>> Joe Touch wrote:
>>>>>> [...]
>>>>>> Sure, but either way you need to return at least the primary IP
>>>>>> address/port pair as results of the connect_to_name() call.
>>>>>> 
>>>>>> It's not sufficient to return an undistinguished set of such pairs,
>>>>>> nor is it sufficient to not return any such pairs.
>>>>> Unless the socket has been bind()'ed earlier, connect() doesn't
>>>>> return to the caller any information about the address/port that
>>>>> was picked as a result of the connect(). The application would need
>>>>> to call getsockname() to know what address/port pair was used.
>>>> Sure. I was speaking in a general sense.
>>>> 
>>>>> If an application is modified to use the new API, it will have to use
>>>>> getpeername() in addition to getsockname() to know what initial
>>>>> address pair has been connected.
>>>> That basically kills legacy apps. You want getsockname to return the
>>>> initial, and some other call to return the full list (or supplemental
>>>> socket pairs).
>>> 
>>> Hmm... Not sure I understand your statement about legacy apps.
>>> 
>>> We've been talking about an app using a new connect_to_name() API call, so 
>>> it's no longer entirely legacy -- If it wants to use the new 
>>> connect_to_name() API call, it has to use getpeername() to get its peer 
>>> address, that's it.
>>> 
>>> I do not see how that is related to legacy apps, nor while it would be 
>>> killing them :)
>> 
>> Agreed. But I can port a legacy app easier if these interfaces augment,
>> but don't change, the semantics.
>
> FWIW (apologies to get in the middle of the conversation) - I had looked at a 
> couple of browser apps when working on the prototype code for the "happy 
> eyeballs" draft - my code was implementing the connect_by_name() semantics, 
> with two threads racing in the background for IPv4 and IPv6 host lookup and 
> connect attempts.

And to correct/clarify myself: I was working with the 
connect_by_name(hostname,servicename) - similar to getaddrinfo()

> I saw the biggest difficulty with porting the apps to use the 
> connect_to_name() API in the work required to refactor the code that deals 
> with the blocking resolver in a non-blocking manner (along with giving the 
> user the visual clues of "Resolving host for hostname.example.com..."), 
> selects in some application-specific way the sockaddr to use and passes it to 
> the non-blocking socket code, and deals with the various recoverable error 
> conditions (like retrying with other address).
>
> But, that said, I think with the right hooks for very specific cases where 
> the application needs the fine-grained control over what exactly the "remote 
> hostname" should boil down to, connect_by_name() could save quite a lot of 
> "boilerplate coding" for the future.

thanks,
andrew