[PATCH] Closes: #533539

Guido Günther agx at sigxcpu.org
Sun Jun 21 17:06:15 UTC 2009


---
 virtinst/VirtualNetworkInterface.py |    2 +-
 virtinst/_util.py                   |   50 +++++++++++++++++++++++++++++-
 virtinst/util.py                    |   58 +++++++---------------------------
 3 files changed, 62 insertions(+), 48 deletions(-)

diff --git a/virtinst/VirtualNetworkInterface.py b/virtinst/VirtualNetworkInterface.py
index 0e77519..6f3c3c4 100644
--- a/virtinst/VirtualNetworkInterface.py
+++ b/virtinst/VirtualNetworkInterface.py
@@ -127,7 +127,7 @@ class VirtualNetworkInterface(VirtualDevice.VirtualDevice):
                     raise RuntimeError(msg)
 
         if not self.bridge and self.type == "bridge":
-            self.bridge = _util.default_bridge()
+            self.bridge = _util.default_bridge2(self.conn)
 
     def get_xml_config(self):
         src_xml = ""
diff --git a/virtinst/_util.py b/virtinst/_util.py
index ff5bc91..5169971 100644
--- a/virtinst/_util.py
+++ b/virtinst/_util.py
@@ -28,10 +28,12 @@ import os
 import re
 import commands
 import logging
+import platform
+import subprocess
 
 import libvirt
 
-from virtinst import util
+import virtinst.util as util
 from virtinst import _virtinst as _
 
 def is_vdisk(path):
@@ -176,6 +178,52 @@ def fetch_all_guests(conn):
     return (active, inactive)
 
 
+def default_nic():
+    """
+    Return the default NIC to use, if one is specified.
+    """
+
+    dev = ''
+
+    if platform.system() != 'SunOS':
+        return dev
+
+    # XXX: fails without PRIV_XVM_CONTROL
+    proc = subprocess.Popen(['/usr/lib/xen/bin/xenstore-read',
+        'device-misc/vif/default-nic'], stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE)
+    out = proc.stdout.readlines()
+    if len(out) > 0:
+        dev = out[0].rstrip()
+
+    return dev
+
+def default_bridge2(conn = None):
+    if platform.system() == 'SunOS':
+        return ["bridge", default_nic()]
+
+    dev = util.default_route()
+
+    if (dev is not None and
+        (not conn or not is_uri_remote(conn.getURI()))):
+        # New style peth0 == phys dev, eth0 == bridge, eth0 == default route
+        if os.path.exists("/sys/class/net/%s/bridge" % dev):
+            return ["bridge", dev]
+
+        # Old style, peth0 == phys dev, eth0 == netloop, xenbr0 == bridge,
+        # vif0.0 == netloop enslaved, eth0 == default route
+        try:
+            defn = int(dev[-1])
+        except:
+            defn = -1
+
+        if (defn >= 0 and
+            os.path.exists("/sys/class/net/peth%d/brport" % defn) and
+            os.path.exists("/sys/class/net/xenbr%d/bridge" % defn)):
+            return ["bridge", "xenbr%d" % defn]
+
+    return None
+
 #
 # These functions accidentally ended up in the API under virtinst.util
 #
diff --git a/virtinst/util.py b/virtinst/util.py
index 2698b59..6308e5b 100644
--- a/virtinst/util.py
+++ b/virtinst/util.py
@@ -38,6 +38,7 @@ from sys import stderr
 
 import libvirt
 from virtinst import _virtinst as _
+import virtinst
 import CapabilitiesParser
 from User import User
 
@@ -76,59 +77,24 @@ def default_route(nic = None):
             continue
     return None
 
-def _default_nic():
-    """Return the default NIC to use, if one is specified.
-       This is NOT part of the API and may change at will."""
-
-    dev = ''
-
-    if platform.system() != 'SunOS':
-        return dev
-
-    # XXX: fails without PRIV_XVM_CONTROL
-    proc = subprocess.Popen(['/usr/lib/xen/bin/xenstore-read',
-        'device-misc/vif/default-nic'], stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE)
-    out = proc.stdout.readlines()
-    if len(out) > 0:
-        dev = out[0].rstrip()
-
-    return dev
 
 def default_bridge():
-    if platform.system() == 'SunOS':
-        return _default_nic()
-
-    rt = default_route()
-    if rt is None:
-        defn = None
+    ret = virtinst._util.default_bridge2(None)
+    if not ret:
+        # Maintain this behavior for back compat
+        ret = "xenbr0"
     else:
-        defn = int(rt[-1])
+        ret = ret[1]
 
-    if defn is None:
-        return "xenbr0"
-    else:
-        return "xenbr%d"%(defn)
+    return ret
 
 def default_network(conn):
-    if platform.system() == 'SunOS':
-        return ["bridge", _default_nic()]
-
-    dev = default_route()
-
-    if dev is not None and not is_uri_remote(conn.getURI()):
-        # New style peth0 == phys dev, eth0 == bridge, eth0 == default route
-        if os.path.exists("/sys/class/net/%s/bridge" % dev):
-            return ["bridge", dev]
-
-        # Old style, peth0 == phys dev, eth0 == netloop, xenbr0 == bridge,
-        # vif0.0 == netloop enslaved, eth0 == default route
-        defn = int(dev[-1])
-        if os.path.exists("/sys/class/net/peth%d/brport" % defn) and \
-           os.path.exists("/sys/class/net/xenbr%d/bridge" % defn):
-            return ["bridge", "xenbr%d" % defn]
+    ret = virtinst._util.default_bridge2(conn)
+    if not ret:
+        # FIXME: Check that this exists
+        ret = ["network", "default"]
 
-    return ["network", "default"]
+    return ret
 
 def default_connection():
     if os.path.exists('/var/lib/xend'):
-- 
1.6.3.1


--FL5UXtIhxfXey3p5--





More information about the Pkg-libvirt-maintainers mailing list