Re: [tcpm] Fwd: New Version Notification for draft-gont-tcpm-urgent-data-00

Fernando Gont <> Wed, 29 October 2008 02:27 UTC

Return-Path: <>
Received: from [] (localhost []) by (Postfix) with ESMTP id 796323A68A0; Tue, 28 Oct 2008 19:27:32 -0700 (PDT)
Received: from localhost (localhost []) by (Postfix) with ESMTP id DBC7F3A68A0 for <>; Tue, 28 Oct 2008 19:27:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.073
X-Spam-Status: No, score=-2.073 tagged_above=-999 required=5 tests=[AWL=0.718, BAYES_00=-2.599, RCVD_IN_DNSWL_LOW=-1, SARE_RECV_SPEEDY_AR=0.808]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id UzRYZhmzdufn for <>; Tue, 28 Oct 2008 19:27:30 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 9F5E83A676A for <>; Tue, 28 Oct 2008 19:27:28 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 2665E6B6590; Tue, 28 Oct 2008 23:27:32 -0300 (ART)
Received: from ( [] (may be forged)) (authenticated bits=0) by (8.14.1/8.13.8) with ESMTP id m9T2RAHQ001594; Wed, 29 Oct 2008 00:27:11 -0200
Message-Id: <>
X-Mailer: QUALCOMM Windows Eudora Version
Date: Tue, 28 Oct 2008 23:21:04 -0300
To: David Borman <>
From: Fernando Gont <>
In-Reply-To: <>
References: <> <> <> <>
Mime-Version: 1.0
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-3.0 ( []); Tue, 28 Oct 2008 23:27:30 -0300 (ART)
Subject: Re: [tcpm] Fwd: New Version Notification for draft-gont-tcpm-urgent-data-00
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"

At 02:42 a.m. 28/10/2008, David Borman wrote:

>>Firstly, the recv(2) with MSG_OOB only returns a single byt of
>>urgent data, whereas according to your explanation it should return
>>all data prior to, and including, the Urgent pointer.
>No, applications shouldn't be using recv() with MSG_OOB on TCP
>sockets.  That is the interface for the old, broken BSD interpretation
>of the urgent pointer.  TCP does not have out of band data.  The
>SO_OOBINLINE option was added so that new applications (new, circa
>1989, the date of RFC 1122) could turn this broken interface off and
>leave the data in the data stream where it belongs.

By default, the byte pointer byte (UP-1) is till kept OOB, nowadays.

Even worse, it has been reported to me that some major operating 
system did things even worse: it would queue what it thought was 
urgent data until the application read it by a recv(")/MSG_OOBB-like 
call. If the app didn't recv() this "OOB", then the urg data would 
pile up, until a DoS condition....

>  It was felt that
>we couldn't just change the BSD TCP implementation to the new
>behavior, because that would break all the existing applications.
>With SO_OOBINLINE, applications could switch over without there
>needing to be a flag day.

I believe this should be clarified. Do you?

I will prepare some text to update our draft before the 
non-00-version deadline....

>>>it to the application out-of-band.  To fix that, the SO_OOBINLINE
>>>socket option was introduced, and is still around today.  All
>>>applications that use urgent data should be using the SO_OOBINLINE
>>>option, there's no excuse for using the old, broken BSD
>>>about urgent data.
>>Well, this seems to be the default for all major TCP implementations
>>(see our survey).
>Ok, there are two issues here.  First, SO_OOBINLINE turns off the old,
>broken BSD interpretation that removed a byte of data from the data
>stream and presented it to the application with the recv()/MSG_OOB

Agreed. I believe this should be clarified.

>The second issue is which byte is indicated in the packet with
>the urgent pointer.  If the application knows what the kernel does, it
>can adjust accordingly so that the correct byte gets marked in the TCP
>data stream.

Not sure what you mean. The issue here is how the *remote* TCP sets 
the urgent pointer. How could you know whether the remote TCP set the 
UP such that it points to the last byte of urgent data (RFC1122) or 
to the byte following the last byte of urgent data?

Considering that even SO_OOBINLINE doesn't change the semantics of 
the UP, I think RFC 1122 could be updated to reflect what current 
implementations are doing. (this is one of the "updates" that our 
draft was aiming)

>I will say that using the recv()/MSG_OOB interface is the bigger
>issue.  You just have to look at the BSD Telnet implementation and the
>dances that it does if SO_OOBINLINE isn't defined to understand why
>that broken interface is such a bad idea.

So we have to issues:

* Deprecate recv(2)/MSG_OOB and encourage SO_OOBINLINE. (with which 
you seem to agree)

* Update RFC 793/RFC1122 wrt where the UP points to, to reflect what 
everybody does and has been doing. (with which I don't know whether 
you agree or not).

Please let me know what you think, so that we can update our draft accordingly.


Kind regards,

Fernando Gont
e-mail: ||
PGP Fingerprint: 7809 84F5 322E 45C7 F1C9 3945 96EE A9EF D076 FFF1

tcpm mailing list