Issue: bbfdmd can defer a top-level ubus request and then never reply when a matching backend call fails before the async request is registered. Cause: The async fan-out path increments pending request state before calling ubus_invoke_async(). If that setup call fails, bbfdmd frees the tracker but leaves no in-flight request that can complete the deferred parent request. Fix: Mark matching services before launching backend calls, count only successfully started async requests as pending, and send an immediate deferred reply when no backend request was started. |
||
|---|---|---|
| bbfdmd | ||
| dm-service | ||
| docs | ||
| gitlab-ci | ||
| libbbfdm | ||
| libbbfdm-api | ||
| libbbfdm-ubus | ||
| test | ||
| tools | ||
| utilities | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| CMakeLists.txt | ||
| LICENSE | ||
| mkdocs.yml | ||
| README.md | ||
BroadBand Forum Data Models (BBFDM)
bbfdm is a suite to provide a TR181 data model backend for higher-layer management protocols like TR-069/CWMP or TR-369/USP. It is designed in a hardware-agnostic way and provides the available data model parameters over Ubus on the northbound interface and creates the data model mapping based on UCI and Ubus on the southbound interface.
bbfdm has five main components:
| Component | Description |
|---|---|
| bbfdmd | A daemon to expose data model objects over Ubus |
| dm-service | A daemon to expose data model objects as a microservice over Ubus |
| libbbfdm-api | API library to create and parse data model trees |
| libbbfdm-ubus | API library to expose data model over Ubus |
| libbbfdm | A shared library containing the core data model of TR181, running as a microservice |
Directory Structure
bbfdm package is structured as follows:
├── bbfdmd -- This directory contains daemon code to expose the data model tree on the northbound
│ └── ubus - Daemon to expose data model over Ubus
├── dm-service -- This directory contains daemon code to expose the data model tree as a microservice
├── docs -- More detailed explanation of the data model and user guide
├── gitlab-ci -- Used for CI/CD pipeline tests
├── libbbfdm -- Minimal TR181 core data model implementation
├── libbbfdm-api -- API library to create data model definitions and parse the data model definition to form a data model tree
│ └── legacy - Legacy version of `libbbfdm-api` containing APIs for creating and parsing data model definitions to build a data model tree
│ └── version-2 - New version of `libbbfdm-api` with a more flexible and generic implementation, making it easier to use in dm-service and unified daemon
├── libbbfdm-ubus -- API library to expose data model over Ubus
├── tools -- Tools to convert XML data model definitions to JSON, generate C code, and more
└── utilities -- Small helper utilities to complete/optimize the data model deployment
Important Topics
- BBFDMD Design
- Microservice Design
- LIBBBFDM-API/Legacy Documentation
- LIBBBFDM-API/Vesrion-2 Documentation
- LIBBBFDM-UBUS Documentation
- Utilities Documentation
- Tools
- How to extend data model with C Code
- How to extend data model with JSON
Good To Know
-
The current data model implementation follows the latest version of the data model, version
2.18. -
Instance alias handling has been moved to the icwmp repository since
bbfdmrepository only supports the common functionality provided by CWMP and USP protocols. -
The current data model implementation does not support the delete method for all instances (e.g., Device.Users.User.) since CWMP and USP protocols do not provide support for this operation.
-
The data model implementation uses different directories to store temporary UCI configurations based on the protocol being used. The details are as follows:
| Protocol | Save Config Directory | Config Directory | Save Dmmap Directory | Dmmap Directory |
|---|---|---|---|---|
| cwmp | /tmp/bbfdm/.cwmp/config | /etc/config | /tmp/bbfdm/.cwmp/dmmap | /etc/bbfdm/dmmap |
| usp | /tmp/bbfdm/.usp/config | /etc/config | /tmp/bbfdm/.usp/dmmap | /etc/bbfdm/dmmap |
| both | /tmp/bbfdm/.bbfdm/config | /etc/config | /tmp/bbfdm/.cwmp/dmmap | /etc/bbfdm/dmmap |
Compilation Helper Utilities
Additional Data Model Objects
This repository has a bare minimum TR181 data model integrated. Each service has its own data model additions, which they expose using plugins and microservices.
A list of IOWRT-provided service data model sets is available in tools_input.json.
Dependencies
Build-Time Dependencies
To successfully build bbfdmd, the following libraries are required:
| Dependency | Link | License |
|---|---|---|
| libuci | https://git.openwrt.org/project/uci.git | LGPL 2.1 |
| libubox | https://git.openwrt.org/project/libubox.git | BSD |
| libubus | https://git.openwrt.org/project/ubus.git | LGPL 2.1 |
| libjson-c | https://s3.amazonaws.com/json-c_releases | MIT |
| libbbfdm-api | https://dev.iopsys.eu/bbf/bbfdm.git | BSD-3 |
| libbbfdm-ubus | https://dev.iopsys.eu/bbf/bbfdm.git | BSD-3 |
Run-Time Dependencies
To run bbfdmd, the following dependencies are required:
| Dependency | Link | License |
|---|---|---|
| ubusd | https://git.openwrt.org/project/ubus.git | LGPL 2.1 |
| libubox | https://git.openwrt.org/project/libubox.git | BSD |
| libjson-c | https://s3.amazonaws.com/json-c_releases | MIT |
| libbbfdm-api/version-2 | https://dev.iopsys.eu/bbf/bbfdm.git | BSD-3 |
To run dm-service, the following dependencies are required:
| Dependency | Link | License |
|---|---|---|
| ubusd | https://git.openwrt.org/project/ubus.git | LGPL 2.1 |
| libbbfdm-api | https://dev.iopsys.eu/bbf/bbfdm.git | BSD-3 |
| libbbfdm-ubus | https://dev.iopsys.eu/bbf/bbfdm.git | BSD-3 |