Skip to content

Commit 2d885f1

Browse files
committed
2026-02-23: v11.0.0 (Kestrel)
Changes from v10.0.14 Added - Authenticated UDS connections: USP Services must provide a passsword in the UDS Handshake frame if UnixDomainSocket.{i}.AuthRequired is set to true. Passwords are configured in UnixDomainSockets.Authentication.{i} - Data model registration permissions: USP Services are only permitted to register the DM elements specified in USPServices.Trust.{i}, if UnixDomainSocket.{i}.RegistrationRestricted is set to true. - File descriptor passing via Unix domain socket ancilliary data for USP Services. Currently this feature is being discussed for inclusion in the USP v1.6 specification. Disabled by default, this feature may be enabled by defining FD_PASSING_EXPERIMENTAL in vendor_defs.h - Lines in the factory reset text file that begin with `+` automatically add the parameter to OBUSPA's database. If it is already present, its existing value is left unchanged. - TP-469 Conformance Test Plan Results for each release are checked in at [conformance_test_results.txt](https://github.com/BroadbandForum/obuspa/blob/master/conformance_test_results.txt). The CI directory contains the files used by the test procedure. Modified - factory_reset_example.txt renamed as stomp_factory_reset_example.txt - OBUSPA's database may configure DeviceInfo.ProductClass, Manufacturer and ModelName, overriding compile time defaults. Fixed - Crash that occurred if invalid UDS MTP parameters were present in OBUSPA's database at startup. - OBUSPA was not automatically creating intermediate directories in the MUTABLE_CERT_DIR path. - Alias uniqueness validation failures returned error code 7004 instead of 7025.
1 parent 7262a0e commit 2d885f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+6971
-718
lines changed

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
# OB-USP-AGENT Changelog
22

3+
## 2026-02-20 v11.0.0
4+
### Added
5+
- Authenticated UDS connections: USP Services must provide a passsword in the UDS Handshake frame if
6+
UnixDomainSocket.{i}.AuthRequired is set to true. Passwords are configured in UnixDomainSockets.Authentication.{i}
7+
- Data model registration permissions: USP Services are only permitted to register the DM elements specified
8+
in USPServices.Trust.{i}, if UnixDomainSocket.{i}.RegistrationRestricted is set to true.
9+
- File descriptor passing via Unix domain socket ancilliary data for USP Services. Currently this feature is
10+
being discussed for inclusion in the USP v1.6 specification. Disabled by default, this feature
11+
may be enabled by defining FD_PASSING_EXPERIMENTAL in vendor_defs.h
12+
- Lines in the factory reset text file that begin with `+` automatically add the parameter to OBUSPA's database.
13+
If it is already present, its existing value is left unchanged.
14+
- TP-469 Conformance Test Plan Results for each release are checked in at
15+
[conformance_test_results.txt](https://github.com/BroadbandForum/obuspa/blob/master/conformance_test_results.txt).
16+
The CI directory contains the files used by the test procedure.
17+
18+
### Modified
19+
- factory_reset_example.txt renamed as stomp_factory_reset_example.txt
20+
- OBUSPA's database may configure DeviceInfo.ProductClass, Manufacturer and ModelName, overriding compile time defaults.
21+
22+
### Fixed
23+
- Crash that occurred if invalid UDS MTP parameters were present in OBUSPA's database at startup.
24+
- OBUSPA was not automatically creating intermediate directories in the MUTABLE_CERT_DIR path.
25+
- Alias uniqueness validation failures returned error code 7004 instead of 7025.
26+
27+
28+
329
## 2026-02-09 v10.0.14
430
### Fixed
531
- Changes introduced in v10.0.13 could cause FactoryReset() to hit an assert. The cause has been fixed.

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ RUN apt update && apt -y install libssl-dev libsqlite3-dev libcurl4-openssl-dev
9191
WORKDIR /
9292
COPY --from=build-stage /usr/local/lib/libwebsockets.* /usr/local/lib/
9393
COPY --from=build-stage /usr/local/bin/obuspa /bin
94-
COPY --from=build-stage /usr/local/src/obuspa/factory_reset_example.txt /etc
94+
COPY --from=build-stage /usr/local/src/obuspa/stomp_factory_reset_example.txt /etc
9595
RUN ldconfig
9696

9797
ENTRYPOINT ["/bin/obuspa"]
98-
CMD ["-p", "-v4", "-r", "/etc/factory_reset_example.txt", "-f", "/tmp/usp.db"]
98+
CMD ["-p", "-v4", "-r", "/etc/stomp_factory_reset_example.txt", "-f", "/tmp/usp.db"]

INTERNAL_SERVICES_GUIDE.md

100755100644
Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,43 @@ The Broker is enabled by default. However, some configuration is necessary in o
2424

2525
OBUSPA stores its configuration in a database file, the path of which can be provided as a command line option. https://github.com/BroadbandForum/OBUSPA/blob/master/QUICK_START_GUIDE.md contains a detailed description of this database in the section entitled "Running OB-USP-AGENT for the first time".
2626

27-
We need to copy and modify the factory_reset_example.txt to broker_reset.txt and add additional data model entries that OBUSPA uses to instantiate the domain sockets used by the UDS backend. Though different configurations are possible, it is recommended (for interoperability) that the Broker creates two listening sockets. Each USP Service will connect/disconnect as necessary and register its data model with the Broker. One of these sockets is used when the USP Service is acting as an data model provider to the Broker's Controller. The other socket is used when the USP Service is acting as a Controller of the Broker's Agent.
27+
We need to copy and modify the stomp_factory_reset_example.txt to broker_reset.txt and add additional data model entries that OBUSPA uses to instantiate the domain sockets used by the UDS backend. Though different configurations are possible, it is recommended (for interoperability) that the Broker creates two listening sockets. Each USP Service will connect/disconnect as necessary and register its data model with the Broker. One of these sockets is used when the USP Service is acting as an data model provider to the Broker's Controller. The other socket is used when the USP Service is acting as a Controller of the Broker's Agent.
2828

2929
### Configuring the Broker's Controller socket
3030
The following well known path should be used to configure the Broker's Controller socket. OBUSPA will use this information to create a listening socket at the specified path that a USP Service's Agent can connect to.
3131
```
3232
Device.UnixDomainSockets.UnixDomainSocket.1.Alias "cpe-1"
3333
Device.UnixDomainSockets.UnixDomainSocket.1.Mode "Listen"
3434
Device.UnixDomainSockets.UnixDomainSocket.1.Path "/var/run/usp/broker_controller_path"
35+
Device.UnixDomainSockets.UnixDomainSocket.1.AuthRequired "false"
36+
Device.UnixDomainSockets.UnixDomainSocket.1.RegistrationRestricted "false"
3537
```
3638
OBUSPA will create and configure the database the first time it is run. Note that OBUSPA will only use these factory default values if no database already exists. If you wish to change the default parameters then you must remove the existing database. In the below command, '-f' selects usp_broker.db as the database (instead of the default usp.db) and '-s' selects broker_cli as the CLI socket (instead of the default usp_cli).
3739

3840
```
3941
obuspa -f /usr/local/var/obuspa/usp_broker.db -s /tmp/broker_cli -p -v 4 -r broker_reset.txt -i enp0s3
4042
```
4143
### Configuring a USP Service to connect to the Broker
42-
A second instance of OBUSPA can be used as the basis for a USP Service. It must also be told to connect to the Broker's (listening socket) Controller path. Using factory_reset_example.txt as a starting point, copy and modify to service1_reset.txt and add the following lines:-
44+
A second instance of OBUSPA can be used as the basis for a USP Service. It must also be told to connect to the Broker's (listening socket) Controller path. Using stomp_factory_reset_example.txt as a starting point, copy and modify to service1_reset.txt and add the following lines:-
4345
```
4446
Device.LocalAgent.EndpointID "proto::service1"
4547
Device.UnixDomainSockets.UnixDomainSocket.1.Alias "cpe-1"
4648
Device.UnixDomainSockets.UnixDomainSocket.1.Mode "Connect"
4749
Device.UnixDomainSockets.UnixDomainSocket.1.Path "/var/run/usp/broker_controller_path"
50+
Device.UnixDomainSockets.UnixDomainSocket.1.AuthRequired "false"
51+
Device.UnixDomainSockets.UnixDomainSocket.1.RegistrationRestricted "false"
4852
```
4953
Note the the Endpoint ID is set differently for the USP Service to "proto::service1". By default the USP Endpoint ID is derived from the network adapter MAC address. Each Endpoint ID must be unique which will plainly not be the case if we continue to use the default MAC address besed endpoint ID. For each USP Service we set an appropriate Endpoint ID in the settings database that identifies that Service.
54+
55+
On this connection, the USP Service is acting as an Agent, so we must indicate this:
56+
```
57+
Device.LocalAgent.MTP.1.Alias "cpe-1"
58+
Device.LocalAgent.MTP.1.Protocol "UDS"
59+
Device.LocalAgent.MTP.1.UDS.UnixDomainSocketRef "Device.UnixDomainSockets.UnixDomainSocket.1"
60+
Device.LocalAgent.MTP.1.Enable "true"
61+
```
62+
63+
To start the USP Service use:
5064
```
5165
obuspa -f /usr/local/var/obuspa/usp_server1.db -s /tmp/service1_cli -p -v4 -r service1_reset.txt -i enp0s3
5266
```
@@ -254,7 +268,18 @@ Before we can launch our USP Service acting as a Controller we need to re-config
254268
Device.UnixDomainSockets.UnixDomainSocket.2.Alias "cpe-2"
255269
Device.UnixDomainSockets.UnixDomainSocket.2.Mode "Listen"
256270
Device.UnixDomainSockets.UnixDomainSocket.2.Path "/var/run/usp/broker_agent_path"
271+
Device.UnixDomainSockets.UnixDomainSocket.2.AuthRequired "false"
272+
Device.UnixDomainSockets.UnixDomainSocket.2.RegistrationRestricted "false"
257273
````
274+
275+
On this connection, the USP Broker is acting as an Agent, so we must indicate this:
276+
```
277+
Device.LocalAgent.MTP.2.Alias "cpe-2"
278+
Device.LocalAgent.MTP.2.Protocol "UDS"
279+
Device.LocalAgent.MTP.2.UDS.UnixDomainSocketRef "Device.UnixDomainSockets.UnixDomainSocket.2"
280+
Device.LocalAgent.MTP.2.Enable "true"
281+
```
282+
258283
The USP Broker must be running:-
259284
````
260285
obuspa -i wan -v 3 -r /fac_reset_broker.txt -f /obuspa_broker.db
@@ -270,6 +295,8 @@ In order for a USP Service to act as a Controller it must connect to the Broker
270295
Device.UnixDomainSockets.UnixDomainSocket.2.Alias "cpe-2"
271296
Device.UnixDomainSockets.UnixDomainSocket.2.Mode "Connect"
272297
Device.UnixDomainSockets.UnixDomainSocket.2.Path "/var/run/usp/broker_agent_path"
298+
Device.UnixDomainSockets.UnixDomainSocket.2.AuthRequired "false"
299+
Device.UnixDomainSockets.UnixDomainSocket.2.RegistrationRestricted "false"
273300
````
274301
Finally we can launch service2 acting as a Controller:-
275302
````

Makefile.am

100755100644
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ SOURCES = src/core/main.c \
108108
src/core/e2e_context.c \
109109
src/core/plugin.c \
110110
src/core/device_uds.c \
111+
src/core/fd_vector.c \
111112
src/core/uds.c \
112113
src/core/usp_service.c \
113114
src/core/usp_broker.c
@@ -134,6 +135,10 @@ obuspa_LDADD += $(openssl_LIBS) $(sqlite3_LIBS) $(libcurl_LIBS) $(zlib_LIBS) $(l
134135
# Import vendor makefile
135136
include src/vendor/vendor.am
136137

138+
# Import plugin makefiles
139+
pkglib_LTLIBRARIES =
140+
include examples/test_uds/Makefile.am
141+
137142
# Include files
138143
public_includedir = $(includedir)/obuspa/include
139144
public_include_HEADERS = \

QUICK_START_GUIDE.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ To start with, use the last option, as this is the simplest method.
8585
If OB-USP-AGENT cannot find a database when it starts up, then it will create one using the parameter values specified
8686
in the file located by the `-r` option.
8787

88-
To specify the data model parameters and values used to create the factory reset database, modify `factory_reset_example.txt`.
88+
To specify the data model parameters and values used to create the factory reset database, modify `stomp_factory_reset_example.txt`.
8989
You will need to modify the STOMP connection parameters and the USP EndpointID of the controller to connect to.
9090

9191
When using this option, to prevent the code in vendor_factory_reset_example.c from overriding the values specified in the
@@ -94,7 +94,7 @@ file located by the `-r` option, ensure that `INCLUDE_PROGRAMMATIC_FACTORY_RESET
9494
To create the database and run OB-USP-AGENT connecting to a STOMP server from network interface eth0 with protocol and trace
9595
logging enabled to stdout, use the following command:
9696
```
97-
$ obuspa -p -v 4 -r factory_reset_example.txt -i eth0
97+
$ obuspa -p -v 4 -r stomp_factory_reset_example.txt -i eth0
9898
```
9999

100100
If OB-USP-AGENT successfully connected to your STOMP server you should see trace like the following on stdout:
@@ -128,7 +128,7 @@ If OB-USP-AGENT successfully connected to your STOMP server you should see trace
128128
```
129129

130130
If OB-USP-AGENT failed to connect, review the settings in your factory reset database and the STOMP server.
131-
If you subsequently change the settings in `factory_reset_example.txt`, then you must delete the database,
131+
If you subsequently change the settings in `stomp_factory_reset_example.txt`, then you must delete the database,
132132
in order that the database is re-created the next time you run OB-USP-AGENT.
133133
To delete the database in the default location:
134134
```
@@ -510,7 +510,7 @@ A shared object will be created in `obuspa/examples/plugin/.libs/plugin.so` and
510510
511511
```
512512
cd obuspa
513-
obuspa -p -v 4 -r factory_reset_example.txt -i eth0 -x examples/plugin/.libs/plugin.so
513+
obuspa -p -v 4 -r stomp_factory_reset_example.txt -i eth0 -x examples/plugin/.libs/plugin.so
514514
```
515515
OB-USP-AGENT supports the loading of multiple plug-ins at start-up, each one specified using a '-x' command line switch.
516516

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ Open Broadband-User Services Platform-Agent (OB-USP-Agent) is an open source pro
66

77
For build instructions, please refer to [QUICK_START_GUIDE](https://github.com/BroadbandForum/obuspa/blob/master/QUICK_START_GUIDE.md).
88

9+
## TP-469 Conformance Test Plan Results
10+
11+
Test results for all MTPs are available in [conformance_test_results.txt](https://github.com/BroadbandForum/obuspa/blob/master/conformance_test_results.txt).
12+
913
## Contributing
1014

1115
Thank you for your interest in contributing! Please refer to [CONTRIBUTING.md](https://github.com/BroadbandForum/obuspa/blob/master/CONTRIBUTING.md) for guidance.

RELEASES.md

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,77 @@
1-
# Release History
1+
# Major Release History
2+
3+
## Release 11.0.0
4+
* Highlights
5+
* Authenticated UDS connections support: USP Services must provide a passsword if connecting via an authenticated UDS socket
6+
* Data model registration permissions support: The USP Broker can control which DM elements a USP Service is allowed to register
7+
* Support for permission Targets containing search expressions
8+
* Experimental file descriptor passing via Unix domain socket ancilliary data for USP Services. To enable, define FD_PASSING_EXPERIMENTAL in vendor_defs.h
9+
* Device.LocalAgent.AddCertificate() support. See QUICK_START_GUIDE.md for how to use this feature
10+
* TP-469 Conformance Test Plan Results for each release are now checked into the repo, in the file conformance_test_results.txt
11+
* 'obuspa -c add' CLI command now supports setting child parameters
12+
* Functions to access the data model from vendor threads (USP_PROCESS_DoWorkSync, USP_PROCESS_DM_GetParameterValue, USP_PROCESS_DM_SetParameterValue)
13+
* If USP database file is corrupt, a new database is created using the factory reset configuration
14+
* Maximum allowed MTP frame size received has been increased to 5MB (from 64K)
15+
16+
* USP Broker, USP Services and UDS MTP
17+
* Fixed crash that occurred if invalid UDS MTP parameters were present in OBUSPA's database at startup
18+
* Fixed crash if USP Service registers a DM element, but does not provide it in the GSDM response
19+
* Fixed race hazard causing USP Broker to reject all messages from a USP Service. Occurs when USP Service disconnects, then immediately reconnects over UDS MTP, whilst USP Broker is waiting for a synchronous USP response
20+
* USP Command and Event arguments should not be allowed to be registered more than once
21+
* USP Services should not reuse group_ids registered by internal data model providers
22+
* Prevented assert when changing LocalAgent.MTP.Enable and Protocol is UDS
23+
* LocalAgent.MTP.{i}.Status is now working for UDS MTP
24+
25+
* MQTT
26+
* MQTT client should not disconnect if no Response Topic
27+
* MQTT connection should be retried if TLS handshake fails and libmoquitto version<2.0.13
28+
* MQTT Send message queue should not get stuck if packet too large
29+
* MQTT client should not assert if no Response Topic
30+
31+
* WebSockets
32+
* Fixed memory leak with WebSockets MTP, if from_id does not match EID in Sec-WebSocket-Extensions header
33+
* Websocket server thread should not prevent graceful shutdown after disabling it, or after duplicate messages in its send queue
34+
35+
* CLI
36+
* 'obuspa -c' output has been made cleaner, containing only logs from the data model thread
37+
* Concurrent CLI invocations should not get stuck
38+
* CLI initiated event arguments should support JSON formatted data
39+
40+
* Build Options
41+
* Device.Security.Certificate may be removed from OBUSPA's data model using the define REMOVE_DEVICE_SECURITY_CERTIFICATE in vendor_defs.h.
42+
* Configure options to enable address sanitizer (--enable-asan) and thread sanitizer builds (--enable-tsan) have been added. These options are disabled by default.
43+
* Configure option (--enable-hardening) to enable compiler hardening flags (disabled by default)
44+
* To support compilation of OBUSPA data model plug-ins, the build process now installs header files to $(includedir)/obuspa
45+
* Fixed compilation failure when #include'ing only usp_api.h (enable_callstack_debug should be declared in usp_api.h)
46+
47+
* USP API
48+
* Added USP_LOG_GetLogLevel and USP_LOG_SetLogLevel API functions to atomically access the log level at runtime
49+
* Added USP_SIGNAL_Reboot API function to initiate shutting down, then rebooting the device
50+
* can_mtp_connect vendor hook should also control Bulk Data Collection report generation
51+
52+
* Database
53+
* OBUSPA's database may configure DeviceInfo.ProductClass, Manufacturer and ModelName, overriding compile time defaults
54+
* Lines in the factory reset text file that begin with `+` automatically add the parameter to OBUSPA's database (existing value is left unchanged)
55+
* factory_reset_example.txt renamed as stomp_factory_reset_example.txt
56+
* Removed automatic creation of the default database directory during make install (GitHub Issue #148)
57+
58+
* Misc
59+
* Code has been updated to use the latest v1.5.2 release of protobuf-c
60+
* Fixed R-GET.0 not working for invalid object names in path
61+
* Fixed R-GET.0 not applied for partial paths
62+
* Fixed race hazard preventing graceful shutdown. Occurs if re-initiating shutdown whilst in the process of shutting down
63+
* Fixed crash if object creation notification contains too many keys
64+
* Wildcarded delete response with allow_partial=true now correct, if one instance not permitted to be deleted
65+
* Fixed regression (introduced in v10.0.0) with Async Operation max concurrency limit
66+
* ControllerTrust Permission Order uniqueness is now enforced when Add request with allow_partial=false adds multiple permissions with the same Order
67+
* GSDM response does not contain unique keys for child objects when first_level_only=true
68+
* Prevented first object creation notification after bootup being missed
69+
* OBUSPA now returns correct error code to pass conformance test 1.100
70+
* Alias uniqueness validation failures now return error code 7004 instead of 7025.
71+
* Added SIGTERM signal handler to cleanly shutdown
72+
* Added support for Device.BulkData.Profile.{i}.Controller parameter
73+
74+
275

376
## Release 10.0.0
477
* USP v1.4 and TR-181 v2.18

0 commit comments

Comments
 (0)