On 02/23/2015 03:54 PM, Antoni Segura Puimedon wrote:
Midonet is an opensource virtual networking that over lays the IP
network between hypervisors. Currently, such networks can be made
with the openvswitch virtualport type.
This patch, defines the schema and documentation that will serve
as basis for the follow up patches that will add support to libvirt
for using Midonet virtual ports for its interfaces. The schema
definition requires that the port profile expresses its interfaceid
as part of the port profile. For that reason, this is part of the
patch too.
As we discussed on IRC just now, libvirt's parsers don't enforce the
schemas in the RNG files by default, so a small extra bit is necessary
to make sure that an interfaceid is always present. I've squashed the
following small bit into virNetDevVPortProfileCheckComplete() before
pushing:
diff --git a/src/util/virnetdevvportprofile.c
b/src/util/virnetdevvportprofile.c
index 09acb52..547894c 100644
--- a/src/util/virnetdevvportprofile.c
+++ b/src/util/virnetdevvportprofile.c
@@ -189,6 +189,11 @@
virNetDevVPortProfileCheckComplete(virNetDevVPortProfilePtr virtport,
}
}
break;
+
+ case VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH:
+ if (!virtport->interfaceID_specified)
+ missing = "interfaceid";
+ break;
}
if (missing) {
ACK with that change along with the couple small grammar fixes I point
out below. I've squashed these all in and will be pushing as soon as I
look through 3/3.
Signed-off-by: Antoni Segura Puimedon <toni+libvirt(a)midokura.com>
---
docs/formatdomain.html.in | 34 +++++++++++++++++++++
docs/schemas/networkcommon.rng | 12 ++++++++
src/conf/netdev_vport_profile_conf.c | 3 +-
.../qemuxml2argvdata/qemuxml2argv-net-midonet.xml | 35 ++++++++++++++++++++++
tests/qemuxml2xmltest.c | 1 +
5 files changed, 84 insertions(+), 1 deletion(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-midonet.xml
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index f6477c2..1c2bb45 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3652,6 +3652,40 @@
</devices>
...</pre>
+ <p>
+ On hosts that support Open vSwitch on the kernel side and that have the
s/that have/have/
+ Midonet Host Agent configured, it is also possible to connect
to the
+ 'midonet' bridge device by adding a
+ <code><virtualport type='midonet'/></code> to
the
+ interface definition. (<span class="since">Since
+ 1.2.13</span>). The Midonet virtualport type requires an
+ <code>interfaceid</code> attribute to its
+ <code><parameters></code> element.
s/to its/in its/
This interface id is the UUID
+ that specifies which port in the virtual network topology will be bound
+ to the interface.
+ </p>
+<pre>
+ ...
+ <devices>
+ ...
+ <interface type='bridge'>
+ <source bridge='br0'/>
+ </interface>
+ <interface type='bridge'>
+ <source bridge='br1'/>
+ <target dev='vnet7'/>
+ <mac address="00:11:22:33:44:55"/>
+ </interface>
+ <interface type='bridge'>
+ <source bridge='midonet'/>
+ <virtualport type='midonet'>
+ <parameters
interfaceid='0b2d64da-3d0e-431e-afdd-804415d6ebbb'/>
+ </virtualport>
+ </interface>
+ ...
+ </devices>
+ ...</pre>
+
<h5><a name="elementsNICSSlirp">Userspace SLIRP
stack</a></h5>
<p>
diff --git a/docs/schemas/networkcommon.rng b/docs/schemas/networkcommon.rng
index 162ea3d..cc8b1dc 100644
--- a/docs/schemas/networkcommon.rng
+++ b/docs/schemas/networkcommon.rng
@@ -79,6 +79,18 @@
</element>
</group>
<group>
+ <element name="virtualport">
+ <attribute name="type">
+ <value>midonet</value>
+ </attribute>
+ <element name="parameters">
+ <attribute name="interfaceid">
+ <ref name="UUID"/>
+ </attribute>
+ </element>
+ </element>
+ </group>
+ <group>
<!-- use this when no type attribute is present -->
<element name="virtualport">
<optional>
diff --git a/src/conf/netdev_vport_profile_conf.c b/src/conf/netdev_vport_profile_conf.c
index 8da0838..1641a3e 100644
--- a/src/conf/netdev_vport_profile_conf.c
+++ b/src/conf/netdev_vport_profile_conf.c
@@ -260,7 +260,8 @@ virNetDevVPortProfileFormat(virNetDevVPortProfilePtr virtPort,
virBufferAsprintf(buf, " instanceid='%s'", uuidstr);
}
if (virtPort->interfaceID_specified &&
- (type == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH ||
+ (type == VIR_NETDEV_VPORT_PROFILE_MIDONET ||
+ type == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH ||
type == VIR_NETDEV_VPORT_PROFILE_NONE)) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-midonet.xml
b/tests/qemuxml2argvdata/qemuxml2argv-net-midonet.xml
new file mode 100644
index 0000000..ae5a174
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-net-midonet.xml
@@ -0,0 +1,35 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0'
target='0' unit='0'/>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
+ <interface type='bridge'>
+ <mac address='00:11:22:33:44:55'/>
+ <source bridge='midonet'/>
+ <virtualport type='midonet'>
+ <parameters interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
+ </virtualport>
+ <model type='virtio'/>
+ </interface>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 99d4629..ba1157c 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -275,6 +275,7 @@ mymain(void)
DO_TEST("net-virtio-network-portgroup");
DO_TEST("net-hostdev");
DO_TEST("net-hostdev-vfio");
+ DO_TEST("net-midonet");
Yay! A test case! (and you didn't forget to add it to the list in the .c
file like I always do :-)
DO_TEST("net-openvswitch");
DO_TEST("sound");
DO_TEST("sound-device");