BBS (Broadband Service)

Overview

The BBS use case proposes using ONAP for the design, provisioning, life-cycle management and assurance of broadband services. BBS focuses on multi-Gigabit Internet Connectivity services based on PON (Passive Optical Network) access technology.

In Frankfurt release, BBS enables ONAP to

  1. Establish a subscriber’s HSIA (High Speed Internet Access) service from an ONT (Optical Network Termination unit) to the Internet drain

    • The HSIA service is designed and deployed using ONAP’s design and deployment capabilities

    • The HSIA service activation is initiated via ONAP’s External APIs and orchestrated and controlled using ONAP orchestration and control capabilities. The control capabilities leverage a 3rd party controller to implement the requested actions within the technology domain/location represented by the domain specific SDN management and control function.

  2. Detect the change of location for ONT devices (Nomadic ONT devices)

    • PNF (Re-)Registration for an ONT

      • Subscriber association to an ONT via ONAP’s External APIs

      • ONT association with a expected Access UNI (PON port) when a HSIA service is created/deployed for a subscriber

      • PNF (Re-)Registration using ONAP’s PNF registration capabilities

    • Service location modification that is detected by ONAP’s analytic and initiated via the closed loop capabilities

      • The closed loop capabilities invoke a HSIA location change service that is orchestrated and controlled using ONAP capabilities and 3rd party controllers

image1

Figure 1. Architecture Overview

System View

BBS relies on key ONAP components such as External API, SO, AAI, SDC, Policy (APEX engine), DCAE (PRH, BBS Event Processor, VES collector, VES mapper, RESTCONF collector) and SDNC

image2

Figure 2. System View

System Set Up and configuration

SO: Custom Workflow Configuration

~/oom/kubernetes# kubectl edit cm dev-so-bpmn-infra-app-configmap

  ## replace "workflow:\n    CreateGenericVNFV1:\n"
  ## with "workflow:\n    custom:\n        BBS_E2E_Service:\n            sdnc:\n                need: true\n    CreateGenericVNFV1:\n"

## Restart the pod
~/oom/kubernetes# kubectl delete po dev-so-so-bpmn-infra-7556d7f6bc-8fthk

As shown below, new entries need to be inserted manually in SO database (mariadb-galera) in order to map a given resource model to a specific BPMN recipe. For instance, the CPE is modeled in SDC as a VF but it is treated as PNF resource by SO by using the handlePNF BPMN recipe. Those entries need to be inserted in catalogdb database > vnf_recipe table.

IMPORTANT: make sure vnf_recipe.NF_ROLE matches vnf_resource.MODEL_NAME, and vnf_recipe.VERSION_STR matches vnf_resource.MODEL_VERSION.

root@onap-rancher-daily:/home/ubuntu# kubectl exec -ti dev-mariadb-galera-0 sh
sh-4.2$ mysql -u root -p
MariaDB [(none)]> use catalogdb;
MariaDB [catalogdb]> INSERT INTO vnf_recipe (NF_ROLE, ACTION, SERVICE_TYPE, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, VNF_PARAM_XSD, RECIPE_TIMEOUT)
VALUES
  ("InternetProfile", "createInstance", "NF", "1.0", "create InternetProfile", "/mso/async/services/CreateSDNCNetworkResource", '{"operationType":"AccessConnectivity"}', 180000),
  ("AccessConnectivity", "createInstance", "NF", "1.0", "create AccessConnectivity", "/mso/async/services/CreateSDNCNetworkResource", '{"operationType":"InternetProfile"}', 180000),
  ("CPE", "createInstance", "NF", "1.0", "create CPE", "/mso/async/services/HandlePNF", NULL, 180000);

MariaDB [catalogdb]> select * from vnf_recipe where NF_ROLE IN ('AccessConnectivity','InternetProfile', 'CPE');
+-------+--------------------+----------------+--------------+-------------+---------------------------+-----------------------------------------------+----------------------------------------+----------------+---------------------+--------------+
| id    | NF_ROLE            | ACTION         | SERVICE_TYPE | VERSION_STR | DESCRIPTION               | ORCHESTRATION_URI                             | VNF_PARAM_XSD                          | RECIPE_TIMEOUT | CREATION_TIMESTAMP  | VF_MODULE_ID |
+-------+--------------------+----------------+--------------+-------------+---------------------------+-----------------------------------------------+----------------------------------------+----------------+---------------------+--------------+
| 10048 | InternetProfile    | createInstance | NF           | 1.0         | create InternetProfile    | /mso/async/services/CreateSDNCNetworkResource | {"operationType":"InternetProfile"}    |        1800000 | 2020-01-20 17:43:07 | NULL         |
| 10051 | AccessConnectivity | createInstance | NF           | 1.0         | create AccessConnectivity | /mso/async/services/CreateSDNCNetworkResource | {"operationType":"AccessConnectivity"} |        1800000 | 2020-01-20 17:43:07 | NULL         |
| 10054 | CPE                | createInstance | NF           | 1.0         | create CPE                | /mso/async/services/HandlePNF                 | NULL                                   |        1800000 | 2020-01-20 17:43:07 | NULL         |
+-------+--------------------+----------------+--------------+-------------+---------------------------+-----------------------------------------------+----------------------------------------+----------------+---------------------+--------------+
3 rows in set (0.00 sec)

DMaaP Message Router

Create the required topics in DMaaP

curl -kX POST \
  https://mr.api.simpledemo.openecomp.org:30226/topics/create \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "topicName": "unauthenticated.DCAE_CL_OUTPUT",
    "topicDescription": "",
    "partitionCount": "",
    "replicationCount": "3"
}'

curl -kX POST \
  https://mr.api.simpledemo.openecomp.org:30226/topics/create \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "topicName": "unauthenticated.CPE_AUTHENTICATION",
    "topicDescription": "",
    "partitionCount": "",
    "replicationCount": "3"
}'

curl -kX POST \
  https://mr.api.simpledemo.openecomp.org:30226/topics/create \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "topicName": "unauthenticated.PNF_READY",
    "topicDescription": "",
    "partitionCount": "",
    "replicationCount": "3"
}'

curl -kX POST \
  https://mr.api.simpledemo.openecomp.org:30226/topics/create \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "topicName": "unauthenticated.PNF_UPDATE",
    "topicDescription": "",
    "partitionCount": "",
    "replicationCount": "3"
}'

curl -k 'https://mr.api.simpledemo.openecomp.org:30226/topics'

{
    "topics": [
        "org.onap.dmaap.mr.PNF_REGISTRATION",
        "unauthenticated.DCAE_CL_OUTPUT",
        "AAI-EVENT",
        "SDC-DISTR-STATUS-TOPIC-AUTO",
        "SDC-DISTR-NOTIF-TOPIC-AUTO",
        "org.onap.dmaap.mr.PNF_READY",
        "unauthenticated.PNF_READY",
        "POLICY-PDP-PAP",
        "unauthenticated.CPE_AUTHENTICATION",
        "unauthenticated.VES_MEASUREMENT_OUTPUT",
        "unauthenticated.PNF_UPDATE",
        "org.onap.dmaap.mr.mirrormakeragent",
        "__consumer_offsets"
    ]
}

DCAE: BBS Event Processor (BBS-ep)

Description: BBS-ep

The following BBS event processor blueprint will be used:

The BBS-ep deployment procedure:

root@onap-nfs:/home/ubuntu# kubectl exec -ti dev-dcae-bootstrap-7599b45c77-czxsx -n onap bash
bash-4.2$ cfy install -b bbs-ep -d bbs-ep /blueprints/k8s-bbs-event-processor.yaml

IMPORTANT: Make sure that the configuration of BBS-ep in Consul contains the following version for the close loop policy in order to match the version expected by BBS APEX policy:

"application.clVersion": "1.0.2"

DCAE: RESTCONF Collector

Description: RESTCONF Collector

The following RESTCONF collector blueprint will be used:

RESTCONF Collector deployment procedure:

root@onap-nfs:/home/ubuntu# kubectl exec -ti dev-dcae-bootstrap-7599b45c77-czxsx -n onap bash
bash-4.2$ cfy install -b restconf -d restconf /blueprints/k8s-restconf.yaml

DCAE: VES mapper

Description: VES Mapper

The following VES mapper blueprint will be used:

VES Mapper deployment procedure:

root@onap-nfs:/home/ubuntu# kubectl exec -ti dev-dcae-bootstrap-7599b45c77-czxsx -n onap bash
bash-4.2$ cfy install -b ves-mapper -d ves-mapper /blueprints/k8s-ves-mapper.yaml

DCAE: VES collector

Configure the mapping of the VES event domain to the correct DMaaP topic in Consul: ves-statechange –> unauthenticated.CPE_AUTHENTICATION

  1. Access Consul UI <http://CONSUL_SERVER_UI:30270/ui/#/dc1/services>

  2. Modify the dcae-ves-collector configuration by adding a new VES domain to DMaaP topic mapping

"ves-statechange": {"type": "message_router", "dmaap_info": {"topic_url": "http://message-router:3904/events/unauthenticated.CPE_AUTHENTICATION"}}

image3

  1. Click on UPDATE in order to apply the new configuration

SDNC: BBS DGs (Directed Graphs)

Make sure that the following BBS DGs in the SDNC DGBuilder are in Active state

bbs-access-connectivity-vnf-topology-operation-create-huawei
bbs-access-connectivity-vnf-topology-operation-delete-huawei
bbs-internet-profile-vnf-topology-operation-change-huawei
bbs-internet-profile-vnf-topology-operation-common-huawei
bbs-internet-profile-vnf-topology-operation-create-huawei
bbs-internet-profile-vnf-topology-operation-delete-huawei
validate-bbs-vnf-input-parameters

DGBuilder URL: https://sdnc.api.simpledemo.onap.org:30203

Access SDN M&C DG

Configure Access SDN M&C IP address in SDNC DG using dgbuilder. For instance:

> GENERIC-RESOURCE-API: bbs-access-connectivity-vnf-topology-operation-create-huawei.json > GENERIC-RESOURCE-API: bbs-access-connectivity-vnf-topology-operation-delete-huawei.json

  1. Export the relevant DG

  2. Modify the IP address

  3. Import back the DG and Activate it

DGBuilder URL: https://sdnc.api.simpledemo.onap.org:30203

Edge SDN M&C DG

Configure Edge SDN M&C IP address in SDNC DG using dgbuilder. For instance:

> GENERIC-RESOURCE-API: bbs-access-connectivity-vnf-topology-operation-common-huawei.json

  1. Export the relevant DG

  2. Modify the IP address

  3. Import back the DG and Activate it

DGBuilder URL: https://sdnc.api.simpledemo.onap.org:30203

Add SSL certificate of the 3rd party controller into the SDNC trust store

kubectl exec -ti dev-sdnc-0 -n onap -- bash

openssl s_client -connect <IP_ADDRESS_EXT_CTRL>:<PORT>
# copy server certificate and paste in /tmp/<CA_CERT_NAME>.crt
sudo keytool -importcert -file /tmp/<CA_CERT_NAME>.crt -alias <CA_CERT_NAME>_key -keystore truststore.onap.client.jks -storepass adminadmin
keytool -list -keystore truststore.onap.client.jks -storepass adminadmin | grep <CA_CERT_NAME>

Policy: BBS APEX policy

Deployment procedure of BBS APEX Policy (master, apex-pdp image v2.3+)

  1. Make Sure APEX PDP is running and in Active state

API:  GET
URL: {{POLICY-PAP-URL}}/policy/pap/v1/pdps
  1. Create the operational control loop APEX policy type

API: POST
URL: {{POLICY-API-URL}}/policy/api/v1/policytypes
JSON Payload: https://git.onap.org/integration/usecases/bbs/tree/policy/apex/json/bbs_policytypes.json
  1. Create BBS APEX policy

API: POST
URL: {{POLICY-API-URL}}/policy/api/v1/policytypes/onap.policies.controlloop.operational.Apex/versions/1.0.0/policies
JSON Payload: https://git.onap.org/integration/usecases/bbs/tree/policy/apex/json/bbs_create_policy.json
  1. Deploy BBS policy

API: POST
URL: {{POLICY-PAP-URL}}/policy/pap/v1/pdps/policies
JSON Payload: https://git.onap.org/integration/usecases/bbs/tree/policy/apex/json/bbs_simple_deploy.json
  1. Verify the deployment

API: GET
URL: {{POLICY-API-URL}}/policy/api/v1/policytypes/onap.policies.controlloop.operational.Apex/versions/1.0.0/policies/

Edge Services: vBNG+AAA+DHCP, Edge SDN M&C

Installation and setup instructions: Swisscom Edge SDN M&C and virtual BNG

References

Please refer to the following wiki page for further steps related to the BBS service design and instantiation:

Known Issues

  • E2E Service deletion workflow does not delete the PNF resource in AAI (SO-2609)