fix monitoring bug
add option to specify sap vnfd file in toplogy file
diff --git a/src/emuvim/api/sonata/__init__.py b/src/emuvim/api/sonata/__init__.py
index 6a6e2c2..fa87370 100755
--- a/src/emuvim/api/sonata/__init__.py
+++ b/src/emuvim/api/sonata/__init__.py
@@ -46,7 +46,8 @@
topology.
"""
- def __init__(self, listenip, port, deploy_sap=False, docker_management=False, auto_deploy=False, auto_delete=False):
+ def __init__(self, listenip, port, deploy_sap=False, docker_management=False,
+ auto_deploy=False, auto_delete=False, sap_vnfd_path=None):
self.dcs = {}
self.ip = listenip
self.port = port
@@ -54,6 +55,7 @@
dgk.USE_DOCKER_MGMT = docker_management
dgk.AUTO_DEPLOY = auto_deploy
dgk.AUTO_DELETE = auto_delete
+ dgk.SAP_VNFD = sap_vnfd_path
logging.debug("Created API endpoint %s" % self)
def __repr__(self):
diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py
index e1feaf7..7d1f525 100755
--- a/src/emuvim/api/sonata/dummygatekeeper.py
+++ b/src/emuvim/api/sonata/dummygatekeeper.py
@@ -98,6 +98,8 @@
# 10.30.xxx.0/30
ELINE_SUBNETS = generate_subnets('10.30', 0, subnet_size=50, mask=30)
+# path to the VNFD for the SAP VNF that is deployed as internal SAP point
+SAP_VNFD=None
class Gatekeeper(object):
@@ -514,7 +516,10 @@
# Each Service Access Point (connection_point) in the nsd is getting its own container (default)
elif sap["type"] == "internal" or sap["type"] == "management":
# add SAP to self.vnfds
- sapfile = pkg_resources.resource_filename(__name__, "sap_vnfd.yml")
+ if SAP_VNFD is None:
+ sapfile = pkg_resources.resource_filename(__name__, "sap_vnfd.yml")
+ else:
+ sapfile = SAP_VNFD
sap_vnfd = load_yaml(sapfile)
sap_vnfd["connection_points"][0]["id"] = sap_interface
sap_vnfd["name"] = sap_docker_name
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index ce24a40..985a1c1 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -202,7 +202,7 @@
network_metric = {}
# check if port is specified (vnf:port)
- if vnf_interface is None:
+ if vnf_interface is None or vnf_interface == '':
# take first interface by default
connected_sw = self.net.DCNetwork_graph.neighbors(vnf_name)[0]
link_dict = self.net.DCNetwork_graph[vnf_name][connected_sw]
@@ -404,8 +404,10 @@
previous_measurement = metric_dict['previous_measurement']
previous_monitor_time = metric_dict['previous_monitor_time']
mon_port = metric_dict['mon_port']
-
for port_stat in port_stat_dict[str(switch_dpid)]:
+ # ovs output also gives back 'LOCAL' port
+ if port_stat['port_no'] == 'LOCAL':
+ continue
if int(port_stat['port_no']) == int(mon_port):
port_uptime = port_stat['duration_sec'] + port_stat['duration_nsec'] * 10 ** (-9)
this_measurement = int(port_stat[metric_key])
diff --git a/src/emuvim/examples/sonata_simple_topology.py b/src/emuvim/examples/sonata_simple_topology.py
index b68e760..bf3cc20 100755
--- a/src/emuvim/examples/sonata_simple_topology.py
+++ b/src/emuvim/examples/sonata_simple_topology.py
@@ -40,13 +40,14 @@
from emuvim.api.rest.rest_api_endpoint import RestApiEndpoint
from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
from mininet.node import RemoteController
+import os
logging.basicConfig(level=logging.INFO)
def create_topology1():
# create topology
- net = DCNetwork(controller=RemoteController, monitor=True, enable_learning=True)
+ net = DCNetwork(controller=RemoteController, monitor=False, enable_learning=True)
dc1 = net.addDatacenter("dc1")
@@ -57,8 +58,16 @@
# run API endpoint server (in another thread, don't block)
rapi1.start()
+
+ # specify a vnfd file to be deployed as internal SAP:
+ sap_vnfd = 'vepc_sap_vnfd.yml'
+ dir_path = os.path.dirname(__file__)
+ sap_vnfd_path = os.path.join(dir_path, sap_vnfd)
+ # sap_vnfd_path = None
# add the SONATA dummy gatekeeper to each DC
- sdkg1 = SonataDummyGatekeeperEndpoint("0.0.0.0", 5000, deploy_sap=True, auto_deploy=True, docker_management=True, auto_delete=True)
+ sdkg1 = SonataDummyGatekeeperEndpoint("0.0.0.0", 5000, deploy_sap=True, auto_deploy=True,
+ docker_management=True, auto_delete=True,
+ sap_vnfd_path=sap_vnfd_path)
sdkg1.connectDatacenter(dc1)
# run the dummy gatekeeper (in another thread, don't block)
sdkg1.start()
diff --git a/src/emuvim/examples/vepc_sap_vnfd.yml b/src/emuvim/examples/vepc_sap_vnfd.yml
new file mode 100755
index 0000000..4ca0727
--- /dev/null
+++ b/src/emuvim/examples/vepc_sap_vnfd.yml
@@ -0,0 +1,50 @@
+
+---
+##
+## Some general information regarding this
+## VNF descriptor.
+##
+descriptor_version: "vnfd-schema-01"
+vendor: "eu.sonata-nfv"
+name: "sap_vnf"
+version: "0.1"
+author: "Steven Van Rossem, Ghent University, steven.vanrossem@intec.ugent.be"
+description: "A sink for the vEPC service"
+##
+## The virtual deployment unit.
+##
+virtual_deployment_units:
+ - id: "1"
+ vm_image: "sink:v3"
+ vm_image_format: "docker"
+ resource_requirements:
+ cpu:
+ vcpus: 1
+ memory:
+ size: 1
+ size_unit: "GB"
+ storage:
+ size: 1
+ size_unit: "GB"
+ connection_points:
+ - id: "vdu01:cp01"
+ type: "interface"
+
+##
+## The virtual links that interconnect
+## the different connections points.
+##
+virtual_links:
+ - id: "port"
+ connectivity_type: "E-Line"
+ connection_points_reference:
+ - "vdu01:cp01"
+ - "port"
+
+##
+## The VNF connection points to the
+## outside world.
+##
+connection_points:
+ - id: "port"
+ type: "interface"