mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-25 00:45:46 +00:00
c2b38277b3
This patch introduces the usage of the pre-associate state of the IEEE 802.1Qbg standard on incoming VM migration on the target host. It is in response to bugzilla entry 632750. https://bugzilla.redhat.com/show_bug.cgi?id=632750 For being able to differentiate the exact reason as to why a macvtap device is being created, either due to a VM creation or an incoming VM migration, I needed to pass that reason as a parameter from wherever qemudStartVMDaemon is being called in order to determine whether to send an ASSOCIATE (VM creation) or a PRE-ASSOCIATE (incoming VM migration) towards lldpad. I am also fixing a problem with the virsh domainxml-to-native call on the way. Gerhard successfully tested the patch with a recent blade network 802.1Qbg-compliant switch. The patch should not have any side-effects on the 802.1Qbh support in libvirt, but Roopa (cc'ed) may want to verify this.
116 lines
3.6 KiB
C
116 lines
3.6 KiB
C
/*
|
|
* 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@us.ibm.com>
|
|
*/
|
|
|
|
#ifndef __UTIL_MACVTAP_H__
|
|
# define __UTIL_MACVTAP_H__
|
|
|
|
# include <config.h>
|
|
|
|
|
|
enum virVirtualPortType {
|
|
VIR_VIRTUALPORT_NONE,
|
|
VIR_VIRTUALPORT_8021QBG,
|
|
VIR_VIRTUALPORT_8021QBH,
|
|
|
|
VIR_VIRTUALPORT_TYPE_LAST,
|
|
};
|
|
|
|
# ifdef IFLA_VF_PORT_PROFILE_MAX
|
|
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX IFLA_VF_PORT_PROFILE_MAX
|
|
# else
|
|
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX 40
|
|
# endif
|
|
|
|
/* profile data for macvtap (VEPA) */
|
|
typedef struct _virVirtualPortProfileParams virVirtualPortProfileParams;
|
|
typedef virVirtualPortProfileParams *virVirtualPortProfileParamsPtr;
|
|
struct _virVirtualPortProfileParams {
|
|
enum virVirtualPortType virtPortType;
|
|
union {
|
|
struct {
|
|
uint8_t managerID;
|
|
uint32_t typeID; // 24 bit valid
|
|
uint8_t typeIDVersion;
|
|
unsigned char instanceID[VIR_UUID_BUFLEN];
|
|
} virtPort8021Qbg;
|
|
struct {
|
|
char profileID[LIBVIRT_IFLA_VF_PORT_PROFILE_MAX];
|
|
} virtPort8021Qbh;
|
|
} u;
|
|
};
|
|
|
|
|
|
# if defined(WITH_MACVTAP)
|
|
|
|
# include "internal.h"
|
|
|
|
enum virVMOperationType {
|
|
VIR_VM_OP_CREATE,
|
|
VIR_VM_OP_SAVE,
|
|
VIR_VM_OP_RESTORE,
|
|
VIR_VM_OP_DESTROY,
|
|
VIR_VM_OP_MIGRATE_OUT,
|
|
VIR_VM_OP_MIGRATE_IN_START,
|
|
VIR_VM_OP_MIGRATE_IN_FINISH,
|
|
VIR_VM_OP_NO_OP,
|
|
|
|
VIR_VM_OP_LAST
|
|
};
|
|
|
|
int openMacvtapTap(const char *ifname,
|
|
const unsigned char *macaddress,
|
|
const char *linkdev,
|
|
int mode,
|
|
int vnet_hdr,
|
|
const unsigned char *vmuuid,
|
|
virVirtualPortProfileParamsPtr virtPortProfile,
|
|
char **res_ifname,
|
|
enum virVMOperationType vmop);
|
|
|
|
void delMacvtap(const char *ifname,
|
|
const unsigned char *macaddress,
|
|
const char *linkdev,
|
|
virVirtualPortProfileParamsPtr virtPortProfile);
|
|
|
|
# endif /* WITH_MACVTAP */
|
|
|
|
# define MACVTAP_MODE_PRIVATE_STR "private"
|
|
# define MACVTAP_MODE_VEPA_STR "vepa"
|
|
# define MACVTAP_MODE_BRIDGE_STR "bridge"
|
|
|
|
int vpAssociatePortProfileId(const char *macvtap_ifname,
|
|
const unsigned char *macvtap_macaddr,
|
|
const char *linkdev,
|
|
const virVirtualPortProfileParamsPtr virtPort,
|
|
const unsigned char *vmuuid,
|
|
enum virVMOperationType vmOp);
|
|
|
|
int vpDisassociatePortProfileId(const char *macvtap_ifname,
|
|
const unsigned char *macvtap_macaddr,
|
|
const char *linkdev,
|
|
const virVirtualPortProfileParamsPtr virtPort,
|
|
enum virVMOperationType vmOp);
|
|
|
|
VIR_ENUM_DECL(virVirtualPort)
|
|
VIR_ENUM_DECL(virVMOperation)
|
|
|
|
#endif /* __UTIL_MACVTAP_H__ */
|