On Thu, Feb 19, 2015 at 4:22 PM, Laine Stump <[email protected]> wrote:
> On 02/17/2015 09:42 PM, Antoni Segura Puimedon wrote: > > 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). > > Thinking a bit more about the organization of the patches - I think this > patch needs to be 1 (since the parser/formatter changes will use the new > enum values, then the patch with schema/docs and changes to > parser/formatter (i.e. conf directory) should be 2, then the one that > ties it all together would be 3. > Makes sense. Thanks. > > > > > Signed-off-by: Antoni Segura Puimedon <[email protected]> > > --- > > configure.ac | 4 ++ > > src/Makefile.am | 1 + > > src/libvirt_private.syms | 5 +++ > > src/util/virnetdevmidonet.c | 97 > ++++++++++++++++++++++++++++++++++++++++ > > src/util/virnetdevmidonet.h | 37 +++++++++++++++ > > src/util/virnetdevvportprofile.c | 1 + > > src/util/virnetdevvportprofile.h | 3 +- > > 7 files changed, 147 insertions(+), 1 deletion(-) > > create mode 100644 src/util/virnetdevmidonet.c > > create mode 100644 src/util/virnetdevmidonet.h > > > > diff --git a/configure.ac b/configure.ac > > index b3e99e7..ddffbb2 100644 > > --- a/configure.ac > > +++ b/configure.ac > > @@ -425,6 +425,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], > > @@ -440,6 +442,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]) > > > > diff --git a/src/Makefile.am b/src/Makefile.am > > index b41c6d4..23d3f93 100644 > > --- a/src/Makefile.am > > +++ b/src/Makefile.am > > @@ -129,6 +129,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 \ > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > > index 46a1613..0938cdc 100644 > > --- a/src/libvirt_private.syms > > +++ b/src/libvirt_private.syms > > @@ -1738,6 +1738,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 > > index 0000000..57fb636 > > --- /dev/null > > +++ b/src/util/virnetdevmidonet.c > > @@ -0,0 +1,97 @@ > > +/* > > + * 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 <[email protected]> > > + */ > > + > > +#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 > > index 0000000..b8dbeac > > --- /dev/null > > +++ b/src/util/virnetdevmidonet.h > > @@ -0,0 +1,37 @@ > > +/* > > + * 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 <[email protected] > > + */ > > + > > +#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__ */ > > + > > diff --git a/src/util/virnetdevvportprofile.c > b/src/util/virnetdevvportprofile.c > > index 6ee20d3..921c6aa 100644 > > --- a/src/util/virnetdevvportprofile.c > > +++ b/src/util/virnetdevvportprofile.c > > @@ -33,6 +33,7 @@ VIR_ENUM_IMPL(virNetDevVPort, > VIR_NETDEV_VPORT_PROFILE_LAST, > > "none", > > "802.1Qbg", > > "802.1Qbh", > > + "midonet", > > "openvswitch") > > I'm curious why you added the new enum in the middle rather than at the > end. Was it to reduce the number of lines in the diff? No. Something sillier than that. I just went by alphabetic order :P I'll add it at the end. > We usually add > new values at the end of the list. Everything *should* work when adding > to the middle, but superstition causes me to anticipate bugs cause by > some idiot using a hard-coded value, or storing the enum somewhere as an > integer, or other assorted bad things. > Understood. I'' put new enum things at the end from now on. > > > > > > VIR_ENUM_IMPL(virNetDevVPortProfileOp, VIR_NETDEV_VPORT_PROFILE_OP_LAST, > > diff --git a/src/util/virnetdevvportprofile.h > b/src/util/virnetdevvportprofile.h > > index ad063c5..7c00350 100644 > > --- a/src/util/virnetdevvportprofile.h > > +++ b/src/util/virnetdevvportprofile.h > > @@ -34,6 +34,7 @@ enum virNetDevVPortProfile { > > VIR_NETDEV_VPORT_PROFILE_NONE, > > VIR_NETDEV_VPORT_PROFILE_8021QBG, > > VIR_NETDEV_VPORT_PROFILE_8021QBH, > > + VIR_NETDEV_VPORT_PROFILE_MIDONET, > > VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH, > > > > 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 > */ > >
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
