{"id":19407995,"url":"https://github.com/nasa-jpl/ion-core","last_synced_at":"2026-03-04T18:31:38.739Z","repository":{"id":196908897,"uuid":"682794537","full_name":"nasa-jpl/ion-core","owner":"nasa-jpl","description":"A streamlined packaging of core DTN features from the ION-DTN open source software ","archived":false,"fork":false,"pushed_at":"2025-11-28T07:26:27.000Z","size":1135,"stargazers_count":11,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"integration","last_synced_at":"2025-11-29T03:11:32.080Z","etag":null,"topics":["communications","delay-tolerant-network","dtn","ion","ion-core","networking","space"],"latest_commit_sha":null,"homepage":"https://ion-dtn.readthedocs.io","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nasa-jpl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-24T23:48:37.000Z","updated_at":"2025-11-28T07:32:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"a4773410-bcde-4410-9286-34266bb6572a","html_url":"https://github.com/nasa-jpl/ion-core","commit_stats":null,"previous_names":["nasa-jpl/ion-core"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/nasa-jpl/ion-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa-jpl%2Fion-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa-jpl%2Fion-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa-jpl%2Fion-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa-jpl%2Fion-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nasa-jpl","download_url":"https://codeload.github.com/nasa-jpl/ion-core/tar.gz/refs/heads/integration","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa-jpl%2Fion-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30089331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T18:31:08.343Z","status":"ssl_error","status_checked_at":"2026-03-04T18:31:07.708Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["communications","delay-tolerant-network","dtn","ion","ion-core","networking","space"],"created_at":"2024-11-10T12:04:48.422Z","updated_at":"2026-03-04T18:31:38.723Z","avatar_url":"https://github.com/nasa-jpl.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ION-Core for Linux (and WSL) \u0026 MacOS\n\n- [ION-Core for Linux (and WSL) \\\u0026 MacOS](#ion-core-for-linux-and-wsl--macos)\n  - [Preliminary Notes](#preliminary-notes)\n  - [Build \\\u0026 Install](#build--install)\n    - [Alternative: Automated download of ION Open Source Code _without commit history_](#alternative-automated-download-of-ion-open-source-code-without-commit-history)\n  - [Selecting ION-core Features to Build](#selecting-ion-core-features-to-build)\n    - [Extension Blocks Build Options](#extension-blocks-build-options)\n  - [Man Page Installation](#man-page-installation)\n  - [Creating ION configuration (\".rc\") files for a two-node setup](#creating-ion-configuration-rc-files-for-a-two-node-setup)\n  - [Post-installation Test](#post-installation-test)\n  - [Clean up process](#clean-up-process)\n  - [Automated Script to Build, Install, and Test Ion-core on Two Hosts](#automated-script-to-build-install-and-test-ion-core-on-two-hosts)\n  - [Adjusting Pre-Allocation of Memory/Storage Space for ION](#adjusting-pre-allocation-of-memorystorage-space-for-ion)\n  - [Tuning LTP Performance](#tuning-ltp-performance)\n  - [Building static and dynamic library](#building-static-and-dynamic-library)\n  - [Prototype: macOS Build](#prototype-macos-build)\n  - [Prototype: FreeBSD Build Considerations](#prototype-freebsd-build-considerations)\n  - [Contributing Code](#contributing-code)\n  - [WSL2 Networking Issue](#wsl2-networking-issue)\n  - [Release Notes](#release-notes)\n      - [Tag: `4.1.3`](#tag-413)\n      - [Tag: `4.1.2b`](#tag-412b)\n      - [Tag: `4.1.2a`](#tag-412a)\n      - [Tag: `4.1.2`](#tag-412)\n\n## Preliminary Notes\n\nIon-core assumes the typical Linux OS installation location for `make` and `gcc`. \n\nEach ion-core version is designed to work with the corresponding version of ION Open Source release, e.g., ion-core 4.1.2 uses the ION open-source release version 4.1.2 as its sources.\n\nIon-core creates absolute path symbolic links to source files from the ION-DTN repo specified by the user. If you move the ION-DTN repo or the ion-core repo, you will need to update the symbolic links by re-running the `extract.sh` script and point to the new location.\n\nAs part of the build process, the extract script will modify two ION source files (`bpsec_policy_rule.c`,`bpextension.c`) and place copies inside the `src` folder in ion-core. The original source files in the ION open source repo will not be modified. The modifications are very minor and only to the extend needed to allow ion-core build to turn-on/off selected extension blocks; they do not alter the behavior of extension block handling.\n\n## Build \u0026 Install\n\nBe sure you have the tools installed:\n```bash\nsudo apt update\nsudo apt install make gcc\n```\n\nClone the ION open source code repo:\n```bash\ncd \u003cion-source-codee-folder\u003e\ngit clone https://github.com/nasa-jpl/ION-DTN.git\n```\n\nGet ion-core and build:\n```bash\ngit clone https://github.com/nasa-jpl/ion-core.git\ncd ion-core\ngit checkout tags/4.1.3\n# clean out previous build\nmake clean\nsudo make uninstall\n# build\n./scripts/extract.sh \u003cyour-ion-source-code-folder\u003e/ion-dtn\nmake\nsudo make install\nsudo ldconfig\n```\n\n### Alternative: Automated download of ION Open Source Code _without commit history_\n\nYou can run `./scripts/extract.sh` without supplying the path to an existing ION source code repo. In that case, the script will automatically download the appropriate ION open source code version the `tmp` folder under the ion-core directory.\n\nThen you can run `make` and `sudo make install` to install the code.\n\nThe disadvantage of this approach is that you will not have the commit history of the ION open source code and not able to submit pull requests. This is provided as a convenience for conducting quick testing.\n\n## Selecting ION-core Features to Build\n\nYou can select the features you want to include in ion-core build by updating the `build-list.mk` file. See the `build-list.mk` file for the list of features.\n\nAt least one CLA must be selected. All necessary programs/daemons associated with a feature or a CLA are listed on one line, so when commenting/uncommenting features, please do so at the \"line level\", not the individual program.\n\nYou can select build for either 32-bit or 64-bit and for Linux or MacOS (darwin).\n\nYou can also select which bundle protocol extension blocks to include for locally sourced bundles.\n\nSave the changes to the `build-list.mk`, remove the old installation by running `make clean`, `sudo make uninstall`, and then rebuild ion-core.\n\n### Extension Blocks Build Options\n\nAs of ion-core 4.1.3s, the `build-list.mk` file enables toggling which extension blocks will be added to locally created bundle. Here are some of the limitations:\n\n1. Support for all extension blocks types, however, remains mandatory:\n    * `PBN_EXT` : Previous Node Extension Block\n    * `BPQ_EXT` : Bundle Protocol QoS Extension Block\n    * `BAE_EXT` : Bundle Age Extension Block\n    * `SNW_EXT` : Spray and Wait Permit Extension Block\n    * `IMC_EXT` : IMC Multicast Extension Block\n2. There is not yet control through `build-list.mk` to set whether each locally created extension block should use CRC16, CRC32, or none applied. The default value is `noCRC` in the `./scripts/bpextension-ion-core.c`.\n3. The file `./scripts/bpextension-ion-core.c` is manually derived from the ION open-source; it is modified to support the toggling of which extension blocks to include in locally created bundle.\n4. __This is the only ION source file modified by ion-core release. This modification is manually performed by the ion-core development team right now. This file is re-evaluated for each ion-core release to make sure it is taylored for the most likely use case for users. The user of ion-core can further modify it to suite their deployment/testing needs.__\n\n## Man Page Installation\n\nRun:\n\n`sudo make man`\n\n## Creating ION configuration (\".rc\") files for a two-node setup\n\n`./scripts/host.sh \u003cIP-this-host\u003e \u003cIP-the-other-host\u003e`\n\nFor example:\n\n`./scripts/host.sh 192.168.254.192 192.168.254.194`\n\nMakes the config file `host192.rc` and places it inside the folder `host192_testdir`. You can run lauch ION by cd into the directory `cd host192_testdir` and run `ionstart -I host192.rc`.\n\nFor the other host, run the same command with the order of IP addresses reversed.\n\nThe default protocol stack is BP/LTP but you can select the UDP or STCP CLAs if they are included in the `build-list.mk`.\n\nTo generate configuration files using either UDP or the STCP CLA, add either `udp` or `stcp` as the third argument to `host.sh`. For example,  to generate configuration using STCP, run \n\n`./scripts/host.sh 192.168.254.192 192.168.254.194` stcp\n\nSimilar syntax goes for udp.\n\nTo use other convergence layers such as UDP or STCP, you will need to modify the .rc files. See the ION documentation for more information. For example, you may consult the [ION Configuration Tutorials and Configuration Templates.](https://nasa-jpl.github.io/ION-DTN/Basic-Configuration-File-Tutorial/)\n\n## Post-installation Test\n\nAfter installation, you can run the following command to test the installation for each of the CLAs included in the build:\n\n```bash\nmake test\n```\n\nThe result of the test will be captured in a file called `progress` under the `tests` directory.\n\n## Clean up process\n\nTo remove executables and libraries installed in the host, run: `sudo make clean`\nTo clean up the compilation artifacts, run: `make clean`\nTo remove all complication artifacts, as well as all ION source and test files extracted from the ION open source code, run: `make distclean`\n\n## Automated Script to Build, Install, and Test Ion-core on Two Hosts\n\nTo streamline the process, we have created two bash scripts that can automate the build, installation, and testing of ion-core.\n\nTo build and install ion-core, run:\n\n`./scripts/build-install.sh`\n\nTo run a bping test between two nodes. On host A, run\n`./scripts/bping-send.sh \u003cIP Address of Host A\u003e \u003cIP Address of the Host B\u003e \u003copt: udp or stcp\u003e`\n\nOn host B, run\n\n`./scripts/bping-echo.sh \u003cIP Address of Host B\u003e \u003cIP Address of the Host A\u003e \u003copt: udp or stcp\u003e`\n\nNote:\n* This script will automatically create the ION configuration files needed and launch a `bping` test using BP and LTP CLA.\n* To ensure that all bping messages will be received by the peer DTN node, it is recommended that you run bping-echo on the second host first, and then run bping-send on the first host.\n* Both `bping-send.sh` and `bping-echo.sh` takes an optional 3rd argument to specify either the `udp` or `stcp` CLAs. But they must be the same on both hosts to ensure compatibility.\n\nOn `bping` side, you will see ION starting and then bping launched automatically with output similar to the following:\n\n```bash\n... Wait 10 seconds for the other side to start ION...\n\nrun bping...\n64 bytes from ipn:12.2  seq=0 time=0.003641 s\n64 bytes from ipn:12.2  seq=1 time=0.001756 s\n64 bytes from ipn:12.2  seq=2 time=0.001767 s\n64 bytes from ipn:12.2  seq=3 time=0.001590 s\n64 bytes from ipn:12.2  seq=4 time=0.001676 s\n64 bytes from ipn:12.2  seq=5 time=0.001711 s\n64 bytes from ipn:12.2  seq=6 time=0.001766 s\n64 bytes from ipn:12.2  seq=7 time=0.001742 s\n64 bytes from ipn:12.2  seq=8 time=0.001675 s\n64 bytes from ipn:12.2  seq=9 time=0.001663 s\n10 bundles transmitted, 10 bundles received, 0.00% bundle loss, time 19.003910 s\nrtt min/avg/max/sdev = 1.590/1.898/3.641/0.585 ms\n\nbping SUCCESS!\n```\n\nOn the receiving (echo) side, you will likely see:\n\n```bash\nStart bpecho...., Ctrl-C to stop.\n..........\n```\nEach `.` indicates that an 'echo' message has been sent back to acknowledge the reception of a 'bping' messages.\n\nThe test will end once the bping recieved echos for all ping messages.\n\nAt this point, ION will be running on both hosts and you may continue to run different applications until you stop ION by executing the `ionstop` script, which is globally installed for execution.\n\nThis test also generates two directories that you can use as template for future ION testing:\n\n* `hostxx_testdir` - this directory contains the ION configuration files for host A, whose IP address ends in `xx`.\n* `hostyy_testdir` - this directory contains the ION configuration files for host A, whose IP address ends in `yy`.\n\nWithin in each folder, you will find the ION log file `ion.log` which records the main events during previous runs and also, if present, current/on-going running instance of ION.\n\nTo launch ION manually, you will need to enter into the directory and execute the command `ionstart -I hostxx.rc`\n\nUsing the generated ION configuration folder, you can only launch one ION instance per host. To ability to run multiple ION instances in one host is utilized in automated regression testing (recall `make test`) and is a advanced topic described in the [ION online documentation](https://nasa-jpl.github.io/ION-DTN/).\n\n## Adjusting Pre-Allocation of Memory/Storage Space for ION\n\nION is designed to run within a pre-allocated memory space. If, while running ION, you encounter errors due to a lack of working memory or SDR heap space, you can increase the pre-allocated allocation by modifying the `host.ionconfig` file and then regenerate configuration files using the `./scripts/host.sh` command. The current default ION SDR and working memory allocation is as follows:\n\n```\nconfigFlags 1\nheapWords 15000000\nsdrWmSize 15000000\nwmSize 15000000\n```\n\nThe `configFlags` value of 1 creates a Simple Data Recorder (SDR) instance in DRAM. The SDR provides the primary data storage for ION. The 'heap' space, where user data are buffered, is set to 15 mega words, each word is 64 bits (or 8 bytes) for a 64-bit platform. The `sdrWmSize` specifies the SDR's internal working memory space measured in bytes; the `wmSize` specifies the general ION working memory in bytes.\n\nThese values can be adjusted to control how much storage ION is allowed to consume in the host system. The proper setting requires some insight into the host system's capabilities, the traffic load ION is expected to handle as impacted by locally generated DTN traffic, and the average and peak inbound and outbound data rates of the network.\n\nPleaser consult the `ionconfig` manual page for a detailed explanation of the full set of configuration parameters.\n\n## Tuning LTP Performance\n\nActual throughput of LTP link protocol depends significantly on the underlying radio communication or wired network speed and reliability, the host system's processing speed, the frequency of communication contact, the size of the bundles being sent, the round trip delay between the two hosts, and also on the LTP configuration. Check the `ltprc` manual page entry for details on how to adjust LTP settings to maximize throughput.\n\nIn the ION source code's root directory, there is an Excel file named `ION-LTP-configuration_tool.xlsm` which can be used to generate recommended LTP settings for your configuration to maximize the throughput of your system.\n\n## Building static and dynamic library\n\nTo build and install static linking library for ION, execute the following command:\n\n```bash\n# build the static library\nmake static\n\n# build the dynamic library\nmake shared\n\n# install the libraries\nsudo make install-lib\n\n# uninstall the libraries\nsudo make uninstall-lib\n```\n\n## Prototype: macOS Build\n\nThe process for building ion-core on macOS follows the same steps as the Linux build process. However, there are some differences that need to be addressed:\n\n1. The `ldconfig` command is not available on macOS, and not necessary.\n2. Although ion-core can be build on macOS as it is, exerpimentation showed that several default kernel parameters that control shared memory and UDP datagram sizes should be modified in order to support basic ION operations and UDP traffic. Without these modification, ION will not function properly or at all due to resource limitations.\n3. __Minimum Recommended Setting:__ Under the `scripts/macOS` directory, there is a `sysctl_script.sh` script that checks whether these parameters meet or exceed certain minimum, recommended values, as follows:\n\n    ```bash\n    kern.sysv.shmmax = 83886080\n    kern.sysv.shmseg = 32\n    kern.sysv.shmall = 32768\n    net.inet.udp.maxdgram = 32000\n    ```\n\nThis set of minimum values are sufficient to pass the regression tests under the `tests` folder in the ION Open Source repository.\n\n4. While the minimum recommended values can support basic ION operations, they are not sufficient to support the more intenstive bench tests under the `demos` folder in the ION Open Source repository. Therefore a more generous configuration is as follows:\n  \n    ```bash\n    kern.sysv.shmmax=2147483648\n    kern.sysv.shmseg=32  \n    kern.sysv.shmall=1048576 \n    net.inet.udp.maxdgram=655360 \n    ``` \n5. This higher recommended setting, for your convenience, can be implemented using the `install_macos_sysctl.sh` script so that it will persist through shutdown and reboot. After executing this script, make sure you reboot the system for the changes to take effect.\n  * Note: the `net.inet.udp.maxdgram` value is set to 655360 (640KB), 10 times larger than the maximum UDP datagram 65535 (64KB). For reasons not clear at this point, setting this much larger value actually enables smoother handling of UDP datagrams pass them through `localhost`.\n6. In the end, we recommend you experiment and adjust these kernel parameters to fit the specific needs of your application. These scripts provide the basic template on what paramters to check and adjust and how to implement them.\n\n## Prototype: FreeBSD Build Considerations\n\n1. The default make command for FreeBSD is `bmake.` ION require `gmake`. So you can either invoke `gmake` or create a symbolic link to `gmake` as `make`.\n2. Also the default bash installation locaiton is `/usr/local/bin/bash`. Current ION's test script is hardcoded to the directory `/bin/bash`. You can create a symbolic link of the installed `bash` binary in `/bin`.\n\n## Contributing Code\n\nPlease see the file `developer_notes.txt` for more information.\n\n## WSL2 Networking Issue\n\nWLS2 is known to have issues with VPN connection. One approach is to downgrade to WSL1:\n\nIn Windows Powershell get your name/version:\n\n`wsl -l -v`\n\nSet it to version 1:\n\n`wsl --set-version Ubuntu-22.04 1`\n\nAlternative approach is to use the WSL Vpnkit to provide VPN connection:\n\nhttps://github.com/sakai135/wsl-vpnkit\n\n\n\n--------------------------\n\n## Release Notes\n\nLatest Release\n\n#### Tag: `4.1.3s-a.1`\n\n1/5/2025\n* First alpha release for 4.1.3s\n* Switch to 4.1.3s ION open source codebase\n* Switch to using symbolic link (instead of copying source code file) to preserve original Git history and support upstream code push to Open Source\n* Improved OS support for compilation \n\n#### Tag: `4.1.3`\n\n9/24/2024\n* Update codebase to ION open source verion 4.1.3\n* Add regression test for each available CLA\n* Add target to build static and shared libraries\n\n#### Tag: `4.1.2b`\n\nAdded ability to select/exclude certain features from build\n\n#### Tag: `4.1.2a`\n\n2/01/2024\n* Added STCP CLA to ver 4.1.2\n\n#### Tag: `4.1.2`\n\n11/30/2023\n* Based on ION Open Source 4.1.2\n* Initial public release of ion-core (prototype)\n* Basic features:\n  * BPv7\n  * CGR\n  * LTP\n  * UDPCL\n  * IPN Nameing Scheme\n  * Load-n-Go Command\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa-jpl%2Fion-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnasa-jpl%2Fion-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa-jpl%2Fion-core/lists"}