When an ACS wants to learn what objects exist on a CPE and what parameters they support, it can use the GetParameterNames RPC. Like other RPCs, GetParameterNames makes use of the ParameterPaths argument, so let’s take a minute to understand parameter paths.
All of the objects and parameters in a CWMP endpoint’s data model are addressed by a parameter path. A parameter path includes objects, sub-objects, identifiers for multi-instance objects, and the parameters of those objects.
When referencing a parameter path, an ACS can use a “complete path” or a “partial path”. A complete path ends with a specific parameter that is needed to be addressed. A partial path ends with a “dot” after an object and is used to reference all of the sub-objects and parameters beneath the referenced object.
Let’s take this back to GetParameterNames. The GetParameterNames RPC takes two arguments. The first is a Parameter Path, like we just talked about. This is only a single parameter path, unlike GetParameterValues, but we’ll talk about that later.
The second argument is NextLevel, which can take a value of true or false. This argument specifies whether the ACS wants ALL sub-objects and parameters returned, or only the Next LEVEL of parameters returned. Obviously, this only applies when a partial parameter path is specified.
Let’s take a simple object like DeviceInfo as an example. If the ACS was interested in learning about the existence of just the ModelName parameter, it could use a complete path, in this case Device.DeviceInfo.Modelname.
If it wanted to know all of the parameters ONLY in the DeviceInfo object, it would specify a partial path of Device.DeviceInfo”.” - and set the NextLevel argument to “true”. The endpoint would then return ONLY those parameters of the DeviceInfo object.
If it wanted to know about all of the objects and parameters in the entire DeviceInfo object, it would specify a partial path of Device.DeviceInfo - and set the NextLevel argument to “false”. The endpoint would then return the entire tree of subobjects and their parameters.
The GetParameterNamesResponse from the CPE contains a ParameterList argument containing an array of type ParameterInfoStruct. Each entry in the array contains the full path name of the parameter to be returned, and a second boolean that indicates whether or not the parameter is writeable. Usually this correlates with the access type specified in the CWMP data model.
An ACS can use GetParameterNames to “walk the tree” of the CPE data model and discover the objects and parameters it supports, but this is not recommended. The reason for this is that objects that happen to have no instances may not appear in the CPE’s instantiated data model, and will not be returned. Instead, the CWMP preferred method of capability discovery is through the SupportedDataModel table and corresponding Device Type documents, which we’ll cover later.
Develop your solution even faster with the industry standard in automated, expert testing.