mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
util: Move default_* network bits to deviceinterface
This commit is contained in:
parent
927be95b95
commit
4c759ad23d
@ -127,14 +127,13 @@ class TestXMLMisc(unittest.TestCase):
|
|||||||
def testDefaultBridge(self):
|
def testDefaultBridge(self):
|
||||||
# Test our handling of the default bridge routines
|
# Test our handling of the default bridge routines
|
||||||
origfunc = None
|
origfunc = None
|
||||||
util = None
|
|
||||||
try:
|
try:
|
||||||
util = getattr(virtinst, "util")
|
from virtinst import deviceinterface
|
||||||
origfunc = util.default_bridge
|
origfunc = getattr(deviceinterface, "_default_bridge")
|
||||||
|
|
||||||
def newbridge(ignore_conn):
|
def newbridge(ignore_conn):
|
||||||
return "bzz0"
|
return "bzz0"
|
||||||
util.default_bridge = newbridge
|
setattr(deviceinterface, "_default_bridge", newbridge)
|
||||||
|
|
||||||
dev1 = virtinst.VirtualNetworkInterface(_default_conn)
|
dev1 = virtinst.VirtualNetworkInterface(_default_conn)
|
||||||
dev1.macaddr = "22:22:33:44:55:66"
|
dev1.macaddr = "22:22:33:44:55:66"
|
||||||
@ -165,8 +164,9 @@ class TestXMLMisc(unittest.TestCase):
|
|||||||
" <mac address=\"22:22:33:44:55:68\"/>\n"
|
" <mac address=\"22:22:33:44:55:68\"/>\n"
|
||||||
"</interface>\n")
|
"</interface>\n")
|
||||||
finally:
|
finally:
|
||||||
if util and origfunc:
|
if origfunc:
|
||||||
util.default_bridge = origfunc
|
from virtinst import deviceinterface
|
||||||
|
setattr(deviceinterface, "_default_bridge", origfunc)
|
||||||
|
|
||||||
def testCpustrToTuple(self):
|
def testCpustrToTuple(self):
|
||||||
# Various testing our cpustr handling
|
# Various testing our cpustr handling
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
# MA 02110-1301 USA.
|
# MA 02110-1301 USA.
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import random
|
import random
|
||||||
|
|
||||||
from . import util
|
from . import util
|
||||||
@ -52,6 +53,67 @@ def _random_mac(conn):
|
|||||||
return ':'.join(["%02x" % x for x in mac])
|
return ':'.join(["%02x" % x for x in mac])
|
||||||
|
|
||||||
|
|
||||||
|
def _default_route():
|
||||||
|
route_file = "/proc/net/route"
|
||||||
|
if not os.path.exists(route_file):
|
||||||
|
logging.debug("route_file=%s does not exist", route_file)
|
||||||
|
return None
|
||||||
|
|
||||||
|
for line in file(route_file):
|
||||||
|
info = line.split()
|
||||||
|
if len(info) != 11:
|
||||||
|
logging.debug("Unexpected field count=%s when parsing %s",
|
||||||
|
len(info), route_file)
|
||||||
|
break
|
||||||
|
|
||||||
|
try:
|
||||||
|
route = int(info[1], 16)
|
||||||
|
if route == 0:
|
||||||
|
return info[0]
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _default_bridge(conn):
|
||||||
|
if "VIRTINST_TEST_SUITE" in os.environ:
|
||||||
|
return "eth0"
|
||||||
|
|
||||||
|
if conn.is_remote():
|
||||||
|
return None
|
||||||
|
|
||||||
|
dev = _default_route()
|
||||||
|
if not dev:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# New style peth0 == phys dev, eth0 == bridge, eth0 == default route
|
||||||
|
if os.path.exists("/sys/class/net/%s/bridge" % dev):
|
||||||
|
return 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 "xenbr%d"
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _default_network(conn):
|
||||||
|
ret = _default_bridge(conn)
|
||||||
|
if ret:
|
||||||
|
return ["bridge", ret]
|
||||||
|
|
||||||
|
# FIXME: Check that this exists
|
||||||
|
return ["network", "default"]
|
||||||
|
|
||||||
|
|
||||||
class VirtualPort(XMLBuilder):
|
class VirtualPort(XMLBuilder):
|
||||||
_XML_ROOT_NAME = "virtualport"
|
_XML_ROOT_NAME = "virtualport"
|
||||||
|
|
||||||
@ -148,7 +210,7 @@ class VirtualNetworkInterface(VirtualDevice):
|
|||||||
ret = self._default_bridge
|
ret = self._default_bridge
|
||||||
if ret is None:
|
if ret is None:
|
||||||
ret = False
|
ret = False
|
||||||
default = util.default_bridge(self.conn)
|
default = _default_bridge(self.conn)
|
||||||
if default:
|
if default:
|
||||||
ret = default
|
ret = default
|
||||||
|
|
||||||
@ -262,7 +324,7 @@ class VirtualNetworkInterface(VirtualDevice):
|
|||||||
if (self.conn.is_qemu_session() or self.conn.is_test()):
|
if (self.conn.is_qemu_session() or self.conn.is_test()):
|
||||||
self.type = self.TYPE_USER
|
self.type = self.TYPE_USER
|
||||||
else:
|
else:
|
||||||
self.type, self.source = util.default_network(self.conn)
|
self.type, self.source = _default_network(self.conn)
|
||||||
|
|
||||||
|
|
||||||
VirtualNetworkInterface.register_type()
|
VirtualNetworkInterface.register_type()
|
||||||
|
@ -160,34 +160,6 @@ def generate_name(base, collision_cb, suffix="", lib_collision=True,
|
|||||||
raise ValueError(_("Name generation range exceeded."))
|
raise ValueError(_("Name generation range exceeded."))
|
||||||
|
|
||||||
|
|
||||||
def default_bridge(conn):
|
|
||||||
if "VIRTINST_TEST_SUITE" in os.environ:
|
|
||||||
return "eth0"
|
|
||||||
|
|
||||||
if conn.is_remote():
|
|
||||||
return None
|
|
||||||
|
|
||||||
dev = default_route()
|
|
||||||
if not dev:
|
|
||||||
return None
|
|
||||||
|
|
||||||
# New style peth0 == phys dev, eth0 == bridge, eth0 == default route
|
|
||||||
if os.path.exists("/sys/class/net/%s/bridge" % dev):
|
|
||||||
return 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 "xenbr%d"
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def generate_uuid(conn):
|
def generate_uuid(conn):
|
||||||
for ignore in range(256):
|
for ignore in range(256):
|
||||||
@ -199,40 +171,6 @@ def generate_uuid(conn):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def default_route():
|
|
||||||
route_file = "/proc/net/route"
|
|
||||||
if not os.path.exists(route_file):
|
|
||||||
logging.debug("route_file=%s does not exist", route_file)
|
|
||||||
return None
|
|
||||||
|
|
||||||
d = file(route_file)
|
|
||||||
|
|
||||||
defn = 0
|
|
||||||
for line in d.xreadlines():
|
|
||||||
info = line.split()
|
|
||||||
if (len(info) != 11): # 11 = typical num of fields in the file
|
|
||||||
logging.warn(_("Invalid line length while parsing %s."),
|
|
||||||
route_file)
|
|
||||||
logging.warn(_("Defaulting bridge to xenbr%d"), defn)
|
|
||||||
break
|
|
||||||
try:
|
|
||||||
route = int(info[1], 16)
|
|
||||||
if route == 0:
|
|
||||||
return info[0]
|
|
||||||
except ValueError:
|
|
||||||
continue
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def default_network(conn):
|
|
||||||
ret = default_bridge(conn)
|
|
||||||
if ret:
|
|
||||||
return ["bridge", ret]
|
|
||||||
|
|
||||||
# FIXME: Check that this exists
|
|
||||||
return ["network", "default"]
|
|
||||||
|
|
||||||
|
|
||||||
def randomUUID(conn):
|
def randomUUID(conn):
|
||||||
if conn.fake_conn_predictable():
|
if conn.fake_conn_predictable():
|
||||||
# Testing hack
|
# Testing hack
|
||||||
|
Loading…
Reference in New Issue
Block a user