qemu: format server interface without a listen address

https://bugzilla.redhat.com/show_bug.cgi?id=1130390

The listen address is not mandatory for <interface type='server'>
but when it's not specified, we've been formatting it as:
-netdev socket,listen=(null):5558,id=hostnet0
which failed with:
Device 'socket' could not be initialized

Omit the address completely and only format the port in the listen
attribute.

Also fix the schema to allow specifying a model.
This commit is contained in:
Ján Tomko 2015-01-20 13:34:10 +01:00
parent e274d5882e
commit 280ece4af9
4 changed files with 20 additions and 2 deletions

View File

@ -2207,6 +2207,16 @@
<empty/>
</element>
</optional>
<optional>
<element name="model">
<attribute name="type">
<data type="string">
<param name='pattern'>[a-zA-Z0-9\-_]+</param>
</data>
</attribute>
<empty/>
</element>
</optional>
</interleave>
</group>
<group>

View File

@ -4576,7 +4576,8 @@ qemuBuildHostNetStr(virDomainNetDefPtr net,
case VIR_DOMAIN_NET_TYPE_SERVER:
virBufferAsprintf(&buf, "socket%clisten=%s:%d",
type_sep,
net->data.socket.address,
net->data.socket.address ? net->data.socket.address
: "",
net->data.socket.port);
type_sep = ',';
break;

View File

@ -7,4 +7,6 @@ pc -m 214 -smp 1 -nographic -nodefaults -monitor unix:/tmp/test-monitor,server,n
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:ee:96:6b,bus=pci.0,addr=0x3 \
-chardev socket,id=charnet1,path=/tmp/vhost1.sock \
-netdev type=vhost-user,id=hostnet1,chardev=charnet1 \
-device virtio-net-pci,netdev=hostnet1,id=net1,mac=52:54:00:ee:96:6c,bus=pci.0,addr=0x4
-device virtio-net-pci,netdev=hostnet1,id=net1,mac=52:54:00:ee:96:6c,bus=pci.0,addr=0x4 \
-netdev socket,listen=:2015,id=hostnet2 \
-device rtl8139,netdev=hostnet2,id=net2,mac=52:54:00:95:db:c0,bus=pci.0,addr=0x5

View File

@ -33,6 +33,11 @@
<source type='unix' path='/tmp/vhost1.sock' mode='client'/>
<model type='virtio'/>
</interface>
<interface type='server'>
<mac address='52:54:00:95:db:c0'/>
<source port='2015'/>
<model type='rtl8139'/>
</interface>
<memballoon model='none'/>
</devices>
</domain>