/
Core & RAN Simulators

Core & RAN Simulators

1. Core NF Simulator Setup

  • We need a KUD vm with kubernetes installed, please follow below link to setup a KUD VM.

           https://lf-onap.atlassian.net/wiki/display/DW/Kubernetes+Baremetal+deployment+setup+instructions/

  • Please find below script with required data to be populated in AAI, provide the tenant id of the openstack project 

     populate-init-data-to-AAI

    #!/bin/bash 

    echo "Enter NFS Server: "
    read nfsServer

    echo "======== RUNNING AAI Data Populate ======="
    echo $nfsServer

    echo "===== Populating Customer"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v21/business/customers/customer/5GCustomer' \
    --header 'X-TransactionId: 42d3461d-074e-400e-93b1-c7ab5f48ce89' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "global-customer-id": "5GCustomer",
        "subscriber-name": "5GCustomer",
        "subscriber-type": "INFRA"
    }'

    echo "===== Populating owningEntity"


    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/owning-entities/owning-entity/67f2e84c-734d-4e90-a1e4-d2ffa2e75849' \
    --header 'X-TransactionId: 3656171c-3188-4a3d-b29a-284d2ba97ede' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "owning-entity-id": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849",
        "owning-entity-name": "OE-5GCustomer"
    }'

    echo "===== Populating Platforms"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/platforms/platform/test' \
    --header 'X-TransactionId: 3c215f06-6ca5-4de4-8b75-bb06d002c922' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "platform-name": "test"
    }'

    echo "===== Populating Projects"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/projects/project/Project-5GCustomer' \
    --header 'X-TransactionId: 40c3addb-c661-4bd2-bf80-5160e4223776' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "project-name": "Project-5GCustomer"
    }'

    echo "====== Populating Line of Business"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/lines-of-business/line-of-business/LOB-5GCustomer' \
    --header 'X-TransactionId: ffed7201-15ab-41ab-8960-6db2cd16a264' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "line-of-business-name": "LOB-5GCustomer"
    }'

    echo "======== Populating Complex"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/complexes/complex/clli2' \
    --header 'X-TransactionId: 79ec2b55-0e1a-4a8a-904c-02d87a43fdc5' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "physical-location-id": "clli2",
        "physical-location-type": "office",
        "street1": "Dummy 1",
        "city": "Kraków",
        "postal-code": "30-000",
        "country": "Poland",
        "region": "Smaller Poland"
    }'


    echo "======== Populating Cloud Region"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour' \
    --header 'X-TransactionId: 34cac914-d32c-4523-ac75-008db129bcc6' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --data-raw '{
        "cloud-owner": "k8scloudowner4",
        "cloud-region-id": "k8sregionfour",
        "cloud-type": "k8s",
        "owner-defined-type": "t1",
        "cloud-region-version": "1.0",
        "complex-name": "clli2",
        "cloud-zone": "CloudZone",
        "sriov-automation": false
    }'


    echo "======== Populating Complex Cloud Region Relationship"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/relationship-list/relationship' \
    --header 'X-TransactionId: 1d651697-0c65-4d21-bad5-299f95e4ddb6' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "related-to": "complex",
        "related-link": "/aai/v16/cloud-infrastructure/complexes/complex/clli2",
        "relationship-data": [
            {
                "relationship-key": "complex.physical-location-id",
                "relationship-value": "clli2"
            }
        ]
    }'

    echo "======== Populating Service"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/service-design-and-creation/services/service/5G' \
    --header 'X-TransactionId: db58cf73-f420-4f07-8cab-801474c9303c' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "service-description": "5GCore on K8s",
            "service-id": "5G"
    }'

    echo "======== Populating Service Subscription"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G' \
    --header 'X-TransactionId: c385a48c-cf4b-4fcd-976c-2d9cad40b19e' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
            "service-type": "5G"
    }'

    echo "======== Populating Tenant"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/tenants/tenant/3d5819f1542e4ef9a4ccb0bcb278ca10' \
    --header 'X-TransactionId: c229f2aa-ea0f-4057-a9dd-0144b6e0e72a' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "tenant-id": "3d5819f1542e4ef9a4ccb0bcb278ca10",
        "tenant-name": "ONAP-tm",
        "relationship-list": {
            "relationship": [
                {
                    "related-to": "service-subscription",
                    "relationship-label": "org.onap.relationships.inventory.Uses",
                    "related-link": "/aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G",
                    "relationship-data": [
                        {
                            "relationship-key": "customer.global-customer-id",
                            "relationship-value": "5GCustomer"
                        },
                        {
                            "relationship-key": "service-subscription.service-type",
                            "relationship-value": "5G"
                        }
                    ]
                }
            ]
        }
    }'


    echo "======== Populating availability zone name"

    curl -k --location -g --request PUT 'https://'$nfsServer':30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/k8scloudowner4/k8sregionfour/availability-zones/availability-zone/k8savz' \
    --header 'X-TransactionId: c229f2aa-ea0f-4057-a9dd-0144b6e0e72a' \
    --header 'X-FromAppId: jimmy-postman' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Basic QUFJOkFBSQ==' \
    --data-raw '{
        "availability-zone-name": "k8savz",
        "hypervisor-type": "k8s"
    }'


    echo "=========================== Finished Populating AAI Data ============="

  • After KUD setup and AAI data entries, update the connectivity Info: <port: msb-iag port>

          curl -k -i -F "metadata=<post.json;type=application/json" -F file=@/root/.kube/config -X POST https://{{k8s}}:32330/api/multicloud-k8s/v1/v1/connectivity-info

          Please find post.json below,

          {
           "cloud-region": "k8sregionfour",
           "cloud-owner": "k8scloudowner4"
          }

Refer Core NF Simulator setup to setup Core NF Simulator.

2. RAN Simulator Setup

2a) RANSIM Controller

Refer RAN-Sim setup to setup RAN-simulator

Refer RAN-Sim for ransim impacts done for Guilin Release

2b) Honeycomb:

Repo URL: https://github.com/onap-oof-pci-poc/ran-sim

Pre-requisite: SDNC & Ransim controller should be up and running.

Build Steps:

If there is a new yang model, build the gnbsim-api with new yang model

Step 1: copy the new yang model to ~/ran-sim/hcsim-content/gnbsim/gnbsim-api/src/main/yang
Step 2: Go to directory ~/ran-sim/hcsim-content/gnbsim/gnbsim-api/
Step 3: Issue the build command "JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64 mvn clean install -Dcheckstyle.skip"

For code changes in gnbsim-impl directory

Step 1: Do necessary code changes in gnbsim-impl
Step 2: Issue the build command "JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64 mvn clean install -Dcheckstyle.skip"

Once the mvn build is done, build the docker image

Step 1: Go to directory ~/ran-sim/hcsim-content/gnbsim
Step 2: JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn clean install -Dcheckstyle.skip
Step 3: cp -r gnbsim-distribution/jssecacerts gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
Step 4: cp -r gnbsim-distribution/honeycomb gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
Step 5: cp -r gnbsim-distribution/Dockerfile gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/
Step 6: docker build -t gn gnbsim-distribution/target/gnbsim-distribution-1.19.08-SNAPSHOT-hc/gnbsim-distribution-1.19.08-SNAPSHOT/

Cross check the docker image
docker images | grep gnbsim

To run the Netconf Servers:

  1. Update ransim and honeycom IP address at ~/ran-sim/hcsim-content/gnbsim/hc/config/gnbsim.json

      2. Run the below command from ~/ran-sim/hcsim-content/gnbsim/hc directory.

          docker-compose up -d

          For slicing setup, 12 netconf servers are required. Copy the hc directory 11 more time and rename it.

         Change the external port in the docker-compose files for every netconf server.

         While running the docker-compose up -d command, these servers will be mounted in SDNC. 

Setup SFPT:

  1. Run the below docker command in the VM where you have setup the netconf servers:

           docker run -v /home/$USER/upload:/home/$USER/sftptest/upload -p 2222:22 -d atmoz/sftp $USER:pass:1001

      2. Give chmod 777 to upload folder which will be created automatically in the home dir.

Further References:

Issues faced during the RAN Simulator set up are documented in Setup related issues.


Related content

Core NF Simulator setup
Core NF Simulator setup
More like this
RAN schema yang model & Simulator integration - Discussion (11-06-2021)
RAN schema yang model & Simulator integration - Discussion (11-06-2021)
More like this
Core-NF-Simulator
Core-NF-Simulator
More like this
PNF Simulator Day-N config-assign and config-deploy use case
PNF Simulator Day-N config-assign and config-deploy use case
More like this
Kohn - Run
Kohn - Run
More like this
RAN-Sim setup
RAN-Sim setup
More like this