This chapter provides a specification for the TR069 Connector, an assistant to a Protocol Adapter based on [1] TR-069 Amendment 3. A TR069 Connector provides a mapping of TR-069 concepts to/from the Dmt Admin Service Specification. It mainly handles the low level details of Object/Parameter Name to Dmt Admin URI mapping, and vice versa. TR-069 Protocol Adapter developers can use this service to simplify the use the Dmt Admin service. The TR069 Connector service is based on the definition of a Protocol Mapping in Protocol Mapping. It is assumed that the reader understands TR-069 and has a basic understanding of the Dmt Admin service.
The examples in this specification are not from a Broadband Forum Technical Report and are purely fictional.
-
Connector - Provide a TR-069 view on top of the Dmt Admin service.
-
Simplify - Simplify the handling of data models implemented through the DMT through the TR-069 protocol.
-
Browse - Implement the constructs for
MAP
andLIST
handling. -
Native - Provide a mechanism for Data Plugins to convey conversion information to the Protocol Adapter so that native TR-069 object models can be implemented as Data Plugins.
-
TR069ConnectorFactory - Provides a way to create a TR069Connector that is bound to an active Dmt Session.
-
TR069Connector - Created by TR069ConnectorFactory on a Dmt Session; provides methods that helps in using the TR-069 namespace and RPCs on a Dmt Admin DMT.
-
ParameterValue - The value of a parameter, maps to the TR-069
ParameterValueStruct
. -
ParameterInfo - Information about the parameter, maps to the TR-069
ParameterInfoStruct
. -
DMT - The Device Management Tree as available through the Dmt Admin service.
A TR-069 Protocol Adapter first creates a Dmt Session on the node in the DMT that maps to an object model that should be visible to the TR-069 Management Server. A Protocol Adapter can choose to map a whole sub-tree or it can create a virtual object model based on different nodes, this depends on the implementation of the Protocol Adapter.
When a TR-069 RPC arrives, the Protocol Adapter must parse the SOAP message and analyze the request. In general, an RPC can request the update or retrieval of multiple values. The Protocol Adapter must decompose these separate requests into single requests and execute them as a single unit. If the request is a retrieval or update of a data model maintained in the Dmt Admin service then the Protocol Adapter can use a TR069 Connector to simplify implementing this request. The TR069 Connector Factory service can be used to create an instance of a TR069 Connector that is based on a specific Dmt Session.
The TR069 Connector maps the Object or Parameter Name to a URI and
perform the requested operation on the corresponding node. The
name-to-URI conversion supports the LIST
and
MAP
concepts as defined in OSGi Object Modeling.
The TR069 Connector handles conversion from the Dmt Admin data types to the TR-069 data types. There is a default mapping for the standard Dmt Admin formats including the comma separated list supported by TR-069. However, Data Plugins that implement TR-069 aware object models can instruct the TR069 Connector by providing specific MIME types on the Meta Node.
Objects can be added and deleted but are, in general, not added immediately. These objects are lazily created when they are accessed. The reason is that TR-069 does not support the concept of a session with atomic semantics, a fact leveraged by certain object models in the DMT. Therefore, adding an object will assign a instance id to an object but the creation of the object is delayed until the object is used.
After all the requests in an RPC are properly handled the TR069 Connector must be closed, the Dmt Session must be closed separately.
Errors are reported to the caller as they happen, if a Dmt Admin service error is fatal then the Dmt Session will be closed and it will be necessary to create a new TR069 Connector.
The [6] Broadband Forum is an organization for broadband wire-line solutions. They develop multi-service broadband packet networking specifications addressing interoperability, architecture, and management. Their specifications enable home, business and converged broadband services, encompassing customer, access and backbone networks. One of the specifications of the Broadband Forum is the Technical Report No 69, also called TR-069, a specification of a management model.
[1] TR-069 Amendment 3 is a technical report (Broadband Forum's specification model) that specifies a management protocol based on [4] SOAP 1.1 over HTTP. The TR-069 technical report defines a number of mandatory Remote Procedure Calls (RPCs) that allow a management system, the Auto-Configuration Server (ACS), to discover the capabilities of the Consumer Premises Equipment (CPE) and do basic management. This model is depicted in Figure 131.2.
In TR-069, the CPE is always initiating the conversation with the ACS though the ACS can request a session.
Inside the CPE there is a Protocol Adapter that implements the TR-069 RPCs. These RPCs read and modify the objects models present in the CPE. There is usually a mechanism that allows the different modules in the CPE to contribute a management object to the Protocol Adapter so that the Protocol Adapter does not require knowledge about highly specialized domains.
[2] TR-106 Amendment 3 specifies object model guidelines to be followed by all TR-069-enabled devices as well as a formal model to document these object models.
The object model of TR-069 consists of objects that contain parameters as well as tables that contain objects. TR-106 says:
-
Object - A named collection of parameters and/or other objects.
-
Parameter - A name-value pair.
-
Table - An enumeration of objects identified by an instance id.
Objects can also occur in tables, in that case the object name is
suffixed with an instance id. An object that has no
instance id is a singleton, with an instance id they are referred to as
tables. In the Broadband Forum technical reports
tables end in the special suffix {i}
, the instance
id.
This provides the following structural definition for this specification:
named-value ::= NAME ( object | table | parameter )
object ::= named-value +
table ::= ( instance object )*
parameter ::=
instance ::= INTEGER > 0
TR-069 talks about partial paths and parameter names. In this
specification, a name is reserved for the short
relative name used inside an object, also called the local
name. The term path is reserved for the
combination of object names, table names, and instance ids that are
separated by a full stop ('.' \u002E
) and used to traverse
an instance model.
path ::= parameter-path | object-path| table-path
segment ::= NAME '.' ( instance '.' )?
object-path ::= segment+
table-path ::= segment* NAME '.' // expect INTEGER next
parameter-path ::= object-path NAME
instance-path ::= table-path instance '.'
In this specification the following terms are used consistently:
-
Object - Refers to a named type defining a certain set of parameters, objects, and tables.
-
Table - A list of instances for a given object.
-
Instance - An object element in a table at a certain id.
-
Instance Id - The integer id used to identify an instance in a table.
-
Alias - A name chosen by the ACS that uniquely identifies an instance.
-
Singleton - An object that is not in a table.
-
Name - The name of an object, table, or parameter refers to the local name only and not the path.
-
Segment - A component in a path that always ends in a full stop. A segment can contain instance ids to identify an instance.
-
Path - A string uniquely identifying a path in the tree to either a parameter, an object, or a table.
-
Object Path - A path that uniquely identifies an instance or a singleton. An object path must always ends in a full stop. This maps to the TR-069 concept of an
ObjectName
. -
Parameter Path - The name of the parameter preceded by the owning object. A path that does not end in a full stop is always a parameter path.
-
Table Path - An object path that lacks the last instance id. In TR-069 this is also sometimes called a partial path. The last segment is an object path that must be followed by an instance id to address an instance.
-
Instance Path - A path to an instance in a table
This provides a hierarchy as depicted in Figure 131.4.
The grammars for parameter names and object names are as follows:
NAME ::= ( Letter | '_' )
( Letter | Digit | '-' | '_' | CombiningChar| Extender )*
The productions Letter
, Digit
,
CombiningChar
, and Extender
are defined in
[5] Extensible Markup Language (XML) 1.0 (Second Edition). The name basically supports the full Unicode
character set for letters and digits (including digits for other
languages), including sets for languages like Hebrew and Chinese.
Examples of different parameter names are:
name // simple name
Name // case sensitive
_
_-_-_
ångstrom
þingsten
ΨΣΩΠ
A parameter value can have one of the data types defined in [2] TR-106 Amendment 3, they are summarized in Table 131.1.
Table 131.1 TR-106 Data types
TR-106 Type | Description |
---|---|
object |
Represents a structured type |
string |
A Unicode string, optionally restricted in length |
int |
32 bit integer |
long |
64 bit integer |
unsignedInt |
32 bit unsigned integer |
unsignedLong |
64 bit unsigned integer |
boolean |
Can have values 0 or false ( |
dateTime |
TR-069 recognizes three different date times. These three cases are differentiated in the following way:
|
base64 |
An array of bytes |
hexBinary |
An array of bytes |
SOAP messages always provide a type for the parameter value. For example:
<ParameterValueStruct>
<name>Parameter1</name>
<value xsi:type="long">1234</value>
</ParameterValueStruct>
The xsi
prefix refers to the
https://www.w3.org/2001/XMLSchema-instance
namespace.
However, this makes not all TR-106 types well defined, for example in
XML Schema base64
is called base64Binary
. This
specification assumes that the names and definitions in Table 131.1 and provides appropriate
constants for the Protocol Adapter.
Parameters can be read-only or read-write. All writable Parameters
must also be readable although security can cause certain parameters to
be read as an empty string, for example passwords. Parameters can
reflect configuration as well as status of the device. External causes
can cause parameters to change at any time. The TR-069 protocol has the
facility to call an Inform
RPC to provide the ACS with a
notification of changed parameters.
Parameter attributes provide the meta data for a parameter. In TR-069, the attributes are used to manage notifications and access control. Each parameter in TR-069 can be watched by the ACS by setting the corresponding parameter attribute to active or passive notifications. Passive notifications are passed whenever the CPE communicates with the ACS and active notifications initiate a session. Parameters that have a notification are said to be watched.
Access to the parameters can be managed by setting Access Control Lists via the corresponding parameter attribute.
TR-106 has the concept of an object stored in a table to allow multiple instances of the same type. It is part of the object definition if it is stored in a table or not. An object cannot both appear as a table instance and as a singleton.
Each instance in the table is addressed with an integer >= 1. This instance id is not chosen by the ACS since it can be required to create a new instance due to an external event. For example the user plugging in a USB device or starting a new VOIP session. The ACS must discover these instance ids by asking the device for the instance ids in a table.
For example, the parameter path
Device.LAN.DHCPOption.4.Request
refers to a parameter on a
DHCPOption
object that has the instance id 4. Instance ids
are not sequential nor predictable. It is the responsibility of the
device to choose an instance id when an object is created. Instance ids
are assumed to be persistent so that the ACS can cache results from a
discovery process.
Newer TR-069 objects have been given an Alias
parameter. This alias uniquely identifies the table instance.
TR-069 defines a convention for a parameter that contains the
number of entries in a table. Any parameter name that ends with
NumberOfEntries
contains the number of entries in a table
with the name of the prefix in the same object. For example
A.B.CNumberOfEntries
provides the number of entries in the
table:
A.B.C.
The object model implemented in a device is accessed and modified with RPCs. RPCs are remote procedure calls; a way to invoke a function remotely. TR-069 defines a number of mandatory RPCs and provides a mechanism to extend and discover the set of RPCs implemented by a CPE. The mandatory RPCs are listed in in the following table.
Table 131.2 TR-069 RPCs
RPC | Description |
---|---|
GetRPCMethods |
Return a list of RPC methods |
SetParameterValues |
Set one or more parameter values |
GetParameterValues |
Get one or more parameter values |
GetParameterNames |
Get the parameter information for a parameter, object, or table. |
SetParameterAttributes |
Set parameter attributes |
GetParameterAttributes |
Get parameter attributes |
AddObject |
Add a new object to a table |
DeleteObject |
Delete an object from a table |
Download |
Download software/firmware |
Reboot |
Reboot the device |
The security model of TR-069 is based around the authentication taking place during the setup of a TLS (formerly SSL) connection. This authentication is then used to manage the access control lists via the parameter attributes.
A session with the ACS is always initiated by
the CPE. The ACS can request a session, but it is always the CPE that
starts a session by opening the connection to the ACS and then sending
an Inform
RPC. The session ends when the connection is
closed, which happens after the ACS has informed the CPE it has no more
requests.
During a session, a CPE has the requirements that parameters must not change due to other sources than the session and that the parameters are consistent with the changes. However, there is no transactionality over the session, atomicity is only guaranteed for one RPC. An RPC can consist of multiple parameter modifications that should therefore be atomically applied.
TR-069 sessions always start with an Inform
RPC from
the CPE to the ACS. This RPC contains any events and notifications for
parameters that were watched. Events signal crucial state changes from
the CPE to the ACS. For example, if a device has rebooted it will inform
the ACS. Notifications are caused by parameter changes, the
Inform
RPC contains a list of events and parameters with
changed values.
A TR-069 Protocol Adapter must be able to browse foreign Data Plugins on the device and support native TR069 objects models implemented by a Data Plugin. As Data Plugins are available through the Dmt Admin service, the Protocol Adapter must provide a bi-directional mapping between Dmt Admin nodes and TR-069 parameters, notifications, and error codes.The mapping must enable a Data Plugin to provide a native Broadband Forum object model that limits itself to the required RPCs.
Developers implementing the TR-069 protocol are not likely to be also experts in the Dmt Admin service. This specification therefore provides a TR069 Connector Factory service that provides an object that can map from the TR-069 concepts to the Dmt Admin concepts, supporting all the constructs defined in the OSGi Object Modeling.
The TR069 Connector only specifies a number of primitive functions to manage the DMT. Parsing the SOAP messages, handling the notifications, and splitting the requests for TR069 Connector is the responsibility of the Protocol Adapter. The reason that the TR069 Connector does not work on a higher level is that a Protocol Adapter for TR-069 will likely communicate with other subsystems in the CPE than the OSGi framework alone. Though the Dmt Plugin model is an attractive approach to implement object models, there is history. Existing code will likely not be rewritten just because it can be done better as a Data Plugin.
For example, a Data Plugin could implement the
Device.DeviceInfo.
object. However, this object actually
resides in the DMT at a node:
./TR-069/Device/DeviceInfo
A TR-069 Protocol Adapter will therefore be confronted with a number of data models that reside in different places. Each place provides one or more consistent data models but it is the responsibility of the TR-069 Protocol Adapter to ensure the ACS gets a consistent and standardized view of the whole. To create this consistent view it will be necessary to adapt the paths given in the RPCs. It is expected that a Protocol Adapter is required to have a certain amount of domain knowledge, for example a table, that maps TR-069 paths to their actual providers.
The basic model is depicted in Figure 131.5.
The Protocol Adapter can be implemented as an OSGi Bundle or it can be implemented in native code in the device. Both architectures are viable. For certain aspects like the TR-157a3 Software Modules a certain amount of native code will be required to manage the OSGi Framework as an Execution Environment.
In an environment where the Protocol Adapter is implemented outside an OSGi Framework it will be necessary to create a link to the Dmt Admin service. This can be achieved with a proxy bundle inside the OSGi framework that dispatches any requests from the native Protocol Adapter to the functionality present in the OSGi Framework. In this specification, it is assumed that such proxies can be present. However, the examples are all assuming that the Protocol Adapter is running as a Bundle.
A TR069 Connector is associated with a Dmt Session, the TR069ConnectorFactory provides the create(DmtSession) method that will return a TR069Connector object. This object remains associated with the Dmt Session until the Dmt Session is closed, which can happen because of a fatal error or when the TR069 Connector Factory is unregistered or un-gotten/released. Creating a TR069 Connector must not be expensive, Protocol Adapters should create and close them at will. Closing the connector must not close the corresponding Dmt Session.
The TR069 Connector must use the root of the session as its
base. That is, their URI mapping all parameters
must start from the base. For example, if the session is opened at
./TR-069
then the parameter
IGD/DeviceInfo/Manufacturer
must map to URI
./TR-069/IGD/DeviceInfo/Manufacturer
.
If a Protocol Adapter will modify the tree then it should use an atomic session for all RPCs even if the RPC indicates read-only. The reason for the atomicity is that in certain cases the lazy behavior of the TR069 Connector requires the creation of objects during a read operation. If a non-atomic session is used then the TR069 Connector must not attempt to lazily create objects and reject any addObject(String) and deleteObject(String) methods. See also Lazy and Sessions.
The TR069 Connector supports a limited number of RPCs, and for those RPCs it only supports the singleton case. The TR069 Connector provides support for the RPCs primitives listed in the following table.
Table 131.3 Supported TR-069 RPCs
RPC | Related Method | Description |
---|---|---|
SetParameterValues |
setParameterValue(String,String,int) |
Set one or more parameter values. The connector supports setting a single value, ensuring the proper path traversal and data type conversion |
GetParameterValues |
getParameterValue(String) |
Get one or more parameter values. The connector supports getting a single value, converting it to a ParameterValue object, which contains the value and the type. |
GetParameterNames |
getParameterNames(String,boolean) |
Get the paths of objects and parameters from the sub-tree or children that begins at the parameter path. The TR-069 Connector supports the full traversal of the given path and the next level option. |
AddObject |
addObject(String) |
Add a new object to a table. The fully supports the
semantics, taking the |
DeleteObject |
deleteObject(String) |
Delete an object from a table. |
An object or parameter path describes a traversal through a set of objects, this is almost the same model that Dmt Admin provides. The difference is that the characters allowed in a TR-069 parameter name are different from the Dmt Admin node names and that TR-069 does not support application specific parameter/object names like the Dmt Admin service does.
A path consist of a number segments, where each segment identifies a name or instance id. TR-069 names can always be mapped to Dmt Admin node names as the character set of TR-069 parameter names is restricted and falls within the character set of the Dmt Admin node names. The length of a segment could be a problem but TR-069 paths are generally limited to have a length of less than 256 bytes. This specification therefore assumes that a segment of a TR-069 path is never too long to fit in a Dmt Admin node name.
Mapping a Dmt Admin node name to a parameter name, needed for
browsing, is more complicated as Dmt Admin node names allow virtually
every Unicode character except the solidus ('/' \u002F
). It
is therefore necessary to escape Dmt Admin URIs into a path that is
acceptable for the TR-069 protocol. It is assumed that escaping is only
used in a browsing mode since native object models will never require
escaping. The TR069 Connector must return names from the getParameterNames(String,boolean) call that the ACS can handle, optionally show to
the user, and then use to construct new paths for subsequent
RPCs.
There is no obvious escape character defined in TR-069, like for
example the reverse solidus ('\' \u005C
) that the Dmt Admin
uses for escaping. The character for escaping is the latin small letter
thorn ('þ' \u00FE
) because his character is highly unlikely
to ever be used in a TR-069 path for a native object model, however,
even if it is then it would be no problem for the escaping algorithm.
The thorn is a letter, allowing it to be used as the first character in
a parameter name, this allows escaping the first character.
A character in a segment that is not allowed must be escaped into the following sequence:
þ[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]
The 4 hexadecimal upper case digits form a hexadecimal number that
is the Unicode for that character. Each character that does not conform
to the syntax specified in Parameter Names or the thorn
character itself must be replaced with the escape sequence. For example,
the name 3ABCþ
must be translated to:
þ0033ABCþ00FE
If the segment is an instance id then the segment must not be
escaped. Otherwise, if the segment does not start with a
Letter
or underscore, then the first character must be
escaped with the thorn.
Unescaping must undo the escaping. Any sequence of
þ[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]
must be replaced with the
character with the corresponding Unicode. A thorn found without the
subsequent 4 hexadecimal upper case digits must be treated as a single
thorn. For readability it is best to minimize the escaping. However, any
name given to the TR069 Connector that is escaped must be properly
interpreted even if the unescaped string did not require escaping. For
example, þ0031þ0032þ0033
must be usable as an object
instance id as the unescaped form is 123, which is a number.
A number of examples of the escaping are shown in the following table.
Table 131.4 Escaping Parameter Names
Segment | Dmt Admin Escaped | TR-069 Escaped | Notes |
---|---|---|---|
DeviceInfo |
DeviceInfo |
DeviceInfo |
Most common case. |
3x Hello World |
3x Hello World |
þ0033xþ0020Helloþ0020World |
The initial digit and the spaces must be escaped in TR-069. |
þorn |
þorn |
þornþ00FEorn |
A single thorn does not require escaping as it is
not followed by 4 hexadecimal digits. So both forms are valid
for unescaping although escaping must deliver the
|
application/bin |
application\/bin |
applicationþ002Fbin |
The solidus must be escaped in both. |
234 |
234 |
234 |
A numeral does not require escaping, it is assumed to be an instance id. |
234x |
234x |
þ003234x |
A name that starts with a digit requires the first digit to be escaped. |
þ00FEorn |
þ00FEorn |
þ00FE00FEorn |
It is possible to encode even already escaped names. |
The TR069 Connector only accepts escaped paths and returns escaped paths. When a method returns a path it must be properly escaped and suitable as a TR-069 path.
In general, the TR-069 Protocol Adapter is free to choose what parts of the DMT it wants to expose. A simple mapping table containing path prefixes can be used to define the handler for the given data model. However, since the intention is to allow TR-069 object models to be implemented in Dmt Admin Data Plugins there is a need to know where those plugins should reside in the DMT. This root is defined as:
./TR-069
Any Data Plugin that wants to provide an object model in the
TR-069 family of object models should provide a Data Plugin rooted at
the TR-069 root. For example, a Data Plugin implementing the
InternetGatewayDevice.DeviceInfo.
object should register
its Data Plugin under the data Root URI ./TR-069/
InternetGatewayDevice/DeviceInfo
A path must be mapped from the TR-069 hierarchy to the Dmt Admin
nodes URI. The Protocol Adapter decides the base in
the DMT by opening the Dmt Session with a session root parameter. The
TR-069 Connector must then traverse the tree from this base based on the
TR-069 path. The Protocol Adapter must use the Instance Id for MAP
and
LIST
nodes to traverse the DMT.
Assume that the URI of a node is requested for a given path
P
. The path P must be traversed from the root node. The
root node can find the child, the first segment in P, and then use the
same routine recursively for the remainder. This recursive routine must
perform the following actions on each current node:
-
If path
P
is empty, then this is the requested node. -
S
= first segment of pathP
up to the first full stop. -
R
= remainder of pathP
after the first full stop or empty if no full stop. -
If
S
is an alias (surrounded by'['
and']'
), replaceS
with the alias inside the brackets. For Dmt Admin nodes aliases are identical to normal node names. -
unescape
S
(replace the thorns) -
If the current node is a
MAP
or aLIST
andS
is an integer-
Get the list
L
of children of the current nodes -
If the nodes in
L
have anInstanceId
node find the node where theInstanceId
matches the segmentS
as integer, this becomes then the next level nodeN
and the algorithm is repeated with pathR
.
-
-
If no next node
N
was found then make it the child node of the current node with the nameS
. -
Repeat the algorithm with
N with path R
Since each node that is traversed this way knows the node name it corresponds to it is easy to create an encoded URI for Dmt Admin.
For example, the TR-069 path:
Device.DeviceInfo.Interface.14.Connections.3.BytesSent
Assuming that Interface
node is a MAP
node and its children have an InstanceId
node, where the
WAN_1
node has an InstanceId
of 14.
The Connections node is a LIST
and the children have
no InstanceId
, therefore the name is the index. The
translated URI then looks like:
Device/DeviceInfo/Interface/WAN_1/Connections/3/BytesSent
The toURI(String,boolean) method can take a TR-069 path and perform the
substitutions. If the create parameter is true
then the
TR069 Connector will create missing nodes if
possible. Missing nodes can only be created under a LIST
or
MAP
node.
A missing node is a node that is addressed by a path but not
present in the DMT. For example, the root of the session
is ./TR-069
and the parameter path is A.B.C
. If
the DMT contains ./TR-069/A
but not
./TR-069/A/B
then node B
is a missing
node.
The Protocol Adapter must synthesize an Alias
parameter and for any MAP
or LIST
node called
X
it must provide a sibling XNumberOfEntries
parameter that provides the number of entries in table
X
.
The Alias
node is a read-write parameter that must
map to the actual node name of its parent. For example,
./A/B/C/Alias
must map to C
. Reading it must
provide the this parent's node name and writing it must rename this
parent's node name. The Alias
must be automatically
provided on any child of a MAP
node. The
Alias
parameter must also be returned in the result of
getParameterNames(String,boolean) if its parent's children are included. It is
not possible to convert an Alias parameter name to a URI as the
Alias
node is synthetic and does not exist in the DMT.
The model of aliases are depicted in Figure 131.6.
Aliases can be used by the ACS to set the key of a
MAP
. For example, if a set of properties is defined as a
MAP
:
Name | Act | Type | Card. | S | Description |
---|---|---|---|---|---|
Properties |
Get |
MAP |
1 |
P |
A Properties map |
[string] |
Get Set Add Del |
string |
0..n |
A |
Key/Value |
An ACS can first add an object to the table. This will create an entry with a calculated instance id. However, the ACS can then rename the node with the Alias node. In pseudo code:
AddObject ..Properties. (returnsnode name = 3421)
SetParameterValue ..Properties.3421.Alias = MyKey
Alternatively, addressing with an alias in the parameter name would be simpler:
AddObject ..Properties.[MyKey]
TR-069 has the convention of parameters that end with
NumberOfEntries
. For example, the parameter
UserNumberOfEntries
in the object
InternetGatewayDevice
object contains the number of
entries of the InternetGatewayDevice.User
table.
The Protocol Adapter must synthesize these
NumberOfEntries
parameters for each MAP
or
LIST
node. The NumberOfEntries
parameter
must be a sibling of the MAP
or LIST
node.
Any such parameter must also be returned in the result of the getParameterNames(String,boolean) method.
In the Dmt Admin service the session plays an important role in how the object model operates. Especially atomic sessions have a clear point to commit any changes so that many actions can be deferred until all the information is available. In TR-069 there is no real session concept although one RPC must be executed atomically even if it changes multiple parameters. As there are different RPCs to create objects and set their parameters it is impossible to create and parameterize an object in a single session. This creates problems with general DMT models.
It is recommended to operate all RPCs in an atomic session to allow these DMT models to leverage the session commit phase. However, a TR-069 Connector must also accept a read only or exclusive session. The session can then of course cause exceptions to be thrown at certain operations.
The connector must lazily create instances. An addObject(String) method must not actually create the object, it only has to create an instance id and ensure the uniqueness of this id over time. The id must follow the rules from TR-069, it must not clash with an existing id even after such an id has been used in the past.
This id is then returned to the ACS who will then use it in subsequent RPCs. When one of the subsequent RPCs tries to access this not-yet existent node, for example a get or set, then the TR069 Connector must create it before it sets or gets the value of this node. This lazy strategy allows the node creation and the parameterization of that node to happen in a single session/RPC.
For example, in session 100 the addObject(String) creates a new node. This node is not really
created but the unique instance id 4311 is assigned to it. After this
RPC, the session is closed. The ACS receives this instance and then
prepares a GetParameterValues
RPC to get the
../4311/Foo
parameter. The management agent receives the
RPC and opens a new session 200, it then calls getParameterValue(String). The TR069 Connector will not find the
appropriate entry 4311 in the table. Instead of raising an error it
creates this node and then gets the value for the
../4311/Foo
parameter.
A Data Plugin implementing a native TR-069 object model can
override the lazy behavior by adding a
application/x-tr-069-eager
MIME type to the list of MIME
types in the Meta Node. If this MIME type is present then the node must
be eagerly created during the addObject(String) method.
The TR069 Connector must assign the unique id according to the TR-069 rules for instance ids.
This specifications assume the [2] TR-106 Amendment 3 defined
data types. TR-106 defines a number of data types, derived from XML
Schema and creates a number of sub-types to discriminate between
different use cases. A Protocol Adapter must be able to understand the
types defined in Table 131.5 to be
able to faithfully define a data model based on [2] TR-106 Amendment 3. Discriminating between some of the sub-types
requires inspection of the data. Each sub-type requires mapping rules
that are defined later. Each mapping is assigned a unique MIME sub-type
in the application
media type. That is, the TR-069
int
type has a MIME type of
application/x-tr-069-int
.
Table 131.5 TR-069 Types, MIME types
TR-069 Type | MIME Type | Notes |
---|---|---|
base64 |
x-tr-069-base64 |
Base 64 encoded |
hexBinary |
x-tr-069-hexBinary |
Hex encoded |
boolean |
x-tr-069-boolean |
|
string |
x-tr-069-string |
General string type. |
string (list) |
x-tr-069-list |
A comma separated string that acts as a list. |
int |
x-tr-069-int |
Signed integer |
unsignedInt |
x-tr-069-unsignedInt |
Unsigned integer |
long |
x-tr-069-long |
Signed long |
unsignedLong |
x-tr-069-unsignedLong |
Unsigned long |
dateTime |
x-tr-069-dateTime |
Absolute UTC time, relative boot time, or unknown time |
x-tr-069-eager |
Eager creation (not a data type, see Lazy and Sessions ). |
It is the responsibility of the Protocol Adapter to properly clean up the parameter values, that is, remove any unnecessary white space, etc. The TR069 Connector must accept any lexically correct form of the value of a parameter. However, the connector must always return the value according to the format of the data types specified by TR-069.
This section describes the conversion from a DMT node (a Dmt Data) to a TR-069 Parameter value. The source is the DMT node retrieved from the DMT. The destination is the value and its type that must be encoded in the TR-069 response. The meta node is the Meta Node associated with the source. This model is depicted in Figure 131.7.
The different conversions possible for the Dmt Data to the TR-069
Parameter value are shown in Table 131.6. This table shows vertically
the Dmt Admin formats and horizontally the TR-106 types defined in Table 131.5. Each row has a default
conversion type, indicated with a bold entry. For example, the default
conversion of a FORMAT_BOOLEAN to the boolean
type is the default
conversion.
This default conversion can be overridden by the Data Plugin by
specifying an alternative MIME type in the list of allowed MIME types in
the Meta Node getMimeTypes(). If this list contains a MIME type that has the
prefix application/x-tr-069-
then the first entry in this
list must be chosen as the destination type instead of the default type.
This way, a TR-069 Data Plugin can indicate the exact type to a TR-069
Protocol Adapter.
For example, a Dmt Data has the format FORMAT_BASE64. However, the Data Plugin for this node has a Meta Node that contains
String[] { "application/x-tr-069-hexBinary"}
The resulting type must therefore be hexBinary
in
this example.
The Dmt Data nodes are leaf nodes, however, there is a special
case for interior LIST
nodes marked with a
application/x-tr-069-list
type in the Meta Node. These
nodes must be converted to a comma separated string as described in
List.
Cells that are empty in the table indicate an impossible conversion that must be reported. Cells with a name refer to one of the subsequent sections.
Table 131.6 Dmt Data Format to TR-069 Data
base64 | boolean | dateTime | hexBinary | int | long | string | unsignedInt | unsignedLong | |
---|---|---|---|---|---|---|---|---|---|
FORMAT_BASE64 | binary |
binary |
|||||||
FORMAT_BINARY |
binary |
binary |
|||||||
FORMAT_BOOLEAN |
= |
true | false |
|||||||
FORMAT_DATE |
date |
= |
|||||||
FORMAT_DATE_TIME |
date |
date |
|||||||
FORMAT_FLOAT | number |
number |
number |
number |
number |
||||
FORMAT_INTEGER |
number |
number |
number |
number |
number |
||||
FORMAT_LONG | number |
number |
number |
number |
number |
||||
LIST |
list |
||||||||
FORMAT_NULL | false |
date |
0 |
0 |
"null" |
0 |
0 |
||
FORMAT_RAW_BINARY |
binary |
binary |
|||||||
FORMAT_RAW_STRING |
= |
||||||||
FORMAT_STRING |
= |
||||||||
FORMAT_TIME | date |
= |
|||||||
FORMAT_XML |
= |
If the destination type is string
then a date must
be formatted according to the TR-069 dateTime
format.
FORMAT_DATE and FORMAT_TIME must be set to a TR069_DATETIME typed destination with just the day or just
the time respectively. That is, the FORMAT_TIME must be treated as a relative time for
TR-069.
The Date
object of the Dmt Data
object
represents the three different TR069_DATETIME types with the getTime()
method.
The value of getTime()
indicates what type of date time
it is:
-
Unknown - The
getTime()
method must be 0 -
Relative - The
getTime()
method must return a negative number -
Absolute - The
getTime()
method must return a positive number
If a FORMAT_DATE, FORMAT_TIME, or FORMAT_DATE_TIME is converted to a string the string representation of TR069_DATETIME must be used, including the form of unknown, relative, or absolute. A FORMAT_NULL stands for an unknown time.
The Dmt Admin service has several binary formats ( FORMAT_BASE64, FORMAT_BINARY, and FORMAT_RAW_BINARY ) that can be converted to
TR069_HEXBINARY and TR069_BASE64. All binary formats maintain their data as a
byte[]
. Conversion is therefore straightforward encoding
of the byte[]
into the proper encoding: hex or base
64.
The TR-069 Connector must convert numeric values ( FORMAT_INTEGER, FORMAT_LONG, and FORMAT_FLOAT ) to TR069_INT, TR069_LONG, TR069_UNSIGNED_INT, and TR069_UNSIGNED_LONG values. Float values must be rounded according
to the standard Java rounding rules when converted to an
integer
or long
.
A conversion must not exceed the range of the destination type.
That is, if an integer is converted to an unsigned int
then negative values must be treated as an error. If the destination
type is string
then the numeric value must be calculated
with the Dmt Data toString
method.
LIST
nodes with primitive children must be
converted to a comma separated list. If the children nodes are
interior nodes then an error must be raised. The values of the comma
separated list must come from the children of the value node. Each of
these children must be converted to a string type according to Table 131.6. These children must then be
escaped and concatenated with a comma as separator according to the
rules of TR-106 comma separated lists. Nested lists are not
allowed.
A TR-069 Parameter value consists of a string and a type identifier from the set of TR-069 types, see Data Types. The conversion is depicted in Figure 131.7.
The destination type is obtained from the corresponding Meta Node. If multiple formats are specified in the result of the getFormat() method then the most applicable type must be used. The following table lists the applicability for each TR-106 data type.
base64 FORMAT_BASE64, FORMAT_BINARY, FORMAT_RAW_BINARY
boolean FORMAT_BOOLEAN, FORMAT_STRING
dateTime FORMAT_DATE_TIME, FORMAT_DATE, FORMAT_TIME
hexBinary FORMAT_BASE64, FORMAT_BINARY, FORMAT_RAW_BINARY
int FORMAT_INTEGER, FORMAT_LONG, FORMAT_FLOAT, FORMAT_STRING
long FORMAT_LONG, FORMAT_FLOAT, FORMAT_INTEGER, FORMAT_STRING
string FORMAT_STRING, FORMAT_BOOLEAN, FORMAT_INTEGER, FORMAT_LONG,
FORMAT_FLOAT, FORMAT_RAW_STRING, FORMAT_XML
unsignedInt FORMAT_INTEGER, FORMAT_LONG, FORMAT_FLOAT, FORMAT_STRING
unsignedLong FORMAT_LONG, FORMAT_FLOAT, FORMAT_INTEGER, FORMAT_STRING
If the conversion fails and there are untried formats left then the other formats must be used.
There is a special case when the destination node is a LIST node
with primitive children and the source is a string
type. In
that case the string must be parsed according to TR-106 comma separated
lists and each element must be stored as a child node.
The conversion matrix is in the following table. The equal sign indicates identity taking into account any encoding. It is not necessary that the source type corresponds to a MIME type in the meta node.
Table 131.7 TR-069 Value to Dmt Data
FORMAT_BASE64 | FORMAT_BINARY | FORMAT_BOOLEAN | FORMAT_DATE | FORMAT_DATE_TIME | FORMAT_FLOAT | FORMAT_INTEGER | FORMAT_LONG | FORMAT_RAW_BINARY | FORMAT_RAW_STRING | FORMAT_STRING | FORMAT_TIME | FORMAT_XML | LIST | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
base64 |
binary |
binary |
binary |
|||||||||||
boolean |
bool |
true| false |
||||||||||||
dateTime |
date |
date |
= |
date |
||||||||||
hexBinary |
binary |
binary |
binary |
|||||||||||
int |
num |
num |
num |
= |
||||||||||
long |
num |
num |
num |
= |
||||||||||
string |
bool |
num |
num |
num |
= |
= |
= |
list |
||||||
unsignedInt |
num |
num |
num |
= |
||||||||||
unsignedLong |
num |
num |
num |
= |
A TR069_DATETIME can be converted to a FORMAT_DATE, FORMAT_TIME, and
FORMAT_DATE_TIME. A FORMAT_DATE must take the day part and a FORMAT_TIME must take the time part.
Source numbers must be converted to their destination counterpart. The conversion result must fail if the result falls outside the range of the destination.
If the source is a string
or boolean
type and the destination FORMAT_BOOLEAN
then the
conversion must parse the string ignoring the case. The strings
true
and false
map to their corresponding
value. The strings 0 must map to false
and 1 to
true
.
The source must be decoded according to its TR-069 type ( TR069_BASE64 or TR069_HEXBINARY ). The resulting byte array can then be set with the DmtData(byte[],int) with the destination format: FORMAT_BINARY or FORMAT_BASE64.
The following sections explain in more detail how the different RPCs are supported by the TR069 Connector operate.
The GetParameterValues
RPC retrieves the value from
one or more parameters. Each request in the RPC can request one
parameter value or provides an object or table path, requesting multiple
values with one path.
The getParameterValue(String) method retrieves the value of one parameter in the DMT. The getParameterNames(String,boolean) method can be used to retrieve the values of a table or object.
For the getParameterValue(String) method the TR069 Connector must first check for
synthesized parameters, see Synthetic Nodes
(Alias
and NumberOfEntries
). Otherwise, the
parameter name must be converted to a URI, this must be done according
to the toURI(String,boolean) method with the boolean set to
true
, creating any missing nodes if possible. The Dmt Data
for this node must be converted according to DMT to TR-069 Conversion.
The returned ParameterValue
contains the type and value of
the parameter.
For example:
ParameterValue v = connector.getParameterValue(
"Device.DeviceInfo.Manufacturer");
String value = v.getValue();
int type = v.getType();
The SetParameterValues
RPC sets a number of values in
one RPC. The setParameterValue(String,String,int) method corresponds to setting a single parameter
in the DMT. It takes a parameter path, a value, and the type of this
parameter.
The TR069 Connector must first check if the requested destination
is the Alias
node of a MAP
child. If the
Alias
node is set, the name of the parent node must be
renamed to the given value. The value of the Alias
node
must be a TR-069 string type, the Connector must ensure the value is
escaped when necessary. See Synthetic Nodes for further
information about aliases.
Otherwise, the parameter name must be converted to a URI, this
must be done according to the toURI(String,boolean) method with the boolean set to
true
.
The given value must be converted to a Dmt Data according to the TR-069 to Dmt Data Conversion. For example:
connector.setParameterValue("Starwars.R2D.2.Start",
"20110805T10:15:20Z", TR069_DATETIME
);
The GetParameterNames
RPC allows an ACS to discover
the parameters accessible on a particular CPE as well as verifying the
existence of a parameter. There are modes for this RPC depending on the
path and next level arguments. See the following table.
Table 131.8 Modes based on type of path and NextLevel arguments
NextLevel | Parameter Path | Table or Object Path |
---|---|---|
true |
Invalid Argument Fault code |
Include only the children of the object or table. |
false |
A single |
The whole sub-tree rooted at the given object or table path, this includes the object at the path itself. All objects must be included even if they are empty. |
The result must include only parameters, objects, and tables that are actually implemented by the CPE. If a parameter is listed then a getParameterValue(String) method called with this parameter's path should succeed. As a convenience, the ParameterInfo class provides a getParameterValue() method as a short cut to the value.
For example, assume the following instances:
IGD.LAN.1.Hosts.
IGD.LAN.1.Hosts.HostNumberOfEntries
IGD.LAN.1.Hosts.Host.
IGD.LAN.1.Hosts.Host.1.
IGD.LAN.1.Hosts.Host.1.Active
IGD.LAN.1.Hosts.Host.2.
IGD.LAN.1.Hosts.Host.2.Active
IGD.LAN.2.Hosts.
IGD.LAN.2.Hosts.HostNumberOfEntries
The following table demonstrates some of the different results based on these example instances.
Table 131.9 Example Get Parameter Names
Parameter Name | Next level | Results | Comments |
---|---|---|---|
IGD.LAN.1. |
false |
|
The path specifies an instance in at table and since the Next Level is false the whole sub-tree must be returned, including the root of the sub-tree. |
true |
IGD.LAN.1.Hosts. |
The path is the same, an instance in a table, but
now only the children must be returned for the source. There is
only one child, |
|
|
false |
|
The path is a parameter path, therefore only the source is returned. |
true |
Fault 9003 Invalid Arguments, next level must be false for a parameter path. |
Next Level must not be set to true for a parameter path |
|
IGD.LAN.1 |
|
Fault 9003 Invalid Arguments, it is not a parameter path but an instance id |
It is not allowed to specify a parameter path that is actual pointing to an instance. |
For example:
Collection<ParameterInfo> pinfos = connector.getParameterNames("Device.");
for ( ParameterInfo info : pinfos ) {
if ( info.isParameter() ) {
System.out.println(
connector.getParameterValue(info.getName()).getValue());
}
}
The AddObject
RPC creates a new instance in a table.
There basic form for this RPC is to create an object and return the name
of this object. It is also possible to specify an alias (a name
specified in square brackets) after the table path. In that case, the
alias is used as the node name. In either case, the path must be a valid
table path pointing to a an existing MAP
or
LIST
node.
When an object is added without an alias then the TR069 Connector must assign a unique id. TR-069 mandates that this id is unique for the table. The TR069 Connector must be able to create and maintain such a persistent id range. The Connector must ensure that any id chosen is not actually already in use or has been handed out recently. How such an id is calculated and maintained is implementation dependent.
If alias based addressing is used, a name between square brackets, then the alias is retrieved from the square brackets. The DMT must then be verified that no node exists in the corresponding table. If it does already exist, an INVALID_PARAMETER_NAME exception is thrown. Otherwise the alias is returned as the selected name.
If the corresponding MAP
or LIST
node
has a Meta Node with a MIME type of
application/x-tr-69-eager
then the alias or instance id
must be used to create the node. Otherwise the alias or instance id must
be returned without creating the node. The purpose of this lazy creation
is to allow a single Set Parameter Values RPC to atomically create a
number of nodes and set their values.
For example:
String id = connector.addObject( "Starwars.CP.3.Obiwan.");
connector.setParameterValue( "Starwars.CP.3.Obiwan." + id+ ".Name",
"cp30", TR069_STRING );
The previous code gets an assigned id with the addObject(String) method. The setParameterValue(String,String,int) then assigns the string cp30 to the
Name
node. This will first create the actual node since it
was not created in the addObject(String) method and then sets the value of the DMT
Starwars/CP/3/Obiwan/<id>/Name
node.
The addObject(String) method requires an atomic session. If a non-atomic session is used then the addObject(String) method must not attempt to create any objects and an exception must be thrown.
The DeleteObject
RPC deletes an object from the tree,
it takes the instance path as argument. This behavior is implemented in
the deleteObject(String) method. The corresponding node must be deleted
if it exists. No error must be raised if the node does not exist in the
DMT.
For example, deleting the object created in Add Object:
connector.deleteObject("Starwars.CP.3.Obiwan.cp30.");
The TR069 Connector must translate any Dmt Admin codes into a TR-069
fault code. Since the methods in the TR069Connector only relate to a single value it is possible to
provide a mapping from Dmt Exception codes to TR-069 fault codes. It is
the responsibility of the Protocol Adapter to aggregate these errors in
the response to a SetParameterValues
RPCs.
A TR069 Connector must prevent exceptions from happening and ensure that the different applicable error cases defined in the TR-069 RPCs are properly reported as a TR069 Exception with the intended fault code. However, this section defines a list of default translations between Dmt Exceptions and TR-069 fault codes.
The following table contains the exceptions and the resulting fault codes. Any obligations that are mandated by the TR-069 protocol are the responsibility of the TR-069 Protocol Adapter. The Dmt Exception is available from the TR-069 Exception for further inspection.
Table 131.10 Exceptions to TR-069 Fault code.
The RMT is not a native TR-069 model as it is not defined by BBF and it takes advantage of the Dmt Admin features. This section therefore shows a number of examples how the RMT can be managed from an ACS.
For example, on a specific CPE the following bundles are installed, the given name is the location
System Bundle
org-apache-felix-webconsole
org-apache-felix-configadmin
org-eclipse-equinox-scr
jp-co-ntt-admin
de-telekom-shell
The intention is to:
-
Uninstall
org-apache-felix-configadmin
, -
Install and start
org-eclipse-equinox-cm
, -
Update
jp-co-ntt-admin
.
After the successful reconfiguration, the framework must restart. As framework changes must happen in a atomic session, the following parameters must be set in a single RPC:
SetParameterValues {
Framework.Bundle.org-apache-felix-configadmin.RequestedState = UNINSTALLED
Framework.Bundle.jp-co-ntt-admin.URL = http://....
Framework.Bundle.org-eclipse-equinox-cm.URL = http://....
Framework.Bundle.org-eclipse-equinox-cm.RequestedState = ACTIVE
Framework.Bundle.org-eclipse-equinox-cm.AutoStart = true
Framework.Bundle.Systemþ0020Bundle.URL = ""
}
The Protocol Adapter must open an atomic session on the $ node as
defined in the RMT. It will then set all the parameters in the previous
list. As the Framework/Bundle/org-eclipse-equinox-cm
node
does not exist, the TR069 Connector will create it because it is below a
writable MAP
node. The System Bundle is updated with an empty
string, signalling an update. A System Bundle update is a framework
restart.
Once the session is committed after all the
SetParameterValues
elements are executed the Data Plugin will
perform the actions and report success or failure. The handler must then
restart the framework after the commit has returned.
This section provides an example of a Data Plugin that provides a native TR-069 Object Model. As example is chosen a naive implementation of the Configuration Admin service. The object model implemented has the following definition:
Path | Type | Write | Read | Description |
---|---|---|---|---|
CM.{i}. |
Object |
|||
CM.{i}.Pid |
string |
x |
x |
The PID |
CM.{i}.Properties.{i}. |
Object |
Property nodes |
||
CM.{i}.Properties.{i}.Key |
string |
x |
x |
The key |
CM.{i}.Properties.{i}.Value |
string |
x |
x |
Comma separated values |
The corresponding DMT sub-tree is defined like:
Name | Act | Type | Card. | S | Description |
---|---|---|---|---|---|
CM |
Get |
MAP |
1 |
P |
Base node for the CM model |
[string] |
Get Set Add Del |
Configuration |
0..n |
D |
A MAP of the PID |
InstanceId |
Get |
int |
1 |
P |
The persistent instance Id |
Pid |
Get |
string |
1 |
P |
The PID of the configuration |
Properties |
Get |
MAP |
1 |
P |
The properties |
[string] |
Get Set Add Del |
LIST |
0..n |
D |
A property definitions; a property consists of a list of strings. Single values are just a list with one element. |
[index] |
Get Set Add Del |
string |
0..n |
D |
An element in the list |
The Protocol Adapter allows an ACS to access the data model implemented in the Dmt Plugin. It also allows the creation of new configuration objects.
TR069 Connector Service Package Version 1.0.
Bundles wishing to use this package must list the package in the Import-Package header of the bundle's manifest. This package has two types of users: the consumers that use the API in this package and the providers that implement the API in this package.
Example import for consumers using the API in this package:
Import-Package: org.osgi.service.tr069todmt; version="[1.0,2.0)"
Example import for providers of the API in this package:
Import-Package: org.osgi.service.tr069todmt; version="[1.0,1.1)"
-
ParameterInfo
- Maps to the TR-069ParameterInfoStruct
that is returned from the TR069Connector.getParameterNames(String, boolean) method. -
ParameterValue
- Maps to the TR-069ParameterValueStruct
-
TR069Connector
- A TR-069 Connector is an assistant to a TR-069 Protocol Adapter developer. -
TR069ConnectorFactory
- A service that can create TR069 Connector -
TR069Exception
- This exception is defined in terms of applicable TR-069 fault codes.
Maps to the TR-069 ParameterInfoStruct
that is returned from the
TR069Connector.getParameterNames(String, boolean) method.
Provide the value of the node. This method throws an exception if it is called for anything but a parameter
The Parameter Value of the corresponding object
TR069Exception
– If there is a problem
The path of the parameter, either a parameter path, an instance path, a table path, or an object path.
The name of the parameter
Returns true
of this is a parameter, if it returns false
it is an object or table.
true
for a parameter, false
otherwise
Return true
if this parameter is writeable, otherwise
false
. A parameter is writeable if the SetParamaterValue with the
given name would be successful if an appropriate value was given. If this
is a table path, the method specifies whether or not AddObject would be
successful. If the parameter path points to a table instance, the method
specifies whether or not DeleteObject would be successful.
If this parameter is writeable
Maps to the TR-069 ParameterValueStruct
This is the path of a Parameter. In TR-069 this is called the Parameter Name.
The path of the parameter
The type of the parameter. One of TR069Connector.TR069_INT,
TR069Connector.TR069_UNSIGNED_INT,
TR069Connector.TR069_LONG,
TR069Connector.TR069_UNSIGNED_LONG,
TR069Connector.TR069_STRING,
TR069Connector.TR069_DATETIME,
TR069Connector.TR069_BASE64,
TR069Connector.TR069_HEXBINARY. This method is not part of the
ParameterValueStruct
but is necessary to encode the type in the
XML.
The parameter type
A TR-069 Connector is an assistant to a TR-069 Protocol Adapter developer. The connector manages the low level details of converting the different TR-069 RPCs to a Device Management Tree managed by Dmt Admin. The connector manages the conversions from the TR-069 Object Names to a node in the DMT and vice versa.
The connector uses a Dmt Session from the caller, which is given when the connector is created. The connector does not implement the exact RPCs but only provides the basic functions to set and get the parameters of an object as well as adding and deleting an object in a table. A TR-069 developer must still parse the XML, handle the relative and absolute path issues, open a Dmt Session etc.
The connector assumes that each parameter or object path is relative to the root of the Dmt Session.
This connector must convert the TR-069 paths to Dmt Admin URIs. This
conversion must take into account the LIST
and MAP
concepts
defined in the specifications as well as the synthetic parameters
NumberOfEntries
and Alias
. These concepts define the use of
an InstanceId
node that must be used by the connector to provide a
TR-069 table view on the LIST
and MAP
nodes.
Constant representing the TR-069 date time type.
Constant representing the default or unknown type. If this type is used a default conversion will take place
Constant representing the TR-069 hex binary type.
Constant representing the TR-069 base64 type.
Constant representing the TR-069 boolean type.
Constant representing the TR-069 date time type.
Constant representing the default or unknown type. If this type is used a default conversion will take place
Constant representing the TR-069 eager type.
Constant representing the TR-069 hex binary type.
Constant representing the TR-069 integer type.
Constant representing the TR-069 long type.
Constant representing the TR-069 string type.
Constant representing the TR-069 string list type.
Constant representing the TR-069 unsigned integer type.
Constant representing the TR-069 unsigned long type.
Constant representing the TR-069 unsigned integer type.
Constant representing the TR-069 unsigned long type.
A table path with an optional alias at the end
Add a new node to the Dmt Admin as defined by the AddObject RPC.
The path must map to either a LIST
or MAP
node as no
other nodes can accept new children.
If the path ends in an alias ([ ALIAS ]
) then the node name must
be the alias, however, no new node must be created. Otherwise, the
Connector must calculate a unique instance id for the new node name that
follows the TR-069 rules for instance ids. That is, this id must not be
reused and must not be in use. That is, the id must be reserved
persistently.
If the LIST
or MAP
node has a Meta Node with a MIME type
application/x-tr-069-eager then the node must be immediately created.
Otherwise no new node must be created, this node must be created when the
node is accessed in a subsequent RPC.
The alias name or instance id must be returned as identifier for the ACS.
The name of the new node.
TR069Exception
– The following fault codes are defined for this
method: 9001, 9002, 9003, 9004, 9005. If an AddObject request
would result in exceeding the maximum number of such objects
supported by the CPE, the CPE MUST return a fault response with
the Resources Exceeded (9004) fault code.
The path to an object in a table to be deleted.
Delete an object from a table. A missing node must be ignored.
TR069Exception
– The following fault codes are defined for this
method: 9001, 9002, 9003, 9005. If the fault is caused by an
invalid objectPath value, the Invalid Parameter Name fault code
(9005) must be used instead of the more general Invalid Arguments
fault code (9003). A missing node for objectPath
must be
ignored.
A path to an object or table.
If true
consider only the children of the object
or table addressed by path
, otherwise include the whole
sub-tree, including the addressed object or table.
Getting the ParameterInfo objects addressed by path. This method is intended to be used to implement the GetParameterNames RPC.
The connector must attempt to create any missing nodes that are needed
for the objectOrTablePath
by using the
toURI(String, boolean) method with true
.
This method must traverse the sub-tree addressed by the path and return
the paths to all the objects, tables, and parameters in that tree. If the
nextLevel argument is true
then only the children object, table,
and parameter information must be returned.
The returned ParameterInfo objects must be usable to discover the sub-tree.
If the child nodes have an InstanceId
node then the returned
names must include the InstanceId
values instead of the node
names.
If the parent node is a MAP
, then the synthetic Alias
parameter must be included.
Any MAP
and LIST
node must include a
ParameterInfo for the corresponding NumberOfEntries
parameter.
A collection of ParameterInfo objects representing the
resulting child parameter, objects, and tables as defined by the
TR-069 ParameterInfoStruct
.
TR069Exception
– If the fault is caused by an invalid ParameterPath
value, the Invalid Parameter Name fault code (9005) MUST be used
instead of the more general Invalid Arguments fault code (9003).
A ParameterPath value must be considered invalid if it is not an
empty string and does not exactly match a parameter or object
name currently present in the data model. If nextLevel
is
true
and objectOrTablePath
is a parameter path
rather than an object/table path, the method must return a fault
response with the Invalid Arguments fault code (9003). If the
value cannot be gotten for some reason, this method can generate
the following fault codes::
A parameter path (must refer to a valid parameter, not an object or table).
Getting a parameter value. This method should be used to implement the GetParameterValues RPC. This method does not handle retrieving multiple values as the corresponding RPC can request with an object or table path, this method only accepts a parameter path. Retrieving multiple values can be achieved with the getParameterNames(String, boolean).
If the parameterPath
ends in NumberOfEntries
then the
method must synthesize the value. The parameterPath
then has a
pattern like (object-path)(table-name)NumberOfEntries
. The
returned value must be an TR069_UNSIGNED_INT that contains the
number of child nodes in the table (object-path)(table-name)
. For
example, if A.B.CNumberOfEntries
is requested the return value
must be the number of child nodes under A/B/C
.
If the value of a an Alias
node is requested then the name of the
parent node must be returned. For example, if the path is
M.X.Alias
then the returned value must be X
.
The connector must attempt to create any missing nodes along the way, creating parent nodes on demand.
The name, value, and type triad of the requested parameter as
defined by the TR-069 ParameterValueStruct
.
TR069Exception
– The following fault codes are defined for this
method: 9001, 9002, 9003, 9004, 9005.
The parameter path
A trimmed string value that has the given type. The value can be in either canonical or lexical representation by TR069.
The type of the parameter (TR069_INT, TR069_UNSIGNED_INT,TR069_LONG, TR069_UNSIGNED_LONG,TR069_STRING, TR069_DATETIME,TR069_BASE64, TR069_HEXBINARY, TR069_BOOLEAN)
Setting a parameter. This method should be used to provide the SetParameterValues RPC. This method must convert the parameter Name to a URI and replace the DMT node at that place. It must follow the type conversions as described in the specification.
The connector must attempt to create any missing nodes along the way, creating parent nodes on demand.
If the value of a an Alias node is set then the parent node must be
renamed. For example, if the value of M/X/Alias
is set to
Y
then the node will have a URI of M/Y/Alias
. The value
must not be escaped as the connector will escape it.
TR069Exception
– The following fault codes are defined for this
method: 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9008.
A Dmt Session relative URI
Convert a Dmt Session relative Dmt Admin URI to a valid TR-069 path,
either a table, object, or parameter path depending on the structure of
the DMT. The translation takes into account the special meaning
LIST
, MAP
, Alias
, and InstanceId
nodes.
An object, table, or parameter path
TR069Exception
– If there is an error
A TR-069 path
If true
, create missing nodes when they reside
under a MAP or LIST
Convert a TR-069 path to a Dmt Session relative Dmt Admin URI. The
translation takes into account the special meaning LIST
,
MAP
, InstanceId
node semantics.
The synthetic Alias
or NumberOfEntries
parameter cannot
be mapped and must throw an TR069Exception.INVALID_PARAMETER_NAME.
The returned path is properly escaped for TR-069.
The mapping from the path to a URI requires support from the meta data in
the DMT, it is not possible to use a mapping solely based on string
replacements. The translation takes into account the semantics of the MAP
and LIST nodes. If at a certain point a node under a MAP
node
does not exist then the Connector can create it if the create
flag is set to true
. Otherwise a non-existent node will terminate
the mapping.
A relative Dmt Admin URI
TR069Exception
– If there is an error
A service that can create TR069 Connector
The session to use for the adaption. This session must not be closed before the TR069 Connector is closed.
Create a TR069 connector based on the given session .
The session must be an atomic session when objects are added and/or parameters are going to be set, otherwise it can be a read only or exclusive session. Due to the lazy creation nature of the TR069 Connector it is possible that a node must be created in a read method after a node has been added, it is therefore necessary to always provide an atomic session when an ACS session requires modifying parameters.
A new TR069 Connector bound to the given session
This exception is defined in terms of applicable TR-069 fault codes. The TR-069 specification defines the fault codes that can occur in different situations.
9005 Invalid parameter name (associated with Set/GetParameterValues, GetParameterNames, Set/GetParameterAttributes, AddObject, and DeleteObject)
9006 Invalid parameter type (associated with SetParameterValues)
9007 Invalid parameter value (associated with SetParameterValues)
9008 Attempt to set a non-writable parameter (associated with SetParameterValues)
9009 Notification request rejected (associated with SetParameterAttributes method).
9004 Resources exceeded (when used in association with SetParameterValues, this MUST NOT be used to indicate parameters in error)
The message
A default constructor when only a message is known. This will generate a INTERNAL_ERROR fault.
The message
The TR-069 defined fault code
A Constructor with a message and a fault code.
The message
The TR-069 defined fault code
A Constructor with a message and a fault code.
The Dmt Exception
Create a TR069Exception from a Dmt Exception.
[1]TR-069 Amendment 3https://www.broadband-forum.org/technical/download/TR-069_Amendment-3.pdf
[2]TR-106 Amendment 3https://www.broadband-forum.org/technical/download/TR-106_Amendment-3.pdf
[3]XML Schema Part 2: Datatypes Second Editionhttps://www.w3.org/TR/xmlschema-2/
[4]SOAP 1.1https://www.w3.org/TR/soap11/
[5]Extensible Markup Language (XML) 1.0 (Second Edition)https://www.w3.org/TR/xml/#NT-Letter
[6]Broadband Forumhttps://www.broadband-forum.org/