# SMO Operating - Non RT RIC Dashboard With the OSC NONRTRIC Control Panel you can: * View and Manage A1 policies in the RAN (near-RT-RICs) * Graphical A1 policy creation/editing is model-driven, based on policy type’s JSON schema * View and manage producers and jobs for the Information Coordination Service * Configure A1 Policy Management Service (add/remove near-rt-rics) * Interacts with the A1-Policy Management Service & Information Coordination Service (REST NBIs) via Service Exposure gateway In the paper, first you need to make sure the deployment of non RT RIC maybe by chcking in the web page: "[Release F - Run in Kubernetes](https://wiki.o-ran-sc.org/display/RICNR/Release+F+-+Run+in+Kubernetes)" Then you can use "[Testing End to End call in Release F](https://wiki.o-ran-sc.org/display/RICNR/Testing+End+to+End+call+in+Release+F)" to test the A1 interface(A1 Policy). Before you begin, just suggest that you need to understand [the details of the architecture Non-RealTime RAN Intelligent Controller (Non-RT-RIC)](https://wiki.o-ran-sc.org/display/RICNR/Release+F) ![](https://i.imgur.com/urf24Ne.png) Besides in this paper, if you want to do more function tests of Non-RealTime RIC (NONRTRIC), please just refer to the web page: "[Function Test](https://wiki.o-ran-sc.org/display/RICNR/Function+Test)". You can use the demo scripts/tests to do many function tests to check the function of NONRTRIC. Please check the test environment below(also in the web page): ![](https://i.imgur.com/7n7BSZI.png) But, just let you know, this will spend many hours(days) to go through all the scripts/tests. The test engine as well as all available test scripts is available in the nonrtric repo. Clone the repo and go to the auto-test directory: ``` git clone "https://gerrit.o-ran-sc.org/r/nonrtric" cd nonrtric/test/autotest ``` ## A1 Policy tests Let's start the A1 policy test here and see the end to end call. ![](https://i.imgur.com/OWv1Aps.png) First to check which port your control panel is running, the following command can be used: ``` sudo kubectl get svc -n nonrtric controlpanel ``` ![](https://i.imgur.com/07XFG1N.png) Then open Control Panel in browser, in this case port for HTTP connection would be 30091 and for HTTPS 30092. ![](https://i.imgur.com/zuNcIXR.png) This page describes how to get the release F version of Non-RT RIC up and running locally with three separate A1 simulator (previously called Near-RT RIC A1 Interface) docker containers providing STD_1.1.3, STD_2.0.0 and OSC_2.1.0 versions of the A1 interface. All components of the Non-RT RIC run as docker containers and communicate via a private docker network with container ports, ports also available on localhost. Details of the architecture can be found from [Release F](https://wiki.o-ran-sc.org/display/RICNR/Release+F) page. ### Ports The following ports will be allocated and exposed to localhost for each component. If other port(s) are desired, then the ports need to be replaced in the container run commands in the instructions further below. (Note: below is the docker container port, you need to check the ports that used in K8s) | Component | Port exposed to localhost(http/https) | | -------- | -------- | | A1 Policy Management Service | 8081/8443 | |A1 Simulator (previously called Near-RT RIC A1 Interface) |8085/8185, 8086/8186, 8087/8187| |Information Coordinator Service|8083/8434| |Non-RT RIC Control Panel |8080/8880| |SDNC A1-Controller |8282/8443| |Gateway |9090 (only http)| |App Catalogue Service |8680/8633| |Helm Manager |8112 (only http)| |Dmaap Mediator Producer | 9085/9185| |Dmaap Adapter Service |9087/9187| ### Check the RICs up and available In the OSC non RT-RIC deployment, there are 6 A1 simulators that you can use to do some tests. You can use the Dashboard to check he status. ![](https://i.imgur.com/LVa4ayV.png) Or use command to check: ``` curl localhost:8081(or 30091)/a1-policy/v2/rics ``` Or use browser to check: ``` http://localhost:8081(or 30091)/a1-policy/v2/rics ``` ![](https://i.imgur.com/WfITfty.png) ### Add Policy Type for RIC The A1 simulators using version STD_2.0.0 and OSC_2.1.0 supports policy types. Run the commands below to add one policy types in ric1 and ric5. Create the file with policy type for ric1 ``` osc_pt1.json { "name": "pt1", "description": "pt1 policy type", "policy_type_id": 1, "create_schema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "OSC_PT1_0.1.0", "description": "QoS policy type", "type": "object", "properties": { "scope": { "type": "object", "properties": { "ueId": { "type": "string" }, "qosId": { "type": "string" } }, "additionalProperties": false, "required": [ "ueId", "qosId" ] }, "statement": { "type": "object", "properties": { "priorityLevel": { "type": "number" } }, "additionalProperties": false, "required": [ "priorityLevel" ] } } } } ``` ![](https://i.imgur.com/Xcz4fmF.png) Put the policy type to ric1 - should http response code 201: ``` curl -X PUT -v "http://localhost:8085/a1-p/policytypes/123" -H "accept: application/json" \ -H "Content-Type: application/json" --data-binary @osc_pt1.json ``` ![](https://i.imgur.com/YJ2a8aA.png) Create the file with policy type for ric5: ``` std_pt1.json { "policySchema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "STD_QOS_0_2_0", "description": "STD QOS policy type", "type": "object", "properties": { "scope": { "type": "object", "properties": { "ueId": { "type": "string" }, "qosId": { "type": "string" } }, "additionalProperties": false, "required": [ "ueId", "qosId" ] }, "qosObjectives": { "type": "object", "properties": { "priorityLevel": { "type": "number" } }, "additionalProperties": false, "required": [ "priorityLevel" ] } } }, "statusSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "STD_QOS_0.2.0", "description": "STD QOS policy type status", "type": "object", "properties": { "enforceStatus": { "type": "string" }, "enforceReason": { "type": "string" }, "additionalProperties": false, "required": [ "enforceStatus" ] } } } ``` ![](https://i.imgur.com/Rc0Z9HV.png) Put the policy type to ric5 - should return http response code 201: ``` curl -X PUT -v "http://localhost:8087/policytype?id=std_pt1" -H "accept: application/json" -H "Content-Type: application/json" --data-binary @std_pt1.json ``` ![](https://i.imgur.com/GOHIc0W.png) ### End to end call from Policy Management After create the A1 policy of ric1 and ric5, you can open the browser to see the result in the dashboard of policy types. ![](https://i.imgur.com/rTNUz8b.png) Then you can finish the "[End to end call from Policy Management](https://wiki.o-ran-sc.org/display/RICNR/Testing+End+to+End+call+in+Release+F)" Perform Policy Operations via Control Panel in the web page. * For each policy type there is a '+' icon to create a new policy of that specific type. Click on '+' icon to create new policy ![](https://i.imgur.com/y97hC3z.png) * Choose your ric from drop-down menu and provide any arbitrary values for QoS-ID, UE-ID and Priority ![](https://i.imgur.com/HH4y5UX.png) * Submit the policy * An entry to the chosen A1 simulator (previously called Near-RT RIC A1 Interface) console/log should appear (see, for example, kubectl logs -n nonrtric a1-sim-osc-0 in case ric1 policy was created) * Click the pen icon to modify any policy ![](https://i.imgur.com/mhJl0VI.png) * Modifications are submitted in the same way as in creation, and the resulting simulator log should also be same as the one we saw in creation ![](https://i.imgur.com/bYTxEIt.png) * Delete any policy by clicking the red trashcan icon ![](https://i.imgur.com/3wAZYV5.png) * Confirm deletion and verify the log on simulator side: ![](https://i.imgur.com/4fTRCRD.png) ![](https://i.imgur.com/kfyzCZc.png) ### End to end call from Information Coordinator Service ![](https://i.imgur.com/cvYr3Ch.png) From the Control Panel, Producer and Jobs can only be listed. ![](https://i.imgur.com/d1UZcww.png) #### Type Use the command to create Type ``` curl -X 'PUT' \ 'http://localhost:30091/data-producer/v1/info-types/type2' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "info_job_data_schema": { "$schema":"http://json-schema.org/draft-07/schema#", "title":"STD_Type1_1.0.0", "description":"EI-Type 1", "type":"object" } }' ``` Response could be both 200 and 201 depending if the command was used to create a new type or to modify an existing one. Response: 200 Type updated 201 Type created Use the command to delete Type ``` curl -X 'DELETE' \ 'http://localhost:30091/data-producer/v1/info-types/type2' \ -H 'accept: application/json' ``` Response: 204 Type deleted 404 Type not found ![](https://i.imgur.com/ebNm587.png) #### Producers Create Producer ``` curl -X 'PUT' \ 'http://localhost:30091/data-producer/v1/info-producers/2' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "info_producer_supervision_callback_url": "https://producer-stub:8093/callbacks/supervision/prod-a", "supported_info_types": [ "type2" ], "info_job_callback_url": "https://producer-stub:8093/callbacks/job/prod-a" }' ``` Response could be both 200 and 201 depending if the command was used to create a new producer or to modify an existing one. Response: 200 Producer updated 201 Producer created ![](https://i.imgur.com/HfQdv4R.png) After create the Producer, you can open the browser to check the result. ![](https://i.imgur.com/2Lj5MzI.png) Delete Producer ``` curl -X 'DELETE' \ 'http://localhost:30091/data-producer/v1/info-producers/2' \ -H 'accept: application/json' ``` Response: 204 Producer deleted 404 Producer not found #### Jobs Create Job ``` curl -X 'PUT' \ 'http://localhost:30091/data-consumer/v1/info-jobs/2?typeCheck=false' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "info_type_id": "type2", "job_result_uri": "https://ricsim_g3_1:8185/datadelivery", "job_owner": "ricsim_g3_1", "job_definition": {}, "status_notification_uri": "http://producer:80/" }' ``` ![](https://i.imgur.com/ViG2snN.png) ![](https://i.imgur.com/Twx0d1C.png) Delete Job ``` curl -X 'DELETE' \ 'http://localhost:30091/data-consumer/v1/info-jobs/1' \ -H 'accept: application/json' ``` Response: 204 Job deleted 404 Job not found ### Setup established communication with Near RT RIC Atfer you have deployed Near Real Time RIC, you can setup the Near RT RIC's coordinates (IP, port, etc) is specified in the recipe for the NonRTRIC then check the communication between Non RT RIC and Near RT RIC. According to the web page "[Running A1 and O1 Use Case Flows](https://wiki.o-ran-sc.org/display/GS/Running+A1+and+O1+Use+Case+Flows)", we guess there are some things wrong and need to be corrected. ![](https://i.imgur.com/AAbHIFY.png) First you need to check and make sure the Near RT RIC's parameter, and go to Non RT RIC dashboard to setup the communication. Remember to click update button below. Use the baseUrl parameter: `http://host_ip:32080/a1mediator` ![](https://i.imgur.com/uOMmuJy.png) After updating the RIC Configuration, go browsering the web page: ``` http://localhost:30091/a1-policy/v2/rics ``` ![](https://i.imgur.com/DHqHUSD.png) If you just shutdown the Near RT RIC machine and open the rics web page, you will see: ![](https://i.imgur.com/o1UMSNS.png)