Knowledge Base, Issues & Patches
This is a short list of information regarding ION operation, known issues, and patches.
Most of these information are likely to be found in other longer documents but it is presented here in a summarized form for easier search. Another useful document is the ION Deployment Guide which contains recommendations on configuring and running ION and performance data.
Convergence Layer Adaptor
UDP CLA
- When using UDP CLA for data delivery, one should be aware that:
- UDP is inherently unreliable. Therefore the delivery of BP bundles may not be guaranteed, even withing a controlled, isolated network environment.
- It is best to use iperf and other performance testing tools to properly character UDP performance before using UDP CLA. UDP loss may have high loss rate due to presence of other traffic or insufficient internal buffer.
- When UDP CLA is used to deliver bundles larger than 64K, those bundle will be fragmented and reassembled at the destination. It has been observed on some platforms that UDP buffer overflow can cause a large number of 'cyclic' packet drops so that an unexpected large number of bundles are unable to be reassembled at the destination. These bundle fragments (which are themselves bundles) will take up storage and remain until either (a) the remaining fragments arrived or (b) the TTL expired.
LTP CLA
- When using LTP over the UDP-based communication services (udpcli and udpclo daemons):
- The network layer MTU and kernel buffer size should be properly configured
- The use "WAN emulator" to add delay and probabilistic loss to data should be careful not to filter out UDP fragments that are needed to reconstruct the LTP segments or significantly delayed them such that the UDP segment reassembly will expire.
Bundle Protocol
Routing
ION handles routing based on the following general hierarchy:
- Routing Override in the
ipnrc
- Rerouting toward
gateway
instead ofdestination
- Routing using CGR - for either
gateway
ordestination
- Routing to a neighbor if that neighbor happen to be either the
gateway
ordestination
- Routing to an
exit
node - Place bundle in
limbo
state awaiting either TTL expiration or rerouting
CRC
- ION implementation currently default will apply CRC16 to Primary Block but not the Payload Block. To apply CRC to the Payload Block, a compiler flag needs to be set when building ION. There are currently no mechanism to dynamically turn on/turn off CRC without recompiling ION.
Testing & Configuration
- When developing and testing ION in a docker container with root permission while mounting to ION code residing in a user's directory on the host machine, file ownership may switch from user to
root
. This sometimes leads to build and test errors when one switches back to the host's development and testing environment. Therefore, we recommend that you execute themake clean
andgit stash
command to remove all build and testing artifacts from ION 's source directory before exiting the container.
ionconfig
Memory/Storage Allocation
- To set the
heapWord
parameter, it is recommended that you consider the worst case buffering need for a node, and use at least 5 times more for heap. For example, if you expect that your DTN node will need to buffer as much as 100M bytes of data during operation, you should allocate at least 500M bytes (or more) to the heap. Each heapword
is determined by the size of the operation system. For a 64 bit system, each word is 8 bytes long. For in our example, theheapWord
should be 62.5 mega or 62500000 words. - Based on testing results and assuming using the default
maxHeap
parameter inionrc
, we recommend the following minimum setting for the ION working memorywmSize
in bytes:
SDR
SDR transaction reversal
When SDR transaction is canceled due to anomaly, ION will attempt automatically try the following:
- Reverse transaction - if it is configured - to revert modifications to the SDR's heap space which contains both user and protocol data units. This action rolls back a series of operations on the SDR's data of the cancelled the transaction.
- Once the SDR's heap space has been restored, the "volatile" state of the protocols must be restored because they might be modified by the transaction as well. This is performed by the
ionrestart
utility. - After the volatiles are reloaded, the 3rd step of restoring ION operation will need to be triggered by the users. During the anomously event that caused the transaction cancellation, some of ION's various daemons may have stopped. They can be restored by simply issuing the start ('s') command through
ionadmin
andbpadmin
.
'Init' Process PID 1
The reloading of the volatile state and restarting of daemons is necessary to ensure the ION system is in a consistent state before resuming normal operations.
During the reloading of the volatile state, the bundle protocol schemes, inducts, and outducts are stopped by terminating the associated daemons. The restart process will wait for the daemon's to be terminated before restarting them. When running ION inside a docker container, the init
process (PID 1) should be properly configured to reap all zombie processes because the restart process cannot proceed if a terminated daemon remains a zombie. Typically to ensure the proper init
process, one should use the --init
option for docker run
command.
Permission Issue with named semaphore
If you encounter an error reported in ion.log file such as this:
at line 3850 of ici/library/platform_sm.c, Can't initialize IPC semaphore: Permission denied (/ion:GLOBAL:ipcSem)
at line 3868 of ici/library/platform_sm.c, Can't initialize IPC.
at line 481 of ici/sdr/sdrxn.c, Can't initialize IPC system.
at line 695 of ici/library/ion.c, Can't initialize the SDR system.
at line 216 of ici/utils/ionadmin.c, ionadmin can't initialize ION.
It indicates that ION is unable to clean out previously left behind semaphore files. This typically occurs when the previous ION run was launched by a different user, and ION was not properly shutdown via a shutdown script - instead, the global ionstop
or killm
script was used. The semaphore files used by POSIX named semaphore typically only allows the owner to delete it. The work around is to clear these files out. ION-related semaphore files have the name pattern of sem.ion:GLOBAL:<integer>
. For Ubuntu, it is usually found in the /dev/shm
directory; for other Linux distribution, the location can be different.
Reporting Issues
- ION related issues can be reported to the public GitHub page for ION-DTN or ion-core.
- ION's SourceForge page is now deprecated and issued reported there will not be monitored.
Patches
In this section, we post patches issued between or ahead of major releases to fix bugs.
Each patch is described as follows:
- Issue Date: this is the date when the patch is made available.
- Issue No.: GitHub issue number, if any, related to the patch.
- Issue description
- Link to the patch
- The baseline version of ION from which the patch is issued.
- The target version of ION to which the patch will incorporate.
Issue Date | Issue # | Issue Description | Patch | From ION ver. | To ION ver. |
---|---|---|---|---|---|
TBD | 33 | bpv7 extension block CRC failure | TBD | 4.1.3 | 4.1.4 |