]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: functions to support binding/unbinding midonet virtualports
authorAntoni Segura Puimedon <toni@midokura.com>
Mon, 23 Feb 2015 20:54:54 +0000 (21:54 +0100)
committerLaine Stump <laine@laine.org>
Tue, 17 Mar 2015 16:56:37 +0000 (12:56 -0400)
Adds the port type definitions and methods that will be used to bind
interfaces to the Midonet virtual ports.

virtnetdevmidonet.c adds the way to bind and unbind the ports by
calling into the Midonet Host Agent control command line (installed
with the midolman package).

Signed-off-by: Antoni Segura Puimedon <toni+libvirt@midokura.com>
configure.ac
po/POTFILES.in
src/Makefile.am
src/libvirt_private.syms
src/util/virnetdevmidonet.c [new file with mode: 0644]
src/util/virnetdevmidonet.h [new file with mode: 0644]
src/util/virnetdevvportprofile.c
src/util/virnetdevvportprofile.h

index b5a05bbf991adce2c0f130b37ece009d28c4d39b..412a23d05ff5c8d9af8beab91d9717f54c6d22e3 100644 (file)
@@ -431,6 +431,8 @@ AC_PATH_PROG([MODPROBE], [modprobe], [modprobe],
        [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
 AC_PATH_PROG([RMMOD], [rmmod], [rmmod],
        [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
+AC_PATH_PROG([MMCTL], [mm-ctl], [mm-ctl],
+       [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
 AC_PATH_PROG([OVSVSCTL], [ovs-vsctl], [ovs-vsctl],
        [/sbin:/usr/sbin:/usr/local/sbin:$PATH])
 AC_PATH_PROG([SCRUB], [scrub], [scrub],
@@ -446,6 +448,8 @@ AC_DEFINE_UNQUOTED([RADVD],["$RADVD"],
         [Location or name of the radvd program])
 AC_DEFINE_UNQUOTED([TC],["$TC"],
         [Location or name of the tc program (see iproute2)])
+AC_DEFINE_UNQUOTED([MMCTL],["$MMCTL"],
+        [Location or name of the mm-ctl program])
 AC_DEFINE_UNQUOTED([OVSVSCTL],["$OVSVSCTL"],
         [Location or name of the ovs-vsctl program])
 
index c25bfce5bc11886999ca3239353358af82ae3a89..fd8bf33801a8c0dbadce6094c83892c9621151cd 100644 (file)
@@ -195,6 +195,7 @@ src/util/virnetdev.c
 src/util/virnetdevbandwidth.c
 src/util/virnetdevbridge.c
 src/util/virnetdevmacvlan.c
+src/util/virnetdevmidonet.c
 src/util/virnetdevopenvswitch.c
 src/util/virnetdevtap.c
 src/util/virnetdevveth.c
index d38432ec2ad0c0e4df4931bc92f124f3080fb881..956d9ce463c407c8190074f6f5bec5ef63ed0f3f 100644 (file)
@@ -131,6 +131,7 @@ UTIL_SOURCES =                                                      \
                util/virnetdevbandwidth.h util/virnetdevbandwidth.c \
                util/virnetdevbridge.h util/virnetdevbridge.c   \
                util/virnetdevmacvlan.c util/virnetdevmacvlan.h \
+               util/virnetdevmidonet.h util/virnetdevmidonet.c \
                util/virnetdevopenvswitch.h util/virnetdevopenvswitch.c \
                util/virnetdevtap.h util/virnetdevtap.c         \
                util/virnetdevveth.h util/virnetdevveth.c       \
index 1fb42ac364c3a0041101baf354b3ecbdd5c1555b..c11ea18e59eba4de974e671cba6788e88ad82b87 100644 (file)
@@ -1759,6 +1759,11 @@ virNetDevMacVLanRestartWithVPortProfile;
 virNetDevMacVLanVPortProfileRegisterCallback;
 
 
+# util/virnetdevmidonet.h
+virNetDevMidonetBindPort;
+virNetDevMidonetUnbindPort;
+
+
 # util/virnetdevopenvswitch.h
 virNetDevOpenvswitchAddPort;
 virNetDevOpenvswitchGetMigrateData;
diff --git a/src/util/virnetdevmidonet.c b/src/util/virnetdevmidonet.c
new file mode 100644 (file)
index 0000000..ea31d03
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2015 Midokura, Sarl.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *     Antoni Segura Puimedon <toni@midokura.com>
+ */
+
+#include <config.h>
+
+#include "virnetdevmidonet.h"
+#include "vircommand.h"
+#include "viralloc.h"
+#include "virerror.h"
+#include "viruuid.h"
+
+#define VIR_FROM_THIS VIR_FROM_NONE
+
+/**
+ * virNetDevMidonetBindPort:
+ * @ifname: the network interface name
+ * @virtualport: the midonet specific fields
+ *
+ * Bind an interface to a Midonet virtual port
+ *
+ * Returns 0 in case of success or -1 in case of failure.
+ */
+int
+virNetDevMidonetBindPort(const char *ifname,
+                         virNetDevVPortProfilePtr virtualport)
+{
+    int ret = -1;
+    virCommandPtr cmd = NULL;
+    char virtportuuid[VIR_UUID_STRING_BUFLEN];
+
+    virUUIDFormat(virtualport->interfaceID, virtportuuid);
+
+    cmd = virCommandNew(MMCTL);
+
+    virCommandAddArgList(cmd, "--bind-port", virtportuuid, ifname, NULL);
+
+    if (virCommandRun(cmd, NULL) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Unable to bind port %s to the virtual port %s"),
+                       ifname, virtportuuid);
+        goto cleanup;
+    }
+
+    ret = 0;
+ cleanup:
+    virCommandFree(cmd);
+    return ret;
+}
+
+/**
+ * virNetDevMidonetUnbindPort:
+ * @virtualport: the midonet specific fields
+ *
+ * Unbinds a virtual port from the host
+ *
+ * Returns 0 in case of success or -1 in case of failure.
+ */
+int
+virNetDevMidonetUnbindPort(virNetDevVPortProfilePtr virtualport)
+{
+    int ret = -1;
+    virCommandPtr cmd = NULL;
+    char virtportuuid[VIR_UUID_STRING_BUFLEN];
+
+    virUUIDFormat(virtualport->interfaceID, virtportuuid);
+
+    cmd = virCommandNew(MMCTL);
+    virCommandAddArgList(cmd, "--unbind-port", virtportuuid, NULL);
+
+    if (virCommandRun(cmd, NULL) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Unable to unbind the virtual port %s from Midonet"),
+                       virtportuuid);
+        goto cleanup;
+    }
+
+    ret = 0;
+ cleanup:
+    virCommandFree(cmd);
+    return ret;
+}
diff --git a/src/util/virnetdevmidonet.h b/src/util/virnetdevmidonet.h
new file mode 100644 (file)
index 0000000..3bfc1f6
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 Midokura Sarl.
+
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *     Antoni Segura Puimedon <toni@midokura.com>
+ */
+
+#ifndef __VIR_NETDEV_MIDONET_H__
+# define __VIR_NETDEV_MIDONET_H__
+
+# include "internal.h"
+# include "virnetdevvportprofile.h"
+
+
+int virNetDevMidonetBindPort(const char *ifname,
+                             virNetDevVPortProfilePtr virtualport)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+
+int virNetDevMidonetUnbindPort(virNetDevVPortProfilePtr virtualport)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+
+#endif /* __VIR_NETDEV_MIDONET_H__ */
index 6ee20d3bfa9c88c667d7a9095c1a0d81af037983..09acb52e5c44af4e1e5af20b71930c61c9bfe314 100644 (file)
@@ -33,7 +33,8 @@ VIR_ENUM_IMPL(virNetDevVPort, VIR_NETDEV_VPORT_PROFILE_LAST,
               "none",
               "802.1Qbg",
               "802.1Qbh",
-              "openvswitch")
+              "openvswitch",
+              "midonet")
 
 VIR_ENUM_IMPL(virNetDevVPortProfileOp, VIR_NETDEV_VPORT_PROFILE_OP_LAST,
               "create",
index ad063c5fab58f35d2c24404c4cc01d29d720d046..dc3e6438acf97cec05c67c66d73f17af14ef9102 100644 (file)
@@ -35,6 +35,7 @@ enum virNetDevVPortProfile {
     VIR_NETDEV_VPORT_PROFILE_8021QBG,
     VIR_NETDEV_VPORT_PROFILE_8021QBH,
     VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH,
+    VIR_NETDEV_VPORT_PROFILE_MIDONET,
 
     VIR_NETDEV_VPORT_PROFILE_LAST,
 };
@@ -73,7 +74,7 @@ struct _virNetDevVPortProfile {
     /* this is a null-terminated character string */
     char          profileID[LIBVIRT_IFLA_VF_PORT_PROFILE_MAX];
 
-    /* this member is used when virtPortType == openvswitch */
+    /* this member is used when virtPortType == openvswitch|midonet */
     unsigned char interfaceID[VIR_UUID_BUFLEN];
     bool          interfaceID_specified;
     /* NB - if virtPortType == NONE, any/all of the items could be used */