[Geopriv] LIS discovery implementation thoughts

"Richard L. Barnes" <rbarnes@bbn.com> Fri, 14 January 2011 04:43 UTC

Return-Path: <rbarnes@bbn.com>
X-Original-To: geopriv@core3.amsl.com
Delivered-To: geopriv@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id E8FB03A686B for <geopriv@core3.amsl.com>; Thu, 13 Jan 2011 20:43:01 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -102.465
X-Spam-Level:
X-Spam-Status: No, score=-102.465 tagged_above=-999 required=5 tests=[AWL=0.134, BAYES_00=-2.599, USER_IN_WHITELIST=-100]
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 oFTZ8YJF87Zo for <geopriv@core3.amsl.com>; Thu, 13 Jan 2011 20:43:00 -0800 (PST)
Received: from smtp.bbn.com (smtp.bbn.com [128.33.1.81]) by core3.amsl.com (Postfix) with ESMTP id C3D3A3A6C4E for <geopriv@ietf.org>; Thu, 13 Jan 2011 20:43:00 -0800 (PST)
Received: from [128.89.253.213] (port=58751 helo=[192.168.1.16]) by smtp.bbn.com with esmtps (TLSv1:AES128-SHA:128) (Exim 4.71 (FreeBSD)) (envelope-from <rbarnes@bbn.com>) id 1PdbXQ-000Mc6-7o for geopriv@ietf.org; Thu, 13 Jan 2011 23:45:24 -0500
From: "Richard L. Barnes" <rbarnes@bbn.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Date: Thu, 13 Jan 2011 23:45:19 -0500
Message-Id: <E969A511-E6D1-4437-829D-8A08437431DD@bbn.com>
To: geopriv@ietf.org
Mime-Version: 1.0 (Apple Message framework v1082)
X-Mailer: Apple Mail (2.1082)
Subject: [Geopriv] LIS discovery implementation thoughts
X-BeenThere: geopriv@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Geographic Location/Privacy <geopriv.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/geopriv>, <mailto:geopriv-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/geopriv>
List-Post: <mailto:geopriv@ietf.org>
List-Help: <mailto:geopriv-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/geopriv>, <mailto:geopriv-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 14 Jan 2011 04:43:02 -0000

Hey all,

Just wanted to share some impressions of the LIS discovery process, including NAT traversal, based on our experience implementing this function in the igtk project [1].  (Note: The techniques here haven't yet been merged into the sourceforge version.)

The basic flow-chart in RFC 5986 is pretty easy to implement, although it wasn't really clear what to do for step (3), "Check URI", beyond verifying that it's a well-formed URI.  In pseudo-code, we ended up with something like this:

foreach (NetworkInterface iface) {
    DomainIterator it(iface);
    while (it.hasNext()) {
        string lisUri = performDdds(it.next());
	if (valid(lisUri)) { return lisUri; }
    }
}

Here the DomainIterator supplies the following domains, if they are available:
1. Option 213 [NB: Not DHCPv6 capable]
2. Option 15

The DomainIterator construct also allows us to easily extend the process to support NAT traversal.  If neither of the above options works, the DomainIterator looks at the IP address for the interface, and if it's private (any of the IANA reserved ranges [2]), then it does a STUN request to find a public address.  Using either the interface address or the STUN address, it then provides the following domains:
3. The reverse domain
4. The reverse domain with the first label dropped
5. The reverse domain with the first two labels dropped 

The entire LIS discovery service, which listens for network interface changes and emits alerts when it finds a new LIS URI, required 584 lines of C++.  A very basic STUN client was another 293.

So in a nutshell, extending a client from RFC 5986 to draft-thomson-geopriv-res-gw-lis-discovery was pretty trivial, just a matter of adding a few domains to the search list.  We hope to have the code posted to the igtk site soon; if you're interested in an advance copy, let me know and I can send you an interim snapshot.

--Richard


[1] <http://igtk.sourceforge.net/>
[2] <http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml>