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@xxxxxxxxxx> > > 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@xxxxxxxxxx> > + */ > + > +#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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list