Re: [multipathtcp] API: which address to use

Pasi Sarolahti <pasi.sarolahti@iki.fi> Tue, 10 November 2009 05:01 UTC

Return-Path: <pasi.sarolahti@iki.fi>
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 EFEFF3A6A27 for <multipathtcp@core3.amsl.com>; Mon, 9 Nov 2009 21:01: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=[AWL=0.000, 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 aIhIs8hcknCM for <multipathtcp@core3.amsl.com>; Mon, 9 Nov 2009 21:01:40 -0800 (PST)
Received: from argo.otaverkko.fi (argo.otaverkko.fi [212.68.0.2]) by core3.amsl.com (Postfix) with ESMTP id D20513A69DC for <multipathtcp@ietf.org>; Mon, 9 Nov 2009 21:01:39 -0800 (PST)
Received: from host-128-144.meeting.ietf.org (host-128-144.meeting.ietf.org [133.93.128.144]) by argo.otaverkko.fi (Postfix) with ESMTP id C4A5925ED11; Tue, 10 Nov 2009 07:02:04 +0200 (EET)
Message-Id: <E03D46E1-51EA-4273-A8A7-4F37F88B2E92@iki.fi>
From: Pasi Sarolahti <pasi.sarolahti@iki.fi>
To: William Herrin <bill@herrin.us>
In-Reply-To: <3c3e3fca0911090542h54e45784qbdbf1f338a4c3e90@mail.gmail.com>
Content-Type: text/plain; charset="US-ASCII"; format="flowed"; delsp="yes"
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0 (Apple Message framework v936)
Date: Tue, 10 Nov 2009 14:01:59 +0900
References: <E9EE0C1A-C9D3-4EBC-97FD-E1B1628CD2E7@iki.fi> <3c3e3fca0911090542h54e45784qbdbf1f338a4c3e90@mail.gmail.com>
X-Mailer: Apple Mail (2.936)
Cc: multipathtcp@ietf.org
Subject: Re: [multipathtcp] API: which address to use
X-BeenThere: multipathtcp@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
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: Tue, 10 Nov 2009 05:01:41 -0000

On Nov 9, 2009, at 10:42 PM, William Herrin wrote:

> On Mon, Nov 9, 2009 at 5:49 AM, Pasi Sarolahti  
> <pasi.sarolahti@iki.fi> wrote:
>> This problem was just discussed in the meeting. Could one possible  
>> solution
>> to the getsockname semantics problem be to use a separate address  
>> family for
>> multipath connections? It could be similarly structured to the  
>> traditional
>> AF, but from the different AF the app would know the semantics are
>> different.
>
> Not really, no.
>
> Backwards compatibility is an issue, as you mentioned. So is a desire
> to be able to use both IPv4 and IPv6 paths in a single multipath TCP
> connection. If it's a legacy app then it's expecting getsockname to
> return the same address family that it used to initiate the socket. If
> you provide something else you could open a path for buffer overflows
> or other mischief.

Ok, so there could be a non-backwards compatible way and a  
(pseudo)backwards compatible way. I don't think these had to be  
exclusive, and both could be supported at the same time.

Non-backwards compatible version would be to use new AF_MULTIPATH,  
that would be an array of AF_INET and AF_INET6 entries. Of course that  
would need to be used consistently throughout the connection lifetime.  
gethostname and getpeername would return the current set of active  
addresses at local or remote end. bind() could use this to bind to  
several addresses at a time. connect() could use this to give more  
than one known destination addresses to connect to (although the MPTCP  
protocol logic may prevent the actual connect operation from happening  
simultaneously).  gethostbyname might return several addresses from  
DNS in a single AF_MULTIPATH record, to be directly used by  
connect(AF_MULTIPATH), instead of needing to cycle through the  
addresses separately, as a traditional single-homed version would do.  
This would require modifications also elsewhere than TCP code, but  
that's what you get for having an API that exposes the IP address to  
the application and assumes only one address is in use at a time.

The backwards compatible version could just return the oldest active  
address and hope nothing breaks on legacy apps. I don't know if this  
is better or worse choice than returning the first used address that  
might not exist anymore. Has it been specified anywhere that  
getsockname/getpeername should return same result through the  
connection lifetime?

- Pasi