Re: [multipathtcp] Multipath Address Family

Andrew Yourtchenko <ayourtch@cisco.com> Wed, 25 November 2009 02:16 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 269E83A697F for <multipathtcp@core3.amsl.com>; Tue, 24 Nov 2009 18:16:28 -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 fRhUJDgEgNtB for <multipathtcp@core3.amsl.com>; Tue, 24 Nov 2009 18:16:27 -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 E96BC3A68BC for <multipathtcp@ietf.org>; Tue, 24 Nov 2009 18:16:26 -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 nAP2CZ26023118; Wed, 25 Nov 2009 03:12:35 +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 nAP2CZix007363; Wed, 25 Nov 2009 03:12:35 +0100 (CET)
Date: Wed, 25 Nov 2009 03:12:35 +0100
From: Andrew Yourtchenko <ayourtch@cisco.com>
X-X-Sender: ayourtch@ayourtch-lnx.stdio.be
To: Joe Touch <touch@ISI.EDU>
In-Reply-To: <4B0C6FBE.40003@isi.edu>
Message-ID: <alpine.DEB.2.00.0911250211520.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>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; format="flowed"; charset="US-ASCII"
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 02:16:28 -0000

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.

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