Skip to main content

DTNMA CAMP

Documentation Sonar Coverage PyPI Project

This is the C code generator for the DTN Management Architecture (DTNMA). It is part of the larger Asynchronous Network Managment System (ANMS) managed for NASA AMMOS.

       (                 ,&&&.
         )                .,.&&
        (  (              \=__/
            )             ,'-'.
      (    (  ,,      _.__|/ /|
       ) /\ -((------((_|___/ |
     (  // | (`'      ((  `'--|
   _ -.;_/ \\--._      \\ \-._/.
  (_;-// | \ \-'.\    <_,\_\`--'|
  ( `.__ _  ___,')      <_,-'__,'
   `'(_ )_)(_)_)'

This tool uses the YANG representation of an Application Data Model (ADM) to generate code for various purposes.

CAmp generates:

  • C code for usage in a C11 Reference DTNMA agent. This generation can also carry over custom functions in existing C files for the ADM, if indicated appropriately in the existing code (see the Round-tripping Section).
  • SQL code for usage by the Reference DTNMA Manager and ANMS deployment.

Additional generators may be added to account for use cases outside of the reference DTNMA tools. Please contact the developers for more information or suggestions. The Architecture Section also provides some explanation of the components of CAmp, and how to incorporate additional generators.

Moreover, the files generated by CAmp don't have cross-dependencies on preprocessor definitions or symbols outside of compilation. The output from CAmp can be placed anywhere in the compilation directory tree, because it doesn't depend on the other files generated by CAMP, outside of CACE and the REFDA.

Development

For development purposes, it is advised to operate within a Python virtual environment, ideally Python 3.11, to help prevent dependency errors later on. You can run the following commands to create and activate your venv:

python3.11 -m venv .venv
source .venv/bin/activate

If you wish to deactivate your venv, simply run deactivate.

Because CAmp utilizes ACE to run properly, one must install and set up ACE first before attempting to install and run CAmp. Set-up instructions for ACE can be found in the README here. To install ACE via pip and point to a specific repo and branch (in this case, the main branch) like so:

pip install git+https://github.com/JHUAPL-DTNMA/dtnma-ace.git@main

To install development and test dependencies for this project, run from the root directory (possibly under sudo if installing to the system path):

pip3 install -r <(python3 -m piptools compile --extra test pyproject.toml 2>&1)

If this command fails, you may have to install the pip-tools package first and then run two separate commands like so:

pip3 install pip-tools
python3 -m piptools compile --extra test pyproject.toml
pip3 install -r requirements.txt

If the python3 -m piptools compile --extra test pyproject.toml command fails due to the following error: "Could not find a version that satisfies the requirement dtnma-ace (from versions: none)", then one solution is to remove the dtnma-ace dependency from the pyproject.toml file via a text editor and then try the command again.

To execute all unit tests, importing CAMP from the source tree, run:

PYTHONPATH=src/ python3 -m pytest -v --cov=camp test

To install the project itself from source run:

pip3 install .

If you are still encountering installation errors, you may need to update the submodules:

git submodule update --init --recursive

View Command Options for CAmp

camp -h

Basic Usage

The camp tool takes a YANG representation of an ADM for a network protocol as input and calls each of the included generators to generate files for the ADM.

Given the YANG representation of the ADM, run camp with:

camp <adm.yang>

The command argument only provides the principal module for which source is generated. The environment variables ADM_PATH, XDG_DATA_HOME, and XDG_DATA_DIRS affect module import search behavior as described in the command documentation.

Output

During a successful camp execution, output similar to the following will be printed to STDOUT.

INFO:camp.tools.camp:Loading <path_to_yang_file>/<adm.yang>  ...
INFO:camp.tools.camp:Finished loading ADM <adm>
INFO:camp.tools.camp:Generating files under ./
INFO:camp.tools.camp:Generating <adm>.h ...
INFO:camp.tools.camp:done.
INFO:camp.tools.camp:Generating <adm>.c ...
INFO:camp.tools.camp:done.
INFO:camp.tools.camp:Generating <adm>.sql
INFO:camp.tools.camp:done.
[ End of CAmpPython Execution ]

This output shows that camp completed a successful generation of each of the files listed. Use the -oflag with camp to redirect output to a directory different from the current one.

    camp <adm.yang> -o <output_directory>

If the path at <output_directory> does not already exist, camp will create it.

Camp will not delete any existing directory structure, but files present in the output directories with the same name as generated files will be overwritten.

Custom Code and Round-tripping

The adm_<adm>_impl.c and adm_<adm>_impl.h files generated for the DTNMA agent contain functions whose bodies cannot be automatically generated with knowledge of the ADM alone. When generated, these fuctions are marked with tags similar to the following:

    /*
     * +----------------------------------------------------------------------+
     * |START CUSTOM FUNCTION <function_name> BODY
     * +----------------------------------------------------------------------+
     */	
    /*
     * +----------------------------------------------------------------------+
     * |STOP CUSTOM FUNCTION <function_name> BODY	
     * +----------------------------------------------------------------------+
     */	

Additionally, the user may wish to add additional custom functions and/or header files to these generated files. To allow re-generation of camp files with minimal re-work for custom code in these files, camp has a 'roundtripping' feature that allows preservation of these custom additions in subsequent file generations by "scraping" from existing implementation files.

The roundtripping feature in camp will save any code in the file that falls between camp custom tags, and will add it to the newly-generated version of the file. This feature is controlled by the --scrape and --no-scrape command options.

Current acceptable custom tags are:

  • custom function body (example above)
  • custom includes (/* [START|STOP] CUSTOM INCLUDES HERE */)
  • custom (static) functions (/* [START|STOP] CUSTOM FUNCTIONS HERE */)
  • pre-model-init actions (/* [START|STOP] CUSTOM PRE-INIT HERE */)
  • post-model-init actions (/* [START|STOP] CUSTOM POST-INIT HERE */)

For custom function bodies, the <function_name> included in the custom function tag must be the same as the one used in the ADM for the custom function to be copied over to the correct area of the new file.

CAmp Architecture

The online API documentation for CAMP contains package and module structure.

Adding Generators

To add a new generator to camp, create a python script that creates the file and add it to the src/camp/generators/ directory. Then, in src/.py, import the new generator and add it to the file generation code of the main() function (starting at line 105).

All generators should:

  • define a create() method as their main function, which takes as its first and second argument:
    1. a Retriever object (pre-populated with the ADM passed to camp)
    2. a string that represents the path to the output directory
  • utilize the Retriever object to access fields of the ADM module
  • place generated file(s) in the output directory passed as the second argument to the create() function (the generator may choose to make a sub-directory in the output directory)

Contributing

To contribute to this project, through issue reporting or change requests, see the CONTRIBUTING document.

Metadata

Release files for dtnma-camp 3.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dtnma-camp 3.4.0
File Size Uploaded
dtnma_camp-3.4.0.tar.gz 59.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dtnma-camp 3.4.0
File Interpreter ABI Platform
dtnma_camp-3.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 95.3 kB

Release files / dtnma_camp-3.4.0.tar.gz

Download URL dtnma_camp-3.4.0.tar.gz
Size 59.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7ad0fbec2948cef0504679695badfc034b0f61b284b66b1e66f6fa821d038882
BLAKE2b-256 checksum
How to use checksums
2d4d5b666fa3dc82ce5ae29432e3d7872e5d3dd17b8e77376ee5ae50c0235bb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / dtnma_camp-3.4.0-py3-none-any.whl

Download URL dtnma_camp-3.4.0-py3-none-any.whl
Size 35.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9cd0902e559e7ea1df0d5465dab51ae061dbe99d40333f8add18390596c0ade0
BLAKE2b-256 checksum
How to use checksums
193b4e4a7c10b9a97cddda0a182fb5a50d94303c01ed0d180da66ff18fb4a632
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.4.0 This release

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page