Saturday, February 9, 2008

TR-069 and transactions

TR-069 defines methods 'SetParameterValues' and 'GetParamterValues' to configure devices and read confguration from devices. TR-069 ACS (Auto Configuration Server) sends these methods to TR-069 device agents. Configuration of device involves TR-069 device agent establishing session, ACS sending configuration values in one or more SetParamterValues methods and closing the session. As indicated in previous blog, DSL forum also defines data profiles containing configuration parameters. These configuration parameters are logically combined into multiple functional blocks. Blocks are of two types. Normal blocks contain parameters and Table blocks contain multiple records with each record having set of parameters.

All items listed TR-098 specifications with 'P' are either normal blocks or table blocks. All items listed with 'R' or 'W' are parameters. Blocks with multiple instances are table blocks. If 'C' is mentioned along with table blocks, then ACS can create new instances (records).

TR-069 specifications is not very clear about transaction boundaries. It indicates that parameters of a block can be set across multiple 'SetParamterValues' methods, but it did not define any transaction semantics . Hence it is better to assume that transaction boundary is limited to one instance of 'SetParamterValues' method.

If the values of parameters for a record come in multiple 'SetParamterValues' methods, it would be difficult for device to know the end and that might lead to interoperability problems if device validates parameters prematurely.

For interoperability, I suggest following guidelines for ACS and Device.


  • Always create a record with default values for all parameters when instances is created with 'AddObject' method. By doing so, even if ACS sets the values of newly created instance across multiple SetParamterValue methods, device validation does not fail.
  • Since one SetParameterValues method can contain parameters belonging to multiple instances of newly created records and parameters belonging to different blocks, it is required that device maintains semantics of transaction - Check for validity of all parameters first. If validation of all paramters is fine, then only it should program its internal functions.


  • Always set values of parameters of newly created instance in one SetParamterValues method.
  • Don't send parameters belonging to different instances of table blocks or differenet normal blocks in one 'SetParamterValues' method.

No comments: