DTN Neighbor Discovery - Python IPND Proof of Concept Assembly

Register
Submit a solution
The challenge is finished.

Challenge Overview

1.0. Project Overview

Welcome to the NASA Disruption Tolerant Networking (DTN) project. DTN is an approach to computer network architecture that seeks to address the technical issues in heterogeneous networks that may lack continuous network connectivity.

Note that some literature may use the term Delay Tolerant Network which is also abbreviated as DTN - the two terms are used interchangeably.

DTN is designed to provide reliable end-to-end delivery of information between nodes, and to do so in an environment that experiences frequent connectivity disruptions and topology changes. Such a capability will directly support human and robotic space exploration, as well as have wide applicability to land-mobile and airborne terrestrial communications.

Learn more about DTN

 

Project Objectives

The goal of this project is very simple – and that is to update DTN ION so that it includes IP Neighbor Discovery (IPND).  

IPND is a method for otherwise oblivious nodes to learn of the existence, availability, and addresses of other DTN participants. IPND both sends and listens for small IP UDP announcement beacons that are addressed to an IP unicast, multicast, or broadcast address to discover specified remote neighbors, or unspecified local neighbors in the network topology.

Other DTN implementations, such as DTN2 and IBR, already support IPND. We now need to updated DTN ION to enable neighbor discovery capabilities as well. Neighbor discovery is also needed to enable future dynamic routing capability for the ION DTN implementation.

- See more at: http://www.topcoder.com/dtn/neighbor-discovery/#sthash.Mdb2QG1w.dpuf

2.0. Project Objectives

The goal of this project is fairly straightforward, to update an open source DTN implementation called DTN Interplanetary Overlay Network (DTN ION) so that it includes IP Neighbor Discovery (IPND) functionality. 

IPND is a method for otherwise oblivious nodes to learn of the existence, availability, and addresses of other DTN participants. IPND both sends and listens for small IP UDP announcement beacons that are addressed to an IP unicast, multicast, or broadcast address to discover specified remote neighbors, or unspecified local neighbors in the network topology.

Other DTN implementations, such as DTN2 and IBR, already support IPND. This project will design and implement updates to the DTN ION code written in C to add neighbor discovery capabilities.

Neighbor discovery is also needed to enable future dynamic routing capability for the ION DTN implementation.

 

Project Objectives

The goal of this project is very simple – and that is to update DTN ION so that it includes IP Neighbor Discovery (IPND).  

IPND is a method for otherwise oblivious nodes to learn of the existence, availability, and addresses of other DTN participants. IPND both sends and listens for small IP UDP announcement beacons that are addressed to an IP unicast, multicast, or broadcast address to discover specified remote neighbors, or unspecified local neighbors in the network topology.

Other DTN implementations, such as DTN2 and IBR, already support IPND. We now need to updated DTN ION to enable neighbor discovery capabilities as well. Neighbor discovery is also needed to enable future dynamic routing capability for the ION DTN implementation.

- See more at: http://www.topcoder.com/dtn/neighbor-discovery/#sthash.Mdb2QG1w.dpuf

3.0. Challenge Details

          

3.1. Challenge Documents

The DTN IP Neighbor Discovery (IPND) specification document was published as an Internet Draft by the IETF. With the help of a specification challenge, we have converted the IPND spec into TopCoder's Application Requirements Specification (ARS) format.

Document Description
IPND Internet Draft PDF version. The actual IPND spec is just 19 pages (page 3 - page 21).
TCUML diagrams Please download it from the forum.
SDNV and TLV Python routines Please download them from the forum.

 

1. This challenge will use the class diagrams and implementation notes in the provided TCUML to develop a working implementation of IPND in Python.

2. In addition to the implementation, you will develop unit and system tests to demonstrate your IPND implementation.

If there are any apparent gaps or discrepanies in the diagrams, please bring it up immediately on the forum.

You can refer to the assembly tutorial for additional information on assembly challenge deliverables.

 

3.2. Challenge Task: Implementation

Please refer to the detailed implementations notes here.

 

 

3.3. Challenge Task: Tests

To ensure that the proof of concept will conform to the IPND spec, you will also provide tests: unit and system tests.

1. You will develop automated tests that provide adequate code coverage of the functional requirements. The tests will handle: pre- and post- conditions, test data for scenario setup, expected outcomes for accuracy and failure conditions, etc.

 

2. System tests demonstrate the use of the IPND protocol between multiple nodes. The tests will test all network communications between multiple nodes.

For instance, if node 1, node 2 and node 3 constitute a 3-node local network, each node should be able to learn of the existence the other 2 nodes via the IPND protocol.

Part 2 of this challenge will improve upon neighbor discovery to be implementation independent i.e. neighbor discovery will be independent of the IPND tool used by other nodes. Node 1 could be running DTN2 IPND on port 4556, node 2 could be running IBR IPND on port 4556 while node 3 could be running an instance of IPND on port 4556 that will be built by this challenge.

 

 

4.0. Challenge Deliverables

Please submit, in a compressed archive:

  • Deployment Guide (DG): describing how to deploy and test your Python IPND implementation;
  • Python code: implementing the requirements;
  • Python tests: that exercise your implementation using unit and system tests.

Please download the template on which to base your deployment guide on from here.

 



Final Submission Guidelines

1. Third Party Code/Libraries - All third party code/libraries must be open source and you must include the license in your submission. The license must allow us to modify/re-package the code as necessary. If you have any questions regarding this, please post in the forums. Submissions that include third party code without the proper license information will be disqualified if the third party code is found to be non-usable due to license restrictions.

2. Attribution/References - You must properly attribute and or reference any sentences, paragraphs or quotes that you cite in your text-based submission. If your submission is found to include text that has been copied and pasted from an online source without properly attributing the source, you will receive a not-so-nice email from the topcoder competition manager.

3. Spell Check - We understand that not all submitters will be native English speakers and that there will be spelling/grammatical mistakes. We request that you first run your submission through a grammar/spell checker before submission so as to fix simple mistakes.

 

ELIGIBLE EVENTS:

2015 topcoder Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30049350