libamxo
4.3.4
Object Definition Language (ODL) parsing
|
You could install all tools needed for testing and developing on your local machine, but it is easier to just use a pre-configured environment. Such an environment is already prepared for you as a docker container.
Install docker
Docker must be installed on your system.
If you have no clue how to do this here are some links that could help you:
Make sure you user id is added to the docker group:
``` sudo usermod -aG docker $USER ```
Fetch the container image
To get access to the pre-configured environment, all you need to do is pull the image and launch a container.
Pull the image:
```bash docker pull registry.gitlab.com/soft.at.home/docker/oss-dbg:latest ```
Before launching the container, you should create a directory which will be shared between your local machine and the container.
```bash mkdir -p ~/amx_project/libraries/ ```
Launch the container:
```bash docker run -ti -d –name oss-dbg –restart always –cap-add=SYS_PTRACE –sysctl net.ipv6.conf.all.disable_ipv6=1 -e "USER=$USER" -e "UID=$(id -u)" -e "GID=$(id -g)" -v ~/amx_project/:/home/$USER/amx_project/ registry.gitlab.com/soft.at.home/docker/oss-dbg:latest ```
If you are using vpn, you need to add --dns 192.168.16.10 --dns 192.168.16.11
to the docker run command.
The -v
option bind mounts the local directory for the ambiorix project in the container, at the exact same place. The -e
options create environment variables in the container. These variables are used to create a user name with exactly the same user id and group id in the container as on your local host (user mapping).
You can open as many terminals/consoles as you like:
```bash docker exec -ti –user $USER oss-dbg /bin/bash ```
Dependency graph - libraries needed by libamxo. For graph simplicity direct dependencies which are also an indirect dependency are not shown.
graph TD; libamxo-->libamxs libamxo-->libdl
libamxs-->libamxd-->libamxp-->libamxc
Clone the git repository
To be able to build it, you need the source code. So open the directory just created for the ambiorix project and clone this library in it (on your local machine).
```bash cd ~/amx_project/libraries/ git clone git@g:prpl-foundation/components/ambiorix/libraries/libamxo.git ``` itla b.com
Install dependencies
Although the container will contain all tools needed for building, it does not contain the libraries needed for building libamxo
. To be able to build libamxo
you need libamxc
, libamxp
and libamxd
. These libraries can be installed in the container.
```bash sudo apt update sudo apt install libamxd ```
Note that you do not need to install all components explicitly. Some components will be installed automatically because the other components depend on them. Some of the components are allready preinstalled in the container.
```bash cd ~/amx_project/libraries/libamxo make ```
Build API documentation
All public API functions are documented with doxygen tags. To generate the documentation (in html format) doxygen must be installed.
The documentation will be available in ./output/doc/doxy-html/
. Open the file ./output/doc/doxy-html/index.html
in your favorite browser.
Another option is to open the public header files, the documentation is available there as well.
You can install your own compiled version easily in the container by running the install target.
From within the container you can create packages.
The packages generated are:
You can copy these packages and extract/install them.
For ubuntu or debian distributions use dpkg:
No extra components are needed for testing libamxo
.
You can run the tests by executing the following command.
Or this command if you also want the coverage tests to run:
The coverage target will generate coverage reports using gcov and gcovr.
A summary for each file (*.c files) is printed in your console after the tests are run. A HTML version of the coverage reports is also generated. These reports are available in the output directory of the compiler used. Example: using native gcc When the output of gcc -dumpmachine
is x86_64-linux-gnu
, the HTML coverage reports can be found at ~/amx_project/libraries/libamxo/output/x86_64-linux-gnu/coverage/report.
You can easily access the reports in your browser. In the container start a python3 http server in background.
Use the following url to access the reports http://<IP ADDRESS OF YOUR CONTAINER>:8080/libraries/libamxo/output/<MACHINE>/coverage/report
You can find the ip address of your container by using the ip
command in the container.
Example:
in this case the ip address of the container is 172.17.0.7
. So the uri you should use is: http://172.17.0.7:8080/libraries/libamxo/output/x86_64-linux-gnu/coverage/report/
This library provides functionality that can be used to build a data model object hierarchy fom an ODL file (object definition language).
During the parsing of odl files the parser can resolve functions and bind them to your data model objects and parameters.
Besides parsing of odl files and building of the data model other functionality provided by this library:
Before using a parser it must be initialized. When done using the parser it can be cleaned-up.
Cleaning up the parser will free all allocated memory for the parser. The data model that was built from odl files by the parser will not be removed. Other functional objects (like entry-points, synchronization contexts, list of available MIBs, ...) will not be accessible anymore after cleaning up the parser object.
Typical use:
To build a data model either from a file containing a data model definition in Object Definition Language
or a string containing a valid Object Definition Language
text use one of the following functions:
The data model object pointer provided is used as the root
object, all loaded object definitions are added as a child of that provided object.
Typical use case:
Saving a data model (or a sub-tree of a data model) can be done using:
To save the configuration variables in a separate file use:
Mibs can be used to extend existing data model objects with extra parameters, methods or sub-objects. When a mib was added to a data model object, it can be removed very easily.
Scan directories for mib definitions (also defined in odl files). The parser keeps a list of all found odl files that define a mib, but they are not yet loaded.
Add or remove a mib to/from a data model object: