This This page describes how to run current implementation for the O-DU Slice Assurance usecase.
...
Code Block |
---|
git clone "https://gerrit.o-ran-sc.org/r/nonrtric/rapp/ransliceassurance" |
Run using simulators
Run Dmaap MR / SDNR stub
...
Code Block | ||||
---|---|---|---|---|
| ||||
Example: └─ $ ▶ CONSUMER_HOST=http://localhost CONSUMER_PORT=3905 ./icsversion |
Use case using SMO deployment
For this case, the following components will be needed:
- DU simulator, that will send VES message.
- OAM controller, that will create stream to communicate with VES collector and trigger PM Job event in DU.
- VES Collector, representing the VES (REST) provider at SMO for all kind of events
- ONAP Dmaap, representing SMO DMaaP component, includes message-router
- Dmaap Adapter, that takes information from DMaaP and present it as a coordinated Information Producer
- ICS Information Coordinator Service, that coordinate/Register Information Types, Producers, Consumers, and Jobs.
For starting the OAM Controller and VES Collector, a minimal SMO deployment is needed. This can be started using the instructions from here and ignoring the ONAP-Policy steps. NonRT-RIC should be replaced for docker-compose file located in
Code Block | ||||
---|---|---|---|---|
| ||||
ransliceassurance/docker-compose/icsversion |
After running instructions from README file in oam repository, at least the following images should be running, note that some components has been remove as they are not needed in this scenario:
Image | Name |
nexus3.o-ran-sc.org:10004/o-ran-sc/nts-ng-o-ran-du:1.4.5 | ntsim-ng-o-du-1122 |
nexus3.onap.org:10001/onap/sdnc-image:2.2.3 | sdnr |
nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.10.1 | ves-collector |
nexus3.onap.org:10001/onap/sdnc-web-image:2.2.3 | sdnc-web |
nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18 | onap-dmaap |
nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4 | kafka |
persistence | |
identity | |
nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3 | zookeeper |
Using the sdnc-web image, it can be seen that a simulator DU node is "Connected"
After check that the DU node is connected, subscription stream can be created, the following Curl command can be used:
Code Block | ||||
---|---|---|---|---|
| ||||
curl -X PUT -H "Content-Type: application/yang-data+json" -H "Accept: application/yang-data+json" -d '{"subscription-streams":{"id":"stream-1","administrative-state":"unlocked","user-label":"stream1","ves-endpoint-protocol":"https","ves-endpoint-auth-method":"basic-auth","ves-endpoint-ip":"10.20.11.121","ves-endpoint-port":"8443","ves-endpoint-username":"sample1","ves-endpoint-password":"sample1"}}' -u admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U {{baseUrl}}/rests/data/network-topology:network-topology/topology=topology-netconf/node={{node}}/yang-ext:mount/o-ran-sc-du-hello-world:network-function/subscription-streams=stream-1 |
Once the subscription stream has been created, a performance-measurement-job should be created as well. In order to do this, the following curl command can be used:
Code Block | ||||
---|---|---|---|---|
| ||||
cat payload.json
{"performance-measurement-jobs":{"id":"pm-1","administrative-state":"unlocked","user-label":"pm","job-tag":"my-job-tag","performance-metrics":["/o-ran-sc-du-hello-world:network-function/o-ran-sc-du-hello-world:distributed-unit-functions[o-ran-sc-du-hello-world:id='O-DU-1211']/o-ran-sc-du-hello-world:cell[o-ran-sc-du-hello-world:id='cell-1']/o-ran-sc-du-hello-world:supported-measurements[o-ran-sc-du-hello-world:performance-measurement-type='user-equipment-average-throughput-uplink']/o-ran-sc-du-hello-world:supported-snssai-subcounter-instances[o-ran-sc-du-hello-world:slice-differentiator='1'][o-ran-sc-du-hello-world:slice-service-type='1']"],"granularity-period":30,"stream-target":"stream-1"}}
curl -X PUT -H "Content-Type: application/yang-data+json" -H "Accept: application/yang-data+json" -d @payload.json -u admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U {{baseUrl}}/rests/data/network-topology:network-topology/topology=topology-netconf/node={{node}}/yang-ext:mount/o-ran-sc-du-hello-world:network-function/performance-measurement-jobs=pm-1 |
In this case, a PM job has been created to send periodic information about user-equipment-average-throughput-uplink every 30 sec (according to granularity-period property)
Postman file with above commands can be found here.
After the PM job has been created, O-DU Simulator will start generating JSON VES PM stndDefined message and sending those messages to VES collector. This is an example of the message:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"event": {
"commonEventHeader": {
"domain": "stndDefined",
"eventId": "pm-1_1649363550",
"eventName": "stndDefined_performanceMeasurementStreaming",
"eventType": "performanceMeasurementStreaming",
"sequence": 5,
"priority": "Low",
"reportingEntityId": "",
"reportingEntityName": "O-DU-1122",
"sourceId": "",
"sourceName": "O-DU-1122",
"startEpochMicrosec": 1649363550000000,
"lastEpochMicrosec": 1649363580000000,
"nfNamingCode": "SIM-O-DU",
"nfVendorName": "O-RAN-SC SIM Project",
"stndDefinedNamespace": "o-ran-sc-du-hello-world-pm-streaming-oas3",
"timeZoneOffset": "+00:00",
"version": "4.1",
"vesEventListenerVersion": "7.2.1"
},
"stndDefinedFields": {
"stndDefinedFieldsVersion": "1.0",
"schemaReference": "https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob_plain;f=data-model/oas3/experimental/o-ran-sc-du-hello-world-pm-streaming-oas3.yaml#/components/schemas/performance-measurement-job",
"data": {
"id": "pm-1_1649363550",
"start-time": "2022-04-07T20:32:30.0Z",
"administrative-state": "unlocked",
"operational-state": "enabled",
"user-label": "pm",
"job-tag": "my-job-tag",
"granularity-period": 30,
"measurements": [{"measurement-type-instance-reference": "/o-ran-sc-du-hello-world:network-function/distributed-unit-functions[id='O-DU-1122']/cell[id='cell-1']/supported-measurements[performance-measurement-type='(urn:o-ran-sc:yang:o-ran-sc-du-hello-world?revision=2021-11-23)user-equipment-average-throughput-uplink']/supported-snssai-subcounter-instances[slice-differentiator='1'][slice-service-type='1']","value": 55877,"unit": "kbit/s"}
]
}
}
}
} |
Logs for the O-DU simulator can be checked using the following command:
Code Block | ||||
---|---|---|---|---|
| ||||
docker exec -it ntsim-ng-o-du-1122 tail -f /opt/dev/ntsim-ng/log/log.txt |
Run docker compose for ics version
As previously mention, a docker-compose file is available to run NonRt-Ric components and ODU Slice assurance Rapp. Docker compose file can be found in ransliceassurance/docker-compose/icsversion. To run it use the following command:
Code Block | ||
---|---|---|
| ||
docker-compose up -d |
After running the command, following docker images should be running:
Image | Name |
---|---|
nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-gateway:1.1.0 | nonrtric-gateway |
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-dmaap-mediator-producer:1.0.1 | dmaap-mediator-service |
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-dmaap-adaptor:1.0.1 | dmaap-adaptor-service |
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-controlpanel:2.3.0 | nonrtric-control-panel |
nexus3.o-ran-sc.org:10002/o-ran-sc/nonrtric-o-ru-closed-loop-recovery:1.0.1 | oru-app |
nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-information-coordinator-service:1.2.1 | ics |
nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-rapp-ransliceassurance-icsversion:1.0.0 | odu-app |
Using the nonrtric-control-panel, information about producers and jobs can be listed:
In order to start Slice assurance rapp, post request has to be send to the rapp:
Code Block | ||
---|---|---|
| ||
http://localhost:8095/admin/start |
Now a new job can be seen in the front end with information about Slice assurance rapp:
Logs from the rapp can be seen using:
Code Block | ||
---|---|---|
| ||
docker logs -f odu-app |