Skip to content
This repository was archived by the owner on Mar 11, 2019. It is now read-only.

Commit c40dfdd

Browse files
committed
VirtualNetworkDevice: Add ethernet source dev, and get_source helper
1 parent 5715716 commit c40dfdd

6 files changed

Lines changed: 40 additions & 0 deletions

File tree

tests/xmlconfig-xml/boot-many-nics.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
<mac address='22:22:22:22:22:22'/>
3636
<target dev='foo1'/>
3737
</interface>
38+
<interface type='ethernet'>
39+
<source dev='testeth1'/>
40+
<mac address='00:11:00:22:00:33'/>
41+
</interface>
3842
<input type='mouse' bus='ps2'/>
3943
<graphics type='sdl' display=':3.4' xauth='/tmp/.Xauthority'/>
4044
<console type='pty'/>

tests/xmlconfig.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,11 +719,15 @@ def testManyNICs(self):
719719
net4 = VirtualNetworkInterface(bridge="foobr0",
720720
macaddr="22:22:22:22:22:22")
721721
net4.target_dev = "foo1"
722+
net5 = VirtualNetworkInterface(type="ethernet",
723+
macaddr="00:11:00:22:00:33")
724+
net5.source_dev = "testeth1"
722725

723726
g.nics.append(net1)
724727
g.nics.append(net2)
725728
g.nics.append(net3)
726729
g.nics.append(net4)
730+
g.nics.append(net5)
727731
self._compare(g, "boot-many-nics", False)
728732

729733
def testManyHostdevs(self):

tests/xmlparse-xml/change-nics-in.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
</interface>
3333
<interface type="ethernet">
3434
<mac address="00:11:22:33:44:55"/>
35+
<source dev='eth0'/>
3536
<script path="/etc/qemu-ifup"/>
3637
<target dev="nic02"/>
3738
</interface>

tests/xmlparse-xml/change-nics-out.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
</interface>
3636
<interface type="ethernet">
3737
<mac address="00:11:22:33:44:55"/>
38+
<source dev="eth1"/>
3839
<script path="/etc/qemu-ifup"/>
3940
</interface>
4041
<input type="mouse" bus="ps2"/>

tests/xmlparse.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,10 @@ def testAlterNics(self):
306306
check("bridge", None, "br0")
307307
check("network", None, "route")
308308
check("macaddr", "11:11:11:11:11:11", "AA:AA:AA:AA:AA:AA")
309+
self.assertEquals(dev1.get_source(), None)
309310

310311
check = self._make_checker(dev2)
312+
self.assertEquals(dev2.get_source(), "default")
311313
check("type", "network", "bridge")
312314
check("network", "default", None)
313315
check("bridge", None, "newbr0")
@@ -319,11 +321,14 @@ def testAlterNics(self):
319321
check("network", None, "default")
320322
check("macaddr", "22:22:22:22:22:22")
321323
check("target_dev", None, "test1")
324+
self.assertEquals(dev3.get_source(), "newfoo0")
322325

323326
check = self._make_checker(dev4)
324327
check("type", "ethernet")
328+
check("source_dev", "eth0", "eth1")
325329
check("target_dev", "nic02", "nic03")
326330
check("target_dev", "nic03", None)
331+
self.assertEquals(dev4.get_source(), "eth1")
327332

328333
self._alter_compare(guest.get_config_xml(), outfile)
329334

virtinst/VirtualNetworkInterface.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def __init__(self, macaddr=None, type=TYPE_BRIDGE, bridge=None,
8282
self._type = None
8383
self._model = None
8484
self._target_dev = None
85+
self._source_dev = None
8586

8687
if self._is_parse():
8788
return
@@ -96,6 +97,21 @@ def __init__(self, macaddr=None, type=TYPE_BRIDGE, bridge=None,
9697
if network is None:
9798
raise ValueError, _("A network name was not provided")
9899

100+
def get_source(self):
101+
"""
102+
Convenince function, try to return the relevant <source> value
103+
per the network type.
104+
"""
105+
if self.type == self.TYPE_VIRTUAL:
106+
return self.network
107+
if self.type == self.TYPE_BRIDGE:
108+
return self.bridge
109+
if self.type == self.TYPE_ETHERNET:
110+
return self.source_dev
111+
if self.type == self.TYPE_USER:
112+
return None
113+
return self.network or self.bridge or self.source_dev
114+
99115
def get_type(self):
100116
return self._type
101117
def set_type(self, val):
@@ -158,6 +174,13 @@ def set_target_dev(self, val):
158174
target_dev = _xml_property(get_target_dev, set_target_dev,
159175
xpath="./target/@dev")
160176

177+
def get_source_dev(self):
178+
return self._source_dev
179+
def set_source_dev(self, val):
180+
self._source_dev = val
181+
source_dev = _xml_property(get_source_dev, set_source_dev,
182+
xpath="./source/@dev")
183+
161184
def is_conflict_net(self, conn):
162185
"""
163186
is_conflict_net: determines if mac conflicts with others in system
@@ -233,6 +256,8 @@ def _get_xml_config(self):
233256
src_xml = " <source bridge='%s'/>\n" % self.bridge
234257
elif self.type == self.TYPE_VIRTUAL:
235258
src_xml = " <source network='%s'/>\n" % self.network
259+
elif self.type == self.TYPE_ETHERNET and self.source_dev:
260+
src_xml = " <source dev='%s'/>\n" % self.source_dev
236261

237262
if self.model:
238263
model_xml = " <model type='%s'/>\n" % self.model

0 commit comments

Comments
 (0)