...
- configClientType: cps
- # cps api
cps:
cpsUsername: cpsuser
cpsPassword: cpsr0cks!
cpsUrl: http://<cps-tbdmt-ip>:8080/execute
cpsCellListUrl: 'cps-ran-schemaset/get-cell'
cpsNbrListUrl: 'cps-ran-schemaset/get-nbr-list1'
A1 Interface Simulator (A1 Termination) with Kafka Cluster Communicator Module:
The O-RAN SC A1 Simulator (A1 SIM) is a RAN-Sim enhancement to add A1 interface support to RAN app for the SON use-case. It has an internal Kafka Cluster Communicator module which further redirects A1 Policy operations to a Kafka Cluster message topic, to be consumed by RAN app. Then, responses from RAN app are collected from another configured Kafka Cluster message topic. After a request message is sent, a response message will be expected within some configurable timeout interval (default: 30 sec).
Installation:
- A1 SIM has to be cloned from this link: https://gerrit.o-ran-sc.org/r/admin/repos/sim/a1-interface,general
Go to the directory: "a1-interface/near-rt-ric-simulator/test/STD_2.0.0" and edit the file called "build_and_start_with_kafka.sh"
On the line 98, change Kafka Cluster address and port: MSG_BROKER_URL=localhost:9092
Also, you can set request_topic and response_topic for per policy type. However, for the Step 5, you have to configure your topics named kafkatopicreq2 and kafkatopicres2.
To do so, go to the directory "a1-interface/near-rt-ric-simulator/test/KAFKA_DISPATCHER/resources" and edit the file named "policytype_to_topicmap.json"
After Kafka Cluster is being created, please validate existence of your topics using a command like the below:
P.S: Please don't forget to change the path for kafka-topics.sh in accordance with your Kafka Cluster installation.Code Block language bash $ /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092 kafkatopicreq2 kafkatopicres2
- In order to build & start A1 SIM with Kafka Cluster Communicator module, fire this command: "./build_and_start_with_kafka.sh duplicate-check kafka-srv publish-resp"
Parameters & definitions:- duplicate-check : A duplicate policy is when the policy JSON is exactly same as for a different policy id of the same type will not allowed.
- kafka-srv: Sets a URL and port for Kafka Cluster Communicator module like localhost:7075
- publish-resp: The Simulator will publish payloads to Kafka Cluster request topic, and will wait for a response from response topic.
Check to see both containers are available and running.$ docker ps
Code Block language bash $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd966210ce86 a1test "/bin/sh -c 'src/sta…" About a minute ago Up About a minute a1StdSimulator 1ac17bac7ffa kafka_dispatcher "/bin/sh -c src/star…" About a minute ago Up About a minute kafkamessagedispatcher
- Finally, run unit test cases:
$ ./basic_test.sh nonsecure duplicate-check ignore-ext-srv
When the test cases run successfully, you will see a message like the below:
********************
*** All tests ok ***
********************
Parameters & definitions:- duplicate-check: If the A1 SIM is being started with this flag, then the test cases must also use the same flag.
- ignore-ext-srv: This flag will ignore external-server that is not required for SON use-case.
You can observe control loop message for A1 based SON action via "kafka-console-consumer.sh" from your Kafka Cluster installation.
P.S: Please don't forget to change the path for "kafka-console-consumer.sh" in accordance with your Kafka Cluster installation.
Code Block | ||
---|---|---|
| ||
$ /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafkatopicreq2 --from-beginning
"{\"action\": \"CreatePolicy\", \"payload\": {\"scope\": {\"ueId\": \"ue1\", \"qosId\": \"qos1\"}, \"statement\": {\"priorityLevel\": 5}}, \"policy_type_id\": \"STD_1\", \"policy_id\": \"pi1\"}"
"{\"action\": \"UpdatePolicy\", \"payload\": {\"scope\": {\"ueId\": \"ue1\", \"qosId\": \"qos1\"}, \"statement\": {\"priorityLevel\": 5}}, \"policy_type_id\": \"STD_1\", \"policy_id\": \"pi1\"}"
"{\"action\": \"GetPolicyStatus\", \"payload\": null, \"policy_type_id\": \"STD_1\", \"policy_id\": \"pi1\"}" |
RAN App :
A new RAN App module in RAN-Sim is an abstraction of the function provided by an xApp to support A1-based actions. For Kohn release, RAN App will provide the following functions to support A1-based action for the ANR SON use case:
1.Receive A1 policy message over Kafka bus from A1 Termination
2.Communicate via websocket with RAN-Sim Controller to control the CU/DU NF in the Honeycomb NF modules, to achieve an end result similar to what an xApp would have done over E2.
For Kohn release, the A1 message received has handover (HO) related kpis and RAN App will effect a change in the configuration of the NR Cell Relation property in the appropriate CU(s).
...
server.port=9091
kafka.bootstrapAddress=10.31.4.44:9092
#spring.kafka.producer.bootstrap-servers=10.31.4.44:9092
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
ranapp.testing.topic.name=xapptest-topic
ranapp.testing.topic.id=testtopic
restapi.version=v1
websocketserver.address=10.31.4.44:8081
websocketserver.endpoint=/ransim/RansimAgent/ANR-xAPP:9091
ranapp.name=ANR-RanAPP:9091
ranapp.policytype=ANR
ranapp.hokpi1_threshold=100
kafkadispatcher.url=http://10.31.4.44:7075/policytypetotopicmapping/
...