1. UUI Configuration
...
Copy subnetCapability.json to SO-API Handler pod to configure subnet capabilities at run time.
{
"AN_NF": {
"latency": 5,
"maxNumberofUEs": 200,
"maxThroughput": 90,
"termDensity": 40
},
"AN": {
"latency": 20,
"maxNumberofUEs": 100,
"maxThroughput": 150,
"termDensity": 50
},
"CN": {
"latency": 10,
"maxThroughput": 50,
"maxNumberofConns": 100
},
"TN_FH": {
"latency": 10,
"maxThroughput": 90
},
"TN_MH": {
"latency": 5,
"maxThroughput": 90
},
"TN_BH": {
"latency": 10,
"maxThroughput": 100
}
}
...
5. Policy Creation Steps
Refer Optimization Policy Creation Steps for optimization policy creation and deployment steps
...
unzip policies.zip |
NOTE: For NST Selection based on latency constraint, please make sure you have updated the latency constraint as property in the design time template of NST as below,
Refer Policy Models and Sample policies - NSI selection for sample policies
Updated slice/service profile mapping - https://gerrit.onap.org/r/gitweb?p=optf/osdf.git;a=blob;f=config/slicing_config.yaml;h=179f54a6df150a62afdd72938c2f33d9ae1bd202;hb=HEAD
HAS-API/HAS-DATA - Add data dictionary
Go to (/opt/has/conductor/conductor/data/plugins/inventory_provider/candidates/slice_profiles_candidate.py) addin OOF HAS pod update the following : "max_bandwidth": copy_first, "jitter": sum, "sst": copy_first, "latency": sum, "resource_sharing_level": copy_first, "s_nssai": copy_first, "s_nssai_list": copy_first, "plmn_id_list": copy_first, "plmn_id_List": copy_first, "availability": copy_first, "throughput": min, "reliability": copy_first, "max_number_of_ues": copy_first, "exp_data_rate_ul": copy_first, "exp_data_rate_dl": copy_first, "ue_mobility_level": copy_first, "activity_factor": copy_first, "survival_time": copy_first, "max_number_of_conns": copy_first, "coverage_area_ta_list": copy_first, "max_number_of_pdu_session": copy_first, "max_throughput": copy_first, "perf_req": copy_first, "terminal_density": copy_first update those and restart the container
...
- The service name given for creating the policy must match with the service name in the request
- The scope fields in the policies should match with the value in the resourceSharingLevel(non-shared/shared). Do modify the policy accordingly.
- Check the case of the attributes with the OOF request with the attribute map (camel to snake and snake to camel) in config/slicing_config.yaml, if any mismatch found modify the attribute map accordingly.
You need to restart the OOF docker container once you updated the slicing_config.yaml, you can do it using the following steps,
- Login to the worker VM where the OOF container is running. You can find the worker node by running (kubectl get pods -n onap -o wide | grep dev-oof)
- Find the container using docker ps | grep optf-osdf
- Restart the container using docker restart <container id>
CPS Configuration:
Refer CPS Configuration to setup standalone CPS and configuration of OOF and CPS.
6. Core NF Simulator Setup
- We need a KUD vm with kubernetes installed, please follow below link to setup a KUD VM.
https://wikilf-onap.onapatlassian.orgnet/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
Expand title populate-init-data-to-AAI #!/bin/bash
echo "Enter NFS Server: "
read nfsServerecho "======== RUNNING AAI Data Populate ======="
echo $nfsServerecho "===== 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>
...
Expand | ||
---|---|---|
| ||
[ |
Refer Core NF Simulator setup to setup Core NF Simulator.
...
7a) RANSIM Controller
Refer RAN-Sim setup to setup RAN-simulator
Refer RAN-Sim for ransim impacts done for Guilin Release
...
Config DB is a spring boot application that works with mariaDB. DB schema details are available at Config DB.
Install config DB application in a separate VM. MariaDB container should be up and running to access the config DB APIs.
Refer https://wikilf-onap.onapatlassian.orgnet/wiki/display/DW/Config+DB+setup for configDB setup. Latest source is available at Image versions, preparation steps and useful info-Config DB Preload Info Section.
...
Refer ACTN Simulator User Guide to setup ACTN-simulator or follow the below steps to launch and initialize domain controllers,
Refer Transport Slicing Configuration and Operation Guidance for NextHop details of AN &CN
Step 1. Fetch the simulator docker image
...
For demonstration purposes, two domain controllers are required, both need to be properly launched and initialized. The initialization payloads are attached below.
View file | ||||
---|---|---|---|---|
|
View file | ||
---|---|---|
|
|
ESR Registration using AAI ESR Url:
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
curl -k -X PUT "https://AAI:AAI@<worker-vmIp>:30233/aai/v23/external-system/esr-thirdparty-sdnc-list/esr-thirdparty-sdnc/ff9ef162-951d-4e14-9ce6-b4fa0adf896b" \ -H 'Accept: application/json' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: 1' \ -H 'Content-Type: application/json' \ -d '{ "thirdparty-sdnc-id":"ff9ef162-951d-4e14-9ce6-b4fa0adf896b", "location": "edge", "product-name": "TSDN", "esr-system-info-list":{"esr-system-info":[{ "esr-system-info-id": "7c29b9df-feef-4fa7-b56d-3e39f5ef4a90", "system-name": "sdnc2", "vendor": "HUAWEI", "type": "WAN", "version": "v1.0", "service-url": "http://<simulator-ip>:<simulator-port>", "user-name": "onos", "password": "rocks", "system-type": "thirdparty_SDNC", "protocol": "restconf" }]} }' |
E2E network slicing test(using resource occupancy details)
Before creating shared communication service for testing NSI/NSSI selection using resource occupancy details, below manual configurations must be done:
Deployment Prerequisite/dependencies
- VES, PM mapper and DataFile Collector, dcae-mongodb, Datalake Extraction Service(DES) and Datalake-feeder services should be running.
Datalake Extraction Service(DES):
- Build presto image and push the images to a exsting repository
- Download and extract presto package version v0.0.2: presto-v0.0.2.tar.gz
- docker build -t presto:v0.0.2 .
- docker tag presto:v0.0.2 registry.baidubce.com/onap/presto:v0.0.2
- docker push registry.baidubce.com/onap/presto:v0.0.2
- Note: Replace the repository path with your own repository.
- Install presto service
- kubectl -n onap run dl-presto --image=presto:v0.0.2 --env="MongoDB_IP=dcae-mongohost" --env="MongoDB_PORT=27017" --image-pull-policy=IfNotPresent
- kubectl expose pod dl-presto --name=dl-presto --port=9000 --target-port=9000 --type=NodePort -n onap
- Login to the dev-dcae-datalake-postgres-primary container and execute following sql commands:
Code Block language text title datalake-db init_data linenumbers true collapse true delete from map_db_topic; delete from map_db_design; delete from db; delete from data_exposure ; insert into db (id, db_type_id, enabled, encrypt, name,host,port,database_name) values (2, 'MONGO', true, true, 'MongoDB 1','dcae-mongohost',27017,'datalake'); insert into map_db_topic(db_id,topic_id) select db.id, topic.id from db_type, db, topic where db.db_type_id=db_type.id and db_type.tool=false; update kafka set secure=true, pass='admin_secret' where id=1; insert into topic_name (id) values ('unauthenticated.PERFORMANCE_MEASUREMENTS'); insert into topic(id, topic_name_id,correlate_cleared_message,enabled, message_id_path,data_format) values (6, 'unauthenticated.PERFORMANCE_MEASUREMENTS',true,true,'/event/commonEventHeader','JSON'); insert into data_exposure(id, note,sql_template,db_id) values ('pm_data','pm_message', 'SELECT json_format(CAST( event.perf3gppFields.measDataCollection.measInfoList[1].measTypes.sMeasTypesList AS JSON)) AS sMeasTypesList, json_format(CAST( event.perf3gppFields.measDataCollection.measInfoList[1].measValuesList AS JSON)) AS measValuesList FROM unauthenticatedperformancemeasurements WHERE any_match(event.perf3gppFields.measDataCollection.measInfoList[1].measTypes.sMeasTypesList, e -> e like ''${snssai}'') AND event.commonEventHeader.startEpochMicrosec >= ${time}',2); //db_id refers to mongodb in table db, this template filters PM data based on snssai and startEpochMicrosec;
Load sample data in mongo db(refer DCAE mongodb section)
- Execute below request to verify: curl --header "Content-type: application/json" --request POST --data '{"snssai":"SM.PrbUsedDl.01-910EF6","time":"1649853949111"}' http://dl-des:1681/datalake/v1/exposure/pm_data -i
Datalake Feeder:
- Restart datalake-feeder container after loading above configurations in the DB.
POLICY :
The following policies are to be included for the OOF optimisation based on resource occupancy . Refer Optimization Policy Creation Steps for optimization policy creation and deployment steps.
View file name resource-occupancy-policies.zip height 150
RANSIM :
- RANSIM and honeycomb containers should be running
- You can update/add/delete data(throughput, PRBs, maxNoConns etc) in mariadb container(credentials in docker-compose file) if required before generation of PM data.
- RANSIM must contain 'plmninfo' of the service which is to be shared with other services. Then generate closed-loop PM data which will be stored in mongo-db by datalake-feeder.
- Sample closed loop data: closed-loop-data.txt
- Run the following command to generate Closed Loop PM data:
- curl -X POST http://localhost:8081/ransim/api/generateClosedLoopPmData -i
- Run the following command to stop Closed Loop PM data(When enough PM data is generated):
- curl -X GET http://localhost:8081/ransim/api/stopClosedLoopPmData -i
- Access the DU honeycomb containers to view the logs:
- docker container logs -f 110
- Check the folder(where SFTP setup is done) to view the generated PM data files.
- Access VES, data file collector, dmaap-dr, PM mapper and slice-analysis logs to verify.
DCAE-MONGO DB:
- Login to dcae-mongodb container and execute following commands to check if PM data was saved in DB:
- mongo
- use datalake
- db.unauthenticatedperformancemeasurements.find({})
- to load sample data:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
db.unauthenticatedperformancemeasurements.insert({
"event":{
"commonEventHeader":{
"domain":"perf3gpp",
"eventId":"95e79282-2876-4000-8192-b514ad7f399a",
"sequence":0,
"eventName":"perf3gpp_RnNode-Slicing_pmMeasResult",
"sourceName":"220",
"reportingEntityName":"",
"priority":"Normal",
"startEpochMicrosec":1651216762867,
"lastEpochMicrosec":1651216762868,
"version":"4.0",
"vesEventListenerVersion":"7.1",
"timeZoneOffset":"UTC+05:30"
},
"perf3gppFields":{
"perf3gppFieldsVersion":"1.0",
"measDataCollection":{
"granularityPeriod":900,
"measuredEntityUserName":"",
"measuredEntityDn":"220",
"measuredEntitySoftwareVersion":"r0.1",
"measInfoList":[
{
"measInfoId":{
"sMeasInfoId":"measInfoIsVal"
},
"measTypes":{
"sMeasTypesList":[
"SM.PrbUsedDl.01-3C5C90",
"SM.PrbUsedUl.01-3C5C90"
]
},
"measValuesList":[
{
"measObjInstId":"15155",
"suspectFlag":"false",
"measResults":[
{
"p":1,
"sValue":"5"
},
{
"p":2,
"sValue":"7"
}
]
},
{
"measObjInstId":"15174",
"suspectFlag":"false",
"measResults":[
{
"p":1,
"sValue":"6"
},
{
"p":2,
"sValue":"7"
}
]
},
{
"measObjInstId":"15175",
"suspectFlag":"false",
"measResults":[
{
"p":1,
"sValue":"15"
},
{
"p":2,
"sValue":"4"
}
]
},
{
"measObjInstId":"15176",
"suspectFlag":"false",
"measResults":[
{
"p":1,
"sValue":"5"
},
{
"p":2,
"sValue":"14"
}
]
},
{
"measObjInstId":"15825",
"suspectFlag":"false",
"measResults":[
{
"p":1,
"sValue":"0"
},
{
"p":2,
"sValue":"14"
}
]
}
]
}
]
}
}
}
}) |