[DMM] Alternatives for using setsockopt() for OnDemand session continuity requests

"Moses, Danny" <danny.moses@intel.com> Mon, 15 May 2017 10:27 UTC

Return-Path: <danny.moses@intel.com>
X-Original-To: dmm@ietfa.amsl.com
Delivered-To: dmm@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B65D1129A8D for <dmm@ietfa.amsl.com>; Mon, 15 May 2017 03:27:15 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.221
X-Spam-Level:
X-Spam-Status: No, score=-4.221 tagged_above=-999 required=5 tests=[BAYES_50=0.8, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WNstSQSAlE5A for <dmm@ietfa.amsl.com>; Mon, 15 May 2017 03:27:13 -0700 (PDT)
Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 88C05127369 for <dmm@ietf.org>; Mon, 15 May 2017 03:22:54 -0700 (PDT)
Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 May 2017 03:22:54 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.38,344,1491289200"; d="scan'208,217";a="102192547"
Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga006.fm.intel.com with ESMTP; 15 May 2017 03:22:54 -0700
Received: from hasmsx111.ger.corp.intel.com (10.184.198.39) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 15 May 2017 03:22:53 -0700
Received: from hasmsx106.ger.corp.intel.com ([169.254.2.229]) by HASMSX111.ger.corp.intel.com ([169.254.5.219]) with mapi id 14.03.0319.002; Mon, 15 May 2017 13:22:51 +0300
From: "Moses, Danny" <danny.moses@intel.com>
To: "dmm@ietf.org" <dmm@ietf.org>
Thread-Topic: Alternatives for using setsockopt() for OnDemand session continuity requests
Thread-Index: AdLNZH5fv/ByBXg1SIm+htLUgRSaNA==
Date: Mon, 15 May 2017 10:22:50 +0000
Message-ID: <F0CF5715D3D1884BAC731EA1103AC28134ADEE8F@HASMSX106.ger.corp.intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
dlp-product: dlpe-windows
dlp-version: 10.0.102.7
dlp-reaction: no-action
x-originating-ip: [10.184.70.10]
Content-Type: multipart/alternative; boundary="_000_F0CF5715D3D1884BAC731EA1103AC28134ADEE8FHASMSX106gercor_"
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/dmm/u0PmcSeOSQM6W80WbP7joeZv_l0>
Subject: [DMM] Alternatives for using setsockopt() for OnDemand session continuity requests
X-BeenThere: dmm@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Distributed Mobility Management Working Group <dmm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dmm>, <mailto:dmm-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dmm/>
List-Post: <mailto:dmm@ietf.org>
List-Help: <mailto:dmm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dmm>, <mailto:dmm-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 15 May 2017 10:27:16 -0000

At IETF 98, there was a request to avoid using setsockopt() as a blocking function for OnDemand as it is a function that is intended to merely set options and return immediately without waiting for external events (e.g., arrival of packets).

Some alternatives include:

*        Adding a new blocking function after setsockopt()

*        Using only the new function without setsockopt()

*        Using the new function without bind()


Add a new blocking function after setsockopt()

This alternative was suggested in the discussion in Chicago. The idea is to add a new call - waitforscservice() (wait for session continuity service) that blocks until the requested IP address with the session continuity service is provided by the network. This way, setsockopt() is used for setting the required session-continuity service request and does not block.

The sequence of operations by an application will be:

1.      Call socket() - open a socket

2.      Call setsockopt() - to set the required session continuity service: Fixed, session-lasting or non-persistent. This call may trigger the TCP stack in the mobile node to request the address.

3.      Call waitforscservice() - to block the thread until the address with the desired session-continuity service is provided (or until an indication that the service is not available)

4.      Call connect() - to start a 3-way handshake when a TCP socket is initiated

5.      Start receiving and transmitting bytes.

In this sequence, there is a hidden assumption that waitforscservice() binds the created source IP address to the socket. Alternatively, we can define waitforscservice() as a function that returns the created IP address and require the application to call bind() to explicitly bind the address to the socket.

Use only the new function without setsockopt()
This alternative defines a new blocking function: setsc() (Set Session Continuity), specifies the type of session continuity service desired by the application. It is returns immediately if a source IP address with the desired session continuity service was already allocate to the mobile node, or blocks and initiates a request to the network to provide the appropriate IP prefix. When the prefix is provided (or when the operation fails) the function returns with the assigned source IP address and appropriate return status.

After the source IP is set, the application calls bind() with the specified source IP address to bind it to the socket.

The sequence of operations by an application will be:

1.      Call socket() - open a socket

2.      Call setsc() - set the required session continuity service and block until the address is provided. Return the address that was generated as a result of this request.

3.      Call bind() with the provided IP address - bind the socket with the provided source IP address

4.      Call connect() - to start a 3-way handshake when a TCP socket is initiated

5.      Start receiving and transmitting bytes


Use the new function without bind()
Actually, setsc() can implicitly call bind() when successful in obtaining a source IP address with the desired session-continuity attributes. This eliminates the need to explicitly call bind().

The sequence of operations by an application will be:

1.      Call socket() - open a socket

2.      Call setsc() - set the required session continuity service (Fixed, Session-lasting or Non-persistent) and block until the address is provided.

3.      Call connect() - to start a 3-way handshake when a TCP socket is initiated

4.      Start receiving and transmitting bytes.

There are pros and cons to this approach: There are less functions to call on one hand, but there is less flexibility in choosing which source IP address to bind on the other. The previous alternative is more aligned with the traditional Socket operation enabling an application to bind to a specific source IP address or transport port only when required to do so.
Please share your thoughts and send your comments. Which is the preferred one? Any other (better) alternatives?

Thanks,
Danny


---------------------------------------------------------------------
A member of the Intel Corporation group of companies

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.