diff --git a/src/emuvim/api/zerorpc/network.py b/src/emuvim/api/zerorpc/network.py
index e80ceef..78083b0 100644
--- a/src/emuvim/api/zerorpc/network.py
+++ b/src/emuvim/api/zerorpc/network.py
@@ -75,7 +75,8 @@
                 vnf_src_interface=kwargs.get('vnf_src_interface'),
                 vnf_dst_interface=kwargs.get('vnf_dst_interface'),
                 weight=kwargs.get('weight'),
-                match=kwargs.get('match'))
+                match=kwargs.get('match'),
+                bidirectional=kwargs.get('bidirectional'))
             return str(c)
         except Exception as ex:
             logging.exception("RPC error.")
@@ -93,7 +94,8 @@
                 vnf_dst_interface=kwargs.get('vnf_dst_interface'),
                 cmd='del-flows',
                 weight=kwargs.get('weight'),
-                match=kwargs.get('match'))
+                match=kwargs.get('match'),
+                bidirectional=kwargs.get('bidirectional'))
             return c
         except Exception as ex:
             logging.exception("RPC error.")
diff --git a/src/emuvim/cli/network.py b/src/emuvim/cli/network.py
index bf107e8..a4b0233 100755
--- a/src/emuvim/cli/network.py
+++ b/src/emuvim/cli/network.py
@@ -35,7 +35,8 @@
             vnf_src_interface=self._parse_vnf_interface(args.get("source")),
             vnf_dst_interface=self._parse_vnf_interface(args.get("destination")),
             weight=args.get("weight"),
-            match=args.get("match"))
+            match=args.get("match"),
+            bidirectional=args.get("bidirectional"))
 
         # note zerorpc does not support named arguments
         r = self.c.network_action_start(
@@ -96,6 +97,11 @@
 parser.add_argument(
     "--match", "-m", dest="match",
     help="string holding extra matches for the flow entries")
+parser.add_argument(
+    "--bidirectional", "-b", dest="bidirectional",
+    action='store_true',
+    help="add/remove the flow entries in 2 directions")
+
 
 def main(argv):
     args = vars(parser.parse_args(argv))
diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py
index 794d50e..3ded28e 100755
--- a/src/emuvim/dcemulator/net.py
+++ b/src/emuvim/dcemulator/net.py
@@ -306,6 +306,11 @@
             # TODO this only sets port in to out, no match, so this will give trouble when multiple services are deployed...
             # TODO need multiple matches to do this (VLAN tags)
             if isinstance( current_node, OVSSwitch ):
+                match_input = kwargs.get('match')
+                self._set_flow_entry_dpctl(current_node, switch_inport_nr, switch_outport_nr, match_input, cmd)
+                if kwargs.get('bidirectional'):
+                    self._set_flow_entry_dpctl(current_node, switch_outport_nr, switch_inport_nr, match_input, cmd)
+                '''
                 match = 'in_port=%s' % switch_inport_nr
                 #add additional match entries from the argument
                 match_input = kwargs.get('match')
@@ -326,6 +331,7 @@
                 current_node.dpctl(cmd, ofcmd)
                 logging.info("add flow in switch: {0} in_port: {1} out_port: {2}".format(current_node.name, switch_inport_nr,
                                                                                      switch_outport_nr))
+                '''
             # take first link between switches by default
             if isinstance( next_node, OVSSwitch ):
                 switch_inport_nr = self.DCNetwork_graph[current_hop][next_hop][0]['dst_port_nr']
@@ -334,6 +340,28 @@
         return "path added between {0} and {1}".format(vnf_src_name, vnf_dst_name)
         #return "destination node: {0} not reached".format(vnf_dst_name)
 
+    def _set_flow_entry_dpctl(self, node, switch_inport_nr, switch_outport_nr, match_input, cmd):
+        match = 'in_port=%s' % switch_inport_nr
+        # add additional match entries from the argument
+        #match_input = kwargs.get('match')
+        # logging.info('match input:{0}'.format(match_input))
+        if match_input:
+            s = ','
+            match = s.join([match, match_input])
+
+        if cmd == 'add-flow':
+            action = 'action=%s' % switch_outport_nr
+            s = ','
+            ofcmd = s.join([match, action])
+        elif cmd == 'del-flows':
+            ofcmd = match
+        else:
+            ofcmd = ''
+
+        node.dpctl(cmd, ofcmd)
+        logging.info("add flow in switch: {0} in_port: {1} out_port: {2}".format(node.name, switch_inport_nr,
+                                                                                 switch_outport_nr))
+
     # start Ryu Openflow controller as Remote Controller for the DCNetwork
     def startRyu(self):
         # start Ryu controller with rest-API
