[Gen-art] Gen-ART review of draft-carpenter-renum-needs-work-04

"Vijay K. Gurbani" <vkg@alcatel-lucent.com> Mon, 23 November 2009 23:21 UTC

Return-Path: <vkg@alcatel-lucent.com>
X-Original-To: gen-art@core3.amsl.com
Delivered-To: gen-art@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 71D793A68B3 for <gen-art@core3.amsl.com>; Mon, 23 Nov 2009 15:21:50 -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 J4wAkhExFgkD for <gen-art@core3.amsl.com>; Mon, 23 Nov 2009 15:21:49 -0800 (PST)
Received: from ihemail2.lucent.com (ihemail2.lucent.com [135.245.0.35]) by core3.amsl.com (Postfix) with ESMTP id EBB303A6844 for <gen-art@ietf.org>; Mon, 23 Nov 2009 15:21:48 -0800 (PST)
Received: from umail.lucent.com (h135-3-40-63.lucent.com [135.3.40.63]) by ihemail2.lucent.com (8.13.8/IER-o) with ESMTP id nANNLfaw020454 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 23 Nov 2009 17:21:41 -0600 (CST)
Received: from [135.185.236.17] (il0015vkg1.ih.lucent.com [135.185.236.17]) by umail.lucent.com (8.13.8/TPES) with ESMTP id nANNLeZx020791; Mon, 23 Nov 2009 17:21:40 -0600 (CST)
Message-ID: <4B0B1903.1050901@lucent.com>
Date: Mon, 23 Nov 2009 17:21:39 -0600
From: "Vijay K. Gurbani" <vkg@alcatel-lucent.com>
User-Agent: Thunderbird 2.0.0.6 (Windows/20070728)
MIME-Version: 1.0
To: Brian E Carpenter <brian.e.carpenter@gmail.com>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Scanned-By: MIMEDefang 2.57 on 135.245.2.35
Cc: "Romascanu, Dan (Dan)" <dromasca@avaya.com>, gen-art@ietf.org
Subject: [Gen-art] Gen-ART review of draft-carpenter-renum-needs-work-04
X-BeenThere: gen-art@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: "GEN-ART: General Area Review Team" <gen-art.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/gen-art>, <mailto:gen-art-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/gen-art>
List-Post: <mailto:gen-art@ietf.org>
List-Help: <mailto:gen-art-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/gen-art>, <mailto:gen-art-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 23 Nov 2009 23:21:50 -0000

I have been selected as the General Area Review Team (Gen-ART)
reviewer for this draft (for background on Gen-ART, please see
http://www.alvestrand.no/ietf/gen/art/gen-art-FAQ.html).

Please resolve these comments along with any other Last Call comments
you may receive.

Document: draft-carpenter-renum-needs-work-04
Reviewer: Vijay K. Gurbani
Review Date: Nov. 23, 2009
IETF LC End Date: Nov. 19, 2009
IESG Telechat date: unknown

Summary: This draft is ready for publication as a Informational;
I reviewed the -03 version and all my comments have been
addressed -- but ...

I remain in a state of unease about the discussion Brian and I
had about networking APIs and how they pertain to Java vs. C/C++.
Let me first cut-and-paste the relevant section from -04 that
still makes me uneasy:

   5.1.4. Application layer issues
   ...
   It should be noted that applications are in effect encouraged to be
   aware of and to store IP addresses by the very nature of the socket
   API calls gethostbyname() and getaddrinfo().  It is highly
   unfortunate that many applications use APIs that require the
   application to see and use lower layer objects, such as network-layer
   addresses.  However, the BSD Sockets API was designed and deployed
   before the Domain Name System (DNS) was created, so there were few
   good options at the time.  This issue is made worse by the fact that
   these functions do not return an address lifetime, so that
   applications have no way to know when an address is no longer valid.
   The extension of the same model to cover IPv6 has complicated this
   problem somewhat.  If a model was adopted in which only FQDNs were
   exposed to applications, and addresses were cached with appropriate
   lifetimes within the API, most of these problems would disappear.  It
   should be noted that at least the first part of this is already
   available for some programming languages.  A common example is Java,
   where only FQDNs need to be handled by application code in normal
   circumstances.  This is highly beneficial for programmers who are not
   networking experts, and insulates applications software from many
   aspects of renumbering.  It would be helfpul to have similarly
   abstract, DNS oriented, Networking APIs widely available for C and
   C++.

There are two issues buried in the above paragraph:

(1) Networking APIs do not return a ttl for an address.
(2) Networking APIs should only require the caller to supply a FQDN.

The implication to the reader after going through the above
paragraph appears to be that neither Java nor C/C++ supports
(1), but Java supports (2) and C/C++ do not.

I agree that neither Java nor C/C++ support (1), as best as I know.
However, I am somewhat uncomfortable at the claim that (2) is
supported better in Java than it is in C/C++.

I will note that in C/C++, I can supply either a FQDN or a
dotted-decimal/colon-separated raw IP address as the first
parameter to to getaddrinfo() API:

   int getaddrinfo(const char *nodename, const char  *servname,
     const struct addrinfo *hints, struct addrinfo **res);

In the same vein, the Java InetSocketAddress() constructor is
overloaded to allow for a raw IP address to be passed in as
well as a FQDN string:

   InetSocketAddress(InetAddress addr, int port)
       Creates a socket address from an IP address and a port number.
   InetSocketAddress(String hostname, int port)
       Creates a socket address from a hostname and a port number.

Thus, it appears that both C/C++ and Java support the same amount
of abstraction.  The only difference is that in C/C++, the
socket is treated as a file descriptor following the Unix
convention of abstracting I/O behind a descriptor of some sort.
In Java, you get back an object -- but this is an artifact of the
specific programming language and the environment.

If Brian agrees that C/C++ and Java are analogous in both (1) and
(2), then we can agree to word-smithing the paragraph above to
reflect this quickly.  If not, then I am probably missing something
germane and I hope Brian fills me in so we can proceed on this
draft expeditiously.

Sorry, I am not being difficult -- just trying to ensure that
my understanding lines up with Brian's.

Thanks,

- vijay
-- 
Vijay K. Gurbani, Bell Laboratories, Alcatel-Lucent
1960 Lucent Lane, Rm. 9C-533, Naperville, Illinois 60566 (USA)
Email: vkg@{alcatel-lucent.com,bell-labs.com,acm.org}
Web:   http://ect.bell-labs.com/who/vkg/