add birectional option for set Chain
[osm/vim-emu.git] / src / emuvim / cli / network.py
index 8d4219b..a4b0233 100755 (executable)
@@ -28,19 +28,55 @@ class ZeroRpcClient(object):
             print "Command not implemented."\r
 \r
     def add(self, args):\r
+        vnf_src_name = self._parse_vnf_name(args.get("source"))\r
+        vnf_dst_name = self._parse_vnf_name(args.get("destination"))\r
+\r
+        params = self._create_dict(\r
+            vnf_src_interface=self._parse_vnf_interface(args.get("source")),\r
+            vnf_dst_interface=self._parse_vnf_interface(args.get("destination")),\r
+            weight=args.get("weight"),\r
+            match=args.get("match"),\r
+            bidirectional=args.get("bidirectional"))\r
+\r
+        # note zerorpc does not support named arguments\r
         r = self.c.network_action_start(\r
             #args.get("datacenter"),\r
-            args.get("source"),\r
-            args.get("destination"))\r
+            vnf_src_name,\r
+            vnf_dst_name,\r
+            params)\r
         pp.pprint(r)\r
 \r
     def remove(self, args):\r
+        vnf_src_name = self._parse_vnf_name(args.get("source"))\r
+        vnf_dst_name = self._parse_vnf_name(args.get("destination"))\r
+\r
+        params = self._create_dict(\r
+            vnf_src_interface=self._parse_vnf_interface(args.get("source")),\r
+            vnf_dst_interface=self._parse_vnf_interface(args.get("destination")),\r
+            weight=args.get("weight"),\r
+            match=args.get("match"))\r
+\r
         r = self.c.network_action_stop(\r
             #args.get("datacenter"),\r
-            args.get("source"),\r
-            args.get("destination"))\r
+            vnf_src_name,\r
+            vnf_dst_name,\r
+            params)\r
         pp.pprint(r)\r
 \r
+    def _parse_vnf_name(self, vnf_name_str):\r
+        vnf_name = vnf_name_str.split(':')[0]\r
+        return vnf_name\r
+\r
+    def _parse_vnf_interface(self, vnf_name_str):\r
+        try:\r
+            vnf_interface = vnf_name_str.split(':')[1]\r
+        except:\r
+            vnf_interface = None\r
+\r
+        return vnf_interface\r
+\r
+    def _create_dict(self, **kwargs):\r
+        return kwargs\r
 \r
 parser = argparse.ArgumentParser(description='son-emu network')\r
 parser.add_argument(\r
@@ -55,6 +91,17 @@ parser.add_argument(
 parser.add_argument(\r
     "--destination", "-dst", dest="destination",\r
     help="vnf name of the destination of the chain")\r
+parser.add_argument(\r
+    "--weight", "-w", dest="weight",\r
+    help="weight metric to calculate the path")\r
+parser.add_argument(\r
+    "--match", "-m", dest="match",\r
+    help="string holding extra matches for the flow entries")\r
+parser.add_argument(\r
+    "--bidirectional", "-b", dest="bidirectional",\r
+    action='store_true',\r
+    help="add/remove the flow entries in 2 directions")\r
+\r
 \r
 def main(argv):\r
     args = vars(parser.parse_args(argv))\r