Table of Contents |
---|
Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
Guiding Principles
- NCMP REST Interface will follow/be inspired by RESTConf interface for easy acceptance of and transition to this interface
- Will follow ONAP's RESTful API Design Specification
- The interface will include the concept of data-stores inspired by Network Management Datastore Architecture (NMDA) and as used in RESTConf
- The application should be able to easily switch between 'pass-through' and other datastores (also identical rest endpoint and responses)
References
Follow principles/patterns of RESTCONF RFC-8040 https://datatracker.ietf.org/doc/html/rfc8040
Follow principles/patterns of yang-patch RFC-8072 https://datatracker.ietf.org/doc/html/rfc8040
Follow principles/patterns of RESTCONF NMDA RFC-8527 https://datatracker.ietf.org/doc/html/rfc8527
Issues & Decisions
Issues | Notes | Decisions | |
---|---|---|---|
1 | KPI for De-registration of 100 CM-handles | This was mentioned. Was this ever agreed, is this a valid use case that needs to be covered together with the Registration ? | Not priority for now, but acceptable if we match the registration req. |
2 | DMI delay | Could we get some feedback on DMI-delays for other use cases as not mentioned in FS document | Awaiting for ETH feedback AP On Kolawole Adebisi-Adeolokun and Csaba Kocsis Provided |
3 | Number of instances In some cases, ETH have used 2 instances, can we verify the number of instances for each use case. Some of the req were defined per instance and resources used : Identify which of these ? | Agreed to; CPS use 1 instance currently, but should focus on aligning performance with 2 instances for all use case | |
4 | Input Load Distribution the CM-handle search and ID search | Currently has 5 parallel request between them distributed at 2.5 each. This fractional distribution isn't feasible for parallel processing; the load should be allocated as whole numbers. Load needs to be distributed at. Would it be acceptable to adjust this distribution to either 2 or 3 parallel requests each (and vice versa ) without any negative repercussions? Agreed to do 6 parallel request combined total and divide the load to 3 parallel request each | |
5 | Regarding CM-handle search and ID search | FS only identified Module performance, are there any testing done towards a combined search of properties and modules in a single query Confirmed no other testing was previously done on this..... CPS have the capabilities to do mixed testing. ETH tbc on if they want to consider this ( Csaba Kocsis ) |
Requirements
Note |
---|
Please note this section was added long after the implementation and focuses on characteristic and enhancements after this study only. |
Excerpt Include | ||||
---|---|---|---|---|
|
Characteristics
It is proposed that reported characteristics will be used as a baseline for NCMP when agreed and sign-off.
Operation | Concurrent requests/parallel | DMI Delay | Response size | Performance Requirement (Blue Stone tablet KPI) | Notes | Sign-Off | |
---|---|---|---|---|---|---|---|
1 | Registration of 20,000 CM-handles (in batches of 100) | 1 (requests are sequential) | 100 ms to get module references | N/A |
|
| |
2 | De-registration of 100 CM-handles | 1 (requests are sequential) | No Module delays | N/A |
| De-registration is currently not mentioned in Stone Tablet KPI or FS, however we have agreed to match the performance of registration for now as de-reg is also not a priority at this point in time | |
3 | CM-handle ID search with Module filter | 3 | N/A | 20,000 CM Handles i.e. 100*20.000 = 2MB | As provided byCsaba Kocsis 0.625 seconds/Operation | FS stated 5 parallel request for both ID search and search. CPS to run with 3 parallel each for both ID search and Search meaning a combine total of 6 parallel request | |
4 | CM-handle search with Module filter | 3 Run in parallel with #3 | N/A | 20,000 CM Handles i.e. 500*20.000 = 10MB | As provided by Csaba Kocsis 13 seconds/Operation | FS stated 5 parallel request for both ID search and search. CPS to test with 3 parallel each for both ID search and Search meaning a combine total of 6 parallel request | |
5 | Synchronous single CM-handle pass-through read | 10 | 300 ms Csaba Kocsis | 5 KB | 25 (parallel) request/sec | Read are done in parallel with Write | |
6 | Synchronous single CM-handle pass-through write (CUD) | 10 | 670 msCsaba Kocsis | 5 KB | 13 (parallel) request/sec | No response is expected | |
7 | Batch/Bulk Read | 1 read request with 200 cmHandle per second | 150 cmhandles/sec |
Notes
- This is for mixed TCs
- Single KPIs will be monitored in NCMP owned pipeline with our performance every day(2 hrs interval) - Performance
Synchronous single cm-handle pass-through (read) requests
Parameter | Expectation | Notes | Sign-Off | ||
---|---|---|---|---|---|
Average Response Size | 5KB | Shall not exceed 5KB | |||
Concurrent request | 12 clients requests toward 1 NCMP simultaneously DMI also support 12 simultaneous requests | 40ms of overhead on top of DMI latency for each requests, at most for NCMP request. This shall remain within 40ms for 12 parallel requests. Given the DMI delay below; this means up to 240 request per second | |||
DMI Delay | 10ms | This is not in control of CPS. Assume DMI is 1.25 seconds average DMI response time for high latency, low latency =10 ms, this should also work for DMI Plugin. I.e 40ms ontop of the DMI. 1.25seconds+40ms= 1.29seconds | |||
Test Environment |
| ||||
Security | Disable Basic Authentication in Springboot | If configurable from application yaml, then it’s acceptable. |
Open Issues & Decisions
Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
RESTCONF/NETCONF relationship
NCMP URI
NCMP URI format to follow below pattern
<OP>/ncmp/<v{vNumber}>/ch/<cmHandle>/<data|operations|{ncmpAction}>/ds/{datastore}?[rp:]{resourcePath}&{options}
Below table shows the proposed interface, actual implementation might deviate from this but can be accessed from
- Gerrit Source
- Read-the-docs: https://docs.onap.org/projects/onap-cps/en/latest/design.html#offered-apis
URI | Mandatory or Optional | |
---|---|---|
<OP> | the HTTP method | Mandatory |
ncmp / | the ncmp root resource | Mandatory |
<v{vNumber}> | version of the ncmp interface <path> is the target resource URI <query> is the query parameter list | Mandatory |
ch/<cmHandle> | unique (string) identifier of a yang tree instance. | Mandatory |
<data|operations|{ncmpAction}> | request category - yang data, rpc operation or a (non-modelled) ncmp api action. this could be data, operations or ncmpAction (e.g. 'sync-data') | Mandatory |
ds/{datastore} | Mandatory | |
<resourceIdentifier> | the path expression identifying the resource that is being accessed by the operation. If this field is not present, then the target resource is the API itself. | Optional |
<options> | Parameters with the familiar form of "name=value" pairs. Query parameters are optional to implement by the server and optional to use by the client. Each optional query parameter is identified by a URI | Optional DMI should be able to support (/pass through) ANY parameter associated with the RESTCONF message; see Section 3.4 of [RFC3986]. |
Datastores
New datastores are defined for ncmp to access the CPS 'running' or 'operational' datastore.
Alternatively, the request can be sent directly to the 'device' itself (bypassing CPS datastores) using one of the 'passthrough-*' datastores options as below
The new ncmp datastores required for ONAP Release I include :
Excerpt Include | ||||
---|---|---|---|---|
|
Excerpt | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Datastore, Paths and Format Combinations for Read Operations
*Note Convert cpsPath to RESTConfPath wil only support 'absolute' cpsPath for conversion no query-type paths Read Example
Works Items for above.
Datastore, Paths and Format Combinations for Write Operations
Write Example
|
Sync & Model API
Expand | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
NCMP / DMI Overview
Expand | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- Create a Wiki page with a clear diagram showing NCM and DMI and its interfaces detailing the scope of THIS (and other) spike
- Update V1 of the interface (communicate with E2E Slicing)
- Detail CRUD operations
- Detail Patch
- Include datastore options (pass-through)
- Agree on parameter names and use them consistently
- Agree on JSON output format
- Resource 'path' can cover cps-paths, rest-conf path (for pass-through), and any proprietary paths
- Only 'hint' at
- async options
- bulk operations
A/C
- Wiki page detailing points above
- Share an agreement with the team
- Present at community
Out of scope
- actual YAML definitions (separate user story)
Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
Open Issues & Decisions
...
Description
...
Notes
...
Decision
...
Currently, we wrap the response of GET operations using the data node wrapper.
...
e.g. http://localhost:8080/cps/api/v1/data
http://localhost:8080/cps/api/v1/operation
...
Parent data resource identifier can handle any path using the same query parameter
- cpsPath
- RESTConf Path
- Proprietary Path
...
Yml should include return types and examples of the payload
...
- Add child and its descendants (supported in cps core)
- Add all list elements (supported in cps core)
- Replace child and its descendants (supported in cps core)
- Replace all list elements (pending in cps core)
- Update single leaf (new)
- Add list entry (new)
...
RESTCONF/NETCONF relationship
NCMP URI
NCMP URI format to follow below pattern
<OP>/ncmp /<v{v-number}>/cmhandles/<cm-handles>/<data|operations|{ncmp-operation}>/ds/{datastore}/{resource-path}?{query}
...
the set of parameters associated with the RESTCONF message; see Section 3.4 of [RFC3986]. RESTCONF parameters have the familiar form of "name=value" pairs. Most query parameters are optional to implement by the server and optional to use by the client. Each optional query parameter is identified by a URI
...
Datastores
New datastores are defined for ncmp to access the CPS 'intended' or 'operational' datastore.
Alternatively, the request can be sent directly to the 'device' itself (bypassing CPS datastores) using one of the 'passthrough-*' datastores options as below
The new ncmp datastores required for ONAP Release I include :
...
Future datastores to be supported by NCMP include :
...
If datastore (ds/{datastore}) is omitted from URI, the datastore from cmhandle is used
If datastore (ds/{datastore}) is omitted from URI AND the model/moduleSet exists, the datastore defaults to ncmp-datastores:running
Yang data resource actions and RPC operations are run directly on the 'device' meaning ncmp-datastores:passthrough-running is used for these request
Different defaults for read and write
e.g. ncmp-datastores:operational for read requests
...
REST API
...
REST
...
URI / Payload
...
Header Parameters
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{dataresource-identifier}?fields={fields}&topic=
{topicId}
...
Scenario : Read the GNBCUCPFunction for cmhandle "335ff" as
passthrough
Method : GET
URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores:
passthrough-running//GNBCUCPFunction?fields=pLMNId;gNBId;
gNBIdLength;syncStatus&topic=anr-app:anr24234234:v2
Header :
Accept: application/json
passthrough
Method : GET
URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores:
passthrough-running//GNBCUCPFunction?fields=pLMNId;gNBId;
gNBIdLength;syncStatus&topic=anr-app:anr24234234:v2
Header :
Accept: application/json
Event Response:
{
[
{
"xpath": "/ManagedElement[@id=Kista-001]/GNBCUCPFunction
[@id=1]",
"leaves": {
"pLMNId : [ { "mcc" : "01", "mnc" : "123" } ],
"gNBId" : 123,
"gNBIdLength" : 3
"syncStatus" : "SYNCHRONIZED"
}
]
}
...
{ncmp-root}/ncmp/v1/cm-handle//ds /ncmp-datastores:passthrough-running/{dataresource-identifier}?fields={fields}
...
Scenario : Read the EUtranCellFDD.(administrativeState,
operationalState, tac, earfcndl, cellId, physicalLayerCellId) for cmhandle
"335ff" as passthrough
Method : GET
URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores:
passthrough-running//EUtranCellFDD?fields=administrativeState;
operationalState;tac;earfcndl;cellId;physicalLayerCellId
Header :
Accept: application/json
Response:
HTTP/1.1 200 OK
Date: Thu, 26 Apr 2021 20:56:30 GMT
Server: example-server
Content-Type: application/json
{
[
{
"xpath": "/ManagedElement[@id="Kista-001"]/ENodeBFunction
[@id="1"]/EUtranCellFDD[@id="LTE05ERBS00008-2"],
"leaves": {
"administrativeState" : "UNLOCKED",
"cellId" : 2,
"earfcndl" : "4".
"operationalState" : "ENABLED",
"physicalLayerCellId" : 0,
"tac" : "1"
},
{
"xpath": "/ManagedElement[@id="Kista-001"]/ENodeBFunction
[@id="1"]/EUtranCellFDD[@id="LTE05ERBS00008-3"],
"leaves": {
"administrativeState" : "UNLOCKED",
"cellId" : 3,
"earfcndl" : 4.
"operationalState" : "ENABLED",
"physicalLayerCellId" : 3,
"tac" : "3"
},
{
"xpath": "/ManagedElement[@id="Kista-001"]/ENodeBFunction
[@id="1"]/EUtranCellFDD[@id="LTE05ERBS00008-4"],
"leaves": {
"administrativeState" : "UNLOCKED",
"cellId" : 4,
"earfcndl" : 4.
"operationalState" : "ENABLED",
"physicalLayerCellId" : 4,
"tac" : "4"
}
]
}
...
ALTERNATIVE OUTPUT TO ABOVE
SCENARIO
Read a data resource directly from
source (passthrough) for a
cmHandle. Only return specific field(s).
Synchronous call
...
Scenario : Read the EUtranCellFDD.(administrativeState,
operationalState, tac, earfcndl, cellId, physicalLayerCellId) for cmhandle
"335ff" as passthrough
Method : GET
URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores:
passthrough-running//EUtranCellFDD?fields=administrativeState;
operationalState;tac;earfcndl;cellId;physicalLayerCellId
Header :
Accept: application/json
Response:
HTTP/1.1 200 OK
Date: Thu, 26 Apr 2021 20:56:30 GMT
Server: example-server
Content-Type: application/json
{
[
{
"ManagedElement[@id="Kista-001"] : [
"ENodeBFunction[@id="1"] : [
"EUtranCellFDD[@id="LTE05ERBS00008-2"] : {
"administrativeState" : "UNLOCKED",
"cellId" : 2,
"earfcndl" : "4".
"operationalState" : "ENABLED",
"physicalLayerCellId" : 0,
"tac" : "1"
}
]
]
{
OR
"/ManagedElement[@id="Kista-001"]/ENodeBFunction[@id="1"]
/EUtranCellFDD[@id="LTE05ERBS00008-3"],
{
"administrativeState" : "UNLOCKED",
"cellId" : 3,
"earfcndl" : 4.
"operationalState" : "ENABLED",
"physicalLayerCellId" : 3,
"tac" : "3"
},
{
OR
"xpath": "/ManagedElement[@id="Kista-001"]/ENodeBFunction
[@id="1"]/EUtranCellFDD[@id="LTE05ERBS00008-4"],
"leaves": {
"administrativeState" : "UNLOCKED",
"cellId" : 4,
"earfcndl" : 4.
"operationalState" : "ENABLED",
"physicalLayerCellId" : 4,
"tac" : "4"
}
]
}
...
Read a data resource with some leaf value condition directly from source (passthrough) for a cmHandle. Only
return specific field(s).
Synchronous call
...
Scenario : Read the LocalSctpEndpoint.(interfaceUsed==X2,
sctpEndpointRef) for cmhandle "335ff" as passthrough
Method : GET
URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores:
passthrough-running//LocalSctpEndpoint[ interfaceUsed=X2 ]?
fields=sctpEndpointRef
Header :
Accept: application/json
Response:
HTTP/1.1 200 OK
Date: Thu, 26 Apr 2021 20:56:30 GMT
Server: example-server
Content-Type: application/json
{
[
{
"xpath": "/ManagedElement[@id=Kista-001]/...
/LocalSctpEndpoint[@id=3]",
"leaves": {
"sctpEndpointRef" : "some-sctp-ref"
}
]
}
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{parent-
data-resource-identifier}
{
<new-yang-data-resource>
}
OR with datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhande>/
{parent-data-resource-identifier}
{
<new-yang-data-resource>
}
...
Scenario : Create ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4
under _3gpp-common-managed-element:ManagedElement=Kista-001
/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1
Method : POST
URI : : {ncmp-root}/ncmp/v1/cm-handle/34l5k32/ManagedElement
[@id=Kista-001]/GNBDUFunction[@id=1]
Header :
Content-Type: application/json
Body :
{
NRSectorCarrier" : {
"id" : 4
"attributes" : {
"userLabel : "nrSectorCar-4",
"txDirection" : "DL_AND_UL",
"configuredMaxTxPower" : "90",
"arfcnDL" : "9999999",
"arfcnUL" : "888888",
"bSChannelBwDL" : "90",
"bSChannelBwUL" : "80",
"sectorEquipmentFunctionRef" : "_3gpp-common-
managed-
element:
ManagedElement=1/.../sef:SectorEquipmentFunction=2"
}
}
}
...
Update a data resource for a cmhandle
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{parent-
data-resource-identifier}
{
<updated-yang-data-resource>
}
OR with datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhande>/
{parent-data-resource-identifier}
{
<updated-yang-data-resource>
}
...
Scenario : Update ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4
txDirection to "DL_AND_UL" under _3gpp-common-managed-element:
ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1
Method : PATCH
...
Header :
Content-Type: application/json
Body :
{
NRSectorCarrier" : {
"id" : 4
"attributes" : {
"txDirection" : "DL_AND_UL"
}
}
}
...
Delete a data resource for a cmhandle
...
DELETE
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{data-
resource-identifier}
OR with datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhande>/
{data-resource-identifier}
...
Get model (module set) for CMHandle
...
{ncmp-root}/ncmp/v1/model/<handleId>
...
Scenario : Get the model data for CMHandle with id "335ff"
Method : GET
URI : {ncmp-root}/ncmp/v1/model/335ff
Header :
Accept: application/yang-data+json
Response:
{
"ietf-yang-library:modules-state" : {
"module-set-id" :
"5479120c17a619545ea6aff7aa19838b036ebbd7",
"module" : [
{
"name" : "_3gpp-nr-nrm-nrsectorcarrier",
"revision" : "2020-12-09",
"schema" : "/modules/_3gpp-nr-nrm-
nrsectorcarrier/2020-12-09",
"namespace" : "urn:3gpp:sa5:_3gpp-nr-nrm-
nrnetwork-nrsectorcarrier",
"feature" : [ "feature1", "feature2" ],
"deviation" : [
{
"name" : "_3gpp-nr-nrm-
nrsectorcarrier",
"revision" : "2020-12-17"
}
],
"conformance-type" : "implement"
},
{
"name" : "ietf-yang-library",
"revision" : "2016-06-21",
"schema" : "/modules/ietf-yang-library
/2016-06-21",
"namespace" :
"urn:ietf:params:xml:ns:yang:ietf-yang-
library",
"conformance-type" : "implement"
}
}
}
}
...
Create a data resource for a cmhandle
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{parent-
data-resource-identifier}
{
<new-yang-data-resource>
}
OR with datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhande>/
{parent-data-resource-identifier}
{
<new-yang-data-resource>
}
...
Scenario : Create ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4
under _3gpp-common-managed-element:ManagedElement=Kista-001
/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1
Method : POST
URI : {ncmp-root}/ncmp/v1/cm-handle/34l5k32/_3gpp-commonmanaged-element:ManagedElement=Kista-001/_3gpp-nr-nrmgnbdufunction:GNBDUFunction=1
Header :
Content-Type: application/yang-data+json
Body :
{
"ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier" {
"top3gpp:id" : 4
"attributes" : {
"mf3gpp:userLabel : "nrSectorCar-4",
"txDirection" : "DL_AND_UL",
"configuredMaxTxPower" : "90",
"arfcnDL" : "9999999",
"arfcnUL" : "888888",
"bSChannelBwDL" : "90",
"bSChannelBwUL" : "80",
"sectorEquipmentFunctionRef" : "_3gpp-common-
managed-element:ManagedElement=1/.../sef:SectorEquipmentFunction=2"
}
}
}
...
Delete a data resource for a cmHandle
...
{ncmp-root}/ncmp/v1/<handleId>/ds/ncmp-
datastores:passthrough-running/{data-resource-
identifier}
OR with datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhande>/
{parent-data-resource-identifier}
...
Scenario : Delete NRSectorCarrier=4
Method : DELETE
URI : {adapter-root}/ncmp/v1/cm-handle/34l5k32/_3gpp-commonmanaged-element:ManagedElement=Kista-001/_3gpp-nr-nrmgnbdufunction:GNBDUFunction=1/_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=4
...
Update a data resource for a cmHandle
...
{ncmp-root}/ncmp/v1/data/<handleId>/ds/ncmp-
datastores:passthrough-running/{data-resource-
identifier}
{
<yang-data-sub-resource>
}
OR with datastores defaults
{ncmp-root}/ncmp/v1/cmhandle/<cmhandle>/
{parent-data-resource-identifier}
{
<yang-data-sub-resource>
}
...
Scenario : Add NRSectorCarrier=4 to GNBDUFunction=1 if it doesn't
already exist
Method : PATCH
URI : {ncmp-root}/ncmp/v1/cm-handle/d32455f/_3gpp-commonmanaged-element:ManagedElement=Kista-001/_3gpp-nr-nrmgnbdufunction:GNBDUFunction=1
Header
Content-Type: application/yang-data+json
Body
{
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 : {
"id" : 1,
"_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier" {
"top3gpp:id" : 4
"attributes" : {
"mf3gpp:userLabel : "nrSectorCar-4",
"txDirection" : "DL_AND_UL",
"configuredMaxTxPower" : "90",
"arfcnDL" : "9999999",
"arfcnUL" : "888888",
"bSChannelBwDL" : "90",
"bSChannelBwUL" : "80",
"sectorEquipmentFunctionRef" : "_3gpp-common-
managed-element:ManagedElement=1/.../
sef:SectorEquipmentFunction=2"
}
}
}
}
}
...
Multiple edits under a target data
resource for a single cmHandle
...
PATCH
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{data-
resource-identifier}
{
yang-patch payload
}
OR using datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/
{data-resource-identifier}
{
yang-patch payload
}
...
Scenario : Make multiple updates under the GNBDUFunction=1 data
resource
Method : PATCH
URI : {ncmp-root}/ncmp/v1/cm-handle/32rf234/_3gpp-common-
managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction[id=1]
Header :
Content-Type: application/yang-patch+json
Body :
{
"ietf-restconf:yang-patch" : {
"patch-id" : "change-cell-and-carriers",
"edit" : [
{
"edit-id" : 1,
"operation" : "create",
"target" : "/_3gpp-nr-nrm-nrcelldu:NRCellDU=1",
"value" : {
"_3gpp-nr-nrm-nrcelldu:NRCellDU" : {
"id" : 1,
"cId" : 511,
"userLabel" : "some-cell-label",
...
}
}
},
{
"edit-id" : 2,
"operation" : "create",
"target" : "/_3gpp-nr-nrm-nrcelldu:NRCellDU=2",
"value" : {
"_3gpp-nr-nrm-nrcelldu:NRCellDU" : {
"id" : 2,
"cId" : 512,
"userLabel" : "some-other-cell-label",
...
}
}
},
{
"edit-id" : 3,
"operation" : "merge",
"target" : "/_3gpp-nr-nrm-nrcelldu:NRCellDU=3",
"value" : {
"_3gpp-nr-nrm-nrcelldu:NRCellDU" : {
"cId" : 412,
"userLabel" : "yet-another-cell-label",
...
}
}
},
{
"edit-id" : 4,
"operation" : "merge",
"target" : "_3gpp-nr-nrm-nrcelldu:NRCellDU=4",
"value" : {
"_3gpp-nr-nrm-nrcelldu:NRCellDU" : {
"cId" : 412,
"userLabel" : "yet-another-cell-label",
...
}
}
}
]
}
}
Response :
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Last-Modified: Thu, 26 Jan 2017 20:56:30 GMT
Content-Type: application/yang-patch+json
{
"ietf-yang-patch:yang-patch-status" : {
"patch-id" : "change-cell-and-carriers",
"ok" : [null]
}
}
...
Execute a yang action
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{data-
resource-identifier}/{action}
{
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
Note : If the "action" statement
has no
"input" section, the request
message MUST
NOT include a message-body
OR using datastores defaults
{ncmp-root}/ncmp/v1/cm-handle
/<cmhandle>/data/{data-resource-
identifier}
/{action}
{
input: {
"param1Name" :
"param1Value”,
"param2Name" :
"param2Value”
}
}
...
Method : POST
URI : {ncmp-root}/ncmp/v1/cm-handle/3445fff/_3gpp-common-
managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction=1/resetPort (dummy non-existent action)
Header :
Content-Type: application/yang-data+json
Body :
{
"input" : {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
...
Execute an rpc operation
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>
/operations/ds/ncmp-datastores :passthrough-
running/{module-name}:{action}
{
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
Note : If there is no "input"
section,
the request MUST NOT include a
message-body
OR using datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>
/operations/{module-name}:{action}
{
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
...
Method : POST
URI : {ncmp-root}/ncmp/v1/cm-handle/3445fff/operations/_3gpp-
common-managed-element:resetDevice (dummy action)
Header :
Content-Type: application/yang-data+json
Body :
{
"input" : {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
...
Read a filtered set of data under a data
resource for a cmHandle
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{data-
resource-identifier}?fields={fields-expression}
options
Option | Description |
---|---|
fields | Request a subset of the target resource contents |
OR using datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>
/data/{data-resource-identifier}?fields={fields-
expression}
...
Scenario : Read GNBDUFunction=1.userLabel and NRSectorCarrier with
its attributes txDirection & arfcnUL
Method : GET
URI : {ncmp-root}/ncmp/v1/cm-handle/3fsdfr3/_3gpp-common-
managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction=1?fields=userLabel;(_3gpp-nr-nrm-
nrsectorcarrier:NRSectorCarrier(txDirection;arfcnUL)
{ncmp-root}/ncmp/v1/cm-handle/3fsdfr3/ManagedElement=Kista-001
//NRSectorCarrier
Header :
Accept : application/yang-data+json
Body:
Response :
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Content-Type: application/yang-data+json
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 {
"userLabel" : "myGnodeBFunction-1",
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=1 {
attributes {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "55555"
}
},
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=2 {
attributes {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "66666"
}
},
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=3{
attributes {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "77777"
},
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=4 {
attributes {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "88888"
}
}
}
}
...
Read descendant data resources with
specified fields under a given data
resource for a given cmHandle
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{data-
resource-identifier}?fields={fields-expression}
options
Option | Description |
---|---|
fields | Request a subset of the target resource contents |
OR using datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/
{data-resource-identifier}?fields={fields-
expression}
...
Scenario : Read all NRCellDU MOs with attributes userLabel and id under
the _3gpp-nr-nrm-gnbdufunction:GNBDUFunction MO
Method : GET
URI : {ncmp-root}/ncmp/v1/cmhandle/3445fff/_3gpp-common-
managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction=1?fields=_3gpp-nr-nrm-nrcelldu:NRCellDU
/attributes(administrativeState;operationalState)
Header :
Accept : application/yang-data+json
Response :
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Content-Type: application/yang-data+json
{
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 {
_3gpp-nr-nrm-nrcelldu:NRCellDU=1 {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=2 {
"top3gpp:id" : "NR-Cell-002"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=3 {
"top3gpp:id" : "NR-Cell-003"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=4 {
"top3gpp:id" : "NR-Cell-004"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=5 {
"top3gpp:id" : "NR-Cell-005"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
}
}
}
}
...
Read data resources to a given depth
for a given cmHandle
...
POST
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
/ncmp-datastores:passthrough-running/{data-
resource-identifier}?depth={level}
Option | Description |
---|---|
depth | Request limited sub-tree depth in the reply content If '1' then only immediate data resource is retrieved If 'x' then x levels of data tree are retrieved 'unbounded' will get the full tree starting at the given dataresource-identifier |
OR using datastores defaults
{ncmp-root}/ncmp/v1/data/<cmhandle>/{data-
resource-identifier}?depth={level}
...
Method : POST
URI : {ncmp-root}/ncmp/v1/cm-handle/3445fff/_3gpp-common-
managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction=1?depth=4
Header :
Content-Type: application/yang-data+json
Accept : application/yang-data+json
Body:
Response :
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Content-Type: application/yang-data+json
{
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 {
# level 1
_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=1 { # level 2
"top3gpp:id" : "NRSectorCarrier-1", # level 3
"attributes" : { # level 3
"txDirection" : "DL_AND_UL", # level 4
"arfcnUL" : "55555", # level 4
...
}
},
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=2 {
"top3gpp:id" : "NRSectorCarrier-2",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "66666".
...
}
},
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=3{
"top3gpp:id" : "NRSectorCarrier-3",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "77777".
...
}
},
_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=4 {
"top3gpp:id" : "NRSectorCarrier-4",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "88888".
...
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=1 {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=2 {
"top3gpp:id" : "NR-Cell-002"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=3 {
"top3gpp:id" : "NR-Cell-003"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=4 {
"top3gpp:id" : "NR-Cell-004"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
_3gpp-nr-nrm-nrcelldu:NRCellDU=5 {
"top3gpp:id" : "NR-Cell-005"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
}
}
}
...
Create or replace the target data
resource for a CMHandle
...
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds/
{datastore}/{data-resource-identifier}
{
<yang-data-sub-resource>
}
OR using datastores defaults
{ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/
{data-resource-identifier}
{
<yang-data-sub-resource>
}
...
Method : PUT
URI : {ncmp-root}/v1/cm-handle/3445fff/_3gpp-common-managed-
element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1
Header :
Content-Type: application/yang-data+json
Body :
{
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction {
"userLabel" : "newGNB-001",
"gNBDUName" : "newGNBDUName-001"
....
}
}
...
Get data for list of CMHandles
...
PUT
...
{ncmp-root}/ncmp/v1/ds/{datastore}/{data-
resource-identifier}
OR using datastores defaults
{ncmp-root}/ncmp/v1/{data-resource-identifier}
...
Accept:
application
/json
(yangData
contains
the yang-
data
+json
payload as
per
individual
cmHandle
requests)
...
Scenario Get the NRCellDU=Cell-001 data for multiple cmhandles
Method : PUT
URI : {ncmp-root}/ncmp/v1/ds/ncmp-datastores:passthrough-running?
fields=_3gpp-common-managed-element:ManagedElement/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction/NRCellDU=NR-Cell-001
Header :
Accept : application/json
Body :
{
" operation" : "read", // inspired by yang patch
'operation'
"cmHandles" : ["34l5k32", "ddf4545", "45g6756"] //omit to get for all
cmhandles
}
Response :
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Content-Type: application/json
"response" : [
{
"cmHandle" : "34l5k32",
"yangData" : {
3gpp-common-managed-element:ManagedElement=1 {
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1
{
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrcelldu:NRCellDU=NR-
Cell-001" : {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
}
},
3gpp-common-managed-element:ManagedElement=1 {
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 {
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrcelldu:NRCellDU=NR-
Cell-001" : {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
}
}
}
},
{
"cmHandle" : "ddf4545",
"yangData" : {
3gpp-common-managed-element:ManagedElement=1 {
_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 {
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrcelldu:NRCellDU=NR-Cell-
001" : {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
}
}
}
}
},
{
"cmHandle" : "45g6756",
"yangData" : {
"ietf-restconf:errors" : {
"error" : [
{
"error-type" : "connectivity",
"error-tag" : "access-denied",
"error-message" : "Cannot read EMS
with given credentials"
}
]
}
}
}
]
}
...
Read resource data (with 'fields') for list
of CMHandles
...
{ncmp-root}/ncmp/v1/ds/{datastore}/{data-
resource-identifier}
OR
{ncmp-root}/ncmp/v1/{data-resource-identifier}
...
Accept:
application
/json
(yangData
contains
the yang-
data
+json
payload as
per
individual
cmHandle
requests)
...
Scenario Get the and select attributes GNBDUFunction.id of NRSectorCarrier and NRCellDUs
Method : POST
URI : {ncmp-root}/ncmp/v1//NRSectorCarrier?fields=top3gpp:id;_3gpp-
nr-nrm-nrsectorcarrier:NRSectorCarrier(top3gpp:id;attributes(txDirection;
arfcnUL);_3gpp-nr-nrm-nrcelldu:NRCellDU(top3gpp:id;attributes
(administrativeState;operationalState)
Header :
Content-Type: application/json
Accept : application/json
Body:
{
operation : "read",
"cmHandles" : ["1231", "1232", "1233", "1234"]
}
Response :
HTTP/1.1 200 OK
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Content-Type: application/json
"response" : [
{
"
" : "
cmHandle
1231",
"yangData" : {
_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1 {
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=1" : {
"top3gpp:id" : "NRSectorCarrier-1",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "55555".
...
}
},
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=2" : {
"top3gpp:id" : "NRSectorCarrier-2",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "66666".
...
}
},
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=3" : {
"top3gpp:id" : "NRSectorCarrier-3",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "77777".
...
}
},
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=4" : {
"top3gpp:id" : "NRSectorCarrier-4",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "88888".
...
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=1" : {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=2" : {
"top3gpp:id" : "NR-Cell-002"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=3" : {
"top3gpp:id" : "NR-Cell-003"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=4" : {
"top3gpp:id" : "NR-Cell-004"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=5" : {
"top3gpp:id" : "NR-Cell-005"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
}
}
}
},
{
"
" : "
cmHandle
1232",
"data" : {
_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1 {
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=2" : {
"top3gpp:id" : "NRSectorCarrier-2",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "66666".
...
}
},
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=3" : {
"top3gpp:id" : "NRSectorCarrier-3",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "77777".
...
}
}
}
},
{
"cmHandle" : "1233",
"yangData" : {
_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1 {
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrsectorcarrier:
NRSectorCarrier=4" : {
"top3gpp:id" : "NRSectorCarrier-4",
"attributes" : {
"txDirection" : "DL_AND_UL",
"arfcnUL" : "88888".
...
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=1" : {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
"_3gpp-nr-nrm-nrcelldu:NRCellDU=2" : {
"top3gpp:id" : "NR-Cell-002"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
},
}
},
{
"
" : "
cmHandle
1234",
"yangData" : {
_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1 {
"top3gpp:id" : "1",
"_3gpp-nr-nrm-nrcelldu:NRCellDU=1 {
"top3gpp:id" : "NR-Cell-001"
"attributes" : {
"administrativeState " : "LOCKED",
"operationalState" : "disabled"
...
}
}
}
}
]
}
...
Execute a yang action on multiple
CMHandles
...
{ncmp-root}/ncmp/v1/data/{data-resource-
identifier}/{action}
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
Note : If the "action" statement has no
"input" section, the request
message MUST
NOT include a message-body
...
Content-Type:
application/json
(yangData
contains the
yang-data
+json payload
as per individual
cmHandle
requests)
Method : POST
URI : {ncmp-root}/ncmp/v1/data/_3gpp-common-managed-element:
ManagedElement/_3gpp-nr-nrm-gnbdufunction:GNBDUFunction
/resetPort (dummy non-existent action)
Header :
Content-Type: application/json
Body :
{
operation : "action",
"cmHandles" : ["1231", "1232", "1233", "1234"],
"yangData" : {
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
}
Response Success
HTTP/1.1 202 Accepted
Date: Thu, 26 Jan 2021 20:56:30 GMT
Content-Type: application/json
//EMPTY BODY
Error Response :
HTTP/1.1 202 Accepted
Date: Thu, 26 Jan 2021 20:56:30 GMT
Content-Type: application/json
response : [
{
"cmHandle" : "
1232",
"yangData" : {
"ietf-restconf:errors" : {
"error" : [
{ # See
ietf.org/html/rfc6241#section-4.3
"error-type" : "protocol",
"error-tag" : "invalid-value",
"error-path" : "3gpp-common-managed-
element:ManagedElement/_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction/resetPort",
"error-message" : "Invalid input
parameter value for param2Name"
}
]
}
},
{
"cmHandle" : ""
1234",
"yangData" : {
"ietf-restconf:errors" : {
"error" : [
{ "error-type" : "protocol",
"error-tag" : "invalid-value",
"error-path" : "3gpp-common-
managed-element:ManagedElement/_3gpp-nr-nrm-
gnbdufunction:GNBDUFunction/resetPort",
"error-message" : "Invalid input
parameter value for param2Name" }
]
}
}
]
...
Execute an rpc operation on multiple
CMHandles
...
{ncmp-root}/ncmp/v1/operations/{module-name}:
{action}
{
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
Note : If there is no "input"
section,
the request MUST NOT include a
message-body
...
Method : POST
URI :{ncmp-root}/ncmp/v1/operations/_3gpp-common-managedelement:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1/resetDevice (dummy action)
Header :
Content-Type: application/json
Body :
{
operation : "action",
"handles" : ["1231", "1232", "1233", "1234"],
input: {
"param1Name" : "param1Value”,
"param2Name" : "param2Value”
}
}
...
{ncmp-root}/ncmp/v1/cm-handle/ /data/ds/ncmp-datastores:passthrough-running/ {xpath}?topic=<dmaap-topic-Identifier>
{ncmp-root}/ncmp/v1/cm-handle/ /data/ds/ncmp-datastores:running/{xpath}?topic=<dmaap-topic-Identifier>
**Async communication channel is DMaaP
Immediate response with a requestId is sent to the caller and the CRUD request is executed asynchronously where data is returned via the provided topic identifier.
...
Scenario : Async request to NCMP
Method : GET/POST/PATCH/PUT/DELETE
URI : {ncmp-root}/ncmp/v1/cm-handle/de3455/data/ds/ncmp-datastores:
passthrough-running/_3gpp-common-managed-element:
ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction:
GNBDUFunction=1?topic=5G:SectorCarrierOrchestrator-0012391:12
Body : // Include body where required
{
....
}
Response :
{
"requestId" : "<some-requestId>"
}
response data is published on the topic identified by <topicIdentifier>
keyed on request.
Output Specification
?fields={fields}&topic= {topicId}
Assynchronous
?fields={fields}&topic= {topicId}
Required Task
...
#
...
Description
...
Notes
...
Decision
...
Yml update with return types with examples of the payload
...
Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
References
...