Git Product home page Git Product logo

openimscore-packages's Introduction

Use case example: OpenIMSCore - Bind9 - FHoSS


We assume that the NFVO and the Generic VNFM are ready to receive invocations.

The following pictures shows what is going to be deployed, a basic OpenIMSCore with a Home subscriber server and a Bind9 nameserver.

ims-deployment

Before starting we need to send the VimInstance to the NFVO and the necessary Network Service Descriptors. For doing this please have a look into the Vim instance documentation, VNF Package documentation and Network Service Descriptor documentation. In fact, for creating the Network Service Record, we need to have a Network Service Descriptor loaded into the catalogue with five [Virtual Network Functions][vnf-descriptor] ( scscf, icscf, pcscf, bind9, fhoss ) created from the VNF Packages. To create the VNF Packages please clone the github repository for this example.

For this example we assume the network used to interconnect the components is called "mgmt", if you want to modify this example ensure you are naming the network accordingly, the scripts from the github do not handle different network names yet. Also the vimInstanceName may be different to you, depending on your setup. The deployment_flavor is optional but should containg enough RAM for the default configuration of the components to be able to run, else some components may crash on start. This example setup has been successfuly tested on clean Ubuntu14.04 images with 2048 Mb RAM deployed on an Openstack Kilo (2015.1.3).

The following section will introduce the different [Virtual Network Function Descriptors][vnf-descriptor] used for this example ( which you may already have cloned from the corresponding github repository ). The first descriptor will be explained the rest will be addressed briefly.

Virtual Network Function Descriptors

Take a look at the Scscf Virtual Network Function Descriptor for this example.

{  
   "name":"scscf",
   "vendor":"fokus",
   "version":"0.1",
   "lifecycle_event":[  
      {  
         "event":"CONFIGURE",
         "lifecycle_events":[  
            "bind9_relation_joined.sh",
            "fhoss_relation_joined.sh",
            "icscf_relation_joined.sh"
         ]
      },
      {  
         "event":"INSTANTIATE",
         "lifecycle_events":[  
            "scscf_install.sh"
         ]
      },
      {  
         "event":"START",
         "lifecycle_events":[  
            "scscf_generate_config.sh",
            "scscf_start.sh"
         ]
      }
   ],
   "configurations":{  
      "name":"client-configuration",
      "configurationParameters":[  
         {  
            "confKey":"port",
            "value":"6060"
         },
         {  
            "confKey":"name",
            "value":"scscf"
         },
         {  
            "confKey":"diameter_p",
            "value":"3870"
         }
      ]
   },
   "vdu":[  
      {  
         "vm_image":[],
         "scale_in_out":1,
         "vnfc":[  
            {  
               "connection_point":[  
                  {  
                     "virtual_link_reference":"mgmt"
                  }
               ]
            }
         ],
         "vimInstanceName":"your_vim"
      }
   ],
   "virtual_link":[  
      {  
         "name":"mgmt"
      }
   ],
   "deployment_flavour":[  
      {  
         "flavour_key":"m1.small"
      }
   ],
   "type":"scscf",
   "endpoint":"generic"
}

Lifecycle Event

This is how one of the 5 [Virtual Network Functions Descriptors][vnf-descriptor] for this example may look like. In the lifecycle events we listed up all scripts which need to be executed in their related phase. What will actually happen in the scripts is that each descriptor ( scscf, icscf, pcscf, bind9, fhoss ) will install itself and gather information of their dependencies defined in the Network Service Descriptor to fill a configuration template to build up a correctly configured component of this OpenIMSCore setup. Since the template is rather static and probably does not suit your needs you may feel free to modify this example for your needs.

All the scripts provided by openbaton for OpenIMSCore are under Apachee License v2.0

Configuration

Each Virtual Network Function Descriptor defines specific configuration parameters. In this example we may change the diameter port or the name of some descriptor, or you can alter the Bind9 realm. This will have impact on the setup of your OpenIMSCore.

{  
   "confKey":"realm",
   "value":"open-ims.test"
}

Image and Network

In contrast to the Iperf example we do not define the image and leave out the vm image part since we assume the image is already uploaded in the related Openstack defined in your vim. As mentioned before we will use a network statically named "mgmt". You may change the default name of the image used in this example ( which is "ubuntu-14.04-server-cloudimg-amd64-disk1" ) by modifying the "Metadata.yaml" files of each Virtual Network Function Package. You can obtain such a cloud image from the Ubuntu Cloud Images

Create VNF packages

This section covers up the steps needed to be done to create a vnf package out of the cloned github repository of the OpenIMSCore Virtual Network Function Descriptors.

Example for creating the Icscf Virtual Network Function Package

# Where to save the scripts
GIT_REPO_LOC=/opt/vnf_packages_example_openimscore_openbaton
# Clone the repository
git clone https://github.com/openbaton/opemimscore_example $GIT_REPO_LOC
# Create the .tar file which needs to be uploaded
cd $GIT_REPO_LOC/icscf
tar -cf icscf.tar *

All we need to do after creating the .tar files is to upload these using your Dashboard. After uploading all the Virtual Network Function Packages we will be ready to create the Network Service Descriptor.

Network Service Descriptor for OpenIMSCore - Bind9 - FHoSS

Relations / Dependencies

In the Network Service Descriptor we will define the relations among our Virtual Network Function Descriptors. Since 4 of the 5 Virtual Network Function Descriptors ( Scscf, Icscf, FHoSS, Bind9 ) are all dependend on each other, the listing of the dependencies can get confusing.

For this example the Network Service Descriptor may look like the following.

{
   "name":"OpenIMSCore Bind9 FHoSS",
   "vendor":"fokus",
   "version":"0.1-ALPHA",
   "vnfd":[  
      {  
         "id":"26b588d5-ecb9-4bf2-a044-720ad1100e58"
      },
      {  
         "id":"bd422c42-2343-4769-830d-0e92bbe54dc8"
      },
      {  
         "id":"c1933ff3-4b55-4eb1-97b7-8ca9675b2067"
      },
      {  
         "id":"f57bb94d-e307-4048-8bc6-7547f9b40f6a"
      },
      {  
         "id":"f8d821ed-f7ee-4ae8-a660-b885780c28df"
      }
   ],
   "vld":[  
      {  
         "name":"mgmt"
      }
   ],
   "vnf_dependency":[  
      {  
         "source":{  
            "name":"bind9"
         },
         "target":{  
            "name":"fhoss"
         },
         "parameters":[  
            "realm"
         ]
      },
      {  
         "source":{  
            "name":"bind9"
         },
         "target":{  
            "name":"icscf"
         },
         "parameters":[  
            "realm"
         ]
      },
      {  
         "source":{  
            "name":"bind9"
         },
         "target":{  
            "name":"scscf"
         },
         "parameters":[  
            "realm"
         ]
      },
      {  
         "source":{  
            "name":"bind9"
         },
         "target":{  
            "name":"pcscf"
         },
         "parameters":[  
            "realm"
         ]
      },
      {  
         "source":{  
            "name":"fhoss"
         },
         "target":{  
            "name":"bind9"
         },
         "parameters":[  
            "name"
         ]
      },
      {  
         "source":{  
            "name":"icscf"
         },
         "target":{  
            "name":"bind9"
         },
         "parameters":[  
            "name",
            "port"
         ]
      },
      {  
         "source":{  
            "name":"scscf"
         },
         "target":{  
            "name":"bind9"
         },
         "parameters":[  
            "name",
            "port"
         ]
      },
      {  
         "source":{  
            "name":"pcscf"
         },
         "target":{  
            "name":"bind9"
         },
         "parameters":[  
            "name",
            "port"
         ]
      },
      {  
         "source":{  
            "name":"fhoss"
         },
         "target":{  
            "name":"icscf"
         },
         "parameters":[  
            "name",
            "port"
         ]
      },
      {  
         "source":{  
            "name":"fhoss"
         },
         "target":{  
            "name":"scscf"
         },
         "parameters":[  
            "name",
            "port"
         ]
      },
      {  
         "source":{  
            "name":"scscf"
         },
         "target":{  
            "name":"fhoss"
         },
         "parameters":[  
            "name",
            "port",
            "diameter_p"
         ]
      },
      {  
         "source":{  
            "name":"icscf"
         },
         "target":{  
            "name":"fhoss"
         },
         "parameters":[  
            "name",
            "diameter_p"
         ]
      },
      {  
         "source":{  
            "name":"scscf"
         },
         "target":{  
            "name":"icscf"
         },
         "parameters":[  
            "name",
            "port"
         ]
      },
      {  
         "source":{  
            "name":"icscf"
         },
         "target":{  
            "name":"scscf"
         },
         "parameters":[  
            "name"
         ]
      }
   ]
}

Assuming we have uploaded all Virtual Network Function Packages, the ids for the Virtual Network Function Descriptors are to be found in your dashboard or directly accessed via your API at http://nfvo-ip:8080/api/v1/vnf-descriptors.

For continuous testing of your network services you may find it helpful to use this python script printing the Virtual Network Function Descriptor ids. Be aware, this script only works if you disabled the security in the NFVO. So you can easily copy paste the script output into your Network Service Descriptor.

#!/usr/bin/env python

import json
import sys
import getopt
import urllib2

program_name="./getVnfDescriptors"

def main(argv):
        ip="127.0.0.1"
        try:
                opts, args = getopt.getopt(argv,"hi:",["ip="])
        except getopt.GetoptError:
                print usage
                sys.exit(2)
        for opt, arg in opts:
                if opt == '-h':
                        print program_name + " -i <ip>"
                        sys.exit()
                elif opt in ("-i", "--ip"):
                        ip = arg
        data = json.load(urllib2.urlopen('http://'+ip+':8080/api/v1/vnf-descriptors'))
        for i in data:
                print "         {"
                print "                 \"id\":\"" +i["id"] + "\""
                # check that we do not have the last entry
                if i["id"] == data[-1]["id"]:
                        print "         }"
                else:
                        print "         },"

if __name__ == "__main__":
        main(sys.argv[1:])

The next step is to upload your Network Service Descriptor via the dashboard.

Launching the NSD

Now that we have uploaded the Network Service Descriptor we can launch it. You can watch the progress checking the Network Service Records on your dashboard. Once the Network Service Record went to "ACTIVE" your OpenIMSCore - Bind9 - FHoSS deployment is finished.

Testing your Deployment

To test your OpenIMSCore you may use a Sip client of your choice. Be sure to use the realm defined in your Bind9 Virtual Network Function Descriptor while testing registration and call. By default the FHoSS conaints 2 users : alice and bob. The user is the same as the password, but you may also alter it to your needs modifying the FHoSS Virtual Network Function Descriptor ( You will find the users in "var_user_data.sql" file under the fhoss folder)

For Benchmarking we can use IMS Bench SIPp but therefor you should add more users to the FHoSS database since by default it only contains 2 users.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.