Recent updates to the Rocket CWMP client implementation include the addition of ChangeDUState RPC support and other functionality required for a working implementation of the RPC.
In collaboration with Vodafone and partners Altran and Stetel, Sartura recently provided significant updates to Rocket CWMP, a lightweight and modular CWMP client. The Rocket CWMP project was started to address the market gap for an Open Source, production-ready client solution supporting TR-069, TR-181, and other technical reports.
Rocket CWMP has been recently used in developing a reference implementation of prpl Foundation's Service Delivery Platform (SDP), a platform for delivering, uninstalling, enabling and disabling software in CPE. In the SDP architecture, Rocket CWMP acts as a CWMP daemon in charge of receiving commands/objects from the ACS to control the lifecycle of each package or service.
ChangeDUState, defined in TR-069 specification, Amendment 5, is a CWMP client RPC called by the Auto Configuration Server (ACS) that handles updates, installation, and uninstallation of Deployment Units. A Deployment Unit -- defined as an entity that can be individually deployed on the Execution Environment -- can in this scenario be viewed as a software package. For the ACS side, we were supported by Altran.
A single ChangeDUState call progresses like this:
1. The ACS calls ChangeDUState with the appropriate OperationStruct (Install, Uninstall or Update) type set. Multiple OperationStructs can be present simultaneously, which means that multiple operations can be started in a single ChangeDUState request.
2. If the CPE cannot process the ChangeDUState request, it responds with a CWMPFault. Otherwise, a ChangeDUStateResonse is sent, after which the CPE starts processing the request.
3. When all the operations specified in the ChangeDUState request are completed, the CPE sends a DUStateChangeComplete request, with a Results array that contains the results of all the OperationStruct requests specified in the ChangeDUState request.
4. If the procedure is successful, the ACS sends a DUStateChangeCompleteResponse response, otherwise, a CWMPFault is returned.
The whole purpose of ChangeDUState RPC is to achieve reliable Software Module Management as defined in Broadband Forum’s TR-157 specification, Appendix II. Rocket CWMP handles the communication with the ACS, and translates and forwards package management requests to the software handling the Lifecycle Management part (Life Cycle Manager) of the Software Module Management process (Figure 1). The Life Cycle Manager software was provided by Stetel.
Figure 1. Rocket CWMP
Accepting ACS requests behind NAT
Since ChangeDUState is a client RPC -- and CWMP clients usually run on home devices and behind a NAT -- the problem of accepting ACS requests behind NAT arose. The TR-069 standard defines that STUN, defined in RFC 3489, should be used to achieve connection requests to a CPE behind NAT.
In order to resolve this and implement the ChangeDUState RPC in RocketCWMP, we have implemented a small NAT bypass proxy server in Golang using similar principles that are present in the socat utility.
OpenWrt Summit 2018 demo
Rocket CWMP functionalities were demonstrated as part of a recent presentation by Stetel on OpenWrt Summit 2018 held in Lisbon, Portugal from October 29th and 30th. The presentation Service Delivery Platform. Install subscribed services on the CPE, held by Georg Campana from Stetel, explained the main architectural components and procedures of the SDP reference implementation.
The talk finished with a demonstration in which the SDP Execution Environment and the SmartThings service were -- in that order -- pushed from the ACS to a router. The SmartThings service then advertises itself via mDNS, the SmartThings app becomes ready to use, and the router is effectively turned into a SmartThings Hub.
The lightweight and extensible design of Rocket CWMP is ideal for complementing existing solutions for automatic and remote software installation on the CPE. If your service delivery architecture is missing a provisioning component, contact us to tailor Rocket CWMP for your service.