Blob Blame History Raw
From fc4a7b440201ccfaae3a45d1d98573cef9f33f09 Mon Sep 17 00:00:00 2001
From: Athmane Madjoudj <athmane@fedoraproject.org>
Date: Fri, 29 Jul 2016 17:33:41 +0000
Subject: [PATCH] Move utils.vmnet to gns3 namespace

---
 gns3server/utils/vmnet.py | 250 ++++++++++++++++++++++++++++++++++++++++++++++
 setup.py                  |   2 +-
 utils/__init__.py         |   0
 utils/vmnet.py            | 250 ----------------------------------------------
 4 files changed, 251 insertions(+), 251 deletions(-)
 create mode 100644 gns3server/utils/vmnet.py
 delete mode 100644 utils/__init__.py
 delete mode 100644 utils/vmnet.py

diff --git a/gns3server/utils/vmnet.py b/gns3server/utils/vmnet.py
new file mode 100644
index 0000000..a9be3f1
--- /dev/null
+++ b/gns3server/utils/vmnet.py
@@ -0,0 +1,250 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2015 GNS3 Technologies Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+import os
+import ipaddress
+import argparse
+import shutil
+
+from collections import OrderedDict
+
+if sys.platform.startswith("darwin"):
+    VMWARE_NETWORKING_FILE = "/Library/Preferences/VMware Fusion/networking"
+else:
+    # location on Linux
+    VMWARE_NETWORKING_FILE = "/etc/vmware/networking"
+
+if sys.platform.startswith("win"):
+    DEFAULT_RANGE = [1, 19]
+else:
+    DEFAULT_RANGE = [10, 99]
+
+
+def parse_networking_file():
+    """
+    Parse the VMware networking file.
+    """
+
+    pairs = dict()
+    allocated_subnets = []
+    try:
+        with open(VMWARE_NETWORKING_FILE, "r", encoding="utf-8") as f:
+            version = f.readline()
+            for line in f.read().splitlines():
+                try:
+                    _, key, value = line.split(' ', 3)
+                    key = key.strip()
+                    value = value.strip()
+                    pairs[key] = value
+                    if key.endswith("HOSTONLY_SUBNET"):
+                        allocated_subnets.append(value)
+                except ValueError:
+                    raise SystemExit("Error while parsing {}".format(VMWARE_NETWORKING_FILE))
+    except OSError as e:
+        raise SystemExit("Cannot open {}: {}".format(VMWARE_NETWORKING_FILE, e))
+    return version, pairs, allocated_subnets
+
+
+def write_networking_file(version, pairs):
+    """
+    Write the VMware networking file.
+    """
+
+    vmnets = OrderedDict(sorted(pairs.items(), key=lambda t: t[0]))
+    try:
+        with open(VMWARE_NETWORKING_FILE, "w", encoding="utf-8") as f:
+            f.write(version)
+            for key, value in vmnets.items():
+                f.write("answer {} {}\n".format(key, value))
+    except OSError as e:
+        raise SystemExit("Cannot open {}: {}".format(VMWARE_NETWORKING_FILE, e))
+
+    # restart VMware networking service
+    if sys.platform.startswith("darwin"):
+        if not os.path.exists("/Applications/VMware Fusion.app/Contents/Library/vmnet-cli"):
+            raise SystemExit("VMware Fusion is not installed in Applications")
+        os.system(r"/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure")
+        os.system(r"/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop")
+        os.system(r"/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start")
+    else:
+        os.system("vmware-networks --stop")
+        os.system("vmware-networks --start")
+
+
+def parse_vmnet_range(start, end):
+    """
+    Parse the vmnet range on the command line.
+    """
+
+    class Range(argparse.Action):
+
+        def __call__(self, parser, args, values, option_string=None):
+            if len(values) != 2:
+                raise argparse.ArgumentTypeError("vmnet range must consist of 2 numbers")
+            if not start <= values[0] or not values[1] <= end:
+                raise argparse.ArgumentTypeError("vmnet range must be between {} and {}".format(start, end))
+            setattr(args, self.dest, values)
+    return Range
+
+
+def find_vnetlib_registry(regkey):
+
+    import winreg
+    try:
+        # default path not used, let's look in the registry
+        hkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, regkey)
+        install_path, _ = winreg.QueryValueEx(hkey, "InstallPath")
+        vnetlib_path = os.path.join(install_path, "vnetlib.exe")
+        winreg.CloseKey(hkey)
+        if os.path.exists(vnetlib_path):
+            return vnetlib_path
+    except OSError:
+        pass
+    return None
+
+
+def find_vnetlib_on_windows():
+
+    vnetlib_path = shutil.which("vnetlib")
+    if vnetlib_path is None:
+        # look for vnetlib.exe in default VMware Workstation directory
+        vnetlib_ws = os.path.expandvars(r"%PROGRAMFILES(X86)%\VMware\VMware Workstation\vnetlib.exe")
+        if os.path.exists(vnetlib_ws):
+            vnetlib_path = vnetlib_ws
+        else:
+            # look for vnetlib.exe using the directory listed in the registry
+            vnetlib_path = find_vnetlib_registry(r"SOFTWARE\Wow6432Node\VMware, Inc.\VMware Workstation")
+        if vnetlib_path is None:
+            # look for vnetlib.exe in default VMware VIX directory
+            vnetlib_vix = os.path.expandvars(r"%PROGRAMFILES(X86)%\VMware\VMware VIX\vnetlib.exe")
+            if os.path.exists(vnetlib_vix):
+                vnetlib_path = vnetlib_vix
+            else:
+                # look for vnetlib.exe using the directory listed in the registry
+                vnetlib_path = find_vnetlib_registry(r"SOFTWARE\Wow6432Node\VMware, Inc.\VMware Player")
+    return vnetlib_path
+
+
+def vmnet_windows(args, vmnet_range_start, vmnet_range_end):
+
+    vnetlib_path = find_vnetlib_on_windows()
+    if not vnetlib_path:
+        raise SystemExit("VMware is not installed, could not find vnetlib.exe")
+    from win32com.shell import shell
+    if not shell.IsUserAnAdmin():
+        raise SystemExit("You must run this script as an administrator")
+
+    if args.list:
+        raise SystemExit("Not implemented")
+
+    if args.clean:
+        # clean all vmnets but vmnet1 and vmnet8
+        for vmnet_number in range(1, 20):
+            if vmnet_number in (1, 8):
+                continue
+            print("Removing vmnet{}...".format(vmnet_number))
+            os.system('"{}" -- remove adapter vmnet{}'.format(vnetlib_path, vmnet_number))
+    else:
+        for vmnet_number in range(vmnet_range_start, vmnet_range_end + 1):
+            if vmnet_number in (1, 8):
+                continue
+            print("Adding vmnet{}...".format(vmnet_number))
+            os.system('"{}" -- add adapter vmnet{}'.format(vnetlib_path, vmnet_number))
+    os.system("net stop npf")
+    os.system("net start npf")
+    os.system("net stop npcap")
+    os.system("net start npcap")
+
+def vmnet_unix(args, vmnet_range_start, vmnet_range_end):
+    """
+    Implementation on Linux and Mac OS X.
+    """
+
+    if not os.path.exists(VMWARE_NETWORKING_FILE):
+        raise SystemExit("VMware Player, Workstation or Fusion is not installed")
+    if not os.access(VMWARE_NETWORKING_FILE, os.W_OK):
+        raise SystemExit("You must run this script as root")
+
+    version, pairs, allocated_subnets = parse_networking_file()
+    if args.list and not sys.platform.startswith("win"):
+        for vmnet_number in range(1, 256):
+            vmnet_name = "VNET_{}_VIRTUAL_ADAPTER".format(vmnet_number)
+            if vmnet_name in pairs:
+                print("vmnet{}".format(vmnet_number))
+        return
+
+    if args.clean:
+        # clean all vmnets but vmnet1 and vmnet8
+        for key in pairs.copy().keys():
+            if key.startswith("VNET_1_") or key.startswith("VNET_8_"):
+                continue
+            del pairs[key]
+    else:
+        for vmnet_number in range(vmnet_range_start, vmnet_range_end + 1):
+            vmnet_name = "VNET_{}_VIRTUAL_ADAPTER".format(vmnet_number)
+            if vmnet_name in pairs:
+                continue
+            allocated_subnet = None
+            for subnet in ipaddress.ip_network("172.16.0.0/16").subnets(prefixlen_diff=8):
+                subnet = str(subnet.network_address)
+                if subnet not in allocated_subnets:
+                    allocated_subnet = subnet
+                    allocated_subnets.append(allocated_subnet)
+                    break
+
+            if allocated_subnet is None:
+                print("Couldn't allocate a subnet for vmnet{}".format(vmnet_number))
+                continue
+
+            print("Adding vmnet{}...".format(vmnet_number))
+            pairs["VNET_{}_HOSTONLY_NETMASK".format(vmnet_number)] = "255.255.255.0"
+            pairs["VNET_{}_HOSTONLY_SUBNET".format(vmnet_number)] = allocated_subnet
+            pairs["VNET_{}_VIRTUAL_ADAPTER".format(vmnet_number)] = "yes"
+
+    write_networking_file(version, pairs)
+
+
+def main():
+    """
+    Entry point for the VMNET tool.
+    """
+
+    parser = argparse.ArgumentParser(description='%(prog)s add/remove vmnet interfaces')
+    parser.add_argument('-r', "--range", nargs='+', action=parse_vmnet_range(1, 255),
+                        type=int, help="vmnet range to add (default is {} {})".format(DEFAULT_RANGE[0], DEFAULT_RANGE[1]))
+    parser.add_argument("-C", "--clean", action="store_true", help="remove all vmnets excepting vmnet1 and vmnet8")
+    parser.add_argument("-l", "--list", action="store_true", help="list all existing vmnets (UNIX only)")
+
+    try:
+        args = parser.parse_args()
+    except argparse.ArgumentTypeError as e:
+        raise SystemExit(e)
+
+    vmnet_range = args.range if args.range is not None else DEFAULT_RANGE
+    if sys.platform.startswith("win"):
+        try:
+            vmnet_windows(args, vmnet_range[0], vmnet_range[1])
+        except SystemExit:
+            os.system("pause")
+            raise
+    else:
+        vmnet_unix(args, vmnet_range[0], vmnet_range[1])
+
+if __name__ == '__main__':
+    main()
diff --git a/setup.py b/setup.py
index d0c8d0d..8d41046 100644
--- a/setup.py
+++ b/setup.py
@@ -53,7 +53,7 @@ setup(
     entry_points={
         "console_scripts": [
             "gns3server = gns3server.main:main",
-            "gns3vmnet = utils.vmnet:main",
+            "gns3vmnet = gns3server.utils.vmnet:main",
         ]
     },
     packages=find_packages(".", exclude=["docs", "tests"]),
diff --git a/utils/__init__.py b/utils/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/utils/vmnet.py b/utils/vmnet.py
deleted file mode 100644
index a9be3f1..0000000
--- a/utils/vmnet.py
+++ /dev/null
@@ -1,250 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2015 GNS3 Technologies Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import os
-import ipaddress
-import argparse
-import shutil
-
-from collections import OrderedDict
-
-if sys.platform.startswith("darwin"):
-    VMWARE_NETWORKING_FILE = "/Library/Preferences/VMware Fusion/networking"
-else:
-    # location on Linux
-    VMWARE_NETWORKING_FILE = "/etc/vmware/networking"
-
-if sys.platform.startswith("win"):
-    DEFAULT_RANGE = [1, 19]
-else:
-    DEFAULT_RANGE = [10, 99]
-
-
-def parse_networking_file():
-    """
-    Parse the VMware networking file.
-    """
-
-    pairs = dict()
-    allocated_subnets = []
-    try:
-        with open(VMWARE_NETWORKING_FILE, "r", encoding="utf-8") as f:
-            version = f.readline()
-            for line in f.read().splitlines():
-                try:
-                    _, key, value = line.split(' ', 3)
-                    key = key.strip()
-                    value = value.strip()
-                    pairs[key] = value
-                    if key.endswith("HOSTONLY_SUBNET"):
-                        allocated_subnets.append(value)
-                except ValueError:
-                    raise SystemExit("Error while parsing {}".format(VMWARE_NETWORKING_FILE))
-    except OSError as e:
-        raise SystemExit("Cannot open {}: {}".format(VMWARE_NETWORKING_FILE, e))
-    return version, pairs, allocated_subnets
-
-
-def write_networking_file(version, pairs):
-    """
-    Write the VMware networking file.
-    """
-
-    vmnets = OrderedDict(sorted(pairs.items(), key=lambda t: t[0]))
-    try:
-        with open(VMWARE_NETWORKING_FILE, "w", encoding="utf-8") as f:
-            f.write(version)
-            for key, value in vmnets.items():
-                f.write("answer {} {}\n".format(key, value))
-    except OSError as e:
-        raise SystemExit("Cannot open {}: {}".format(VMWARE_NETWORKING_FILE, e))
-
-    # restart VMware networking service
-    if sys.platform.startswith("darwin"):
-        if not os.path.exists("/Applications/VMware Fusion.app/Contents/Library/vmnet-cli"):
-            raise SystemExit("VMware Fusion is not installed in Applications")
-        os.system(r"/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure")
-        os.system(r"/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop")
-        os.system(r"/Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start")
-    else:
-        os.system("vmware-networks --stop")
-        os.system("vmware-networks --start")
-
-
-def parse_vmnet_range(start, end):
-    """
-    Parse the vmnet range on the command line.
-    """
-
-    class Range(argparse.Action):
-
-        def __call__(self, parser, args, values, option_string=None):
-            if len(values) != 2:
-                raise argparse.ArgumentTypeError("vmnet range must consist of 2 numbers")
-            if not start <= values[0] or not values[1] <= end:
-                raise argparse.ArgumentTypeError("vmnet range must be between {} and {}".format(start, end))
-            setattr(args, self.dest, values)
-    return Range
-
-
-def find_vnetlib_registry(regkey):
-
-    import winreg
-    try:
-        # default path not used, let's look in the registry
-        hkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, regkey)
-        install_path, _ = winreg.QueryValueEx(hkey, "InstallPath")
-        vnetlib_path = os.path.join(install_path, "vnetlib.exe")
-        winreg.CloseKey(hkey)
-        if os.path.exists(vnetlib_path):
-            return vnetlib_path
-    except OSError:
-        pass
-    return None
-
-
-def find_vnetlib_on_windows():
-
-    vnetlib_path = shutil.which("vnetlib")
-    if vnetlib_path is None:
-        # look for vnetlib.exe in default VMware Workstation directory
-        vnetlib_ws = os.path.expandvars(r"%PROGRAMFILES(X86)%\VMware\VMware Workstation\vnetlib.exe")
-        if os.path.exists(vnetlib_ws):
-            vnetlib_path = vnetlib_ws
-        else:
-            # look for vnetlib.exe using the directory listed in the registry
-            vnetlib_path = find_vnetlib_registry(r"SOFTWARE\Wow6432Node\VMware, Inc.\VMware Workstation")
-        if vnetlib_path is None:
-            # look for vnetlib.exe in default VMware VIX directory
-            vnetlib_vix = os.path.expandvars(r"%PROGRAMFILES(X86)%\VMware\VMware VIX\vnetlib.exe")
-            if os.path.exists(vnetlib_vix):
-                vnetlib_path = vnetlib_vix
-            else:
-                # look for vnetlib.exe using the directory listed in the registry
-                vnetlib_path = find_vnetlib_registry(r"SOFTWARE\Wow6432Node\VMware, Inc.\VMware Player")
-    return vnetlib_path
-
-
-def vmnet_windows(args, vmnet_range_start, vmnet_range_end):
-
-    vnetlib_path = find_vnetlib_on_windows()
-    if not vnetlib_path:
-        raise SystemExit("VMware is not installed, could not find vnetlib.exe")
-    from win32com.shell import shell
-    if not shell.IsUserAnAdmin():
-        raise SystemExit("You must run this script as an administrator")
-
-    if args.list:
-        raise SystemExit("Not implemented")
-
-    if args.clean:
-        # clean all vmnets but vmnet1 and vmnet8
-        for vmnet_number in range(1, 20):
-            if vmnet_number in (1, 8):
-                continue
-            print("Removing vmnet{}...".format(vmnet_number))
-            os.system('"{}" -- remove adapter vmnet{}'.format(vnetlib_path, vmnet_number))
-    else:
-        for vmnet_number in range(vmnet_range_start, vmnet_range_end + 1):
-            if vmnet_number in (1, 8):
-                continue
-            print("Adding vmnet{}...".format(vmnet_number))
-            os.system('"{}" -- add adapter vmnet{}'.format(vnetlib_path, vmnet_number))
-    os.system("net stop npf")
-    os.system("net start npf")
-    os.system("net stop npcap")
-    os.system("net start npcap")
-
-def vmnet_unix(args, vmnet_range_start, vmnet_range_end):
-    """
-    Implementation on Linux and Mac OS X.
-    """
-
-    if not os.path.exists(VMWARE_NETWORKING_FILE):
-        raise SystemExit("VMware Player, Workstation or Fusion is not installed")
-    if not os.access(VMWARE_NETWORKING_FILE, os.W_OK):
-        raise SystemExit("You must run this script as root")
-
-    version, pairs, allocated_subnets = parse_networking_file()
-    if args.list and not sys.platform.startswith("win"):
-        for vmnet_number in range(1, 256):
-            vmnet_name = "VNET_{}_VIRTUAL_ADAPTER".format(vmnet_number)
-            if vmnet_name in pairs:
-                print("vmnet{}".format(vmnet_number))
-        return
-
-    if args.clean:
-        # clean all vmnets but vmnet1 and vmnet8
-        for key in pairs.copy().keys():
-            if key.startswith("VNET_1_") or key.startswith("VNET_8_"):
-                continue
-            del pairs[key]
-    else:
-        for vmnet_number in range(vmnet_range_start, vmnet_range_end + 1):
-            vmnet_name = "VNET_{}_VIRTUAL_ADAPTER".format(vmnet_number)
-            if vmnet_name in pairs:
-                continue
-            allocated_subnet = None
-            for subnet in ipaddress.ip_network("172.16.0.0/16").subnets(prefixlen_diff=8):
-                subnet = str(subnet.network_address)
-                if subnet not in allocated_subnets:
-                    allocated_subnet = subnet
-                    allocated_subnets.append(allocated_subnet)
-                    break
-
-            if allocated_subnet is None:
-                print("Couldn't allocate a subnet for vmnet{}".format(vmnet_number))
-                continue
-
-            print("Adding vmnet{}...".format(vmnet_number))
-            pairs["VNET_{}_HOSTONLY_NETMASK".format(vmnet_number)] = "255.255.255.0"
-            pairs["VNET_{}_HOSTONLY_SUBNET".format(vmnet_number)] = allocated_subnet
-            pairs["VNET_{}_VIRTUAL_ADAPTER".format(vmnet_number)] = "yes"
-
-    write_networking_file(version, pairs)
-
-
-def main():
-    """
-    Entry point for the VMNET tool.
-    """
-
-    parser = argparse.ArgumentParser(description='%(prog)s add/remove vmnet interfaces')
-    parser.add_argument('-r', "--range", nargs='+', action=parse_vmnet_range(1, 255),
-                        type=int, help="vmnet range to add (default is {} {})".format(DEFAULT_RANGE[0], DEFAULT_RANGE[1]))
-    parser.add_argument("-C", "--clean", action="store_true", help="remove all vmnets excepting vmnet1 and vmnet8")
-    parser.add_argument("-l", "--list", action="store_true", help="list all existing vmnets (UNIX only)")
-
-    try:
-        args = parser.parse_args()
-    except argparse.ArgumentTypeError as e:
-        raise SystemExit(e)
-
-    vmnet_range = args.range if args.range is not None else DEFAULT_RANGE
-    if sys.platform.startswith("win"):
-        try:
-            vmnet_windows(args, vmnet_range[0], vmnet_range[1])
-        except SystemExit:
-            os.system("pause")
-            raise
-    else:
-        vmnet_unix(args, vmnet_range[0], vmnet_range[1])
-
-if __name__ == '__main__':
-    main()
-- 
2.7.4