diff --git a/src/emuvim/api/zerorpc/compute.py b/src/emuvim/api/zerorpc/compute.py
index 59b960c..6e4a083 100644
--- a/src/emuvim/api/zerorpc/compute.py
+++ b/src/emuvim/api/zerorpc/compute.py
@@ -63,8 +63,8 @@
         :param compute_name: compute container name
         :param image: image name
         :param command: command to execute
-        :param network:
-        :return: networks list({"ip": "10.0.0.254/8"}, {"ip": "11.0.0.254/24"})
+        :param network: list of all interface of the vnf, with their parameters (id=id1,ip=x.x.x.x/x),...
+        :return: networks list({"id":"input","ip": "10.0.0.254/8"}, {"id":"output","ip": "11.0.0.254/24"})
         """
         # TODO what to return UUID / given name / internal name ?
         logging.debug("RPC CALL: compute start")
diff --git a/src/emuvim/api/zerorpc/network.py b/src/emuvim/api/zerorpc/network.py
index f232166..a64b09e 100644
--- a/src/emuvim/api/zerorpc/network.py
+++ b/src/emuvim/api/zerorpc/network.py
@@ -64,37 +64,47 @@
     def __init__(self, net):
         self.net = net
 
-    def network_action_start(self, vnf_src_name, vnf_dst_name):
+    def network_action_start(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None):
         # call DCNetwork method, not really datacenter specific API for now...
         # provided dc name needs to be part of API endpoint
         # no check if vnfs are really connected to this datacenter...
         logging.debug("RPC CALL: network chain start")
         try:
             c = self.net.setChain(
-                vnf_src_name, vnf_dst_name)
+                vnf_src_name, vnf_dst_name, vnf_src_interface, vnf_dst_interface)
             return str(c)
         except Exception as ex:
             logging.exception("RPC error.")
             return ex.message
 
-    def network_action_stop(self, vnf_src_name, vnf_dst_name):
+    def network_action_stop(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None):
         # call DCNetwork method, not really datacenter specific API for now...
         # provided dc name needs to be part of API endpoint
         # no check if vnfs are really connected to this datacenter...
         logging.debug("RPC CALL: network chain stop")
         try:
             c = self.net.setChain(
-                vnf_src_name, vnf_dst_name, cmd='del-flows')
+                vnf_src_name, vnf_dst_name, vnf_src_interface, vnf_dst_interface, cmd='del-flows')
+            return c
+        except Exception as ex:
+            logging.exception("RPC error.")
+            return ex.message
+
+    # setup the rate measurement for a vnf interface
+    def monitor_setup_rate_measurement(self, vnf_name, vnf_interface, direction, metric):
+        logging.debug("RPC CALL: get rate")
+        try:
+            c = self.net.monitor_agent.setup_rate_measurement(vnf_name, vnf_interface, direction, metric)
             return c
         except Exception as ex:
             logging.exception("RPC error.")
             return ex.message
 
     # get egress(default) or ingress rate of a vnf
-    def monitor_get_rate(self, vnf_name, direction):
+    def monitor_get_rate(self, vnf_name, vnf_interface, direction, metric):
         logging.debug("RPC CALL: get rate")
         try:
-            c = self.net.monitor_agent.get_rate(vnf_name, direction)
+            c = self.net.monitor_agent.get_rate(vnf_name, vnf_interface, direction, metric)
             return c
         except Exception as ex:
             logging.exception("RPC error.")
diff --git a/src/emuvim/cli/compute.py b/src/emuvim/cli/compute.py
index 70de20a..006b57b 100755
--- a/src/emuvim/cli/compute.py
+++ b/src/emuvim/cli/compute.py
@@ -29,9 +29,8 @@
     def start(self, args):
         nw_list = list()
         if args.get("network") is not None:
-            networks = args.get("network").split(",")
-            for nw in networks:
-                nw_list.append({"ip": nw})
+            nw_list = self._parse_network(args.get("network"))
+
         r = self.c.compute_action_start(
             args.get("datacenter"),
             args.get("name"),
@@ -79,6 +78,21 @@
             args.get("datacenter"), args.get("name"))
         pp.pprint(r)
 
+    def _parse_network(self, network_str):
+        '''
+        parse the options for all network interfaces of the vnf
+        :param network_str: (id=x,ip=x.x.x.x/x), ...
+        :return: list of dicts [{"id":x,"ip":"x.x.x.x/x"}, ...]
+        '''
+        nw_list = list()
+        networks = network_str[1:-1].split('),(')
+        for nw in networks:
+            nw_dict = dict(tuple(e.split('=')) for e in nw.split(','))
+            nw_list.append(nw_dict)
+
+        return nw_list
+
+
 
 parser = argparse.ArgumentParser(description='son-emu compute')
 parser.add_argument(
diff --git a/src/emuvim/cli/monitor.py b/src/emuvim/cli/monitor.py
index 6885a3c..0c3c515 100755
--- a/src/emuvim/cli/monitor.py
+++ b/src/emuvim/cli/monitor.py
@@ -7,6 +7,7 @@
 import pprint
 from tabulate import tabulate
 import zerorpc
+import time
 
 
 pp = pprint.PrettyPrinter(indent=4)
@@ -28,11 +29,33 @@
             print "Command not implemented."
 
     def get_rate(self, args):
-        r = self.c.monitor_get_rate(
-            args.get("vnf_name"),
-            args.get("direction"))
-        pp.pprint(r)
+        vnf_name = self._parse_vnf_name(args.get("vnf_name"))
+        vnf_interface = self._parse_vnf_interface(args.get("vnf_name"))
+        self.c.monitor_setup_rate_measurement(
+            vnf_name,
+            vnf_interface,
+            args.get("direction"),
+            args.get("metric"))
+        while True:
+            r = self.c.monitor_get_rate(
+                vnf_name,
+                vnf_interface,
+                args.get("direction"),
+                args.get("metric"))
+            pp.pprint(r)
+            time.sleep(1)
 
+    def _parse_vnf_name(self, vnf_name_str):
+        vnf_name = vnf_name_str.split(':')[0]
+        return vnf_name
+
+    def _parse_vnf_interface(self, vnf_name_str):
+        try:
+            vnf_interface = vnf_name_str.split(':')[1]
+        except:
+            vnf_interface = None
+
+        return vnf_interface
 
 parser = argparse.ArgumentParser(description='son-emu network')
 parser.add_argument(
@@ -43,7 +66,10 @@
     help="vnf name to be monitored")
 parser.add_argument(
     "--direction", "-d", dest="direction",
-    help="in (ingress rate) or out (egress rate)")
+    help="rx (ingress rate) or tx (egress rate)")
+parser.add_argument(
+    "--metric", "-m", dest="metric",
+    help="bytes (byte rate), packets (packet rate)")
 
 def main(argv):
     print "This is the son-emu monitor CLI."
diff --git a/src/emuvim/cli/network.py b/src/emuvim/cli/network.py
index 8d4219b..c27da59 100755
--- a/src/emuvim/cli/network.py
+++ b/src/emuvim/cli/network.py
@@ -28,19 +28,43 @@
             print "Command not implemented."
 
     def add(self, args):
+        vnf_src_name = self._parse_vnf_name(args.get("source"))
+        vnf_src_interface = self._parse_vnf_interface(args.get("source"))
+        vnf_dst_name = self._parse_vnf_name(args.get("destination"))
+        vnf_dst_interface = self._parse_vnf_interface(args.get("destination"))
         r = self.c.network_action_start(
             #args.get("datacenter"),
-            args.get("source"),
-            args.get("destination"))
+            vnf_src_name,
+            vnf_dst_name,
+            vnf_src_interface,
+            vnf_dst_interface)
         pp.pprint(r)
 
     def remove(self, args):
+        vnf_src_name = self._parse_vnf_name(args.get("source"))
+        vnf_src_interface = self._parse_vnf_interface(args.get("source"))
+        vnf_dst_name = self._parse_vnf_name(args.get("destination"))
+        vnf_dst_interface = self._parse_vnf_interface(args.get("destination"))
         r = self.c.network_action_stop(
             #args.get("datacenter"),
-            args.get("source"),
-            args.get("destination"))
+            vnf_src_name,
+            vnf_dst_name,
+            vnf_src_interface,
+            vnf_dst_interface)
         pp.pprint(r)
 
+    def _parse_vnf_name(self, vnf_name_str):
+        vnf_name = vnf_name_str.split(':')[0]
+        return vnf_name
+
+    def _parse_vnf_interface(self, vnf_name_str):
+        try:
+            vnf_interface = vnf_name_str.split(':')[1]
+        except:
+            vnf_interface = None
+
+        return vnf_interface
+
 
 parser = argparse.ArgumentParser(description='son-emu network')
 parser.add_argument(
diff --git a/src/emuvim/dcemulator/monitoring.py b/src/emuvim/dcemulator/monitoring.py
index 094c09b..50393ea 100755
--- a/src/emuvim/dcemulator/monitoring.py
+++ b/src/emuvim/dcemulator/monitoring.py
@@ -4,6 +4,7 @@
 import logging
 from mininet.node import  OVSSwitch
 import ast
+import time
 logging.basicConfig(level=logging.INFO)
 
 """
@@ -18,9 +19,38 @@
         self.port = '8080'
         self.REST_api = 'http://{0}:{1}'.format(self.ip,self.port)
 
+        self.previous_measurement = 0
+        self.previous_monitor_time = 0
+        self.switch_dpid = 0
+        self.metric_key = None
+        self.mon_port = None
 
-    def get_rate(self, vnf_name, direction='tx'):
+    # first set some parameters, before measurement can start
+    def setup_rate_measurement(self, vnf_name, vnf_interface=None, direction='tx', metric='packets'):
+        # check if port is specified (vnf:port)
+        if vnf_interface is None:
+            # 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]
+            vnf_interface = link_dict[0]['src_port_id']
+
+        for connected_sw in self.net.DCNetwork_graph.neighbors(vnf_name):
+            link_dict = self.net.DCNetwork_graph[vnf_name][connected_sw]
+            for link in link_dict:
+                # logging.info("{0},{1}".format(link_dict[link],vnf_interface))
+                if link_dict[link]['src_port_id'] == vnf_interface:
+                    # found the right link and connected switch
+                    # logging.info("{0},{1}".format(link_dict[link]['src_port_id'], vnf_source_interface))
+                    self.mon_port = link_dict[link]['dst_port']
+                    break
+
         try:
+            # default port direction to monitor
+            if direction is None:
+                direction = 'tx'
+            if metric is None:
+                metric = 'packets'
+
             vnf_switch = self.net.DCNetwork_graph.neighbors(str(vnf_name))
 
             if len(vnf_switch) > 1:
@@ -33,27 +63,51 @@
                 vnf_switch = vnf_switch[0]
             next_node = self.net.getNodeByName(vnf_switch)
 
-            if not isinstance( next_node, OVSSwitch ):
+            if not isinstance(next_node, OVSSwitch):
                 logging.info("vnf: {0} is not connected to switch".format(vnf_name))
                 return
 
-            mon_port = self.net.DCNetwork_graph[vnf_name][vnf_switch]['dst_port']
-            switch_dpid = x = int(str(next_node.dpid),16)
+            self.previous_measurement = 0
+            self.previous_monitor_time = 0
 
-            ret = self.REST_cmd('stats/port', switch_dpid)
-            port_stat_dict = ast.literal_eval(ret)
-            for port_stat in port_stat_dict[str(switch_dpid)]:
-                if port_stat['port_no'] == mon_port:
-                    return port_stat
-                    break
-
-            return ret
+            #self.switch_dpid = x = int(str(next_node.dpid), 16)
+            self.switch_dpid = int(str(next_node.dpid), 16)
+            self.metric_key = '{0}_{1}'.format(direction, metric)
 
         except Exception as ex:
             logging.exception("get_txrate error.")
             return ex.message
 
 
+    # call this function repeatedly for streaming measurements
+    def get_rate(self, vnf_name, vnf_interface=None, direction='tx', metric='packets'):
+
+            key = self.metric_key
+
+            ret = self.REST_cmd('stats/port', self.switch_dpid)
+            port_stat_dict = ast.literal_eval(ret)
+            for port_stat in port_stat_dict[str(self.switch_dpid)]:
+                if port_stat['port_no'] == self.mon_port:
+                    port_uptime = port_stat['duration_sec'] + port_stat['duration_nsec'] * 10 ** (-9)
+                    this_measurement = port_stat[key]
+
+                    if self.previous_monitor_time <= 0 or self.previous_monitor_time >= port_uptime:
+                        self.previous_measurement = port_stat[key]
+                        self.previous_monitor_time = port_uptime
+                        # do first measurement
+                        time.sleep(1)
+                        byte_rate = self.get_rate(vnf_name, vnf_interface, direction, metric)
+                        return byte_rate
+                    else:
+                        time_delta = (port_uptime - self.previous_monitor_time)
+                        byte_rate = (this_measurement - self.previous_measurement) / float(time_delta)
+                        #logging.info('uptime:{2} delta:{0} rate:{1}'.format(time_delta,byte_rate,port_uptime))
+
+                    self.previous_measurement = this_measurement
+                    self.previous_monitor_time = port_uptime
+                    return byte_rate
+
+            return ret
 
     def REST_cmd(self, prefix, dpid):
         url = self.REST_api + '/' + str(prefix) + '/' + str(dpid)
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index ff53773..0bef2fa 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -53,7 +53,7 @@
         self.addController('c0', controller=controller)
 
         # graph of the complete DC network
-        self.DCNetwork_graph = nx.DiGraph()
+        self.DCNetwork_graph = nx.MultiDiGraph()
 
         # monitoring agent
         self.monitor_agent = DCNetworkMonitor(self)
@@ -114,11 +114,27 @@
 
         link = Dockernet.addLink(self, node1, node2, **params)
 
+        # try to give container interfaces a default id
+        node1_port_id = node1.ports[link.intf1]
+        if isinstance(node1, Docker):
+            if "id" in params["params1"]:
+                node1_port_id = params["params1"]["id"]
+
+        node2_port_id = node2.ports[link.intf2]
+        if isinstance(node2, Docker):
+            if "id" in params["params2"]:
+                node2_port_id = params["params2"]["id"]
+
         # add edge and assigned port number to graph in both directions between node1 and node2
-        self.DCNetwork_graph.add_edge(node1.name, node2.name, \
-                                      {'src_port': node1.ports[link.intf1], 'dst_port': node2.ports[link.intf2]})
-        self.DCNetwork_graph.add_edge(node2.name, node1.name, \
-                                       {'src_port': node2.ports[link.intf2], 'dst_port': node1.ports[link.intf1]})
+        # port_id: id given in descriptor (if available, otherwise same as port)
+        # port: portnumber assigned by Dockernet
+
+        self.DCNetwork_graph.add_edge(node1.name, node2.name,
+                                      attr_dict={'src_port_id': node1_port_id, 'src_port': node1.ports[link.intf1],
+                                       'dst_port_id': node2_port_id, 'dst_port': node2.ports[link.intf2]})
+        self.DCNetwork_graph.add_edge(node2.name, node1.name,
+                                      attr_dict={'src_port_id': node2_port_id, 'src_port': node2.ports[link.intf2],
+                                        'dst_port_id': node1_port_id, 'dst_port': node1.ports[link.intf1]})
 
         return link
 
@@ -168,31 +184,96 @@
         CLI(self)
 
     # to remove chain do setChain( src, dst, cmd='del-flows')
-    def setChain(self, vnf_src_name, vnf_dst_name, cmd='add-flow'):
+    def setChain(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None, cmd='add-flow'):
+
+        #check if port is specified (vnf:port)
+        if vnf_src_interface is None:
+            # take first interface by default
+            connected_sw = self.DCNetwork_graph.neighbors(vnf_src_name)[0]
+            link_dict = self.DCNetwork_graph[vnf_src_name][connected_sw]
+            vnf_src_interface = link_dict[0]['src_port_id']
+            #vnf_source_interface = 0
+
+        for connected_sw in self.DCNetwork_graph.neighbors(vnf_src_name):
+            link_dict = self.DCNetwork_graph[vnf_src_name][connected_sw]
+            for link in link_dict:
+                #logging.info("{0},{1}".format(link_dict[link],vnf_source_interface))
+                if link_dict[link]['src_port_id'] == vnf_src_interface:
+                    # found the right link and connected switch
+                    #logging.info("{0},{1}".format(link_dict[link]['src_port_id'], vnf_source_interface))
+                    src_sw = connected_sw
+
+                    src_sw_inport = link_dict[link]['dst_port']
+                    break
+
+        if vnf_dst_interface is None:
+            # take first interface by default
+            connected_sw = self.DCNetwork_graph.neighbors(vnf_dst_name)[0]
+            link_dict = self.DCNetwork_graph[connected_sw][vnf_dst_name]
+            vnf_dst_interface = link_dict[0]['dst_port_id']
+            #vnf_dest_interface = 0
+
+        vnf_dst_name = vnf_dst_name.split(':')[0]
+        for connected_sw in self.DCNetwork_graph.neighbors(vnf_dst_name):
+            link_dict = self.DCNetwork_graph[connected_sw][vnf_dst_name]
+            for link in link_dict:
+                if link_dict[link]['dst_port_id'] == vnf_dst_interface:
+                    # found the right link and connected switch
+                    dst_sw = connected_sw
+                    dst_sw_outport = link_dict[link]['src_port']
+                    break
+
+
         # get shortest path
-        path = nx.shortest_path(self.DCNetwork_graph, vnf_src_name, vnf_dst_name)
+        #path = nx.shortest_path(self.DCNetwork_graph, vnf_src_name, vnf_dst_name)
+        try:
+            path = nx.shortest_path(self.DCNetwork_graph, src_sw, dst_sw)
+        except:
+            logging.info("No path could be found between {0} and {1}".format(vnf_src_name, vnf_dst_name))
+            return "No path could be found between {0} and {1}".format(vnf_src_name, vnf_dst_name)
+
         logging.info("Path between {0} and {1}: {2}".format(vnf_src_name, vnf_dst_name, path))
 
-        current_hop = vnf_src_name
+        #current_hop = vnf_src_name
+        current_hop = src_sw
+        switch_inport = src_sw_inport
+
         for i in range(0,len(path)):
-            next_hop = path[path.index(current_hop)+1]
+            current_node = self.getNodeByName(current_hop)
+            if path.index(current_hop) < len(path)-1:
+                next_hop = path[path.index(current_hop)+1]
+            else:
+                #last switch reached
+                next_hop = vnf_dst_name
+
             next_node = self.getNodeByName(next_hop)
 
             if next_hop == vnf_dst_name:
-                return "path added between {0} and {1}".format(vnf_src_name, vnf_dst_name)
+                switch_outport = dst_sw_outport
+                logging.info("end node reached: {0}".format(vnf_dst_name))
             elif not isinstance( next_node, OVSSwitch ):
                 logging.info("Next node: {0} is not a switch".format(next_hop))
                 return "Next node: {0} is not a switch".format(next_hop)
+            else:
+                # take first link between switches by default
+                index_edge_out = 0
+                switch_outport = self.DCNetwork_graph[current_hop][next_hop][index_edge_out]['src_port']
+
+            # take into account that multiple edges are possible between 2 nodes
+            index_edge_in = 0
 
 
-            switch_inport = self.DCNetwork_graph[current_hop][next_hop]['dst_port']
-            next2_hop = path[path.index(current_hop)+2]
-            switch_outport = self.DCNetwork_graph[next_hop][next2_hop]['src_port']
+            #switch_inport = self.DCNetwork_graph[current_hop][next_hop][index_edge_in]['dst_port']
 
-            logging.info("add flow in switch: {0} in_port: {1} out_port: {2}".format(next_node.name, switch_inport, switch_outport))
+            #next2_hop = path[path.index(current_hop)+2]
+            #index_edge_out = 0
+            #switch_outport = self.DCNetwork_graph[next_hop][next2_hop][index_edge_out]['src_port']
+            #switch_outport = self.DCNetwork_graph[current_hop][next_hop][index_edge_out]['src_port']
+
+            #logging.info("add flow in switch: {0} in_port: {1} out_port: {2}".format(current_node.name, switch_inport, switch_outport))
             # set of entry via ovs-ofctl
             # TODO use rest API of ryu to set flow entries to correct witch dpid
-            if isinstance( next_node, OVSSwitch ):
+            if isinstance( current_node, OVSSwitch ):
                 match = 'in_port=%s' % switch_inport
 
                 if cmd=='add-flow':
@@ -204,11 +285,16 @@
                 else:
                     ofcmd=''
 
-                next_node.dpctl(cmd, ofcmd)
+                current_node.dpctl(cmd, ofcmd)
+                logging.info("add flow in switch: {0} in_port: {1} out_port: {2}".format(current_node.name, switch_inport,
+                                                                                     switch_outport))
+            # take first link between switches by default
+            if isinstance( next_node, OVSSwitch ):
+                switch_inport = self.DCNetwork_graph[current_hop][next_hop][0]['dst_port']
+                current_hop = next_hop
 
-            current_hop = next_hop
-
-        return "destination node: {0} not reached".format(vnf_dst_name)
+        return "path added between {0} and {1}".format(vnf_src_name, vnf_dst_name)
+        #return "destination node: {0} not reached".format(vnf_dst_name)
 
     # start Ryu Openflow controller as Remote Controller for the DCNetwork
     def startRyu(self):
@@ -223,6 +309,8 @@
         ryu_cmd = 'ryu-manager'
         FNULL = open("/tmp/ryu.log", 'w')
         self.ryu_process = Popen([ryu_cmd, ryu_path, ryu_path2, ryu_option, ryu_of_port], stdout=FNULL, stderr=FNULL)
+        # no learning switch
+        #self.ryu_process = Popen([ryu_cmd, ryu_path2, ryu_option, ryu_of_port], stdout=FNULL, stderr=FNULL)
         time.sleep(1)
 
     def stopRyu(self):
diff --git a/src/emuvim/dcemulator/node.py b/src/emuvim/dcemulator/node.py
index 3f76df9..7590973 100755
--- a/src/emuvim/dcemulator/node.py
+++ b/src/emuvim/dcemulator/node.py
@@ -182,6 +182,8 @@
             memswap_limit="%dm" % int(mem_limit) if mem_limit > 0 else None  # lets set swap to mem limit for now
         )
         # connect all given networks
+        # if no --net option is given, network = [{}], so 1 empty dict in the list
+        # this results in 1 default interface with a default ip address
         for nw in network:
             # TODO we cannot use TCLink here (see: https://github.com/mpeuster/dockernet/issues/3)
             self.net.addLink(d, self.switch, params1=nw, cls=Link)
