[libvirt] [PATCH 4/5] macvtap support for libvirt -- helper code
Daniel P. Berrange
berrange at redhat.com
Mon Feb 8 17:03:53 UTC 2010
On Thu, Feb 04, 2010 at 08:02:54AM -0500, Stefan Berger wrote:
> This part adds the helper code to setup and tear down macvtap devices
> using direct communication with the device driver via netlink sockets.
>
> Signed-off-by: Stefan Berger <stefanb at us.ibm.com>
>
> Index: libvirt-macvtap/src/util/macvtap.h
> ===================================================================
> --- /dev/null
> +++ libvirt-macvtap/src/util/macvtap.h
> @@ -0,0 +1,49 @@
> +/*
> + * Copyright (C) 2010 IBM Corporation
> + *
> + * 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, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + *
> + * Authors:
> + * Stefan Berger <stefanb at us.ibm.com>
> + */
> +
> +#ifndef __UTIL_MACVTAP_H__
> +#define __UTIL_MACVTAP_H__
> +
> +#include <config.h>
> +
> +#if defined(WITH_MACVTAP)
> +
> +#include "internal.h"
> +
> +int openMacvtapTap(virConnectPtr conn,
> + const char *ifname,
> + const unsigned char *macaddress,
> + const char *linkdev,
> + const char *mode,
> + char **res_ifname);
'mode' should be just an int rather than char *
> +
> +int delMacvtapByMACAddress(virConnectPtr conn,
> + const unsigned char *macaddress,
> + int *hasBusyDev);
> +
> +#endif /* WITH_MACVTAP */
> +
> +#define MACVTAP_MODE_PRIVATE_STR "private"
> +#define MACVTAP_MODE_VEPA_STR "vepa"
> +#define MACVTAP_MODE_BRIDGE_STR "bridge"
These strings are redundant if the XML parser takes care of the
string -> int conversion at parsing time.
> +
> +static uint32_t
> +modeFromString(const char *mode_str)
> +{
> + if (!mode_str)
> + return 0;
> + if (STREQ(mode_str, MACVTAP_MODE_PRIVATE_STR))
> + return MACVLAN_MODE_PRIVATE;
> + if (STREQ(mode_str, MACVTAP_MODE_VEPA_STR))
> + return MACVLAN_MODE_VEPA;
> + if (STREQ(mode_str, MACVTAP_MODE_BRIDGE_STR))
> + return MACVLAN_MODE_BRIDGE;
> + return 0;
> +}
This method can be removed, since it is just duplicating the
functionality of the code generated by the VIR_ENUM_DECL
declaration in the XML parsing code you have.
> +create_name:
> + retries = 5;
> + for (c = 0; c < 255; c++) {
This that an abslute limit on number of MACVTAP devices, or can we
raise this somewhat higher ? We recently had to remove a similarly
low hardcoded limit in number of plain TAP devices. If we cna make
this 1024 or more, that'd be great
> + snprintf(ifname, sizeof(ifname), MACVTAP_NAME_PATTERN, c);
> + if (getIfIndex(NULL, ifname, &ifindex) == ENODEV) {
> + rc = link_add(conn, type, macaddress, 6, ifname, linkdev,
> + mode, &do_retry);
> + if (rc == 0)
> + break;
> +
> + if (do_retry && --retries)
> + continue;
> + return -1;
> + }
> + }
> + cr_ifname = ifname;
> + }
> +
> + rc = ifUp(cr_ifname, 1);
> + if (rc != 0) {
> + virReportSystemError(conn, errno,
> + _("cannot 'up' interface %s"), cr_ifname);
> + rc = -1;
> + goto link_del_exit;
> + }
> +
> + rc = openTap(conn, cr_ifname, 10);
> +
> + if (rc > 0)
> + *res_ifname = strdup(cr_ifname);
> + else
> + goto link_del_exit;
> +
> + return rc;
> +
> +link_del_exit:
> + link_del(conn, type, ifname);
> +
> + return rc;
> +}
Regards,
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list