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.
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.
3.0. Challenge Details
3.1. Challenge Documents
Document | Description |
IPND Internet Draft | PDF version. The actual IPND spec is just 19 pages (page 3 - 21). |
ION-DTN | Please request access to it on GitLab in the forum after you register for the challenge. You must use our modified version of ION 3.3.0. |
Python IPND (PyIPND) | Please request access to it on GitLab in the forum after you register for the challenge. |
ION Style Guide | ION-DTN C coding conventions. Available from the forum after you register for the challenge. |
Test Plan | The test plan is available from the forum after you register for the challenge. |
All the files for Part 1 and 2 are hosted on GitLab. You will need to request access to the GitLab repository in the forum if you get a HTTP 404 not found error.
3.1.1. Technologies
- Linux (Ubuntu 14.04.2 LTS recommended)
- C
- GCC (version 4.8.1 is recommended)
- Make (version 3.82 is recommended)
- Python 2.7.9
- ION-DTN 3.3.0
- Docker 1.5.0
3.1.2. ION-DTN Setup
PyIPND includes several Docker files that demonstrate how to install ION-DTN (and other DTN distributions) on Ubuntu Linux which you'll find in docker/templates/. You should be able to adapt the instructions in the Docker file for ION-DTN (docker/templates/ion.dockerfile) to suit your development environment.
3.2. Challenge Requirements
Please use the Test Plan attached to the forum to develop tests against the ION IPND implementation.
The tests have been delineated into 3 logical groups as follows:
A. Functional (Send) Tests (50 out of 75)
1 - 5, 13, 14, 17 - 48, skip 49 - 73 (25 tests), 74 - 84, 149
B. Functional (Receive) Tests (40 out of 65)
14, 85 - 112, skip 113 - 137 (25 tests), 138 - 148
C. Integration Tests (12)
Functional Tests 6-12, 15, 16;
Integration Tests 1 - 3 (on the "Integration" worksheet).
All the test cases grouped under B and C above (a total of 52 tests), which exercise the "receive-side" of ION IPND implementation, are in scope of this challenge.
The tests which are prefixed with the word "skip" are to be skipped -- they are optional features that were partially implemented by the ION IPND implementation.
3.2.1. Automated Tests
For test scenarios that require automated tests, you will develop unit tests to exercise the functionality in ION IPND as described by the test plan.
For test scenarios that require constructing invalid or malformed input to test the resilience of ION IPND against malicious beacons, the open source Python networking library scapy should be used.
3.2.2. System Tests
Your system tests should demonstrate the use of the IPND protocol between multiple nodes running different IPND implementations. Please test that the ION IPND implementation can interoperate with DTN2 and PyIPND.
For instance, if node 1 is running DTN2, node 2 is running PyIPND and node 3 is running ION-DTN and they constitute a 3-node local network, each node should be able to learn of the existence the other 2 nodes via the IPND protocol.
Note that:
- IBR implements version 2 of the IPND spec which is not fully compatible with version 4 of the IPND spec that ION IPND, PyIPND and DTN2 implement.
- DTN2 does not implement all optional aspects of the IPND protocol like the use of NBF to determine link bi-directionality.
4.0. Challenge Deliverables
Please submit, in a compressed archive:
- Deployment Guide (DG): describing how to deploy and run your test scripts against the ION IPND implementation;
- Code: all code necessary for testing including updated ION-DTN code, updated Docker files and Python scripts.
Note that the winner will be required to merge the code with the master branch as part of final fixes.
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.