The Multi-Process Proxy software allows cFS to run applications as separate OS processes on Linux platforms. Using separate processes provides memory isolation, which prevents errors in cFS applications from propagating to other cFS applications or the core cFS services.
Multiple process support is implemented using a lightweight cFS application (the Proxy) and a Proxy Client library to provide access to cFS function calls to outside processes without requiring direct modifications to cFS. The Proxy executes within the cFS memory space as a thread and provides a remote interface for calling cFS functions. The Proxy Client library allows applications to access the Proxy interface from a different memory space/process as cFS.
This library is the "Proxy Client" and provides the process application access to the core cFS services (with exception of SB). It communicates with the cFS application Proxy. The following additional components are also required:
- The Software Bus Network and Software Bus Network Client provide access to the cFS Software Bus
- Proxy EVS is a simple cFS application that allows the Proxy to send EVS messages before the application has registered with EVS
- cFS should be linked by the new application as a library to provide direct access to side-effect free functions (such as
SB_InitMsg)
this is not a cFS library; it is used by the process application
this is also the home of the interface definitions (see flat_inc, wrap and interface)
cFS functions that manipulate or depend on shared state should be called through the stubs available in this library.
These function calls are wrapped using the LD option --wrap=symbol.
This library handles serializing the function arguments and sending the data to the corresponding proxy application, which will make the function call on behalf of the process application.
Configuration is done via proxy_client_defs.h, which currently only has the address for the ipc pipe.
The address is relative to the applications launch directory, such as cf/apps/, and needs to match that used by the Proxy.
The library produced (proxy_client.so) may be called by python applications through python's c interface.
See the files in fsw/python_interface for an example and python_client.py.
Requires the NNG library.
Requires the FlatBuffers library. The files in flat_inc are generated by flatcc from the files in the interface directory.
./bin/flatcc -a ../cfs_mps/apps/proxy_client/interface/cfs_* -o ./flat_inc/
Please refer to NOSA GSC-18364-1.pdf and COPYRIGHT.
Please open an issue if you find any problems. We are a small team, but will try to respond in a timely fashion.
If you would like to contribute code, GREAT! First you will need to complete the Individual Contributor License Agreement (pdf) and email it to gsfc-softwarerequest@mail.nasa.gov with james.marshall-1@nasa.gov CCed.
Next, please create an issue for the fix or feature and note that you intend to work on it. Fork the repository and create a branch with a name that starts with the issue number. Once done, submit your pull request and we'll take a look. You may want to make draft pull requests to solicit feedback on larger changes.