Re: [multipathtcp] Multipath Address Family

Pasi Sarolahti <pasi.sarolahti@iki.fi> Wed, 25 November 2009 01:52 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 C5A973A691B for <multipathtcp@core3.amsl.com>; Tue, 24 Nov 2009 17:52:16 -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 xR-RuLgl-Lsa for <multipathtcp@core3.amsl.com>; Tue, 24 Nov 2009 17:52:15 -0800 (PST)
Received: from argo.otaverkko.fi (argo.otaverkko.fi [212.68.0.2]) by core3.amsl.com (Postfix) with ESMTP id 5F53E3A6897 for <multipathtcp@ietf.org>; Tue, 24 Nov 2009 17:52:15 -0800 (PST)
Received: from wifi172.ICSI.Berkeley.EDU (wifi172.ICSI.Berkeley.EDU [192.150.187.172]) by argo.otaverkko.fi (Postfix) with ESMTP id 6DCDD25ED06; Wed, 25 Nov 2009 03:52:09 +0200 (EET)
Message-Id: <809D0BC9-83EC-4E42-85DC-BCAB2905F403@iki.fi>
From: Pasi Sarolahti <pasi.sarolahti@iki.fi>
To: William Herrin <bill@herrin.us>
In-Reply-To: <3c3e3fca0911240434p4d95ec7an34615ae218faa4f@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, 24 Nov 2009 17:52:06 -0800
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>
X-Mailer: Apple Mail (2.936)
Cc: multipathtcp@ietf.org
Subject: Re: [multipathtcp] Multipath Address Family
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: Wed, 25 Nov 2009 01:52:16 -0000

On Nov 24, 2009, at 4:34 AM, William Herrin wrote:

> It seems like you want to preserve the connect() call's parameters by
> altering the definition of sockaddr so that it can contain multiple
> addresses.
>
> But functionally, what we really want to do is pass an array of
> sockaddrs to connect().
>
> Stupid question time: what makes redefining sockaddr superior to an
> extended API call that supplants connect() and accepts an array of
> sockaddrs?

Another question: is it better to have a compile-time error (or  
segmentation fault) or run-time error code, if application was built  
with multi-address support, but system was not?

Even if we had a new mptcp_connectx, bindx, etc. calls, the problem  
still remains what to do with the old socket operations that assume  
only single address per endpoint. A new address family would be one  
(unfortunately non-backwards compatible) way to address that problem  
(possibly with the cost of introducing new problems).

I think there is a certain elegancy in having a minimal socket API  
with just a small basic set of operations. Until now the same socket  
API has provided to be flexible enough to support many uses over time  
(Unix domain sockets that take pathname as sockaddr, IPsec PF_KEY  
sockets, netlink sockets, ...). I'm not yet ready to buy it that we  
have come to a point that the old API is not sufficient anymore, if  
the same functionality could be implemented by specifying a couple of  
new socket parameters for a feature that is supported by just some of  
the protocols under the API.

> Poking around linux's include files (netinet/in.h, bits/socket.h) I
> notice that they go to a lot of trouble to make all sockaddrs come out
> to exactly the same number of bytes. Won't a variable length sockaddr
> that holds a variable number of addresses make a mess of that?

I guess the question is whether the length of sockaddr is a Linux  
implementation issue that can be fixed, or whether there is some  
deeper reason for having the sockaddrs to be of same length. In Unix  
domain sockets the pathnames in sockaddr can be variable length and  
quite long, to my understanding, certainly worth of several IP  
addresses. But it would be interesting to know what, if anything,  
would break in legacy systems with a new sockaddr variant. I'm  
assuming that the TCP stack needs to go through fairly significant  
change anyway because of MPTCP.

> Found a quote I think bears on the topic at
> http://lkml.indiana.edu/hypermail/linux/net/9904.2/0091.html :
>
>> The AF_ prefix stands for "address family" and the PF_prefix stands  
>> for
>> "protocol family". Historicly, the intent was that a single  
>> protocol family
>> might support multiple address families and that the PF_ value was  
>> used to
>> create the socket and the AF_ value was used in socket address  
>> structures.
>> But in actuality, a protocol family supporting multiple address  
>> families has
>> never been supported and the <sys/socket.h> header defines the PF_  
>> value
>> for a given protocol to be equal to the AF_ value for that protocol.
>
> I think when we discuss allowing multipath TCP to use IPv4 and IPv6
> addresses interchangeably, we're talking about one protocol family
> using multiple address families, are we not?

I have been curious about this PF/AF dependence that seems like a long- 
standing "bug" in some systems. Have you ever investigated this  
deeper? Why would it be so hard to fix it so that you could have  
several address families in one protocol family?

- Pasi