RICPLT-3059 multi e2term crash in rmr library

Change-Id: I0b3c44d6767c891561a8fab4d2271137d4044f15
Signed-off-by: Juha Hyttinen <juha.hyttinen@nokia.com>
6 files changed
tree: 19822298e16fbb6a774c0a9728b3943f26001203
  1. 3rdparty/
  2. api/
  3. cmd/
  4. docs/
  5. e2ap/
  6. manifests/
  7. pkg/
  8. releases/
  9. test/
  10. .gitignore
  11. .gitreview
  12. .readthedocs.yaml
  13. container-tag.yaml
  14. CONTRIBUTING.md
  15. Dockerfile
  16. go.mod
  17. go.sum
  18. INFO.yaml
  19. LICENSES.txt
  20. README.md
  21. RELNOTES
  22. run_submgr.sh
  23. tox.ini
README.md

Subscription Manager

Table of contents

Introduction

Subscription Manager is a basic platform service of RIC. It is responsible to serve, coordinate and manage xApps' subscriptions.

Submgr acts as an anchor point for subscription related internal messaging, i.e. every xApp sends its subscription related messages to Submgr. Submgr invokes Routing Manager (Rtmgr) to create or tear down the subscription related routes, and the appropriate E2 Termination to signal the subscription related event also towards the RAN.

The solution base on the xapp-frame project which provides the common HttpREST, RMR and SDL interfaces.

Current implementation provides the following functionalities:

  • Handles RIC_SUB_REQ and RIC_SUB_RESP type RMR messages
  • Utilizes E2AP encoder/decoder generated by ASN1-C
  • Generates New subscription ID and forwards subscription request to E2 termination
  • Keeps maintaining the status of subscriptions
  • Receives Subscription response and sends it back to the subscriber
  • Uses SUBMGR_SEED_SN environment variable to initialize subscription ID counter

Release notes

Check the separated RELNOTES file.

Prerequisites

  • Healthy kubernetes cluster
  • Access to the common docker registry

Project folder structure

  • /manifest: contains deployment files (Kubernetes manifests)
  • /cmd: contains go project's main file
  • /pkg: contains go project's packages
  • /config: contains default configuration file for the service
  • /test: contains CI/CD testing files (scripts, stubs, mocks, manifests)

Installation guide

Compiling code

Enter the project root and execute docker build -t submgr:tag .. The Dockerfile has two main phases. First is the code compilation, where it creates an intermediate container for downloading all dependencies then compiles the code. In the second phase it builds the production ready container.

NOTE: If you are behind proxy, see this guide: https://docs.docker.com/network/proxy/#configure-the-docker-client

Installing Subscription Manager

Preparing environment

Tag the submgr container according to the project release and push it to a registry accessible from all minions of the Kubernetes cluster. Edit the container image section of submgr-dep.yaml file and set the submgr image tag accordingly.

Deploying Subscription Manager

Issue the kubectl create -f {manifest.yaml} command in the following order

  1. manifests/namespace.yaml: creates the example namespace for routing-manager resources
  2. manifests/submgr/submgr-dep.yaml: instantiates the submgr deployment in the example namespace
  3. manifests/submgr/submgr-svc.yaml: creates the submgr service in example namespace

Testing and Troubleshoting

Subscription Manager's behaviour can be tested using the provided stub xApp (called RCO) and the stub E2 Termination (called E2T) on the following way.

  1. Compile and Installing subscription manager 2 Enter ./test/dbaas folder and issue kubectl apply -f ./manifests
  2. Enter ./test/e2t/ folder and run build.sh. After docker image successfully built, issue kubectl apply -f ./manifests
  3. Enter ./test/rco/ folder and run build.sh. After docker image successfully built, issue kubectl apply -f ./manifests
  4. Configure RMR routes accordingly

Sunny Day testing scenario:

  1. RCO (stub) sends valid Subscription Requests (12010) to SUBMGR.
  2. SUBMGR receives RCO's subscription request and generates and puts a new ID in the given request and forwards it to E2T (stub)
  3. E2T (stub) receives the Subscription Request message and sends a valid Subscription Response (12011) to SUBMGR
  4. SUBMGR accepts the Subscirption Response and forwards it to RCO (stub)

Rainy Day testing scenarios:

  • Wrong/Malformed Request

    1. RCO (stub) sends non-subsciption type (10000) message to SUBMGR.
    2. SUBMGR discards the non-subscription related tye message and emmits an error log entry on it's standard output
    3. RCO (stub) sends Subscription Request type (12010) messages to SUBMGR but with malformed payload
    4. SUBMGR accepts the Suubscription Requets but fails to decode so emmits an error log entry on it's standard output
  • Wrong/Malformed Response

    1. E2T (stub) sends Subsciption Response type (12011) message to SUBMGR but with wrong Subscription Sequence Number
    2. SUBMGR accepts the Suubscription Response but it emmits an error log entry on it's standard output since the given Sequence Number is invalid
    3. E2T (stub) sends Subscription Response type (12011) messages but with malformed payload to SUBMGR
    4. SUBMGR accepts the Subscription Response but fails to decode so emmits an error log entry on it's standard output

NOTES:

  • Both stub component use pre coded E2 message as a skeleton to set or get the ricRequestSequenceNumber in it and pass it between the components. The message presented as a hex dump which is inprinted in the code. Use the RCO_RAWDATA and E2T_RAWDATA environment variables in the pod manifest to override the default skeleton messages.
  • RCO (stub) sends Subscription Requests with ID=12345 by default. Use the RCO_SEED_SN environment variable in the pod manifest to override this number.

Configuration and Troubleshooting

Basic configuration file provided in ./config/ folder. Consult xapp-frame project documentation for custom configuration settings. SUBMGR_SEED_SN environment variable is defined in the pod manifest and used to control the initial value of the Subscription Sequence Number. If this environment variable is undefied, SUBMGR choses a random number from the range of 0-65535

Upcoming changes

[] Unit tests

[] Full RTMGR integration

[] Jaeger tracing support

[] Generate ASN1-C code in build time

[] Full RTMGR integration

[] Jaeger tracing support

[] Rainy Day scenarios

License

This project is licensed under the Apache License, Version 2.0 - see the LICENSE