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.