TR 069amendment1
TR 069amendment1
TR-069
CPE WAN Management Protocol v1.1
Notice
This Broadband Forum Technical Report is provided AS IS, WITH ALL FAULTS. ANY
PERSON HOLDING A COPYRIGHT IN THIS BROADBAND FORUM TECHNICAL
REPORT, OR ANY PORTION THEREOF, DISCLAIMS TO THE FULLEST EXTENT
PERMITTED BY LAW ANY REPRESENTATION OR WARRANTY, EXPRESS OR
IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY:
Version History
Version Version Date Version Editor Changes
Number
Issue 1 May 2004 Jeff Bernstein, 2Wire Issue 1
Tim Spets, Westell
Issue 1 November 2006 Jeff Bernstein, 2Wire Clarification of original document
Amendment 1 John Blackford, 2Wire
Mike Digdon, SupportSoft
Heather Kirksey, Motive
William Lupton, 2Wire
Anton Okmianski, Cisco
Technical comments or questions about this Broadband Forum Technical Report should
be directed to:
Contents
1 Introduction ............................................................................................................................................. 8
1.1 Functional Components .............................................................................................................. 8
1.1.1 Auto-Configuration and Dynamic Service Provisioning ................................................. 8
1.1.2 Software/Firmware Image Management ....................................................................... 8
1.1.3 Status and Performance Monitoring.............................................................................. 9
1.1.4 Diagnostics ................................................................................................................... 9
1.1.5 Identity Management for Web Applications................................................................... 9
1.2 Positioning in the End-to-End Architecture.................................................................................. 9
1.3 Security Goals ............................................................................................................................10
1.4 Architectural Goals .....................................................................................................................10
1.5 Assumptions...............................................................................................................................11
1.6 Terminology................................................................................................................................11
1.7 Document Conventions ..............................................................................................................12
2 Architecture............................................................................................................................................12
2.1 Protocol Components.................................................................................................................12
2.2 Security Mechanisms .................................................................................................................13
2.3 Architectural Components ..........................................................................................................13
2.3.1 Parameters ..................................................................................................................13
2.3.2 File Transfers ...............................................................................................................14
2.3.3 CPE Initiated Sessions.................................................................................................14
2.3.4 Asynchronous ACS Initiated Sessions .........................................................................14
3 Procedures and Requirements ..............................................................................................................15
3.1 ACS Discovery ...........................................................................................................................15
3.2 Connection Establishment..........................................................................................................17
3.2.1 CPE Connection Initiation ............................................................................................17
3.2.2 ACS Connection Initiation ............................................................................................18
3.3 Use of SSL/TLS and TCP ..........................................................................................................19
3.4 Use of HTTP...............................................................................................................................21
3.4.1 Encoding SOAP over HTTP.........................................................................................21
3.4.2 Transaction Sessions...................................................................................................21
3.4.3 File Transfers ...............................................................................................................23
3.4.4 Authentication ..............................................................................................................23
3.4.5 Digest Authentication ...................................................................................................24
3.4.6 Additional HTTP Requirements....................................................................................24
3.5 Use of SOAP ..............................................................................................................................24
3.6 RPC Support Requirements .......................................................................................................29
3.7 Transaction Session Procedures................................................................................................29
3.7.1 CPE Operation.............................................................................................................30
3.7.2 ACS Operation.............................................................................................................36
3.7.3 Transaction Examples..................................................................................................38
Normative References ...................................................................................................................................40
A.3.2.4 SetParameterAttributes................................................................................................49
A.3.2.5 GetParameterAttributes ...............................................................................................53
A.3.2.6 AddObject ....................................................................................................................54
A.3.2.7 DeleteObject ................................................................................................................56
A.3.2.8 Download .....................................................................................................................57
A.3.2.9 Reboot .........................................................................................................................61
A.3.3 ACS Methods .............................................................................................................................61
A.3.3.1 Inform...........................................................................................................................61
A.3.3.2 TransferComplete ........................................................................................................64
A.4 Optional RPC Messages........................................................................................................................65
A.4.1 CPE Methods .............................................................................................................................65
A.4.1.1 GetQueuedTransfers ...................................................................................................65
A.4.1.2 ScheduleInform............................................................................................................66
A.4.1.3 SetVouchers ................................................................................................................66
A.4.1.4 GetOptions...................................................................................................................67
A.4.1.5 Upload..........................................................................................................................68
A.4.1.6 FactoryReset................................................................................................................69
A.4.2 ACS Methods .............................................................................................................................70
A.4.2.1 Kicked ..........................................................................................................................70
A.4.2.2 RequestDownload........................................................................................................70
A.5 Fault Handling........................................................................................................................................71
A.5.1 CPE Fault Codes........................................................................................................................71
A.5.2 ACS Fault Codes........................................................................................................................72
A.6 RPC Method XML Schema ....................................................................................................................72
Abstract:
A protocol for communication between a CPE and Auto-Configuration Server (ACS) that
encompasses secure auto-configuration as well as other CPE management functions
within a common framework.
1 Introduction
Note – sections 1 and 2 of this document are introductory and do not define requirements of this
protocol.
This document describes the CPE WAN Management Protocol, intended for communication between a
CPE and Auto-Configuration Server (ACS). The CPE WAN Management Protocol defines a mechanism
that encompasses secure auto-configuration of a CPE, and also incorporates other CPE management
functions into a common framework.
This document specifies the generic requirements of the management protocol methods which can be
applied to any TR-069 CPE. Other documents specify the managed objects, or data models, for specific
types of devices or services.
1.1.4 Diagnostics
The CPE WAN Management Protocol provides support for a CPE to make available information that the
ACS may use to diagnose and resolve connectivity or service issues as well as the ability to execute defined
diagnostic tests.
Managed LAN
Device
Policy
Scope of CPE WAN Management
Protocol (CWMP):
ACS Southbound Interface
The protocol is also designed to be extensible. It includes mechanisms to support future extensions to the
standard, as well as explicit mechanisms for vendor-specific extensions.
1.5 Assumptions
Some assumptions made in defining the CPE WAN Management Protocol are listed below:
• All CPE regardless of type (bridge1, router, or other) obtain an IP address in order to communicate
with an ACS.
• A CPE can interact with a single ACS at a time. At any time, a CPE is aware of exactly one ACS with
which it can connect. (Note: a collection of ACSs behind a load balancer is considered a single ACS
for the purposes of this document.)
1.6 Terminology
The following terminology is used throughout the series of documents defining the CPE WAN
Management Protocol.
ACS Auto-Configuration Server. This is a component in the broadband network responsible
for auto-configuration of the CPE for advanced services.
Applied A change to the CPE’s configuration has been applied when the CPE has stopped using
the previous configuration and begun using the new configuration.
B-NT Broadband-Network Termination. A specific type of Broadband CPE used in DSL
networks.
Committed A change to the CPE’s configuration has been committed when the change has been fully
validated, the new configuration appears in the configuration data model for subsequent
ACS operations to act on, and the change will definitely be applied in the future, as
required by the protocol specification.
CPE Customer Premises Equipment; refers to any TR-069-compliant device and therefore
covers both Internet Gateway Devices and LAN-side end devices.
CWMP CPE WAN Management Protocol (the subject of this standard).
Data Model A hierarchical set of Parameters that define the managed objects accessible via TR-069
for a particular device or service.
Device Used interchangeably with CPE.
Event An indication that something of interest has happened that requires the CPE to notify the
ACS.
Internet A CPE device, typically a broadband router, that acts as a gateway between the WAN
Gateway and the LAN.
Device
Option An optional CPE capability that may only be enabled or disabled using a digitally signed
Voucher.
Parameter A name-value pair representing a manageable CPE parameter made accessible to an ACS
for reading and/or writing.
RPC Remote Procedure Call.
1
In the case of a bridge, the CPE must establish IP-layer connectivity specifically for management
communication. The mechanism used to establish this connectivity would depend on the specific
network architecture. For example, a DSL bridge may connect using IPoE with DHCP for address
allocation, or may connect using PPPoE.
Session A contiguous sequence of CWMP transactions between a CPE and an ACS. Note that a
Session may span multiple TCP connections.
STB Set Top Box. This device contains Audio and Video decoders and is intended to be
connected to Analog TV and / or Home Theaters.
Transaction A message exchange between a CPE and ACS consisting of a single request followed by
a single response, initiated either by the CPE or ACS.
Transaction The same as a Session. The “Transaction” qualifier is sometimes used for emphasis.
Session
VoIP A Voice over IP device that acts as the initiation/termination point for VoIP calls.
Endpoint Examples of Endpoints include VoIP phones and analog terminal adapters (ATAs).
Voucher A digitally signed data structure that instructs a particular CPE to enable or disable
Options, and characteristics that determine under what conditions the Options persist.
2 Architecture
RPC Methods
SOAP
HTTP
SSL/TLS
TCP/IP
2.3.1 Parameters
The RPC Method Specification (see Annex A) defines a generic mechanism by which an ACS can read or
write Parameters to configure a CPE and monitor CPE status and statistics. Parameters for various classes
of CPE are defined in separate documents. At the time of writing the following standards define TR-069
data models.
• TR-106: Data Model Template for TR-069-Enabled Devices, [13]
• TR-098: Internet Gateway Device Data Model for TR-069, [24]
• TR-104: Provisioning Parameters for VoIP CPE, [25]
Each Parameter consists of a name-value pair. The name identifies the particular Parameter, and has a
hierarchical structure similar to files in a directory, with each level separated by a “.” (dot). The value of a
Parameter may be one of several defined data types (see [13]).
Parameters may be defined as read-only or read-write. Read-only Parameters may be used to allow an
ACS to determine specific CPE characteristics, observe the current state of the CPE, or collect statistics.
Writeable Parameters allow an ACS to customize various aspects of the CPE’s operation. All writeable
Parameters must also be readable although those that contain confidential user information, e.g. passwords,
may return empty values when read (this is specified in the corresponding data model). The value of some
writeable Parameters may be independently modifiable through means other than the interface defined in
this specification (e.g., some Parameters may also be modified via a LAN side auto-configuration
protocol).
Because other protocols (as well as subscriber action) may independently modify the device configuration,
the ACS cannot assume that it is the only entity modifying device configuration. Additionally, it is
possible that a LAN-side mechanism could alter device configuration in such a way that it contravenes the
intended ACS-supplied configuration. Care should be taken in the implementation of both WAN and
LAN-side auto-configuration mechanisms, as well as subscriber-facing interfaces, to limit the instances of
such an occurrence.
The protocol supports a discovery mechanism that allows an ACS to determine what Parameters a
particular CPE supports, allowing the definition of optional parameters as well as supporting
straightforward addition of future standard Parameters.
The protocol also includes an extensibility mechanism that allows use of vendor-specific Parameters in
addition to those defined in this specification.
While the CPE WAN Management Protocol also allows polling by the CPE in lieu of ACS-initiated
connections, the CPE WAN Management Protocol does not rely on polling or establishment of persistent
connections from the CPE to provide asynchronous notification.
The basic mechanism defined in the CPE WAN Management Protocol to enable asynchronous ACS
initiated communication assumes direct IP addressability of the CPE from the ACS. An alternative
mechanism is defined in Annex G, which accommodates CPE operating behind a NAT gateway that are not
directly addressable by the ACS.
to using DHCP for ACS discovery. If the CPE originally used DHCP for ACS discovery, then when it
fails to contact the ACS, it MUST perform re-discovery via DHCP. The last requirement holds even if
the ACS URL has been subsequently set through a non-DHCP mechanism.
The specified URL MUST be an absolute URL. Both the URL and ProvisioningCode MUST NOT be
null terminated. If the CPE receives a URL or ProvisioningCode value that is null terminated, the CPE
MUST accept the value provided, and MUST NOT interpret the null character as part of the URL or
ProvisioningCode value.
3. The CPE MAY have a default ACS URL that it MAY use if no other URL is provided to it.
The ACS URL MUST be in the form of a valid HTTP or HTTPS URL [5]. Use of an HTTPS URL
indicates that the CPE MUST establish an SSL or TLS connection to the ACS.
Once the CPE has established a connection to the ACS, the ACS MAY at any time modify the ACS
address Parameter stored within the CPE (...ManagementServer.URL, as defined in [13]). Once modified,
the CPE MUST use the modified address for all subsequent connections to the ACS.
The “host” portion of the ACS URL is used by the CPE for validating the certificate from the ACS when
using certificate-based authentication. Because this relies on the accuracy of the ACS URL, the overall
security of this protocol is dependent on the security of the ACS URL.
The CPE SHOULD restrict the ability to locally configure the ACS URL to mechanisms that require strict
security. The CPE MAY further restrict the ability to locally set the ACS URL to initial setup only,
preventing further local configuration once the initial connection to an ACS has successfully been
established such that only its existing ACS is permitted subsequently to change this URL.
The use of DHCP for configuration of the ACS URL SHOULD be limited to situations in which the
security of the link between the DHCP server and the CPE can be assured by the service provider. Since
DHCP does not itself incorporate a security mechanism, other means of ensuring this security SHOULD be
provided.
The ACS URL MAY contain a DNS hostname or an IP address. When resolving the ACS hostname, the
DNS server might return multiple IP addresses. In this case, the CPE SHOULD randomly choose an IP
address from the list. When the CPE is unable to reach the ACS, it SHOULD randomly select a different
IP address from the list and attempt to contact the ACS at the new IP address. This behavior ensures that
CPEs will balance their requests between different ACSs if multiple IP addresses represent different ACSs.
The CPE MUST NOT cache the DNS server response beyond the duration of time to live (TTL) returned
by DNS server unless it cannot contact the DNS server for an update. This behavior is required by DNS
RFC 1034 and provides an opportunity for the DNS server to update stale data.
It is further RECOMMENDED that the CPE implements affinity to a particular ACS IP address. Affinity
to a given IP address means that the CPE will attempt to use the same IP address for as along as it can
contact the ACS at this address. This creates a more stable system and can allow the ACS to perform
better due to better caching. To implement the affinity the CPE SHOULD store to persistent storage the
last successfully used IP address and the list of IP addresses from which it was selected. The CPE
SHOULD continue to perform DNS queries as normal, but SHOULD continue using the same IP address
for as long as it can contact the ACS and for as long as the list of IP addresses returned by the DNS does
2
As defined in [13].
not change. The CPE SHOULD select a new IP address whenever the list of IP addresses changes or when
it cannot contact the ACS. This provides an opportunity for service providers to reconfigure their network.
Port 7547 has been assigned by IANA for the CPE WAN Management Protocol (see [17]), and the ACS
MAY use this port in its URL.
were making its first session retry attempt. In other words, if a session is retried when a new event other
than BOOT occurs, it does not reset the wait interval, although the continued occurrence of new events
might cause sessions to be initiated more frequently than shown in the table. Regardless of the reason a
previous session failed or the condition prompting session retry, the CPE MUST communicate to the ACS
the session retry count.
Beginning with the tenth post-reboot session retry attempt, the CPE MUST choose from a range between
2560 and 5120 seconds. The CPE MUST continue to retry a failed session until it is successfully
terminated. Once a session terminates successfully, the CPE MUST reset the session retry count to zero and
no longer apply session retry policy to determine when to initiate the next session.
• The CPE SHOULD restrict the number of Connection Requests it accepts during a given period of
time in order to further reduce the possibility of a denial of service attack. If the CPE chooses to reject
a Connection Request for this reason, the CPE MUST respond to that Connection Request with an
HTTP 503 status code (Service Unavailable). In this case, the CPE SHOULD NOT include the HTTP
Retry-After header in the response.
• If the CPE successfully authenticates and responds to a Connection Request as described above, and if
it is not already in a session, then it MUST, within 30 seconds of sending the response, attempt to
establish a session with the pre-determined ACS address (see section 3.1) in which it includes the
“6 CONNECTION REQUEST” EventCode in the Inform.
Note – in practice there might be exceptional circumstances that would cause a CPE to fail to
meet this requirement on rare occasions.
• If the ACS receives a successful response to a Connection Request but after at least 30 seconds the
CPE has not successfully established a session that includes the “6 CONNECTION REQUEST”
EventCode in the Inform, the ACS MAY retry the Connection Request to that CPE.
• If, once the CPE successfully authenticates and responds to a Connection Request, but before it
establishes a session to the ACS, it receives one or more successfully authenticated Connection
Requests, the CPE MUST return a successful response for each of those Connection Requests, but
MUST NOT initiate any additional sessions as a result of these additional Connection Requests,
regardless of how many it receives during this time.
• If the CPE is already in a session with the ACS when it receives one or more Connection Requests, it
MUST NOT terminate that session prematurely as a result. The CPE MUST instead take one of the
following alternative actions:
• Reject each Connection Request by responding with an HTTP 503 status code (Service
Unavailable). In this case, the CPE SHOULD NOT include the HTTP Retry-After header in the
response.
• Following the completion of the session, initiate exactly one new session (regardless of how many
Connection Requests had been received during the previous session) in which it includes the
“6 CONNECTION REQUEST” EventCode in the Inform. In this case, the CPE MUST initiate
the session immediately after the existing session is complete and all changes from that session
have been applied.
This requirement holds for Connection Requests received any time during the interval that the CPE
considers itself in a session, including the period in which the CPE is in the process of establishing the
session.
• The CPE MUST NOT reject a properly authenticated Connection Request for any reason other than
those described above. If the CPE rejects a Connection Request for any of the reasons described
above, it MUST NOT initiate a session with the ACS as a result of that Connection Request.
This mechanism relies on the ACS having had at least one prior communication with the CPE via a CPE-
initiated interaction. During this interaction, if the ACS wishes to allow future ACS-initiated transactions,
it would use the value of the ...ManagementServer.ConnectionRequestURL Parameter (see [13]). If the
URL used for management access changes, the CPE MUST notify the ACS by issuing an Inform message
indicating the new management IP address (see [13]), thus keeping the ACS up-to-date.
Port 7547 has been assigned by IANA for the CPE WAN Management Protocol (see [17]), and the CPE
MAY use this port in the Connection Request URL.
Certain restrictions on the use of SSL/TLS and TCP are defined as follows:
• The CPE MUST support SSL 3.0 [10], TLS 1.0 [11] or both.
• If CPE supports both, it SHOULD communicate both capabilities to the ACS as specified in Appendix
E of RFC 2246, allowing the ACS to choose the protocol.
• If the ACS URL has been specified as an HTTPS URL, the CPE MUST establish connections to the
ACS using SSL / TLS.
• The CPE MUST support the following SSL / TLS cipher suites:
• RSA_WITH_3DES_EDE_CBC_SHA
• RSA_WITH_RC4_128_SHA
• A CPE MUST be able to initiate outgoing connections to the ACS.
• An ACS MUST be able to accept CPE-initiated connections.
• If SSL/TLS is used, the CPE MUST authenticate the ACS using the ACS-provided certificate.
Authentication of the ACS requires that the CPE MUST validate the certificate against a root
certificate, and that the CPE MUST ensure that the value of the CN (Common Name) component of
the Subject field in the certificate exactly matches the host portion of the ACS URL known to the CPE
(even if the host portion of the ACS URL is an IP address). This MUST be a direct string comparison
between the CN and the host portion of the ACS URL. If either of these is in the form of a hostname
(rather than an IP address), this comparison MUST NOT involve the IP address that the hostname
resolves to.
To validate against a root certificate, the CPE MUST contain one or more trusted root certificates that
are either pre-loaded in the CPE or provided to the CPE by a secure means outside the scope of this
specification.
If as a result of an HTTP redirect, the CPE is attempting to access an ACS at a URL different from its
pre-configured ACS URL, the CPE MUST validate the CN component of the ACS certificate against
the host portion of the redirected ACS URL rather than the pre-configured ACS URL.
A CPE SHOULD wait until it has accurate absolute time before contacting the ACS. If a CPE chooses
to contact the ACS before it has accurate absolute time (or if it does not support absolute time), it
MUST ignore those components of the ACS certificate that involve absolute time, e.g. not-valid-before
and not-valid-after certificate restrictions.
• Support for CPE authentication using client-side certificates is OPTIONAL for both the CPE and ACS.
Such client-side certificates MUST be signed by an appropriate chain. When client-side certificates
are used to authenticate the CPE to the ACS, the Common Name (CN) field in the CPE certificate
MUST be one of the following two types:
• Unique CPE client certificate. In this case, the value of the CN field MUST be globally unique for
each CPE. Specifically, the CN field MUST adhere to the format recommended for the
username/userid in section 3.4.4.
Examples:
00D09E-0123456789
012345-STB-0123456789
012345-Set%2DTop%2DBox-0123456789
• Generic CPE client certificate. In this case, the value of the CN field MAY be the same among a
set of CPE, such as all CPE of a specific model from a given vendor. The content of the CN field
is not specified in this case.
If generic CPE client certificates are used, the ACS SHOULD additionally authenticate the CPE
using HTTP basic or digest authentication to establish the identity of a specific CPE.
• When an HTTP Request or Response contains a SOAP Envelope, the HTTP Content-Type header
MUST have a type/subtype of “text/xml”.
• An empty HTTP POST MUST NOT contain a SOAPAction header.
• An empty HTTP POST MUST NOT contain a Content-Type header.
• An HTTP response that contains any CPE WAN Management Protocol payload (a SOAP request
to the CPE, a successful SOAP response to the CPE, or a SOAP fault response containing a Fault
element defined in section 3.5) MUST use the HTTP status code 200 (OK).
Below is an example HTTP Response from an ACS containing a SOAP Request:
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: xyz
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cwmp="urn:broadband-forum-org:cwmp-1-0">
<soap:Body>
<cwmp:Request>
<argument>value</argument>
</cwmp:Request>
</soap:Body>
</soap:Envelope>
Note – in the above example, the XML namespace prefixes used are only examples. The actual
namespace prefix values are arbitrary, and are used only to refer to a namespace declaration.
"Connection: close" HTTP header, that the TCP connection be closed. 3 In the latter case, the CPE MUST
honor the ACS request, close the TCP connection, and send the next HTTP request (including the
"Authorization" HTTP header) in a new TCP connection.
If the CPE for any reason fails to establish a TCP connection, fails to send an HTTP message, or fails to
receive an HTTP response, the CPE MUST consider the session unsuccessfully terminated. The CPE
MUST wait a minimum of 30 seconds before declaring a failure to establish a TCP connection, or failure to
receive an HTTP response.
The ACS SHOULD make use of a session cookie to maintain session state as described in [7]. The ACS
MAY make use of old-style “Netscape” cookies as well as, or instead of, the new-style cookies of [7]. The
ACS SHOULD use only cookies marked for Discard, and SHOULD NOT assume that a CPE will maintain
a cookie beyond the duration of the session.
To ensure that an ACS can make use of a session cookie, a CPE MUST support the use of cookies as
defined in [7] including the return of the cookie value in each subsequent HTTP POST, with the exception
that a CPE need not support storage of cookies beyond the duration of a session. In particular, because the
ACS might send old-style, new-style, or a mixture of old-style and new-style cookies, the CPE MUST
support the compatibility requirements of section 9.1 of [7]. The CPE MUST support the use of multiple
cookies by the ACS, and MUST make available at least 512 bytes for storage of cookies.
When a transaction session is completed successfully or terminated unsuccessfully, a CPE MUST close the
associated TCP connection to the ACS and discard all cookies marked for Discard.
A CPE MUST support the use of HTTP redirection by the ACS. The CPE and ACS requirements
associated with the use of HTTP redirection are as follows:
• A CPE MUST support the 302 (Found) and 307 (Temporary Redirect) HTTP status codes.
• A CPE MAY also support the 301 (Moved Permanently) HTTP status code for redirection.
• The CPE MUST allow redirection to occur at any point during a session, and the ACS MAY issue a
redirect at any point during a session.
• If the CPE is redirected, it MUST attempt to continue the session using the URL provided in the HTTP
redirect response. Specifically, the CPE MUST re-send the HTTP POST that resulted in the redirect
response to the ACS at the redirected URL, and the CPE MUST then attempt to proceed with the
session exactly as if no redirection had occurred.
• If the CPE is redirected, the redirected URL MUST apply only to the remainder of the current session
or until a subsequent redirect occurs later in the same session. The redirected URL MUST NOT be
saved by the CPE (i.e. as the value of ...ManagementServer.URL, as defined in [13]) for use in any
subsequent session or any subsequent retries of the session. This requirement MUST hold even if the
301 (Moved Permanently) HTTP status code is used for redirection.
• The CPE MUST allow up to 5 consecutive redirections. If the CPE is redirected more than 5 times
consecutively, it MAY consider the session unsuccessfully terminated.
• The URL provided in HTTP redirection MAY be an HTTP or HTTPS URL. The appropriate transport
mechanism (TCP or SSL/TLS) MUST be used with the new target regardless of the transport used
before redirection.
• If SSL/TLS is used for the redirected session, requiring the CPE to authenticate the ACS, the
authentication MUST be based on the redirected URL rather than the pre-configured ACS URL (see
section 3.3).
3
This extra requirement is necessary because some ACS implementations might utilize the underlying TCP
connection as a mechanism to detect replay attacks (see the note in section 3.4.5). Such implementations
would require the response to an authentication challenge to use the same TCP connection as the
challenge.
• In an HTTP response sent by the ACS containing a redirect status code, the length of the HTTP
message-body MUST be zero. If the CPE receives an HTTP re-direct response with a non-empty
message-body, it MUST ignore the content of the message-body.
• When redirected, the CPE MUST include all cookies associated with the session in subsequent HTTP
requests to the redirected ACS. The CPE MUST consider a redirect from an ACS to be a “verifiable
transaction” as defined in [7], and thus it MUST send cookies to the redirected ACS without
performing domain validation of each cookie.
3.4.4 Authentication
If the CPE is not authenticated using SSL/TLS, the ACS MUST authenticate the CPE using HTTP. If
SSL/TLS is being used for encryption, the ACS MAY use either basic or digest authentication [6]. If
SSL/TLS is not being used, then the ACS MUST use digest authentication.
The CPE MUST support both HTTP basic and digest authentication. The ACS chooses the authentication
scheme by virtue of providing basic or digest authentication challenge.
If the CPE has received an authentication challenge from the ACS (either basic or digest), the CPE
SHOULD send an Authorization header in all subsequent HTTP requests for the duration of the TCP
connection. Whether or not the CPE does this, the ACS MAY issue subsequent authentication challenges
at any stage of the session within a single or multiple TCP connections.
If any form of HTTP authentication is used to authenticate the CPE, the CPE SHOULD use a
username/userid that is globally unique among all CPE manufacturers. Specifically, the CPE
username/userid SHOULD be in one of the following two formats:
<OUI> "-" <ProductClass> "-" <SerialNumber>
<OUI> "-" <SerialNumber>
If a username/userid of the above format is used, the <OUI>, <ProductClass>, and <SerialNumber> fields
MUST match exactly the corresponding parameters included in the DeviceIdStruct in the Inform message,
as defined in Annex A, except that, in order to guarantee that the parameter values can be extracted from
the username/userid, any character i,n the <ProductClass> and <SerialNumber> that is not either
alphanumeric or an underscore (“_”) MUST be escaped using URI percent encoding, as defined in RFC
3986 [12].
If a username/userid of the above format is used, the second form MUST be used if and only if the value of
the ProductClass parameter is empty.
Examples:
012345-0123456789
012345-STB-0123456789
012345-Set%2DTop%2DBox-0123456789
The password used in either form of HTTP authentication SHOULD be a unique value for each CPE. That
is, multiple CPE SHOULD NOT share the same password. This password is a shared secret, and thus
MUST be known by both CPE and ACS. The method by which a shared secret becomes known to both
entities on initial CPE installation is outside the scope of this specification. Both CPE and ACS SHOULD
take appropriate steps to prevent unauthorized access to the password, or list of passwords in the case of an
ACS.
• The encoding MUST use the standard SOAP 1.1 envelope and serialization namespaces:
• Envelope namespace identifier "http://schemas.xmlsoap.org/soap/envelope/"
• Serialization namespace identifier "http://schemas.xmlsoap.org/soap/encoding/"
• All elements and attributes defined as part of this version of the CPE WAN Management Protocol are
associated with the following namespace identifier:
• “urn:broadband-forum-org:cwmp-1-0”
• The data types used in Annex A correspond directly to the data types defined in the SOAP 1.1
serialization namespace. (In general, the types used in Annex A are restricted subsets of the
corresponding SOAP types.)
• Following the SOAP specification [8], elements specified as being of type “anySimpleType” MUST
include a type attribute to indicate the actual type of the element.
• Elements of a type other than “anySimpleType” MAY include a type attribute if and only if the
element is defined using a named data type in the RPC method XML schema in Annex A. If a type
attribute is included, the value of the type attribute MUST exactly match the named data type specified
in the schema.
• For an array argument, the argument name specified in the table in which the array is defined MUST
be used as the name of the overall array element. The name of the member elements of an array
MUST be the data type of the array as specified in the table in which the array is defined (excluding
the brackets and any length limitation given in parentheses), and MUST NOT be namespace qualified.
For example, an argument named ParameterList, which is an array of ParameterValueStruct structures,
would be encoded as:
<ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[2]">
<ParameterValueStruct>
<name>Parameter1</name>
<value xsi:type="someType">1234</value>
</ParameterValueStruct>
<ParameterValueStruct>
<name>Parameter2</name>
<value xsi:type="someType">5678</value>
</ParameterValueStruct>
</ParameterList>
As a second example, the MethodList array in the GetRPCMethodsResponse would be encoded as:
<MethodList soap-enc:arrayType="xsd:string[3]">
<string>GetRPCMethods</string>
<string>Inform</string>
<string>TransferComplete</string>
</MethodList>
Note – in the above examples, the XML namespace prefixes used are only examples. The actual
namespace prefix values are arbitrary, and are used only to refer to a namespace declaration.
Note – it is always necessary to specify an XML namespace prefix for the arrayType attribute.
For arrays of CWMP-specific types this will always be the CWMP namespace prefix, and for
arrays of other types it will always be the XML Schema namespace prefix or the SOAP encoding
namespace prefix.
• Regarding the SOAP specification for encoding RPC methods (section 7 of [8]), for each method
defined in Annex A, each argument listed in the method call represents an [in] parameter, while each
argument listed in the method response represents an [out] parameter. There are no [in/out] parameters
used.
• The RPC methods defined use the standard SOAP naming convention whereby the response message
corresponding to a given method is named by adding the “Response” suffix to the name of the method.
Below is an example envelope containing a fault response for a SetParameterValues method call:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cwmp="urn:broadband-forum-org:cwmp-1-0">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID>
</soap:Header>
<soap:Body>
<soap:Fault>
<faultcode>Client</faultcode>
<faultstring>CWMP fault</faultstring>
<detail>
<cwmp:Fault>
<FaultCode>9003</FaultCode>
<FaultString>Invalid arguments</FaultString>
<SetParameterValuesFault>
<ParameterName>
InternetGatewayDevice.Time.LocalTimeZone
</ParameterName>
<FaultCode>9012</FaultCode>
<FaultString>Not a valid time zone value</FaultString>
</SetParameterValuesFault>
<SetParameterValuesFault>
<ParameterName>
InternetGatewayDevice.Time.LocalTimeZoneName
</ParameterName>
<FaultCode>9012</FaultCode>
<FaultString>String too long</FaultString>
</SetParameterValuesFault>
</cwmp:Fault>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Note – in the above examples, the XML namespace prefixes used are only examples. The actual
namespace prefix values are arbitrary, and are used only to refer to a namespace declaration.
A fault response MUST only be sent in response to a SOAP request. A fault response MUST NOT be
sent in response to a SOAP response or another fault response.
If a fault response does not follow all of the above requirements, the SOAP message MUST be deemed
invalid by the recipient. The consequences of invalid SOAP on the CPE WAN Management Protocol
session are described in section 3.7.
• When processing a received envelope, both ACS and CPE MAY ignore: (a) any unknown XML
elements4 and their sub elements or content, (b) any unknown XML attributes and their values, (c) any
embedded XML comments, and (d) any XML processing instructions. Alternatively the ACS and CPE
MAY explicitly validate the received XML and reject an envelope that includes unknown elements.
Note that this precludes extending existing messages by including additional arguments without
changing the name of the message.
• If an RPC method requires references to XML Schema namespaces (for example for the “type”
attribute, or for references to XML Schema data types), these references MUST be to the 2001
versions of these namespace definitions, specifically, http://www.w3.org/2001/XMLSchema-instance
and http://www.w3.org/2001/XMLSchema. The recipient MAY reject an RPC method that references
a different version of either of these namespaces.
4
With the exception that reception of an unknown SOAP action MUST result in a fault response
indicating Method Not Supported (see Annex A).
Note – in the above example, the XML namespace prefixes used are only examples. The actual
namespace prefix values are arbitrary, and are used only to refer to a namespace declaration.
Note – the CWMP namespace prefix is specified only for elements that are defined at the top level
of the CWMP schema (ID and GetParameterNames in the above example). It is incorrect to
specify a namespace on elements contained within such elements (ParameterPath and NextLevel
in the above example). This is because the CWMP schema specifies an elementFormDefault value
of “unqualified”.
The CPE WAN Management Protocol defines a series of SOAP Header elements as specified in Table 4.
Below is an example of a message showing the use of all of the defined headers:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cwmp="urn:broadband-forum-org:cwmp-1-0">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID>
<cwmp:HoldRequests soap:mustUnderstand="1">0</cwmp:HoldRequests>
</soap:Header>
<soap:Body>
<cwmp:Action>
<argument>value</argument>
</cwmp:Action>
</soap:Body>
</soap:Envelope>
Note – in the above example, the XML namespace prefixes used are only examples. The actual
namespace prefix values are arbitrary, and are used only to refer to a namespace declaration.
5
Required only if file downloads of any type are supported.
6
If the voucher mechanism is supported, both the SetVouchers and GetOptions methods are required.
7
Required only if file downloads or uploads of any type are supported.
8
Required only if the ACS supports initiation of file downloads or uploads.
“401 Unauthorized” status code received as part of the HTTP authentication process, or due to an HTTP
3xx status code received as part of an HTTP redirect).
The session ceases when both the ACS and CPE have no more requests to send and no responses remain
due from either the ACS or the CPE. At such time, the CPE MUST close the connection.
No more than one transaction session between a CPE and its associated ACS can exist at a time.
Note – a transaction session is intended to persist only as long as there are messages to be
transferred in either direction. A session and its associated TCP connection are not intended to
be held open after a specific exchange of information completes.
If the CPE has more than one request pending when the above criteria are met, the choice of which request
to send is at the discretion of the CPE unless otherwise specified.
While in a session, if any of the above conditions are not met or if the CPE has no requests to send to the
ACS, and if the most recent HTTP response from the ACS did not contain a SOAP request, the CPE MUST
send an empty HTTP POST.
Once the CPE has sent an empty HTTP POST when the most recent HoldRequests was false (see section
3.5), the CPE MUST NOT send any further requests for the remainder of the session. In this case, if the
CPE has additional requests to send to the ACS, the CPE MUST wait until a subsequent session to send
these requests.
Table 6 summarizes what the CPE MUST send to the ACS as long as the session is in progress (after the
session was successfully initiated, but before the session termination criteria described in 3.7.1.4 have been
met).
9
The CPE can have requests pending only if the CPE has not already sent an empty HTTP POST when the
most recent HoldRequests was false. Otherwise, the CPE is considered to have no requests pending.
the resulting HTTP response contains a “401 Unauthorized” status code, the CPE MUST consider the
session to have terminated unsuccessfully.
If the above conditions are not met, the CPE MUST continue the session.
If the CPE receives a SOAP-layer fault response as defined in section 3.5 with a fault code other than
“Retry request” (fault code 8005) in response to any method other than Inform, the CPE MUST continue
with the remainder of the session. That is, a fault response of this type MUST NOT cause the session to
unsuccessfully terminate.
Note – in a fault condition, it is entirely at the discretion of the ACS whether its fault response is a
SOAP-layer fault, which would cause the session to continue, or an HTTP-layer fault, which
would cause the session to terminate unsuccessfully.
If one or more messages exchanged during a session results in the CPE needing to reboot to complete the
requested operation, the CPE MUST wait until after the session has cleanly terminated based on the above
criteria before performing the reboot.
If the session terminates unexpectedly, the CPE MUST retry the session as specified in section 3.2.1.1.
The CPE MAY place locally specified limits on the number of times it attempts to reestablish a session in
this case.
3.7.1.5 Events
An event is an indication that something of interest has happened that requires the CPE to notify the ACS
via an Inform request defined in section A.3.3.1. The CPE MUST attempt to deliver every event at least
once. If the CPE is not currently in a session with the ACS, it MUST attempt to deliver events immediately;
otherwise, it MUST attempt to deliver them after the current session terminates. The CPE MUST receive
confirmation from the ACS for it to consider an event successfully delivered. Once the CPE has delivered
an event successfully, the CPE MUST NOT send the same event again. On the other hand, the ACS MUST
be prepared to receive the same event more than once because the ACS might have sent a response the CPE
never receives. Many types of events (e.g., PERIODIC, VALUE CHANGE) can legally appear in
subsequent sessions even when successfully delivered in the earlier session. In such cases, an event in the
later session indicates the reoccurrence of an event of the same type rather than an attempt to retry an event
delivery failure.
For every type of event there is a policy that dictates if and when the CPE MUST retry event delivery if a
previous delivery attempt failed. When event delivery is retried it MUST be in the immediately following
session; events whose delivery fails in one session cannot be omitted in the following session and then later
redelivered.
For most events, delivery is confirmed when the CPE receives a successful InformResponse. Three
standard event types (KICKED, TRANSFER COMPLETE, REQUEST DOWNLOAD) indicate that one or
more methods (Kicked [section A.4.2.1], TransferComplete [section A.3.3.2], RequestDownload [section
A.4.2.2] respectively) will be called later in the session, and it is the successful response to these methods
that indicates event delivery. The CPE MAY also send vendor-specific events (using the syntax specified in
Table 7), in which case successful delivery, retry, and discard policy is subject to vendor definition.
If no new events occur while the CPE has some events to redeliver, the CPE MUST attempt to redeliver
them according to the schedule defined by the session retry policy in section 3.2.1.1.
Below is a table of event types, their codes in an Inform request, their cumulative behavior, the responses
the CPE MUST receive to consider them successfully delivered, and the policy for retrying and/or
discarding them if delivery is unsuccessful.
The Cumulative Behavior column of the above table distinguishes between event types that are not
cumulative (“Single”) and those that are cumulative (“Multiple”). For example, if the CPE reboots while
the previous “1 BOOT” event has not yet been delivered, it makes no sense for the next Inform to contain
two “1 BOOT” Event array entries. In contrast, if a download completes while the previous “M
Download” event has not yet been delivered, the next Inform would contain two “M Download” Event
array entries because each relates to a different ACS request. The “Single” and “Multiple” cumulative
behaviors are defined as follows:
• If an event with “Single” cumulative behavior occurs, the list of events in the next Inform MUST
contain only one instance of this EventCode, regardless of whether there are any undelivered events of
the same type.
• If an event with “Multiple” cumulative behavior occurs, the new EventCode MUST be included in the
list of events, independent of any undelivered events of the same type, and this MUST NOT affect any
such undelivered events.
When one or more events are directly related to the same root cause, then all such events MUST be
included in the Event array. Below are examples of such cases (this list is not exhaustive):
• Reboot caused by the Reboot RPC method. In this case the Inform MUST include at least the
following EventCode values:
"1 BOOT"
"M Reboot"
• TransferComplete sent in a new session due to a prior Download request, where there is no reboot
associated with the completion of the transfer:
"7 TRANSFER COMPLETE"
"M Download"
• One or more parameter values for which Passive Notification has been set have changed since the most
recent Inform, and a periodic Inform occurs (in this case, the events MUST be included in the same
Inform because for Passive Notifications, the Inform in which the “4 VALUE CHANGE” event would
occur would have to result from some other cause—in this example, a periodic inform):
"2 PERIODIC"
"4 VALUE CHANGE"
For events that are due to unrelated causes, if they occur simultaneously, the CPE SHOULD include all
such events in the same Inform message, but MAY send separate Inform messages for each such event. An
example of unrelated events is:
"2 PERIODIC"
"7 TRANSFER COMPLETE"
4) The ACS has received all outstanding response messages from the CPE.
If all of the above criteria have been met before the ACS has sent its final HTTP response, the final HTTP
response from the ACS MUST be empty.
If the above criteria have not all been met, but the ACS has not received an HTTP POST from a given CPE
within a locally defined timeout of not less than 30 seconds, it MAY consider the session terminated. In
this case, the ACS MAY attempt to reestablish a session by performing a Connection Request (see section
3.2.2).
If the ACS receives an HTTP POST from the CPE for which the XML is not well-formed, for which the
SOAP structure is deemed invalid, or that contains a SOAP fault that is not in the form specified in section
3.5, the ACS MUST respond to the CPE with an HTTP 400 status code (Bad Request), and MUST consider
the session to have terminated unsuccessfully. This fault response MUST NOT contain any SOAP content,
but MAY contain human-readable text that further explains the nature of the fault.
If the ACS receives a request associated with a session that it considers expired, or if the ACS determines
that some other protocol violation has occurred, or for other reasons at the discretion of the ACS, the ACS
MAY cause a session to terminate unsuccessfully by responding to the CPE with an HTTP 400 status code
(Bad Request). This HTTP response MUST NOT contain any SOAP content, but MAY contain human
readable-text that further explains the nature of the fault.
If the ACS receives a SOAP fault response from the CPE, as defined in section 3.5, the ACS MAY choose
among the following actions:
• The ACS MAY force the unsuccessful termination of the session. To do this, the ACS MUST respond
to the CPE with an HTTP 400 status code (Bad Request). This HTTP response MUST NOT contain
any SOAP content, but MAY contain human readable-text that further explains the nature of the fault.
This will result in the CPE retrying the session.
• The ACS MAY attempt to terminate the session successfully, in which case the CPE will not attempt
to retry the session. To do this, the ACS would send no more requests to the CPE, and would follow
the rules defined above to determine when the session terminates.
• The ACS MAY continue with the session, sending additional requests to the CPE.
CPE ACS
Open connection
SSL initiation
HTTP post
Inform request
HTTP response
Inform response
HTTP response
GetParameterValues request
HTTP post
GetParameterValues response
HTTP response
SetParameterValues request
HTTP post
SetParameterValues response
Close connection
In the example shown in Figure 4, the ACS first initiates a file download, and the CPE sends a
TransferComplete later in the same session. Note that this scenario could occur only if the file download is
very short and the CPE is capable of performing it in parallel with the ongoing CPE WAN Management
Protocol session (which a CPE is not required to do). To allow this possibility, the ACS sets HoldRequests
equal to true until it has completed sending requests to the CPE.
CPE ACS
Open connection
SSL initiation
HTTP post
Inform request
HTTP response
Inform response (HoldRequests = true)
HTTP response
Download request (HoldRequests = true)
HTTP post
Download response (status = 1)
HTTP post
TransferComplete request
HTTP response
TransferComplete response
Close connection
Normative References
The following documents are referenced by this specification. Where the protocol defined in this
specification depends on a referenced document, support for all required components of the referenced
document is implied unless otherwise specified.
The following references are associated with document conventions or context for this specification, but are
not associated with requirements of the CPE WAN Management Protocol itself.
[1] RFC 2119, Key words for use in RFCs to Indicate Requirement Levels,
http://www.ietf.org/rfc/rfc2119.txt
[2] TR-046, Auto-Configuration Architecture & Framework, The Broadband Forum Technical Report
[3] TR-062, Auto-Configuration for the Connection Between the DSL Broadband Network Termination
(B-NT) and the Network using ATM, The Broadband Forum Technical Report
[4] TR-044, Auto-Configuration for Basic Internet (IP-based) Services, The Broadband Forum Technical
Report
The following references are associated with required components of the CPE WAN Management
Protocol.
[5] RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1, http://www.ietf.org/rfc/rfc2616.txt
[6] RFC 2617, HTTP Authentication: Basic and Digest Access Authentication,
http://www.ietf.org/rfc/rfc2617.txt
[7] RFC 2965, HTTP State Management Mechanism, http://www.ietf.org/rfc/rfc2965.txt
[8] Simple Object Access Protocol (SOAP) 1.1, http://www.w3.org/TR/2000/NOTE-SOAP-20000508
[9] Organizationally Unique Identifiers (OUIs), http://standards.ieee.org/faqs/OUI.html
[10] The SSL Protocol, Version 3.0, http://wp.netscape.com/eng/ssl3
[11] RFC 2246, The TLS Protocol, Version 1.0, http://www.ietf.org/rfc/rfc2246.txt
[12] RFC 3986, Uniform Resource Identifier (URI): Generic Syntax, http://www.ietf.org/rfc/rfc3986.txt
[13] TR-106 Amendment 1, Data Model Template for TR-069-Enabled Devices, The Broadband Forum
Technical Report
The following references are associated with optional or recommended components of the CPE WAN
Management Protocol.
[14] RFC 2132, DHCP Options and BOOTP Vendor Extensions, http://www.ietf.org/rfc/rfc2132.txt
[15] XML-Signature Syntax and Processing, http://www.w3.org/2000/09/xmldsig
[16] PKCS #7, Cryptographic Message Syntax Standard, http://www.rsasecurity.com/rsalabs/pkcs/pkcs-
7/index.html or http://www.ietf.org/rfc/rfc2315.txt
[17] Port Numbers, http://www.iana.org/assignments/port-numbers
[18] IANA Private Enterprise Numbers registry, http://www.iana.org/assignments/enterprise-numbers
[19] RFC 2104, HMAC: Keyed-Hashing for Message Authentication, http://www.ietf.org/rfc/rfc2104.txt
[20] RFC 2131, Dynamic Host Configuration Protocol, http://www.ietf.org/rfc/rfc2131.txt
[21] RFC 3489, STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address
Translators (NATs), http://www.ietf.org/rfc/rfc3489.txt
[22] RFC 3925, Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4
(DHCPv4), http://www.ietf.org/rfc/rfc3925.txt
[23] HTML 4.01 Specification, http://www.w3.org/TR/html4
[24] TR-098 Amendment 1, Internet Gateway Device Data Model for TR-069, The Broadband Forum
Technical Report
[25] TR-104, Provisioning Parameters for VoIP CPE, The Broadband Forum Technical Report
A.1 Introduction
In the CPE WAN Management Protocol, a remote procedure call mechanism is used for bi-directional
communication between a CPE device and an Auto-configuration Server (ACS). This Annex specifies
version 1 of the specific procedure calls (methods) that are defined. This includes both methods initiated
by an ACS and sent to a CPE, as well as methods initiated by a CPE and sent to an ACS.
This specification is intended to be independent of the syntax used to encode the defined RPC methods.
The particular encoding syntax to be used in the context of the CPE WAN Management Protocol is defined
in section 3.5.
Type Description
dateTime The subset of the ISO 8601 date-time format defined by the SOAP dateTime type.
All times MUST be expressed in UTC (Universal Coordinated Time) unless explicitly stated otherwise
in the definition of a variable of this type.
If absolute time is not available to the CPE, it SHOULD instead indicate the relative time since boot,
where the boot time is assumed to be the beginning of the first day of January of year 1, or
0001-01-01T00:00:00. For example, 2 days, 3 hours, 4 minutes and 5 seconds since boot would be
expressed as 0001-01-03T03:04:05. Relative time since boot MUST be expressed using an
untimezoned representation. Any untimezoned value with a year value less than 1000 MUST be
interpreted as a relative time since boot.
If the time is unknown or not applicable, the following value representing “Unknown Time” MUST be
used: 0001-01-01T00:00:00Z.
Any dateTime value other than one expressing relative time since boot (as described above) MUST
use timezoned representation (that is, it MUST include a timezone suffix).
base64 Base64 encoded binary.
A maximum allowed length can be listed using the form base64(N), where N is the maximum length in
characters after Base64 encoding.
anySimpleType The value of an element defined to be of type “anySimpleType” MAY be of any simple data type,
including (but not limited to) any of the other types listed in this table.
Following the SOAP specification [8], elements specified as being of type “anySimpleType” MUST
include a type attribute to indicate the actual type of the element. For example:
<ParameterValueStruct>
<Name>InternetGatewayDevice.ProvisioningCode</Name>
<Value xsi:type="xsd:string">code12345</Value>
</ParameterValueStruct>
The namespaces xsi and xsd used above are as defined in [8].
The methods used in this specification also make use of structures and arrays (in some cases containing
mixed types). Array elements are indicated with square brackets after the data type. If specified, the
maximum length of the array would be indicated within the brackets. If the maximum length is not
specified, unless otherwise indicated, there is no fixed requirement on the number of elements the recipient
will be able to accommodate. A request with an array too large for the recipient to accommodate SHOULD
result in the “Resources exceeded” fault code. Unless otherwise specified, the order of items in an array
MUST NOT have any effect on the interpretation of the contents of the array.
A.3.1.1 GetRPCMethods
This method MAY be used by a CPE or ACS to discover the set of methods supported by the ACS or CPE
it is in communication with. This list MUST include all the supported methods, both standard methods
(those defined in this specification or a subsequent version) and vendor-specific methods. The receiver of
the response MUST ignore any unrecognized methods.
Vendor-specific methods MUST be in the form X_<VENDOR>_MethodName, where <VENDOR> is a
unique vendor identifier, which MAY be either an OUI or a domain name. The OUI or domain name used
for a given vendor-specific method MUST be one that is assigned to the organization that defined this
method (which is not necessarily the same as the vendor of the CPE or ACS). An OUI is an
organizationally unique identifier as defined in [9], which MUST formatted as a 6 hexadecimal-digit OUI
(organizationally unique identifier), with all upper-case letters and any leading zeros included. A domain
name MUST be upper case with each dot (“.”) replaced with a hyphen or underscore. Examples:
X_012345_MyMethod, X_ACME_COM_MyMethod.
The calling arguments for this method are defined in Table 10. The arguments in the response are defined
in Table 11.
The following fault codes are defined for this method for response from a CPE: 9001, 9002.
The following fault codes are defined for this method for response from an ACS: 8001, 8002, 8005.
A.3.2.1 SetParameterValues
This method MAY be used by an ACS to modify the value of one or more CPE Parameters. The calling
arguments for this method are defined in Table 12. The arguments in the response are defined in Table 13.
On successful receipt of a SetParameterValues RPC, the CPE MUST apply the changes to all of the
specified Parameters atomically. That is, either all of the value changes are applied together, or none of the
changes are applied at all. In the latter case, the CPE MUST return a fault response indicating the reason
for the failure to apply the changes. The CPE MUST NOT apply any of the specified changes without
applying all of them. This requirement MUST hold even if the CPE experiences a crash during the process
of applying the changes. The order of Parameters listed in the ParameterList has no significance—the
application of value changes to the CPE MUST be independent from the order in which they are listed.
If the request is valid, it is strongly RECOMMENDED that the CPE apply the requested changes prior to
sending the SetParameterValues response. If it does so, the CPE MUST set the value of Status in the
response to 0 (zero), indicating that the changes have been applied.
If the CPE requires the session to be terminated before applying some or all of the Parameter values, the
CPE MUST reply before all Parameter values have been applied, and thus MUST set the value of Status in
the response to 1. In this case, the reply MUST come only after all validation of the request has been
completed and the new values have been appropriately saved such that they will definitely be applied as
soon as physically possible after the session has terminated. Once the CPE issues the SetParameterValues
response, all changes associated with the corresponding request (including the new ParameterKey) MUST
be available for subsequent commands to operate on, regardless of whether the changes have been applied
or not. In particular, the use of GetParameterValues to read a parameter modified by an earlier
SetParameterValues MUST return the modified value, even if that value has not yet been applied.
If the value of Status in the SetParameterValues response is 1, the requested changes MUST be applied as
soon as physically possible after the session has terminated, and no later than the beginning of the next
session. Note that if a CPE requires a reboot to cause the changes to be applied, the CPE MUST initiate
that reboot on its own after the termination of the session. Because some CPE will not require a reboot in
these circumstances, an ACS SHOULD NOT call the Reboot method as a result of modifying the CPE’s
configuration, since this would result in an unnecessary reboot. Note also that if application of a
configuration change by the CPE would result in a service disruption (for example, if the CPE requires a
reboot to apply the requested change), it is not the responsibility of the CPE to avoid or delay such a
disruption. To minimize the impact of such a disruption, the ACS MAY delay requesting such a
configuration change until an appropriate time, but this is entirely at the ACS’s discretion.
The use of the Status value is independent between successive SetParameterValues, AddObject, or
DeleteObject requests within the same session. The use of a Status value of 1 in response to one request
does not necessarily imply that subsequent requests in the same session will also respond in the same way.
The ACS MAY set parameter values in any combination or order of its choosing using one or multiple
SetParameterValues RPCs.
All modifications to a CPE’s configuration resulting from use of the SetParameterValues method MUST be
retained across reboots of the CPE.
The ParameterValueStruct structure is defined in Table 14.
The following fault codes are defined for this method: 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9008.
If there is a fault due to one or more parameters in error, the fault response for this method MUST include a
SetParameterValuesFault element for each parameter in error. In this case, the primary fault code indicated
for the overall fault response MUST be Invalid Arguments (9003).
The CPE MUST reject an attempt to set values using the SetParameterValues RPC that would result in an
invalid configuration, where an invalid configuration is defined as one of the following:
• A parameter value or combination of parameter values that are explicitly prohibited in the definition of
the data model(s) supported by the CPE.
• A parameter value or combination of parameter values that are not supported by the CPE and are not
required by the data model(s) or profiles (as defined in [13]) supported by the CPE.
In both of the above cases, the response from the CPE MUST include a SetParameterValuesFault element
for each such parameter, indicating the Invalid Parameter Value fault code (9007).
The CPE MUST NOT impose any additional configuration restrictions beyond the exceptions described
above and restrictions otherwise explicitly permitted or required by the CPE WAN Management Protocol.
A.3.2.2 GetParameterValues
This method MAY be used by an ACS to obtain the value of one or more CPE Parameters. The calling
arguments for this method are defined in Table 15. The arguments in the response are defined in Table 16.
The following fault codes are defined for this method: 9001, 9002, 9003, 9004, 9005.
If the fault is caused by one or more invalid parameter names in the ParameterNames array, the Invalid
Parameter Name fault code (9005) MUST be used instead of the more general Invalid Arguments fault
code (9003). The value of a ParameterNames element MUST be considered invalid if it does not exactly
match either the name of a parameter currently present in the CPE’s data model (if the ParameterNames
element does not end with a dot) or the name of an object currently present in the CPE’s data model (if
ParameterNames element ends with a dot).
A.3.2.3 GetParameterNames
This method MAY be used by an ACS to discover the Parameters accessible on a particular CPE. The
calling arguments for this method are defined in Table 17. The arguments in the response are defined in
Table 18.
The following fault codes are defined for this method: 9001, 9002, 9003, 9005.
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 CPE’s data model. If NextLevel is true and ParameterPath is a Parameter
name rather than a partial path, the CPE MUST return a fault response with the Invalid Arguments fault
code (9003).
A.3.2.4 SetParameterAttributes
This method MAY be used by an ACS to modify attributes associated with one or more CPE Parameter.
The calling arguments for this method are defined in Table 20. The arguments in the response are defined
in Table 21.
On successful receipt of a SetParameterAttributes RPC, the CPE MUST apply the changes to all of the
specified Parameters immediately and atomically. That is, either all of the attribute changes are applied
together, or none of the changes are applied at all. In the latter case, the CPE MUST return a fault response
indicating the reason for the failure to apply the changes. The CPE MUST NOT apply any of the specified
changes without applying all of them. This requirement MUST hold even if the CPE experiences a crash
during the process of applying the changes.
The ACS MAY set parameter attributes in any combination or order of its choosing using one or multiple
SetParameterAttributes RPCs.
If there is more than one entry in the ParameterList array, and the SetParameterAttributes request is
successful as described above, the CPE MUST apply the attribute changes in the order of the ParameterList
array. That is, if multiple entries in the ParameterList would result in modifying the same attribute of a
given parameter, the attribute value specified later in the ParameterList array MUST overwrite the attribute
value specified earlier in the array. This behavior might seem to be inconsistent with that of
SetParameterValues, for which it is an error to specify the same parameter name more than once; this
difference is because, unlike SetParameterValues, SetParameterAttributes permits a mixture of full and
partial paths to be specified.
All modifications to a CPE’s configuration resulting from use of the SetParameterAttributes method MUST
be retained across reboots of the CPE.
A CPE MUST NOT allow any entity other than the ACS to modify attributes of a parameter.
The following fault codes are defined for this method: 9001, 9002, 9003, 9004, 9005, 9009.
If the fault is caused by an invalid parameter name, the Invalid Parameter Name fault code (9005) MUST
be used instead of the more general Invalid Arguments fault code (9003). If the CPE does not support
Active Notifications on a parameter deemed inappropriate (as described above), it MUST reject an attempt
to enable Active Notification for that parameter by responding with fault 9009 (Notification request
rejected). If Active notification is being enabled for parameter(s) specified via a partial path and the CPE
does not support Active notification for one or more such parameters deemed inappropriate below this
point in the naming hierarchy, the CPE MUST reject the request and respond with fault code 9009
(Notification request rejected).
A.3.2.5 GetParameterAttributes
This method MAY be used by an ACS to read the attributes associated with one or more CPE Parameter.
The calling arguments for this method are defined in Table 23. The arguments in the response are defined
in Table 24.
The following fault codes are defined for this method: 9001, 9002, 9003, 9004, 9005.
If the fault is caused by an invalid parameter name, the Invalid Parameter Name fault code (9005) MUST
be used instead of the more general Invalid Arguments fault code (9003).
A.3.2.6 AddObject
This method MAY be used by the ACS to create a new instance of a multi-instance object—a collection of
Parameters and/or other objects for which multiple instances are defined. The method call takes as an
argument the path name of the collection of objects for which a new instance is to be created. For example:
Top.Group.Object.
This path name does not include an instance number for the object to be created. That instance number is
assigned by the CPE and returned in the response. Once assigned the instance number of an object cannot
be changed and persists until the object is deleted using the DeleteObject method. After creation,
Parameters or sub-objects within the object are referenced by the path name appended with the instance
number. For example, if the AddObject method returned an instance number of 2, a Parameter within this
instance can then be referred to by the path:
Top.Group.Object.2.Parameter
On creation of an object using this method, the Parameters contained within the object MUST be set to
their default values and the associated attributes MUST be set to the following:
• Notification is set to zero (notification off) unless otherwise specified in the appropriate data
model definition
• AccessList includes all defined entities
The calling arguments for this method are defined in Table 26. The arguments in the response are defined
in Table 27.
Addition of an object MUST be done atomically. That is, either all of the Parameters and sub-objects are
added together, or none are added. In the latter case the CPE MUST return a fault response indicating the
reason for the failure to add the object. The CPE MUST NOT add any contained Parameters or sub-objects
as a result of this method call without adding all of them (all Parameters and sub-objects supported by that
CPE). This requirement MUST hold even if the CPE experiences a crash during the process of performing
the addition.
If the request is valid, it is strongly RECOMMENDED that the CPE apply the object creation prior to
sending the AddObject response. If it does so, the CPE MUST set the value of Status in the response to 0
(zero), indicating that the object creation has been applied.
If the CPE requires the session to be terminated before applying the object creation, the CPE MUST reply
before the object creation has been applied, and thus MUST set the value of Status in the response to 1. In
this case, the reply MUST come only after all validation of the request has been completed and the object
creation request has been appropriately saved such that it will definitely be applied as soon as physically
possible after the session has terminated. Once the CPE issues the AddObject response, all changes
associated with the corresponding request (including the new ParameterKey) MUST be available for
subsequent commands to operate on, regardless of whether the changes have been applied or not. In
particular, even if the object creation has not yet been applied, the CPE MUST allow the use of
SetParameterValues, GetParameterValues, SetParameterAttributes, and GetParameterAttributes to operate
on parameters within the newly created object, as well as the use of AddObject to create a sub-object within
the newly created object, and DeleteObject to delete either a sub-object or the newly created object itself.
If the value of Status in the AddObject response is 1, the requested object creation MUST be applied as
soon as physically possible after the session has terminated, and no later than the beginning of the next
session. Note that if a CPE requires a reboot to cause the object creation to be applied, the CPE MUST
initiate that reboot on its own after the termination of the session. Because some CPE will not require a
reboot in these circumstances, an ACS SHOULD NOT call the Reboot method as a result of modifying the
CPE’s configuration, since this would result in an unnecessary reboot. Note also that if application of a
configuration change by the CPE would result in a service disruption (for example, if the CPE requires a
reboot to apply the requested change), it is not the responsibility of the CPE to avoid or delay such a
disruption. To minimize the impact of such a disruption, the ACS MAY delay requesting such a
configuration change until an appropriate time, but this is entirely at the ACS’s discretion.
The use of the Status value is independent between successive SetParameterValues, AddObject, or
DeleteObject requests within the same session. The use of a Status value of 1 in response to one request
does not necessarily imply that subsequent requests in the same session will also respond in the same way.
All modifications to a CPE’s configuration resulting from use of the AddObject method MUST be retained
across reboots of the CPE. This MUST include the values of object instance numbers.
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.
A.3.2.7 DeleteObject
This method is used to remove a particular instance of an object. This method call takes as an argument the
path name of the object instance including the instance number. For example:
Top.Group.Object.2.
If this method call is successful, the specified instance of this object is subsequently unavailable for access
and the CPE MUST discard the state previously associated with all Parameters (values and attributes) and
sub-objects contained within this instance.
When an object instance is deleted, the instance numbers associated with any other instances of the same
collection of objects remain unchanged. Thus, the instance numbers of object instances in a collection
might not be consecutive.
The calling arguments for this method are defined in Table 28. The arguments in the response are defined
in Table 29.
If the request is valid, it is strongly RECOMMENDED that the CPE apply the object deletion prior to
sending the DeleteObject response. If it does so, the CPE MUST set the value of Status in the response to 0
(zero), indicating that the object deletion has been applied.
If the CPE requires the session to be terminated before applying the object deletion, the CPE MUST reply
before the object deletion has been applied, and thus MUST set the value of Status in the response to 1. In
this case, the reply MUST come only after all validation of the request has been completed and the object
deletion request has been appropriately saved such that it will definitely be applied as soon as physically
possible after the session has terminated. Once the CPE issues the DeleteObject response, all changes
associated with the corresponding request (including the new ParameterKey) MUST be available for
subsequent commands to operate on, regardless of whether the changes have been applied or not. In
particular, the use of GetParameterNames and GetParameterValues MUST indicate the absence of the
deleted object, and any attempt to modify or read parameters or sub-objects within the deleted object
MUST fail.
If the value of Status in the DeleteObject response is 1, the requested object deletion MUST be applied as
soon as physically possible after the session has terminated, and no later than the beginning of the next
session. Note that if a CPE requires a reboot to cause the object deletion to be applied, the CPE MUST
initiate that reboot on its own after the termination of the session. Because some CPE will not require a
reboot in these circumstances, an ACS SHOULD NOT call the Reboot method as a result of modifying the
CPE’s configuration, since this would result in an unnecessary reboot. Note also that if application of a
configuration change by the CPE would result in a service disruption (for example, if the CPE requires a
reboot to apply the requested change), it is not the responsibility of the CPE to avoid or delay such a
disruption. To minimize the impact of such a disruption, the ACS MAY delay requesting such a
configuration change until an appropriate time, but this is entirely at the ACS’s discretion.
The use of the Status value is independent between successive SetParameterValues, AddObject, or
DeleteObject requests within the same session. The use of a Status value of 1 in response to one request
does not necessarily imply that subsequent requests in the same session will also respond in the same way.
On deletion, all Parameters and sub-objects contained within this object MUST be removed atomically.
That is, either all of the Parameters and sub-objects are removed together, or none are removed at all. In
the latter case, the CPE MUST return a fault response indicating the reason for the failure to delete the
object. The CPE MUST NOT remove any contained Parameters or sub-objects as a result of this method
call without removing all of them. This requirement MUST hold even if the CPE experiences a crash
during the process of performing the deletion.
All modifications to a CPE’s configuration resulting from use of the DeleteObject method MUST be
retained across reboots of the CPE.
The following fault codes are defined for this method: 9001, 9002, 9003, 9005.
If the fault is caused by an invalid ObjectName value, the Invalid Parameter Name fault code (9005)
MUST be used instead of the more general Invalid Arguments fault code (9003). The ObjectName value
MUST be considered invalid if it does not exactly match the name of a single instance of a multi-instance
object currently present in the CPE’s data model.
A.3.2.8 Download
This method MAY be used by the ACS to cause the CPE to download a specified file from the designated
location. The calling arguments for this method are defined in Table 30. The arguments in the response
are defined in Table 31.
When a download is initiated using this method, the CPE MUST indicate successful or unsuccessful
completion of the download using one of the following three means:
• A DownloadResponse with the Status argument having a value of zero (indicating success), or a fault
response to the Download request (indicating failure).
• A TransferComplete message sent later in the same session as the Download request (indicating either
success or failure). In this case, the Status argument in the corresponding DownloadResponse MUST
have a value of one.
• A TransferComplete message sent in a subsequent session (indicating either success or failure). In this
case, the Status argument in the corresponding DownloadResponse MUST have a value of one.
Regardless of which means is used, the CPE MUST only indicate successful completion of the download
after the downloaded file has been both successfully transferred and applied. While the criterion used to
determine when a file has been successfully applied is specific to the CPE’s implementation, the CPE
SHOULD consider a downloaded file to be successfully applied only after the file is installed and in use as
intended.
In the particular case that the downloaded file is a software image, the CPE MUST consider the
downloaded file to be successfully applied only after the new software image is actually installed and
operational. If the software image replaces the overall software of the CPE (which would typically require
a reboot to install and begin execution), the SoftwareVersion represented in the data model MUST already
reflect the updated software image in the session in which the CPE sends a TransferComplete indicating
successful download.
If the CPE requires a reboot to apply the downloaded file, then the only appropriate means of indicating
successful completion is the third option listed above—a TransferComplete message sent in a subsequent
session.
If the file cannot be successfully downloaded or applied, the CPE MUST NOT attempt to retry the file
download on its own initiative, but instead MUST report the failure of the download to the ACS using any
of the three means listed above. Upon the ACS being informed of the failure of a download, the ACS
MAY subsequently attempt to reinitiate the download by issuing a new Download request.
If the CPE receives one or more Download requests before performing a previously requested download,
the CPE MUST queue all requested downloads and perform each of them as closely as possible to the
requested time (based on the value of the DelaySeconds argument and the time of the request). Queued
downloads MUST be retained across reboots of the CPE. The CPE MUST be able to queue a minimum of
three file transfers (downloads and uploads).
For each download performed, the CPE MUST send a distinct TransferComplete. Note that the order in
which a series of requested downloads will be performed might differ from the order of the corresponding
requests due to differing values of DelaySeconds. For example, an ACS could request a download with
DelaySeconds equal to one hour, then five minutes later request a second download with DelaySeconds
equal to one minute. In this case, the CPE would perform the second download before the first.
All modifications to a CPE’s configuration resulting from use of the Download method MUST be retained
across reboots of the CPE.
The following fault codes are defined for this method: 9000, 9001, 9002, 9003, 9004, 9010, 9012, 9013.
If an attempt is made to queue an additional download when the CPE’s file transfer queue is already full,
the CPE MUST respond with fault 9004 (Resources exceeded). If the CPE detects the presence of the
“userinfo” component in the file source URL, it SHOULD reject the Download request with the fault code
9003 (Invalid arguments). If the CPE rejects the Download request because the FileSize argument exceeds
the available space on the device, it MUST use the Download Failure (9010) fault code.
A.3.2.9 Reboot
This method causes the CPE to reboot, and calls for use of extreme caution. The CPE MUST send the
method response and complete the remainder of the session prior to rebooting. The calling arguments for
this method are defined in Table 32. The arguments in the response are defined in Table 33.
Note – Multiple invocations of this method within a single session MUST result in only a single
reboot. In this case the Inform following the reboot would be expected to contain a single “1
BOOT” EventCode and an “M Reboot” EventCode for each method invocation.
This method is primarily intended for troubleshooting purposes. This method is not intended for use by an
ACS to initiate a reboot after modifying the CPE’s configuration (e.g., setting CPE parameters or initiating
a download). If a CPE requires a reboot after its configuration is modified, the CPE MUST initiate that
reboot on its own after the termination of the session. Because some CPE will not require a reboot in these
circumstances, an ACS SHOULD NOT call the Reboot method as a result of modifying the CPE’s
configuration, since this would result in an unnecessary reboot.
The following fault codes are defined for this method: 9001, 9002, 9003.
A.3.3.1 Inform
A CPE MUST call the Inform method to initiate a transaction sequence whenever a session with an ACS
is established. The calling arguments for this method are defined in Table 34. The arguments in the
response are defined in Table 35.
The following fault codes are defined for this method: 8001, 8002, 8003, 8004, 8005.
An ACS that receives an Inform without a “0 BOOTSTRAP” EventCode from a CPE from which it has not
previously received an Inform with the “0 BOOTSTRAP” EventCode MAY, at its discretion, respond with
a fault code of 8003 (Invalid arguments).
A.3.3.2 TransferComplete
This method informs the ACS of the completion (either successful or unsuccessful) of a file transfer
initiated by an earlier Download or Upload method call. This MUST be called only when the associated
Download or Upload response indicated that the transfer had not yet completed at that time (indicated by a
non-zero value of the Status argument in the response). In such cases, it MAY be called either later in the
same session in which the transfer was initiated or in any subsequent session. Note that in order for it to be
called within the same session in which the transfer was initiated, the CPE will have been sent the
InformResponse and Download request while HoldRequests was true. When used, this method MUST be
called only after the transfer has successfully completed, and in the case of a download, the downloaded
file has been successfully applied, or after the transfer has failed. If this method fails, the CPE MUST NOT
regard the ACS as having been informed of the completion of the file transfer, and MUST attempt to call
the method again, either in the current session or in a new session, subject to the event delivery rules of
section 3.7.1.5. The calling arguments for this method are defined in Table 38. The arguments in the
response are defined in Table 39.
The following fault codes are defined for this method: 8000, 8001, 8002, 8003, 8004, 8005.
A.4.1.1 GetQueuedTransfers
This method MAY be used by an ACS to determine the status of previously requested downloads or
uploads. The calling arguments for this method are defined in Table 41. The arguments in the response are
defined in Table 42.
The following fault codes are defined for this method: 9000, 9001, 9002.
A.4.1.2 ScheduleInform
This method MAY be used by an ACS to request the CPE to schedule a one-time Inform method call
(separate from its periodic Inform method calls) sometime in the future. The calling arguments for this
method are defined in Table 44. The arguments in the response are defined in Table 45.
The following fault codes are defined for this method: 9000, 9001, 9002, 9003.
A.4.1.3 SetVouchers
This method MAY be used by an ACS to set one or more option Vouchers in the CPE. The calling
arguments for this method are defined in Table 46. The arguments in the response are defined in Table 47.
The following fault codes are defined for this method: 9000, 9001, 9002, 9003, 9004.
A.4.1.4 GetOptions
This method MAY be used by an ACS to obtain a list of the options currently set in a CPE, and their
associated state information. The calling arguments for this method are defined in Table 48. The
arguments in the response are defined in Table 49.
The following fault codes are defined for this method: 9000, 9001, 9002, 9003.
A.4.1.5 Upload
This method MAY be used by the ACS to cause the CPE to upload a specified file to the designated
location. The calling arguments for this method are defined in Table 51. The arguments in the response
are defined in Table 52.
If the file cannot be successfully uploaded, the CPE MUST NOT attempt to retry the file upload on its own
initiative, but instead MUST report the failure of the upload to the ACS via either the Upload response (if it
has not yet been sent) or the TransferComplete method. Upon the ACS being informed of the failure of an
upload, the ACS MAY subsequently attempt to reinitiate the upload by issuing a new Upload request.
If the CPE receives one or more Upload requests before performing a previously requested upload, the CPE
MUST queue all requested uploads and perform each of them as closely as possible to the requested time
(based on the value of the DelaySeconds argument and the time of the request). Queued uploads MUST be
retained across reboots of the CPE. The CPE MUST be able to queue a minimum of three file transfers
(downloads and uploads).
For each upload performed, the CPE MUST send a distinct TransferComplete. Note that the order in which
a series of requested uploads will be performed might differ from the order of the corresponding requests
due to differing values of DelaySeconds. For example, an ACS could request an upload with
DelaySeconds equal to one hour, then five minutes later request a second upload with DelaySeconds equal
to one minute. In this case, the CPE would perform the second upload before the first.
The following fault codes are defined for this method: 9000, 9001, 9002, 9003, 9004, 9011, 9012, 9013.
If an attempt is made to queue an upload when the file transfer queue is already full, the CPE MUST
respond with fault 9004 (Resources exceeded). If the CPE detects the presence of the “userinfo”
component in the file destination URL, it SHOULD reject the Upload request with the fault code 9003
(Invalid arguments).
A.4.1.6 FactoryReset
This method resets the CPE to its factory default state, and calls for use with extreme caution. The CPE
MUST initiate the factory reset procedure only after successful completion of the session. The calling
arguments for this method are defined in Table 53. The arguments in the response are defined in Table 54.
The following fault codes are defined for this method: 9000, 9001, 9002, 9003.
A.4.2.1 Kicked
The CPE calls this method whenever the CPE is “kicked” as described in Annex D. The calling arguments
for this method are defined in Table 55. The arguments in the response are defined in Table 56.
If this method returns a fault, the CPE SHOULD redirect the browser to an error page resident on the CPE
device.
The following fault codes are defined for this method: 8000, 8001, 8002, 8003, 8005.
A.4.2.2 RequestDownload
This method allows the CPE to request a file download from the ACS. On reception of this request, the
ACS MAY call the Download method to initiate the download. The calling arguments for this method
are defined in Table 57. The arguments in the response are defined in Table 58.
If the ACS receives arguments that it does not understand, it MUST ignore the
unknown arguments, but process the request using the arguments that it does
understand.
The following fault codes are defined for this method: 8000, 8001, 8002, 8003, 8005.
10
The specified Type MUST be used to determine the value of the SOAP faultcode element as described in
section 3.5.
72 <xs:documentation>Invalid arguments</xs:documentation>
73 </xs:annotation>
74 </xs:enumeration>
75 <xs:enumeration value="9004">
76 <xs:annotation>
77 <xs:documentation>Resources exceeded</xs:documentation>
78 </xs:annotation>
79 </xs:enumeration>
80 <xs:enumeration value="9005">
81 <xs:annotation>
82 <xs:documentation>Invalid parameter name</xs:documentation>
83 </xs:annotation>
84 </xs:enumeration>
85 <xs:enumeration value="9006">
86 <xs:annotation>
87 <xs:documentation>Invalid parameter type</xs:documentation>
88 </xs:annotation>
89 </xs:enumeration>
90 <xs:enumeration value="9007">
91 <xs:annotation>
92 <xs:documentation>Invalid parameter value</xs:documentation>
93 </xs:annotation>
94 </xs:enumeration>
95 <xs:enumeration value="9008">
96 <xs:annotation>
97 <xs:documentation>Attempt to set a non-writable parameter</xs:documentation>
98 </xs:annotation>
99 </xs:enumeration>
100 <xs:enumeration value="9009">
101 <xs:annotation>
102 <xs:documentation>Notification request rejected</xs:documentation>
103 </xs:annotation>
104 </xs:enumeration>
105 <xs:enumeration value="9010">
106 <xs:annotation>
107 <xs:documentation>Download failure</xs:documentation>
108 </xs:annotation>
109 </xs:enumeration>
110 <xs:enumeration value="9011">
111 <xs:annotation>
112 <xs:documentation>Upload failure</xs:documentation>
113 </xs:annotation>
114 </xs:enumeration>
115 <xs:enumeration value="9012">
116 <xs:annotation>
117 <xs:documentation>File transfer server authentication failure</xs:documentation>
118 </xs:annotation>
119 </xs:enumeration>
120 <xs:enumeration value="9013">
121 <xs:annotation>
122 <xs:documentation>Unsupported protocol for file transfer</xs:documentation>
123 </xs:annotation>
124 </xs:enumeration>
125 </xs:restriction>
126 </xs:simpleType>
127 <xs:simpleType>
128 <xs:restriction base="xs:unsignedInt">
129 <xs:annotation>
130 <xs:documentation>CPE Vendor fault codes</xs:documentation>
131 </xs:annotation>
132 <xs:minInclusive value="9800"/>
133 <xs:maxInclusive value="9899"/>
134 </xs:restriction>
135 </xs:simpleType>
136 <xs:simpleType>
137 <xs:restriction base="xs:unsignedInt">
138 <xs:annotation>
139 <xs:documentation>ACS fault codes</xs:documentation>
140 </xs:annotation>
141 <xs:enumeration value="8000">
142 <xs:annotation>
214 </xs:restriction>
215 </xs:simpleType>
216 </xs:element>
217 </xs:sequence>
218 <xs:attribute ref="soapenc:arrayType" use="required"/>
219 </xs:restriction>
220 </xs:complexContent>
221 </xs:complexType>
222
223 <xs:complexType name="FaultStruct">
224 <xs:annotation>
225 <xs:documentation>Fault information for TransferComplete</xs:documentation>
226 </xs:annotation>
227 <xs:sequence>
228 <xs:element name="FaultCode">
229 <xs:simpleType>
230 <xs:restriction base="xs:unsignedInt">
231 <xs:annotation>
232 <xs:documentation>Transfer fault codes</xs:documentation>
233 </xs:annotation>
234 <xs:enumeration value="0">
235 <xs:annotation>
236 <xs:documentation>No fault</xs:documentation>
237 </xs:annotation>
238 </xs:enumeration>
239 <xs:enumeration value="9001">
240 <xs:annotation>
241 <xs:documentation>Request denied (no reason specified)</xs:documentation>
242 </xs:annotation>
243 </xs:enumeration>
244 <xs:enumeration value="9002">
245 <xs:annotation>
246 <xs:documentation>Internal error</xs:documentation>
247 </xs:annotation>
248 </xs:enumeration>
249 <xs:enumeration value="9010">
250 <xs:annotation>
251 <xs:documentation>Download failure</xs:documentation>
252 </xs:annotation>
253 </xs:enumeration>
254 <xs:enumeration value="9011">
255 <xs:annotation>
256 <xs:documentation>Upload failure</xs:documentation>
257 </xs:annotation>
258 </xs:enumeration>
259 <xs:enumeration value="9012">
260 <xs:annotation>
261 <xs:documentation>File transfer server authentication failure</xs:documentation>
262 </xs:annotation>
263 </xs:enumeration>
264 </xs:restriction>
265 </xs:simpleType>
266 </xs:element>
267 <xs:element name="FaultString">
268 <xs:simpleType>
269 <xs:restriction base="xs:string">
270 <xs:maxLength value="256"/>
271 </xs:restriction>
272 </xs:simpleType>
273 </xs:element>
274 </xs:sequence>
275 </xs:complexType>
276
277 <xs:complexType name="DeviceIdStruct">
278 <xs:sequence>
279 <xs:element name="Manufacturer">
280 <xs:simpleType>
281 <xs:restriction base="xs:string">
282 <xs:maxLength value="64"/>
283 </xs:restriction>
284 </xs:simpleType>
285 </xs:element>
286 <xs:element name="OUI">
287 <xs:simpleType>
288 <xs:restriction base="xs:string">
289 <xs:length value="6"/>
290 <xs:pattern value="[0-9A-F]{6}"/>
291 </xs:restriction>
292 </xs:simpleType>
293 </xs:element>
294 <xs:element name="ProductClass">
295 <xs:simpleType>
296 <xs:restriction base="xs:string">
297 <xs:maxLength value="64"/>
298 </xs:restriction>
299 </xs:simpleType>
300 </xs:element>
301 <xs:element name="SerialNumber">
302 <xs:simpleType>
303 <xs:restriction base="xs:string">
304 <xs:maxLength value="64"/>
305 </xs:restriction>
306 </xs:simpleType>
307 </xs:element>
308 </xs:sequence>
309 </xs:complexType>
310
311 <xs:complexType name="EventStruct">
312 <xs:sequence>
313 <xs:element name="EventCode">
314 <xs:simpleType>
315 <xs:restriction base="xs:string">
316 <xs:maxLength value="64"/>
317 <xs:pattern value="0 BOOTSTRAP"/>
318 <xs:pattern value="1 BOOT"/>
319 <xs:pattern value="2 PERIODIC"/>
320 <xs:pattern value="3 SCHEDULED"/>
321 <xs:pattern value="4 VALUE CHANGE"/>
322 <xs:pattern value="5 KICKED"/>
323 <xs:pattern value="6 CONNECTION REQUEST"/>
324 <xs:pattern value="7 TRANSFER COMPLETE"/>
325 <xs:pattern value="8 DIAGNOSTICS COMPLETE"/>
326 <xs:pattern value="9 REQUEST DOWNLOAD"/>
327 <xs:pattern value="M Reboot"/>
328 <xs:pattern value="M ScheduleInform"/>
329 <xs:pattern value="M Download"/>
330 <xs:pattern value="M Upload"/>
331 <xs:pattern value="M X_\S+"/> <!-- no spaces in method names -->
332 <xs:pattern value="X [0-9A-F]{6} .*"/>
333 </xs:restriction>
334 </xs:simpleType>
335 </xs:element>
336 <xs:element name="CommandKey" type="tns:CommandKeyType"/>
337 </xs:sequence>
338 </xs:complexType>
339 <xs:complexType name="EventList">
340 <xs:complexContent>
341 <xs:restriction base="soapenc:Array">
342 <xs:sequence>
343 <xs:element name="EventStruct" type="tns:EventStruct" minOccurs="0" maxOccurs="64"/>
344 </xs:sequence>
345 <xs:attribute ref="soapenc:arrayType" use="required"/>
346 </xs:restriction>
347 </xs:complexContent>
348 </xs:complexType>
349
350 <xs:complexType name="ParameterValueStruct">
351 <xs:sequence>
352 <xs:element name="Name">
353 <xs:simpleType>
354 <xs:restriction base="xs:string">
355 <xs:maxLength value="256"/>
356 </xs:restriction>
357 </xs:simpleType>
358 </xs:element>
359 <xs:element name="Value" type="xs:anySimpleType"/>
360 </xs:sequence>
361 </xs:complexType>
362 <xs:complexType name="ParameterValueList">
363 <xs:complexContent>
364 <xs:restriction base="soapenc:Array">
365 <xs:sequence>
366 <xs:element name="ParameterValueStruct" type="tns:ParameterValueStruct" minOccurs="0"
367 maxOccurs="unbounded"/>
368 </xs:sequence>
369 <xs:attribute ref="soapenc:arrayType" use="required"/>
370 </xs:restriction>
371 </xs:complexContent>
372 </xs:complexType>
373
374 <xs:complexType name="ParameterInfoStruct">
375 <xs:sequence>
376 <xs:element name="Name">
377 <xs:simpleType>
378 <xs:restriction base="xs:string">
379 <xs:maxLength value="256"/>
380 </xs:restriction>
381 </xs:simpleType>
382 </xs:element>
383 <xs:element name="Writable" type="xs:boolean"/>
384 </xs:sequence>
385 </xs:complexType>
386 <xs:complexType name="ParameterInfoList">
387 <xs:complexContent>
388 <xs:restriction base="soapenc:Array">
389 <xs:sequence>
390 <xs:element name="ParameterInfoStruct" type="tns:ParameterInfoStruct" minOccurs="0"
391 maxOccurs="unbounded"/>
392 </xs:sequence>
393 <xs:attribute ref="soapenc:arrayType" use="required"/>
394 </xs:restriction>
395 </xs:complexContent>
396 </xs:complexType>
397
398 <xs:complexType name="ParameterNames">
399 <xs:complexContent>
400 <xs:restriction base="soapenc:Array">
401 <xs:sequence>
402 <xs:element name="string" minOccurs="1" maxOccurs="unbounded">
403 <xs:simpleType>
404 <xs:restriction base="xs:string">
405 <xs:maxLength value="256"/>
406 </xs:restriction>
407 </xs:simpleType>
408 </xs:element>
409 </xs:sequence>
410 <xs:attribute ref="soapenc:arrayType" use="required"/>
411 </xs:restriction>
412 </xs:complexContent>
413 </xs:complexType>
414
415 <xs:simpleType name="ParameterKeyType">
416 <xs:restriction base="xs:string">
417 <xs:maxLength value="32"/>
418 </xs:restriction>
419 </xs:simpleType>
420
421 <xs:complexType name="AccessList">
422 <xs:complexContent>
423 <xs:restriction base="soapenc:Array">
424 <xs:sequence>
425 <xs:element name="string" minOccurs="0" maxOccurs="unbounded">
426 <xs:simpleType>
569 </xs:sequence>
570 <xs:attribute ref="soapenc:arrayType" use="required"/>
571 </xs:restriction>
572 </xs:complexContent>
573 </xs:complexType>
574
575 <xs:complexType name="OptionStruct">
576 <xs:sequence>
577 <xs:element name="OptionName">
578 <xs:simpleType>
579 <xs:restriction base="xs:string">
580 <xs:maxLength value="64"/>
581 </xs:restriction>
582 </xs:simpleType>
583 </xs:element>
584 <xs:element name="VoucherSN" type="xs:unsignedInt"/>
585 <xs:element name="State">
586 <xs:simpleType>
587 <xs:restriction base="xs:unsignedInt">
588 <xs:enumeration value="0">
589 <xs:annotation>
590 <xs:documentation>Option is disabled and not setup</xs:documentation>
591 </xs:annotation>
592 </xs:enumeration>
593 <xs:enumeration value="1">
594 <xs:annotation>
595 <xs:documentation>Option is enabled and not setup</xs:documentation>
596 </xs:annotation>
597 </xs:enumeration>
598 <xs:enumeration value="2">
599 <xs:annotation>
600 <xs:documentation>Option is disabled and setup</xs:documentation>
601 </xs:annotation>
602 </xs:enumeration>
603 <xs:enumeration value="3">
604 <xs:annotation>
605 <xs:documentation>Option is enabled and setup</xs:documentation>
606 </xs:annotation>
607 </xs:enumeration>
608 </xs:restriction>
609 </xs:simpleType>
610 </xs:element>
611 <xs:element name="Mode">
612 <xs:simpleType>
613 <xs:restriction base="xs:int">
614 <xs:enumeration value="0">
615 <xs:annotation>
616 <xs:documentation>0 - Disabled</xs:documentation>
617 </xs:annotation>
618 </xs:enumeration>
619 <xs:enumeration value="1">
620 <xs:annotation>
621 <xs:documentation>1 - Enabled with expiration</xs:documentation>
622 </xs:annotation>
623 </xs:enumeration>
624 <xs:enumeration value="2">
625 <xs:annotation>
626 <xs:documentation>2 - Enabled without expiration</xs:documentation>
627 </xs:annotation>
628 </xs:enumeration>
629 </xs:restriction>
630 </xs:simpleType>
631 </xs:element>
632 <xs:element name="StartDate" type="xs:dateTime"/>
633 <xs:element name="ExpirationDate" type="xs:dateTime" minOccurs="0"/>
634 <xs:element name="IsTransferable">
635 <xs:simpleType>
636 <xs:restriction base="xs:int">
637 <xs:enumeration value="0">
638 <xs:annotation>
639 <xs:documentation>Non-transferable</xs:documentation>
640 </xs:annotation>
641 </xs:enumeration>
642 <xs:enumeration value="1">
643 <xs:annotation>
644 <xs:documentation>Transferable</xs:documentation>
645 </xs:annotation>
646 </xs:enumeration>
647 </xs:restriction>
648 </xs:simpleType>
649 </xs:element>
650 </xs:sequence>
651 </xs:complexType>
652 <xs:complexType name="OptionList">
653 <xs:complexContent>
654 <xs:restriction base="soapenc:Array">
655 <xs:sequence>
656 <xs:element name="OptionStruct" type="tns:OptionStruct" minOccurs="0"
657 maxOccurs="unbounded"/>
658 </xs:sequence>
659 <xs:attribute ref="soapenc:arrayType" use="required"/>
660 </xs:restriction>
661 </xs:complexContent>
662 </xs:complexType>
663
664 <xs:complexType name="ArgStruct">
665 <xs:sequence>
666 <xs:element name="Name">
667 <xs:simpleType>
668 <xs:restriction base="xs:string">
669 <xs:maxLength value="64"/>
670 </xs:restriction>
671 </xs:simpleType>
672 </xs:element>
673 <xs:element name="Value">
674 <xs:simpleType>
675 <xs:restriction base="xs:string">
676 <xs:maxLength value="256"/>
677 </xs:restriction>
678 </xs:simpleType>
679 </xs:element>
680 </xs:sequence>
681 </xs:complexType>
682 <xs:complexType name="FileTypeArg">
683 <xs:complexContent>
684 <xs:restriction base="soapenc:Array">
685 <xs:sequence>
686 <xs:element name="ArgStruct" type="tns:ArgStruct" minOccurs="0" maxOccurs="16"/>
687 </xs:sequence>
688 <xs:attribute ref="soapenc:arrayType" use="required"/>
689 </xs:restriction>
690 </xs:complexContent>
691 </xs:complexType>
692
693 <xs:simpleType name="CommandKeyType">
694 <xs:restriction base="xs:string">
695 <xs:maxLength value="32"/>
696 </xs:restriction>
697 </xs:simpleType>
698
699 <xs:simpleType name="ObjectNameType">
700 <xs:restriction base="xs:string">
701 <xs:maxLength value="256"/>
702 <xs:pattern value=".*\."/>
703 </xs:restriction>
704 </xs:simpleType>
705
706
707 <!--
708 Generic RPC Messages - Annex A.3.1
709 -->
710 <!-- GetRPCMethods -->
782 <xs:complexType>
783 <xs:sequence>
784 <xs:element name="ParameterNames" type="tns:ParameterNames"/>
785 </xs:sequence>
786 </xs:complexType>
787 </xs:element>
788
789 <!-- GetParameterValuesResponse -->
790 <xs:element name="GetParameterValuesResponse">
791 <xs:annotation>
792 <xs:documentation>GetParameterValuesResponse message - Annex A.3.2.2</xs:documentation>
793 </xs:annotation>
794 <xs:complexType>
795 <xs:sequence>
796 <xs:element name="ParameterList" type="tns:ParameterValueList"/>
797 </xs:sequence>
798 </xs:complexType>
799 </xs:element>
800
801 <!-- GetParameterNames -->
802 <xs:element name="GetParameterNames">
803 <xs:annotation>
804 <xs:documentation>GetParameterNames message - Annex A.3.2.3</xs:documentation>
805 </xs:annotation>
806 <xs:complexType>
807 <xs:sequence>
808 <xs:element name="ParameterPath" nillable="true">
809 <xs:simpleType>
810 <xs:restriction base="xs:string">
811 <xs:maxLength value="256"/>
812 </xs:restriction>
813 </xs:simpleType>
814 </xs:element>
815 <xs:element name="NextLevel" type="xs:boolean"/>
816 </xs:sequence>
817 </xs:complexType>
818 </xs:element>
819
820 <!-- GetParameterNamesResponse -->
821 <xs:element name="GetParameterNamesResponse">
822 <xs:annotation>
823 <xs:documentation>GetParameterNamesResponse message - Annex A.3.2.3</xs:documentation>
824 </xs:annotation>
825 <xs:complexType>
826 <xs:sequence>
827 <xs:element name="ParameterList" type="tns:ParameterInfoList"/>
828 </xs:sequence>
829 </xs:complexType>
830 </xs:element>
831
832 <!-- SetParameterAttributes -->
833 <xs:element name="SetParameterAttributes">
834 <xs:annotation>
835 <xs:documentation>SetParameterAttributes message - Annex A.3.2.4</xs:documentation>
836 </xs:annotation>
837 <xs:complexType>
838 <xs:sequence>
839 <xs:element name="ParameterList" type="tns:SetParameterAttributesList"/>
840 </xs:sequence>
841 </xs:complexType>
842 </xs:element>
843
844 <!-- SetParameterAttributesResponse -->
845 <xs:element name="SetParameterAttributesResponse">
846 <xs:annotation>
847 <xs:documentation>SetParameterAttributesResponse message - Annex A.3.2.4</xs:documentation>
848 </xs:annotation>
849 <xs:complexType/>
850 </xs:element>
851
852 <!-- GetParameterAttributes -->
995 </xs:restriction>
996 </xs:simpleType>
997 </xs:element>
998 <xs:element name="Password">
999 <xs:simpleType>
1000 <xs:restriction base="xs:string">
1001 <xs:maxLength value="256"/>
1002 </xs:restriction>
1003 </xs:simpleType>
1004 </xs:element>
1005 <xs:element name="FileSize" type="xs:unsignedInt"/>
1006 <xs:element name="TargetFileName">
1007 <xs:simpleType>
1008 <xs:restriction base="xs:string">
1009 <xs:maxLength value="256"/>
1010 </xs:restriction>
1011 </xs:simpleType>
1012 </xs:element>
1013 <xs:element name="DelaySeconds" type="xs:unsignedInt"/>
1014 <xs:element name="SuccessURL">
1015 <xs:simpleType>
1016 <xs:restriction base="xs:string">
1017 <xs:maxLength value="256"/>
1018 </xs:restriction>
1019 </xs:simpleType>
1020 </xs:element>
1021 <xs:element name="FailureURL">
1022 <xs:simpleType>
1023 <xs:restriction base="xs:string">
1024 <xs:maxLength value="256"/>
1025 </xs:restriction>
1026 </xs:simpleType>
1027 </xs:element>
1028 </xs:sequence>
1029 </xs:complexType>
1030 </xs:element>
1031
1032 <!-- DownloadResponse -->
1033 <xs:element name="DownloadResponse">
1034 <xs:annotation>
1035 <xs:documentation>DownloadResponse message - Annex A.3.2.8</xs:documentation>
1036 </xs:annotation>
1037 <xs:complexType>
1038 <xs:sequence>
1039 <xs:element name="Status">
1040 <xs:simpleType>
1041 <xs:restriction base="xs:int">
1042 <xs:enumeration value="0">
1043 <xs:annotation>
1044 <xs:documentation>Download has completed and been applied</xs:documentation>
1045 </xs:annotation>
1046 </xs:enumeration>
1047 <xs:enumeration value="1">
1048 <xs:annotation>
1049 <xs:documentation>Download has not yet been completed and
1050 applied</xs:documentation>
1051 </xs:annotation>
1052 </xs:enumeration>
1053 </xs:restriction>
1054 </xs:simpleType>
1055 </xs:element>
1056 <xs:element name="StartTime" type="xs:dateTime"/>
1057 <xs:element name="CompleteTime" type="xs:dateTime"/>
1058 </xs:sequence>
1059 </xs:complexType>
1060 </xs:element>
1061
1062 <!-- Reboot -->
1063 <xs:element name="Reboot">
1064 <xs:annotation>
1065 <xs:documentation>Reboot message - Annex A.3.2.9</xs:documentation>
1066 </xs:annotation>
1067 <xs:complexType>
1068 <xs:sequence>
1069 <xs:element name="CommandKey" type="tns:CommandKeyType"/>
1070 </xs:sequence>
1071 </xs:complexType>
1072 </xs:element>
1073
1074 <!-- RebootResponse -->
1075 <xs:element name="RebootResponse">
1076 <xs:annotation>
1077 <xs:documentation>RebootResponse message - Annex A.3.2.9</xs:documentation>
1078 </xs:annotation>
1079 <xs:complexType/>
1080 </xs:element>
1081
1082
1083 <!--
1084 Optional CPE messages - Annex A.4.1
1085 -->
1086 <!-- GetQueuedTransfers -->
1087 <xs:element name="GetQueuedTransfers">
1088 <xs:annotation>
1089 <xs:documentation>GetQueuedTransfers message - Annex A.4.1.1</xs:documentation>
1090 </xs:annotation>
1091 <xs:complexType/>
1092 </xs:element>
1093
1094 <!-- GetQueuedTransfersResponse -->
1095 <xs:element name="GetQueuedTransfersResponse">
1096 <xs:annotation>
1097 <xs:documentation>GetQueuedTransfersResponse message - Annex A.4.1.1</xs:documentation>
1098 </xs:annotation>
1099 <xs:complexType>
1100 <xs:sequence>
1101 <xs:element name="TransferList" type="tns:TransferList"/>
1102 </xs:sequence>
1103 </xs:complexType>
1104 </xs:element>
1105
1106 <!-- ScheduleInform -->
1107 <xs:element name="ScheduleInform">
1108 <xs:annotation>
1109 <xs:documentation>ScheduleInform message - Annex A.4.1.2</xs:documentation>
1110 </xs:annotation>
1111 <xs:complexType>
1112 <xs:sequence>
1113 <xs:element name="DelaySeconds" type="xs:unsignedInt"/>
1114 <xs:element name="CommandKey" type="tns:CommandKeyType"/>
1115 </xs:sequence>
1116 </xs:complexType>
1117 </xs:element>
1118
1119 <!-- ScheduleInformResponse -->
1120 <xs:element name="ScheduleInformResponse">
1121 <xs:annotation>
1122 <xs:documentation>ScheduleInformResponse message - Annex A.4.1.2</xs:documentation>
1123 </xs:annotation>
1124 <xs:complexType/>
1125 </xs:element>
1126
1127 <!-- SetVouchers -->
1128 <xs:element name="SetVouchers">
1129 <xs:annotation>
1130 <xs:documentation>SetVouchers message - Annex A.4.1.3</xs:documentation>
1131 </xs:annotation>
1132 <xs:complexType>
1133 <xs:sequence>
1134 <xs:element name="VoucherList" type="tns:VoucherList"/>
1135 </xs:sequence>
1136 </xs:complexType>
1137 </xs:element>
1138
1139 <!-- SetVouchersResponse -->
1140 <xs:element name="SetVouchersResponse">
1141 <xs:annotation>
1142 <xs:documentation>SetVouchersResponse message - Annex A.4.1.3</xs:documentation>
1143 </xs:annotation>
1144 <xs:complexType/>
1145 </xs:element>
1146
1147 <!-- GetOptions -->
1148 <xs:element name="GetOptions">
1149 <xs:annotation>
1150 <xs:documentation>GetOptions message - Annex A.4.1.4</xs:documentation>
1151 </xs:annotation>
1152 <xs:complexType>
1153 <xs:sequence>
1154 <xs:element name="OptionName">
1155 <xs:simpleType>
1156 <xs:restriction base="xs:string">
1157 <xs:maxLength value="64"/>
1158 </xs:restriction>
1159 </xs:simpleType>
1160 </xs:element>
1161 </xs:sequence>
1162 </xs:complexType>
1163 </xs:element>
1164
1165 <!-- GetOptionsResponse -->
1166 <xs:element name="GetOptionsResponse">
1167 <xs:annotation>
1168 <xs:documentation>GetOptionsResponse message - Annex A.4.1.4</xs:documentation>
1169 </xs:annotation>
1170 <xs:complexType>
1171 <xs:sequence>
1172 <xs:element name="OptionList" type="tns:OptionList"/>
1173 </xs:sequence>
1174 </xs:complexType>
1175 </xs:element>
1176
1177 <!-- Upload -->
1178 <xs:element name="Upload">
1179 <xs:annotation>
1180 <xs:documentation>Upload message - Annex A.4.1.5</xs:documentation>
1181 </xs:annotation>
1182 <xs:complexType>
1183 <xs:sequence>
1184 <xs:element name="CommandKey" type="tns:CommandKeyType"/>
1185 <xs:element name="FileType">
1186 <xs:simpleType>
1187 <xs:restriction base="xs:string">
1188 <xs:maxLength value="64"/>
1189 <xs:pattern value="1 Vendor Configuration File"/>
1190 <xs:pattern value="2 Vendor Log File"/>
1191 <xs:pattern value="X [0-9A-F]{6} .*"/>
1192 </xs:restriction>
1193 </xs:simpleType>
1194 </xs:element>
1195 <xs:element name="URL">
1196 <xs:simpleType>
1197 <xs:restriction base="xs:string">
1198 <xs:maxLength value="256"/>
1199 </xs:restriction>
1200 </xs:simpleType>
1201 </xs:element>
1202 <xs:element name="Username">
1203 <xs:simpleType>
1204 <xs:restriction base="xs:string">
1205 <xs:maxLength value="256"/>
1206 </xs:restriction>
1207 </xs:simpleType>
1208 </xs:element>
1209 <xs:element name="Password">
1210 <xs:simpleType>
1211 <xs:restriction base="xs:string">
1212 <xs:maxLength value="256"/>
1213 </xs:restriction>
1214 </xs:simpleType>
1215 </xs:element>
1216 <xs:element name="DelaySeconds" type="xs:unsignedInt"/>
1217 </xs:sequence>
1218 </xs:complexType>
1219 </xs:element>
1220
1221 <!-- UploadResponse -->
1222 <xs:element name="UploadResponse">
1223 <xs:annotation>
1224 <xs:documentation>UploadResponse message - Annex A.4.1.5</xs:documentation>
1225 </xs:annotation>
1226 <xs:complexType>
1227 <xs:sequence>
1228 <xs:element name="Status">
1229 <xs:simpleType>
1230 <xs:restriction base="xs:int">
1231 <xs:enumeration value="0">
1232 <xs:annotation>
1233 <xs:documentation>Upload has been completed</xs:documentation>
1234 </xs:annotation>
1235 </xs:enumeration>
1236 <xs:enumeration value="1">
1237 <xs:annotation>
1238 <xs:documentation>Upload has not yet completed</xs:documentation>
1239 </xs:annotation>
1240 </xs:enumeration>
1241 </xs:restriction>
1242 </xs:simpleType>
1243 </xs:element>
1244 <xs:element name="StartTime" type="xs:dateTime"/>
1245 <xs:element name="CompleteTime" type="xs:dateTime"/>
1246 </xs:sequence>
1247 </xs:complexType>
1248 </xs:element>
1249
1250 <!-- FactoryReset -->
1251 <xs:element name="FactoryReset">
1252 <xs:annotation>
1253 <xs:documentation>FactoryReset message - Annex A.4.1.6</xs:documentation>
1254 </xs:annotation>
1255 <xs:complexType/>
1256 </xs:element>
1257
1258 <!-- FactoryResetResponse -->
1259 <xs:element name="FactoryResetResponse">
1260 <xs:annotation>
1261 <xs:documentation>FactoryResetResponse message - Annex A.4.1.6</xs:documentation>
1262 </xs:annotation>
1263 <xs:complexType/>
1264 </xs:element>
1265
1266
1267 <!--
1268 ACS messages - Annex A.3.3
1269 -->
1270 <!-- Inform -->
1271 <xs:element name="Inform">
1272 <xs:annotation>
1273 <xs:documentation>Inform message - Annex A.3.3.1</xs:documentation>
1274 </xs:annotation>
1275 <xs:complexType>
1276 <xs:sequence>
1277 <xs:element name="DeviceId" type="tns:DeviceIdStruct"/>
1278 <xs:element name="Event" type="tns:EventList"/>
Annex B. Removed
Annex Removed.
C.1 Overview
The CPE WAN Management Protocol defines an optional mechanism for securely enabling or disabling
optional CPE capabilities. Unlike Parameters, the Voucher mechanism provides an additional layer of
security for optional capabilities that require secure tracking (such as those involving payment).
A Voucher is a digitally signed data structure that instructs a CPE to enable or disable a set of Options. An
Option is any optional capability of a CPE. When an Option is enabled, the Voucher can specify various
characteristics that determine under what conditions that Option persists.
Prior to Base64 encoding, each Voucher is a signed XML structure utilizing the XML-Signature format
[15]. Each independently signed Voucher MAY include one or more Option specifications. Each Option
specification is a structure that specifies the intended state for the specified Option.
The elements of the Option specification are defined in Table 62. An Option MAY contain additional
XML elements specific to the particular Option. An example Option specification structure is shown in
Figure 5. An example of an entire signed Voucher is shown in Figure 6. In this example, two separate
Options are enabled in the same Voucher.
<G>
9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFn
Ej6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTx
vqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSo=
</G>
<Y>
TBASA/mjLI8bc2KM7u9X6nHHvjmPgZtTBhr1/Fzs2AkdYCYMwyy+v+OXU7u5e18JuK
G7/uolVhjXNSn6ZgObF+wuMoyP/OUmNbSkdN1aRXXHPRsW2CcG3vjfV+Csg/LP3zfD
xDkImsC8LuKXht/g4+nksA/3icRQXWagQJU9pUQ=
</Y>
</DSAKeyValue>
</KeyValue>
<X509Data>
<X509IssuerSerial>
<X509IssuerName>
[email protected],CN=Example,OU=CMS,O=Example,L=San\20Jose,
ST=California,C=US
</X509IssuerName>
<X509SerialNumber>4</X509SerialNumber>
</X509IssuerSerial>
<X509SubjectName>
CN=eng.bba.certs.example.com,OU=CMS,O=Example,L=San\20Jose,ST=CA,C=US
</X509SubjectName>
<X509Certificate>
MIIEUjCCA7ugAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
CkNhbGlmb3JuaWExETAPBgNVBAcTCFNhbiBKb3NlMQ4wDAYDVQQKEwUyV2lyZTEMMAoGA1UECxMD
Q01TMQ4wDAYDVQQDEwUyV2lyZTEfMB0GCSqGSIb3DQEJARYQZWJyb3duQDJ3aXJlLmNvbTAeFw0w
MjA5MDUyMDU4MTZaFw0xMjA5MDIyMDU4MTZaMG0xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTER
MA8GA1UEBxMIU2FuIEpvc2UxDjAMBgNVBAoTBTJXaXJlMQwwCgYDVQQLEwNDTVMxIDAeBgNVBAMT
F2VuZy5iYmEuY2VydHMuMndpcmUuY29tMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIp
Ut9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdr
mVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iID
GZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC
+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWR
bqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGATBAS
A/mjLI8bc2KM7u9X6nHHvjmPgZtTBhr1/Fzs2AkdYCYMwyy+v+OXU7u5e18JuKG7/uolVhjXNSn6
ZgObF+wuMoyP/OUmNbSkdN1aRXXHPRsW2CcG3vjfV+Csg/LP3zfDxDkImsC8LuKXht/g4+nksA/3
icRQXWagQJU9pUSjgdAwgc0wHQYDVR0OBBYEFMTl/ebdHLjaEoSS1PcLCAdFX32qMIGbBgNVHSME
gZMwgZChgYqkgYcwgYQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMREwDwYDVQQH
EwhTYW4gSm9zZTEOMAwGA1UEChMFMldpcmUxDDAKBgNVBAsTA0NNUzEOMAwGA1UEAxMFMldpcmUx
HzAdBgkqhkiG9w0BCQEWEGVicm93bkAyd2lyZS5jb22CAQAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
SIb3DQEBBQUAA4GBAF1PGAbyvA0p+6o7nXfF3jzAdoHdaZh55C8sOQ9J62IF8D1jl6JxR7pjcCp2
iYmWkwQMncGfq+X8xP7BIqntDmIlYXuDTlXbyxXsu6lnT7nCbJwMwlLOxFwN+Axy7BM3NkAFE5Mb
aaoJWtmD1QrvcAFfDhLeBT+tIRueK7Pq9LDS
</X509Certificate>
<X509Certificate>
MIICeTCCAeICAQAwDQYJKoZIhvcNAQEEBQAwgYQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxp
Zm9ybmlhMREwDwYDVQQHEwhTYW4gSm9zZTEOMAwGA1UEChMFMldpcmUxDDAKBgNVBAsTA0NNUzEO
MAwGA1UEAxMFMldpcmUxHzAdBgkqhkiG9w0BCQEWEGVicm93bkAyd2lyZS5jb20wHhcNMDEwNzMx
MDMwNjQ5WhcNMDcwMTIxMDMwNjQ5WjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju
aWExETAPBgNVBAcTCFNhbiBKb3NlMQ4wDAYDVQQKEwUyV2lyZTEMMAoGA1UECxMDQ01TMQ4wDAYD
VQQDEwUyV2lyZTEfMB0GCSqGSIb3DQEJARYQZWJyb3duQDJ3aXJlLmNvbTCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEA1ISJbL6i0J/6SBoet3aA8fki8s7pb/QUZueWj+0YKoDaQWh4MUCT0K06
N/0Z2cLMVg8JyezEpdnh3lVM/Ni5ow2Mst4dpdccQQEHouqwNUWIBFU196/LPRyLjoM2NeIXSKMj
AdPwvcenxmqeVBr/ZUmr4JQpdSI2AZJuHvCIjUsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBa3CCX
ga9L0qrGWxpNj312Az+tYz8bpEp2e2pAVrJHdW/CJ0uRlE341oTkhfYFa5CuuieF7Jcwf1B3+cGo
JrLWqeKqsNnrbmMFC/9hnrLlgZKEKi0POaGSFS/Pw9nodGWFZCiaQmeG+J6CWeASiFMdwgRGvESW
axfzzIKiXsXwkA==
</X509Certificate>
</X509Data>
</KeyInfo>
<dsig:Object xmlns="" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Id="option0">
<Option>
<VSerialNum>987654321</VSerialNum>
<DeviceId>
<Manufacturer>Example</Manufacturer>
<OUI>012345</OUI>
<ProductClass>Gateway</ProductClass>
<SerialNumber>123456789</SerialNumber>
</DeviceId>
<OptionIdent>First option name</OptionIdent>
D.1 Overview
To support web-based applications or other CPE-related web pages on a back-end web site for access from
a browser within the CPE’s local network, the CPE WAN Management Protocol provides an optional
mechanism that allows such web sites to customize their content with explicit knowledge of the customer
associated with that CPE. That is, the location of users browsing from inside the CPE’s LAN can be
automatically identified without any manual login process.
The protocol defines a set of optional interfaces that allow the web site to initiate communication between
the CPE and ACS, which allows a web site in communication with that ACS to identify which CPE the
user is operating behind. This allows the web site to customize its content to be specific to the associated
broadband account, the particular type of CPE, or any other characteristic that is known to the ACS.
Note—this identification mechanism does not distinguish among different users on the same
network behind a single CPE. In situations where identification of a specific user is required, a
separate identity management mechanism, such as manual login, would be needed.
2. The web site redirects the browser to a specific URL accessible only from the CPE’s private-network
(LAN) interface through which the browser “kicks” the CPE, providing the CPE via CGI arguments
with information it needs to follow the subsequent steps (see section D.4).
3. The CPE notifies the ACS that it has been kicked, using the “Kicked” RPC method call defined in
Annex A. In this method call, the CPE identifies itself and passes information to uniquely identify the
browser session.
4. The ACS responds to this method call by passing a URL that the CPE SHOULD redirect the user’s
browser. This URL would normally include CGI arguments that identify the session state. While the
connection is open, the ACS MAY also initiate any other appropriate RPC transactions.
5. The CPE responds to the browser’s HTTP request by redirecting the browser to the URL indicated by
the ACS.
This exchange allows the ACS to uniquely identify the CPE; potentially generate a custom page based on
knowledge of the particular user, their equipment, and any associated account privileges; and then direct
the user to that customized page.
The ACS MAY also initiate any other RPC transactions that are appropriate given the particular user
action. For example, if a user requests a firmware upgrade to their CPE from a web page, the ACS could
instruct the CPE to initiate a file download over the same connection that the ACS responds to the Kicked
method call.
Figure 7 shows the sequence of events associated with this mechanism. The numbers shown correspond to
the step numbers above.
W eb Site
2
5
Access
Network
3
B-NT
ACS
The associated web server in the CPE SHOULD support CGI arguments to be passed to corresponding
arguments in the Kicked RPC method defined in Annex A. The RECOMMENDED arguments are listed in
Table 64.
To initiate the kick process, the browser would be sent to the CPE’s URL, for example via an HTTP 302
redirect or via a form post. This access would include the CGI arguments as defined in Table 64. For
example, the browser might be redirected to:
http://cpe-host-name/kick.html?command=<#>&arg=<arg>&next=<url>
After the CPE receives the corresponding HTTP GET request, the CPE SHOULD initiate a Kicked
method call, using the CGI arguments to fill in the method arguments as defined in Annex A.
The CPE SHOULD limit the number of Kicked method calls it sends to the ACS per hour to a defined
maximum value. Receiving a kick request that would result in exceeding this maximum value is
considered a security violation and SHOULD NOT result in a call to the Kicked method.
E.1 Introduction
This document specifies a signed package format that MAY be used to securely download files into a
recipient device. The format allows one or more files to be encapsulated within a single signed package.
The package format allows the recipient to authenticate the source, and contains instructions for the
recipient to extract and install the contents.
The signed package format is intended to be used for download from a server via HTTP, HTTPS, or FTP
file transfer, or via other means of file transfer from a remote or local source.
Fixed length
Signatures
header
Command Payload
list files
A general description of each of the signed package format components is given in Table 65.
If a recipient of this file format finds a Type value that is unknown to it, it MUST ignore the command and
continue parsing the remainder of the package, using the Length value to skip to the next command, if any.
in the order specified in the command list define the sequence of modifications to the file system required
to extract and install the contained files.
The file-related commands have two variants: one that operates on explicit files and another that operates
on versioned files. The name of a versioned file has a fixed “base” up to 8 characters in length, and an
“extension” that is 3 characters in length. Each time the content of a versioned file is updated, the file
extension is changed to a new value that indicates the file version. Because of this, if an upgrade needs to
replace a versioned file, any existing file with the same base name but different extension MUST be
removed.
The specific commands defined by this specification are listed in Table 68.
The Remove File command removes the file with the specified path, if it exists.
The Remove Versioned File command removes all files with the same base as the specified file, regardless
of extension.
The Remove Sub-Tree command removes all files and directories beneath and including the specified path.
All of the remove commands include information in the Value portion of the command. The format of this
information is defined in Table 70.
Each of the timeout commands allows a distinct timeout value to be specified, where the Timeout field in
that command indicates the desired value. The use of each timeout value is based on the state of the
recipient as it processes commands using the state transition model shown in Figure 9. The figure shows
the state transitions that occur as each command in the command list is processed in sequence. For each
command processed, the state remains the same until one of the cases indicated by the state transition
arrows occurs.
Recov erable
State End
Rem ov e com m and
w/ Unsafe flag = 0
Start
download End
Initial State Install com plete
End
Unrecov erable
Extract, Add, Mov e, or Rem ov e State
w/ Unsafe flag = 1
OR Form at File System
The above state diagram is used during a download to determine which timeout values to use. The
definition of each of the timeout types associated with the timeout commands is shown in Table 73.
Table 74 – Value format for the minimum and maximum version commands
Field Type Description
Version Array of 32-bit An array of integer elements indicating the version number. This is considered a
integers hierarchical version number (e.g., “1.0.20.3”), where each successive integer
represents a more minor element of the version number.
The following procedure is used to determine if a version is within the indicated range.
If a Minimum Version is given, then for each element of the Version array, beginning with the first (most
major element):
1. If this element of the recipient’s actual version is greater than the corresponding element of the
minimum version, then the recipient’s version meets the requirement and the procedure is
complete.
2. If this element of the recipient’s actual version number is less than the corresponding element of
the minimum version, then the recipient’s version does not meet the requirement. In this case, the
procedure is complete and the recipient MUST NOT install the files in this package or follow any
of the remaining commands.
3. Otherwise (the values are equal),
a. If this is the last element in the array, then the recipient’s version meets the requirement
and the procedure is complete.
b. Otherwise (more elements remain), the procedure SHOULD continue at step 1 using the
next element of the array.
If a Maximum Version is given, then for each element of the Version array, beginning with the first (most
major element):
1. If this element of the recipient’s actual version is less than the corresponding element of the
maximum version, then the recipient’s version meets the requirement and the procedure is
complete.
2. If this element of the recipient’s actual version number is greater than the corresponding element
of the maximum version, then the recipient’s version does not meet the requirement. In this case,
the procedure is complete and the recipient MUST NOT install the files in this package or follow
any of the remaining commands.
3. Otherwise (the values are equal),
a. If this is the last element in the array, then the recipient’s version meets the requirement
and the procedure is complete.
b. Otherwise (more elements remain), the procedure SHOULD continue at step 1 using the
next element of the array.
E.5 Signatures
The signature section immediately follows the command list section of the package file. The signature
section consists of a digital signature block using the PKCS #7 signature syntax [16].
In particular, the signature block includes exactly one PKCS #7 SignedData object, which contains zero or
more signatures with the following constraints:
• The signatures are “external signatures,” meaning that the signed message is not encapsulated within
the SignedData object. Instead, the signed message data consists of the octet string formed by the
header and the command list components of the package.
Annex F. Device-Gateway
Association
F.1 Introduction
The CPE WAN Management Protocol can be used to remotely manage CPE Devices that are connected via
a LAN through a Gateway. When an ACS manages both a Device and the Gateway through which the
Device is connected, it can be useful for the ACS to be able to determine the identity of that particular
Gateway.
The procedures defined in this Annex allow an ACS to determine the identity of the Gateway through
which a given Device is connected.
As an example of when this capability might be needed, an ACS establishing QoS for a particular service
might need to provision both the Device as well as the Gateway through which that Device is connected.
To do the latter, the ACS would need to determine the identity of that particular Gateway.
The specific scenario that the defined mechanism is intended to accommodate is where both the Gateway
and Device are managed via the CPE WAN Management Protocol, and both are managed by the same ACS
(or by distinct ACSs that are appropriately coupled). Where a Device and Gateway are managed by
independent ACSs, it is assumed that there is no requirement for either ACS to be made aware of the
Device-Gateway association.
The defined mechanism relies on the Device’s use of DHCP [20]. It is expected that the vast majority of
remotely manageable Devices will use DHCP, though not necessarily all such Devices. While the
mechanism defined here for Device-Gateway association requires the use of DHCP, a Device using this
mechanism need not use DHCP for address allocation. This mechanism makes no assumptions about the
address allocated to the Device. That is, the Device might have a private or public IP address.
F.1.1 Terminology
The following terminology is used in this Annex.
Device CPE connected via local area network through a Gateway, bridge, or router.
Device A three-tuple that uniquely identifies a Device, which includes the manufacturer OUI,
Identity serial number, and (optionally) product class.
Gateway Internet Gateway Device.
Gateway A three-tuple that uniquely identifies a Gateway, which includes the manufacturer OUI,
Identity serial number, and (optionally) product class.
F.2 Procedures
The procedures for Device-Gateway association are summarized as follows:
• A Device following this Annex will pass its Device Identity to the Gateway via a vendor-specific
DHCP option. When the Gateway receives this information, it populates a table containing identity
information for each Device on its LAN. This information is made available to the ACS via the
ManageableDevice table in the Gateway’s data model, defined in [24].
• In the DHCP responses, the Gateway provides the Device with its Gateway Identity, which the Device
makes available to the ACS via the GatewayInfo data object defined in [13]. The Device notifies the
ACS of changes to the contents of this object. Thus a Device connecting to a previously unknown
Gateway will result in the ACS being notified of the Gateway Identity.
• To ensure the validity of this information, which is carried over an inherently insecure DHCP
exchange, the ACS validates the Gateway Identity provided by the Device by crosschecking against
the Device Identity provided by the Gateway.
• In DHCP requests, the Device MUST include a V-I Vendor-Specific Information DHCP Option
(option number 125, as defined in [22]) that includes its Device Identity information, as defined in
section F.2.5. The DHCP requests for which this requirement applies are DHCPDISCOVER,
DHCPREQUEST, and DHCPINFORM.
• If the DHCPACK message includes the Gateway Identity carried in the V-I Vendor-Specific
Information DHCP Option (option number 125, as defined in [22]), as defined in section F.2.5, the
Device MUST record the received value in the GatewayInfo data object defined in [13]. All of the
following values MUST be recorded:
Device.GatewayInfo.ManufacturerOUI
Device.GatewayInfo.SerialNumber
Device.GatewayInfo.ProductClass
The DHCP responses for which this requirement applies are DHCPOFFER and DHCPACK.
• If any of the elements of the Gateway Identity are not present in the V-I Vendor-Specific
Information DHCP Option, the Device MUST record an empty string for each such item
(replacing the previous value, if any).
• For all of the parameters in the Device.GatewayInfo object, the Device MUST by default set the
Notification attribute as defined in Annex A to Active Notification. The Device MUST apply this
default whenever the URL of the ACS is set or subsequently modified. Whenever Active
Notification is enabled for these parameters, the device MUST actively notify the ACS as defined
in Annex A if the value of any of these parameters changes.
• If the DHCP lease is released or expires without renewal, all entries in the GatewayInfo object
MUST be discarded (set to the empty string).
The use of DHCP does not dictate that the device use DHCP for address allocation. If the Device obtains
IP addressing parameters using other means, the device would use a DHCP Inform for the exchange of
information with the Gateway. The flow for this case is show in Figure 11.
In encoding the source parameter value in the corresponding Sub-Option Data element, the resulting string
MUST NOT be null terminated.
For a DHCP request from the Device that contains the Device Identity, the DHCP Option MUST contain
the following Encapsulated Vendor-Specific Option-Data fields:
• DeviceManufacturerOUI
• DeviceSerialNumber
• DeviceProductClass (this MAY be left out if the corresponding source parameter is not present)
For a DHCP response from the Gateway that contains the Gateway Identity, the DHCP Option MUST
contain the following Encapsulated Vendor-Specific Option-Data fields:
• GatewayManufacturerOUI
• GatewaySerialNumber
• GatewayProductClass (this MAY be left out if the corresponding source parameter is not present)
11
The value of the corresponding Sub-Option Data element is obtained from the specified parameter value.
12
As defined in [13].
13
As defined in [24].
G.1 Introduction
The CPE WAN Management Protocol can be used to remotely manage CPE Devices that are connected via
a LAN through a Gateway. When an ACS manages a Device connected via a NAT Gateway (where the
Device has been allocated a private IP address), the CPE WAN Management Protocol can still be used for
management of the Device, but with the limitation that the Connection Request mechanism defined in
section 3.2.2 that allows the ACS to initiate a Session cannot be used.
The procedures defined in this Annex allow an ACS to initiate a Session with a device that is operating
behind a NAT Gateway. This provides the equivalent functionality of the Connection Request defined in
section 3.2.2, but makes use of a different mechanism to accommodate this scenario.
The mechanism defined in this Annex does not assume that the Gateway through which the Device is
connected supports the CPE WAN Management Protocol. This mechanism requires support only in the
Device and the associated ACS.
G.2 Procedures
To accommodate the ability for an ACS to issue the equivalent of a Connection Request to CPE allocated a
private address through a NAT Gateway that might not be CPE WAN Management Protocol capable, the
following is required:
• The CPE MUST be able to discover that its connection to the ACS is via a NAT Gateway that has
allocated a private IP address to the CPE.
• The CPE MUST be able to maintain an open NAT binding through which the ACS can send
unsolicited packets.
• The CPE MUST be able to determine the public IP address and port associated with the open NAT
binding, and communicate this information to the ACS.
To accomplish the above items, this Annex defines a particular use of the STUN mechanism, defined in
RFC 3489 [21].
The use of STUN for this purpose requires that a new UDP-based Connection Request mechanism be
defined to augment the existing TCP-based Connection Request mechanism defined in section 3.2.2.
The procedures for making use of STUN to allow the use of UDP Connection Requests to a CPE are
summarized as follows:
• The ACS enables the use of STUN in the CPE (if it is not already enabled by factory default) and
designates the STUN server for the CPE to use.
• The CPE uses STUN to determine whether or not the CPE is behind a NAT Gateway with a
private allocated address.
• If the CPE is behind a NAT Gateway with a private allocated address, the CPE uses the
procedures defined in STUN to discover the binding timeout.
• The CPE sends periodic STUN Binding Requests at a sufficient frequency to keep alive the NAT
binding on which it listens for UDP Connection Requests.
• When the CPE determines the public IP address and port for the NAT binding on which it is
listening for UDP Connection Requests, and whenever it subsequently changes, the CPE
communicates this information to the ACS. Two means are provided by which the ACS, at its
discretion, can obtain this information—either from information provided in the STUN Binding
Request messages themselves, or via Notification on changes to the
UDPConnectionRequestAddress parameter, which the CPE will update to include the public
Connection Request address and port.
• Whenever the ACS wishes to establish a connection to the CPE, it can send a UDP Connection
Request to the CPE. To accommodate the broadest class of NAT Gateways, this will be sent from
the same source address and port as the STUN server.
which the request was sent to the MAPPED-ADDRESS attribute received in a response from the STUN
server. If either the address or port is different, then translation is in use.
If it is determined that address and/or port translation is in use, the CPE MUST record the value of the
MAPPED-ADDRESS attribute in the most recently received Binding Response. This represents the public
IP address and port to which UDP Connection Requests would be sent.
Each time the CPE subsequently sends a Binding Request for the purpose of maintaining the binding (see
G.2.1.2), the CPE MUST again determine if address and/or port translation is in use, and if so, obtain the
public IP address and port information from the MAPPED-ADDRESS attribute in a successful Binding
Response. The actions the CPE will take when this information changes are defined in section G.2.1.3.
If the CPE has been provisioned with a STUNUsername and STUNPassword in the ManagementServer
object, then if the CPE receives a Binding Error Response from the STUN server with a fault code of
401 (Unauthorized), then the CPE MUST resend the Binding Request with the USERNAME and
MESSAGE-INTEGRITY attributes as defined in [21]. Whenever a Binding Request is sent that includes
the MESSAGE-INTEGRITY attribute, the CPE MUST discard a corresponding Binding Response if the
MESSAGE-INTEGRITY attribute in the Binding Response is either invalid, as defined in [21], or is not
present.
If the local IP address allocated to the CPE changes, the CPE MUST re-discover the binding using the
procedures described above. The minimum limit on the Binding Request period defined by STUN-
MinimumKeepAlivePeriod does not apply in this case.
Other than Binding Request messages sent explicitly in response to a Binding Error Response from the
STUN server with a fault code of 401 (Unauthorized), the CPE MUST NOT include the MESSAGE-
INTEGRITY attributes in any Binding Request.14
The STUN client in the CPE need not support the CHANGE-REQUEST attribute of STUN Binding
Requests, nor need it understand the CHANGED-ADDRESS, SOURCE-ADDRESS, and REFLECTED-
FROM attributes present in a Binding Response.15
The STUN client in the CPE need not support the STUN messages for exchanging a Shared Secret. None
of these messages are used in the application defined in this Annex.
14
Because the STUN specification requires the STUN server to use message integrity in its response if
message integrity was used in the request, the CPE cannot use message integrity for Binding Requests on
its own, but only when so directed by the STUN server. This is to ensure that the server has total
discretion as to when and whether message integrity is to be used.
15
These attributes are primarily intended to allow discovery of the type of NAT in use, which is not
required for this Annex.
The specific procedures by which the CPE uses Binding Requests from the secondary source port to
determine the binding timeout is left to the discretion of the CPE vendor. In general, the procedure would
consist of two phases: a discovery phase, and a monitoring phase. During the discovery phase, the CPE is
attempting to learn the value of the binding timeout, and would test different timeout values to determine
the actual timeout value (for example, using a binary search). During the monitoring phase, the CPE would
periodically test the binding prior to refreshing it to determine if the binding is still in place. If not, the
CPE could then revert to the discovery phase to determine a new value for the binding.
The minimum limit on the Binding Request period defined by STUNMinimumKeepAlivePeriod does not
apply to Binding Requests sent from a secondary source port.
16
Defining two methods allows flexibility by the ACS in making the tradeoffs between these two
approaches. Specifically, the STUN-based approach may require a tighter coupling between the ACS
itself and the associated STUN server, while the Notification-based approach may result in greater
communication overhead.
17
This text string is used to allow an observer, including the NAT Gateway itself, to identify that these
STUN messages represent UDP Connection Request bindings associated with this specification. A
Gateway might use this knowledge to optimize the associated performance. For example, a Gateway
could lengthen the UDP timeout associated with this binding to reduce the frequency of binding updates.
Port 7547 has been assigned by IANA for the CPE WAN Management Protocol (see [17]), and the CPE
MAY use this port for UDP Connection Requests.
• The STUN server SHOULD perform the above only once for a given Transaction ID in the
Binding Request. Redundant copies of the Binding Request with the same Transaction ID
SHOULD be ignored.
Using this approach, the STUN server MAY choose not to require message integrity or authenticate any
Binding Requests other than those for which it follows the above procedures to determine the binding
information.
The ACS MAY determine the current binding at any time even if no change was notified by following the
above procedure on any received Binding Request for which the CONNECTION-REQUEST-BINDING
attribute is present. The required presence of the USERNAME attribute in these Binding Requests allows
the ACS to tentatively determine the CPE’s identity prior to subsequent authentication. This allows an
ACS to periodically verify the binding information to ensure that it is up-to-date in case explicit indications
of a binding change had failed to reach the ACS.
If the ACS determines that the CPE is no longer behind a NAT that is doing address or port mapping, the
ACS MAY use TCP-based Connection Requests as defined in section 3.2.2.
The format of the UDP Connection Request message is derived from the format of an HTTP 1.1 [5] GET
message, though the HTTP 1.1 protocol itself is not used. Specifically, the UDP Connection Request
message MUST conform to the following requirements:
• It MUST be a valid HTTP 1.1 GET message as defined in [5].
• It MUST contain no Message Body.
• If a Content-Length header is present, its value MUST be zero.
• The Method given in the Request Line MUST be “GET”.
• The Request-URI given in the Request Line MUST be an Absolute-URI according to the rules
defined in [12]. The URI MUST be formed as follows:
o The Scheme portion of the URI MUST be “http” or “HTTP”.
o The Authority portion of the URI MUST be as specified in [10]. The ACS MAY set this
to the value of Device.ManagementServer.UDPConnectionRequestAddress, if it is
known. Otherwise, the ACS MUST derive this string from the actual destination IP
address and port to which the UDP Connection Request message will be sent. The “port”
portion of this string MUST be present unless the destination port number is “80”.
o The Path portion of the URI MUST be empty.
o The Query portion of the URI MUST contain a query string encoded as defined by the
“application/x-www-form-urlencoded” content type defined in [23]. The query string
MUST contain the following name-value pairs:
Name Value
ts Timestamp. The number of seconds since the Unix epoch until the time the
message is created (the standard Unix timestamp).
id Message ID. An unsigned integer value that MUST be set to the same value for
all retransmitted copies of the same UDP Connection Request. The value MUST
change between successive distinct UDP Connection Requests.
un Username. The value of the parameter Device.ManagementServer.Connection-
RequestUsername as read from the CPE.
cn Cnonce. A random string chosen by the ACS.
sig Signature. Formed from the 40-character hexadecimal representation (case
insensitive) of HMAC-SHA1 (Key, Text) [19], where:
• Key is the value of the parameter Device.ManagementServer.Connection-
RequestPassword as read from the CPE.
• Text is a string formed by concatenating the following elements (in the order
listed, with no spaces between items):
• The value of the ts (Timestamp) element
• The value of the id (Message ID) element
• The value of the un (Username) element
• The value of the cn (Cnonce) element
UDP Connection Request messages) and (A1, P2) is its secondary port (used for binding timeout
discovery). When passing through a NAT Gateway, these addresses are translated to (A1', P1') and
(A1', P2'), respectively. In all of the examples it is assumed that the STUN Server does not have a
secondary address/port and thus the CHANGED-ADDRESS attribute in the Binding Response (which need
not be used by the CPE) contains its primary address/port, (A3, P3).
Figure 12 shows the periodic binding discovery and binding maintenance flows where the CPE sends the
Binding Request from the primary source port and includes the CONNECTION-REQUEST-BINDING and
(if a Username had been set) USERNAME attributes. In this example it is assumed that the STUN Server
has not chosen to authenticate the request.
Figure 13 shows a Binding Request sent by the CPE from its secondary source port for the purpose of
discovering whether or not the primary binding has timed out in the NAT gateway. In this case the Binding
Request does not include the CONNECTION-REQUEST-BINDING attribute since it is not sent from the
primary source port. The last leg of the exchange (shown in grey) will not occur if the primary binding has
timed out.
Figure 13 – Binding Request from secondary source port for binding timeout discovery
Figure 14 shows a Binding Change notification where the STUN Server has chosen to make use of the
STUN-based approach (see section G.2.2.2.1), and therefore authenticates the Binding Request prior to
storing the information associating the Username with the current binding address and port.
Figure 15 shows a Binding Change notification where the STUN Server has chosen to make use of the
Notification-based approach (see section G.2.2.2.2), and therefore does not need to authenticate the
Binding Request since the ACS instead uses CPE WAN Management Protocol Notification to update the
binding information.
Figure 16 shows a UDP Connection Request message sent to the CPE to initiate a CPE WAN Management
Protocol session. In this example, the STUN Server sends the identical UDP Connection Request multiple
times to improve the likelihood of successful reception by the CPE.