This blog is a continuation of the previous blog that explains deployment details (using TOSCA/HEAT templates) of various services that are part of vCPE blueprint in ONAP.

BTW, our ONAP Demystified book downloads and Amazon sales have crossed 400 as of today! Thanks for the tremendous interest. However, we haven't been doing so well on our ONAP merchandise. The merchandise, 100% pure-play ONAP without any Aarna branding, includes t-shirts, sweatshirts, hoodies, mugs, water bottles and much more. Feel free to buy & hopefully expense some of these items! There's minimal profit on each item and all proceeds go to the artist.

In this blog, we will cover 2 other services that are part of vCPE use case -- namely, vG MUX Infra service and vBNG service.

vG MUX Infra Service

vG_MUX provides the MUX functionality across all the links that are terminating at the Virtual Gateway.

The composition of this service is as shown below.



This service is modeled as a combination of TOSCA and HEAT templates, and the relationship is as shown:

The TOSCA model definitions file for this service can be found here.

The Environment file (base_vcpe_vgmux.env) for this service looks as follows:

parameters:

 bng_gmux_private_ip: "10.1.0.10"

 bng_gmux_private_net_cidr: "10.1.0.0/24"

 bng_gmux_private_net_id: "zdfw1bngmux01_private"

 bng_gmux_private_subnet_id: "zdfw1bngmux01_sub_private"

 brgemu_bng_private_net_cidr: "10.3.0.0/24"

 cloud_env: "openstack"

 dcae_collector_ip: "10.0.4.1"

 dcae_collector_port: "8081"

 demo_artifacts_version: "1.2.0"

 hc2vpp_patch_url: "https://git.onap.org/demo/plain/vnfs/vCPE/vpp-ves-agent-for-vgmux/src/patches/Hc2vpp-Add-VES-agent-for-vG-MUX.patch"

 hc2vpp_source_repo_branch: "stable/1704"

 hc2vpp_source_repo_url: "https://gerrit.fd.io/r/hc2vpp"

 install_script_version: "1.2.0-SNAPSHOT"

 key_name: "vgmux_key"

 libevel_patch_url: "https://git.onap.org/demo/plain/vnfs/vCPE/vpp-ves-agent-for-vgmux/src/patches/vCPE-vG-MUX-libevel-fixup.patch"

 mux_gw_private_net_cidr: "10.5.0.0/24"

 mux_gw_private_net_id: "zdfw1muxgw01_private"

 mux_gw_private_subnet_id: "zdfw1muxgw01_sub_private"

 onap_private_net_cidr: "10.0.0.0/16"

 onap_private_net_id: "ext-net"

 onap_private_subnet_id: "ext-net"

 pub_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQXYJYYi3/OUZXUiCYWdtc7K0m5C0dJKVxPG0eI8EWZrEHYdfYe6WoTSDJCww+1qlBSpA5ac/Ba4Wn9vh+lR1vtUKkyIC/nrYb90ReUd385Glkgzrfh5HdR5y5S2cL/Frh86lAn9r6b3iWTJD8wBwXFyoe1S2nMTOIuG4RPNvfmyCTYVh8XTCCE8HPvh3xv2r4egawG1P4Q4UDwk+hDBXThY2KS8M5/8EMyxHV0ImpLbpYCTBA6KYDIRtqmgS6iKyy8v2D1aSY5mc9J0T5t9S2Gv+VZQNWQDDKNFnxqYaAo1uEoq/i1q63XC5AD3ckXb2VT6dp23BQMdDfbHyUWfJN"

 public_net_id: "2da53890-5b54-4d29-81f7-3185110636ed"

 repo_url_artifacts: "https://nexus.onap.org/content/groups/staging"

 repo_url_blob: "https://nexus.onap.org/content/sites/raw"

 vcpe_flavor_name: "onap.medium"

 vcpe_image_name: "ubuntu-16.04-daily"

 vf_module_id: "vCPE_Intrastructure_Metro_vGMUX"

 vgmux_name_0: "zdcpe1cpe01mux01"

 vgmux_private_ip_0: "10.1.0.20"

 vgmux_private_ip_1: "10.0.101.20"

 vgmux_private_ip_2: "10.5.0.20"

 vnf_id: "vCPE_Infrastructure_vGMUX_demo_app"

 vpp_patch_url: "https://git.onap.org/demo/plain/vnfs/vCPE/vpp-ves-agent-for-vgmux/src/patches/Vpp-Add-VES-agent-for-vG-MUX.patch"

 vpp_source_repo_branch: "stable/1704"

 vpp_source_repo_url: "https://gerrit.fd.io/r/vpp"

Note the details about the networks for this service, such as private IP of bng_gmux link (10.1.x.x) and private IP networks of mux_gw (10.1.x.x, 10.0.x.x and 10.5.x.x) as well as the VNF details, including the pointer to the VPP source repo, since this VNF is based on VPP open source initiative.

Let us examine some of the interesting parts of HEAT template file (base_vcpe_vgmux.yaml) for this service. Complete copy of the HEAT template file can be found here.

heat_template_version: 2013-05-23

description: Heat template to deploy vCPE Infrastructure Metro vGMUX

##############

#            #

# PARAMETERS #

#            #

##############

parameters:

 vcpe_image_name:

   type: string

   label: Image name or ID

   description: Image to be used for compute instance

 ...

 bng_gmux_private_net_id:

   type: string

   label: vBNG vGMUX private network name or ID

   description: Private network that connects vBNG to vGMUX

 ...

 mux_gw_private_net_id:

   type: string

   label: vGMUX vGWs network name or ID

   description: Private network that connects vGMUX to vGWs

 ...

 brgemu_bng_private_net_cidr:

   type: string

   label: vBRG vBNG private network CIDR

   description: The CIDR of the vBRG-vBNG private network

 onap_private_net_id:

   type: string

   label: ONAP management network name or ID

   description: Private network that connects ONAP components and the VNF

 ...

 vgmux_private_ip_0:

   type: string

   label: vGMUX private IP address towards the vBNG-vGMUX private network

   description: Private IP address that is assigned to the vGMUX to communicate with the vBNG

 ...

 vnf_id:

   type: string

   label: VNF ID

   description: The VNF ID is provided by ONAP

 ...

 dcae_collector_port:

   type: string

   label: DCAE collector port

   description: Port of the DCAE collector

 ...

 cloud_env:

   type: string

   label: Cloud environment

   description: Cloud environment (e.g., openstack, rackspace)

 vpp_source_repo_url:

   type: string

   label: VPP Source Git Repo

   description: URL for VPP source codes

 ...

#############

#           #

# RESOURCES #

#           #

#############

resources:

 ...

 # Virtual GMUX Instantiation

 vgmux_private_0_port:

   type: OS::Neutron::Port

   properties:

     network: { get_param: bng_gmux_private_net_id }

     fixed_ips: [{"subnet": { get_param: bng_gmux_private_subnet_id }, "ip_address": { get_param: vgmux_private_ip_0 }}]

 ...

 vgmux_0:

   type: OS::Nova::Server

   properties:

     image: { get_param: vcpe_image_name }

     flavor: { get_param: vcpe_flavor_name }

     name: { get_param: vgmux_name_0 }

     key_name: { get_resource: my_keypair }

     networks:

       - network: { get_param: public_net_id }

       - port: { get_resource: vgmux_private_0_port }

       - port: { get_resource: vgmux_private_1_port }

       - port: { get_resource: vgmux_private_2_port }

     ...

           # Download and run install script

           curl -k __repo_url_blob__/org.onap.demo/vnfs/vcpe/__install_script_version__/v_gmux_install.sh -o /opt/v_gmux_install.sh

           cd /opt

           chmod +x v_gmux_install.sh

           ./v_gmux_install.sh

Note the details of the vG_MUX VNF (vgmux), and its ports/networks. Also note the installation details of this service and the script to install on a VM (v_gmux_install.sh).

vBNG MUX Service

This service consists of 2 VL’s connecting the associated VNF’s, as shown below.

This service is modelled as follows using TOSCA (Green) and HEAT (Orange) templates:

The TOSCA model definitions file for this service can be found here.

The Environment file (base_vcpe_vbng.env) for this service is as shown:

parameters:

 bng_gmux_private_net_cidr: "10.1.0.0/24"

 bng_gmux_private_net_id: "zdfw1bngmux01_private"

 bng_gmux_private_subnet_id: "zdfw1bngmux01_sub_private"

 brgemu_bng_private_net_cidr: "10.3.0.0/24"

 brgemu_bng_private_net_id: "zdfw1bngin01_private"

 brgemu_bng_private_subnet_id: "zdfw1bngin01_sub_private"

 cloud_env: "openstack"

 cpe_signal_net_id: "zdfw1cpe01_private"

 cpe_signal_private_net_cidr: "10.4.0.0/24"

 cpe_signal_subnet_id: "zdfw1cpe01_sub_private"

 dcae_collector_ip: "10.0.4.1"

 dcae_collector_port: "8081"

 demo_artifacts_version: "1.2.0"

 install_script_version: "1.2.0-SNAPSHOT"

 key_name: "vbng_key"

 onap_private_net_cidr: "10.0.0.0/16"

 onap_private_net_id: "ext-net"

 onap_private_subnet_id: "ext-net"

 pub_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQXYJYYi3/OUZXUiCYWdtc7K0m5C0dJKVxPG0eI8EWZrEHYdfYe6WoTSDJCww+1qlBSpA5ac/Ba4Wn9vh+lR1vtUKkyIC/nrYb90ReUd385Glkgzrfh5HdR5y5S2cL/Frh86lAn9r6b3iWTJD8wBwXFyoe1S2nMTOIuG4RPNvfmyCTYVh8XTCCE8HPvh3xv2r4egawG1P4Q4UDwk+hDBXThY2KS8M5/8EMyxHV0ImpLbpYCTBA6KYDIRtqmgS6iKyy8v2D1aSY5mc9J0T5t9S2Gv+VZQNWQDDKNFnxqYaAo1uEoq/i1q63XC5AD3ckXb2VT6dp23BQMdDfbHyUWfJN"

 public_net_id: "2da53890-5b54-4d29-81f7-3185110636ed"

 repo_url_artifacts: "https://nexus.onap.org/content/groups/staging"

 repo_url_blob: "https://nexus.onap.org/content/sites/raw"

 sdnc_ip_addr: "10.0.7.1"

 vbng_name_0: "zdcpe1cpe01bng01"

 vbng_private_ip_0: "10.3.0.1"

 vbng_private_ip_1: "10.0.101.10"

 vbng_private_ip_2: "10.4.0.3"

 vbng_private_ip_3: "10.1.0.10"

 vcpe_flavor_name: "onap.medium"

 vcpe_image_name: "ubuntu-16.04-daily"

 vf_module_id: "vCPE_Intrastructure_Metro_vBNG"

 vnf_id: "vCPE_Infrastructure_Metro_vBNG_demo_app"

 vpp_patch_url: "https://git.onap.org/demo/plain/vnfs/vCPE/vpp-radius-client-for-vbng/src/patches/Vpp-Integrate-FreeRADIUS-Client-for-vBNG.patch"

 vpp_source_repo_branch: "stable/1704"

 vpp_source_repo_url: "https://gerrit.fd.io/r/vpp"

Note the virtual link details of bng_gmux (10.1.x.x) and brgemu_bng (10.3.x.x), which are the 2 virtual links connecting BRG_Emulator to BNG_MUX and BNG_MUX to VG_MUX, and also two other network interfaces of BNG_MUX to connect to CPE_SIGNAL network (10.4.x.x), and lastly to ONAP OAM network (10.0.x.x).

Let us look at some of the interesting parts of HEAT template (base_vcpe_vbng.yaml) for this service. A full copy of the HEAT template file can be found here.

heat_template_version: 2013-05-23

description: Heat template to deploy vCPE virtual Broadband Network Gateway (vBNG)

##############

#            #

# PARAMETERS #

#            #

##############

parameters:

 ...

 brgemu_bng_private_net_id:

   type: string

   label: vBNG IN private network name or ID

   description: Private network that connects vBRG to vBNG

 ...

 bng_gmux_private_net_id:

   type: string

   label: vBNG vGMUX private network name or ID

   description: Private network that connects vBNG to vGMUX

 ...

 cpe_signal_net_id:

   type: string

   label: vCPE private network name or ID

   description: Private network that connects vCPE elements with vCPE infrastructure elements

 ...

 vbng_private_ip_0:

   type: string

   label: vBNG IN private IP address

   description: Private IP address that is assigned to the vBNG IN

..

 vnf_id:

   type: string

   label: VNF ID

   description: The VNF ID is provided by ONAP

 vf_module_id:

   type: string

   label: vCPE module ID

   description: The vCPE Module ID is provided by ONAP

 dcae_collector_ip:

   type: string

   label: DCAE collector IP address

   description: IP address of the DCAE collector

 ..

 vpp_source_repo_url:

   type: string

   label: VPP Source Git Repo

   description: URL for VPP source codes

 ..

#############

#           #

# RESOURCES #

#           #

#############

resources:

 ...

 # Virtual BNG Instantiation

 vbng_private_0_port:

   type: OS::Neutron::Port

   properties:

     network: { get_param: brgemu_bng_private_net_id }

     fixed_ips: [{"subnet": { get_param: brgemu_bng_private_subnet_id }, "ip_address": { get_param: vbng_private_ip_0 }}]

 ...

 vbng_0:

   type: OS::Nova::Server

   properties:

     image: { get_param: vcpe_image_name }

     flavor: { get_param: vcpe_flavor_name }

     name: { get_param: vbng_name_0 }

     key_name: { get_resource: my_keypair }

     networks:

       - network: { get_param: public_net_id }

       - port: { get_resource: vbng_private_0_port }

       - port: { get_resource: vbng_private_1_port }

       - port: { get_resource: vbng_private_2_port }

       - port: { get_resource: vbng_private_3_port }

     metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }}

     user_data_format: RAW

     user_data:

       str_replace:

         params:

           ...

           # Download and run install script

           curl -k __repo_url_blob__/org.onap.demo/vnfs/vcpe/__install_script_version__/v_bng_install.sh -o /opt/v_bng_install.sh

           cd /opt

           chmod +x v_bng_install.sh

           ./v_bng_install.sh

Note the BNG download and instantiation details above, including the script for installation of BNG MUX software (v_bng_install.sh).

Another interesting artifact is the VF Modules metadata, which is shown below. Note a couple of interesting observations:

The min and max vf_module_in stances is 1, which means this service will not be scaled out.

[

 {

   "vfModuleModelName": "VcpevspVbng230518a..base_vcpe_vbng..module-0",

   "vfModuleModelInvariantUUID": "98476290-c537-4a7e-9bc0-92a7c116b1aa",

   "vfModuleModelVersion": "1",

   "vfModuleModelUUID": "dc431db4-54f5-4caa-af83-a28176de614a",

   "vfModuleModelCustomizationUUID": "ab440315-998b-4229-99ab-942ce519dbda",

   "isBase": true,

   "artifacts": [

     "0beb8864-d9b1-4650-a3c5-151bc35038ac",

     "81e24e47-fbc5-4367-85ad-86c5a169b31f"

   ],

   "properties": {

     "min_vf_module_instances": "1",

     "vf_module_label": "base_vcpe_vbng",

     "max_vf_module_instances": "1",

     "vfc_list": "",

     "vf_module_description": "",

     "vf_module_type": "Base",

     "availability_zone_count": "",

     "volume_group": "false",

     "initial_count": "1"

   }

 }

]

Interested in learning more about ONAP? Consider our ONAP training courses. Or want to try out vCPE or some other blueprint in your lab? Contact us for ONAP professional services.