mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-26 22:45:17 +00:00
b4f62abbf1
IFF_VNET_HDR is a tun/tap flag that allows you to send and receive large (i.e. GSO) packets and packets with partial checksums. Setting the flag means that every packet is proceeded by the same header which virtio uses to communicate GSO/csum metadata. By enabling this flag on the tap fds we create, we greatly increase the achievable throughput with virtio_net. However, we need to be careful to only set the flag when a) QEMU has support for this ABI and b) the value of the flag is queryable using the TUNGETIFF ioctl. It's nearly five months since kvm-74 - the first KVM release with this feature - was released. Up until now, we've not added libvirt support because there is no clean way to detect support for this in QEMU at runtime. A brief attempt to add a "info capabilities" monitor command to QEMU floundered. Perfect is the enemy of good enough. Probing the KVM version will suffice for now. Signed-off-by: Mark McLoughlin <markmc@redhat.com>
132 lines
4.4 KiB
C
132 lines
4.4 KiB
C
/*
|
|
* config.h: VM configuration management
|
|
*
|
|
* Copyright (C) 2006, 2007 Red Hat, Inc.
|
|
* Copyright (C) 2006 Daniel P. Berrange
|
|
*
|
|
* 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
|
|
*
|
|
* Author: Daniel P. Berrange <berrange@redhat.com>
|
|
*/
|
|
|
|
#ifndef __QEMUD_CONF_H
|
|
#define __QEMUD_CONF_H
|
|
|
|
#include <config.h>
|
|
|
|
#include "internal.h"
|
|
#include "bridge.h"
|
|
#include "capabilities.h"
|
|
#include "network_conf.h"
|
|
#include "domain_conf.h"
|
|
#include "domain_event.h"
|
|
#include "threads.h"
|
|
|
|
#define qemudDebug(fmt, ...) do {} while(0)
|
|
|
|
#define QEMUD_CPUMASK_LEN CPU_SETSIZE
|
|
|
|
/* Internal flags to keep track of qemu command line capabilities */
|
|
enum qemud_cmd_flags {
|
|
QEMUD_CMD_FLAG_KQEMU = (1 << 0),
|
|
QEMUD_CMD_FLAG_VNC_COLON = (1 << 1),
|
|
QEMUD_CMD_FLAG_NO_REBOOT = (1 << 2),
|
|
QEMUD_CMD_FLAG_DRIVE = (1 << 3),
|
|
QEMUD_CMD_FLAG_DRIVE_BOOT = (1 << 4),
|
|
QEMUD_CMD_FLAG_NAME = (1 << 5),
|
|
QEMUD_CMD_FLAG_UUID = (1 << 6),
|
|
QEMUD_CMD_FLAG_DOMID = (1 << 7), /* Xenner only */
|
|
QEMUD_CMD_FLAG_VNET_HDR = (1 << 8),
|
|
};
|
|
|
|
/* Main driver state */
|
|
struct qemud_driver {
|
|
virMutex lock;
|
|
|
|
unsigned int qemuVersion;
|
|
int nextvmid;
|
|
|
|
virDomainObjList domains;
|
|
|
|
brControl *brctl;
|
|
char *configDir;
|
|
char *autostartDir;
|
|
char *logDir;
|
|
char *stateDir;
|
|
unsigned int vncTLS : 1;
|
|
unsigned int vncTLSx509verify : 1;
|
|
char *vncTLSx509certdir;
|
|
char *vncListen;
|
|
|
|
virCapsPtr caps;
|
|
|
|
/* An array of callbacks */
|
|
virDomainEventCallbackListPtr domainEventCallbacks;
|
|
virDomainEventQueuePtr domainEventQueue;
|
|
int domainEventTimer;
|
|
int domainEventDispatching;
|
|
};
|
|
|
|
/* Status needed to reconenct to running VMs */
|
|
typedef struct _qemudDomainStatus qemudDomainStatus;
|
|
typedef qemudDomainStatus *qemudDomainStatusPtr;
|
|
struct _qemudDomainStatus {
|
|
char *monitorpath;
|
|
pid_t pid;
|
|
int state;
|
|
virDomainDefPtr def;
|
|
};
|
|
|
|
/* Port numbers used for KVM migration. */
|
|
#define QEMUD_MIGRATION_FIRST_PORT 49152
|
|
#define QEMUD_MIGRATION_NUM_PORTS 64
|
|
|
|
#define qemudReportError(conn, dom, net, code, fmt...) \
|
|
virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
|
|
__FUNCTION__, __LINE__, fmt)
|
|
|
|
|
|
int qemudLoadDriverConfig(struct qemud_driver *driver,
|
|
const char *filename);
|
|
|
|
virCapsPtr qemudCapsInit (void);
|
|
|
|
int qemudExtractVersion (virConnectPtr conn,
|
|
struct qemud_driver *driver);
|
|
int qemudExtractVersionInfo (const char *qemu,
|
|
unsigned int *version,
|
|
unsigned int *flags);
|
|
|
|
int qemudBuildCommandLine (virConnectPtr conn,
|
|
struct qemud_driver *driver,
|
|
virDomainObjPtr dom,
|
|
unsigned int qemuCmdFlags,
|
|
const char ***retargv,
|
|
const char ***retenv,
|
|
int **tapfds,
|
|
int *ntapfds,
|
|
const char *migrateFrom);
|
|
|
|
const char *qemudVirtTypeToString (int type);
|
|
qemudDomainStatusPtr qemudDomainStatusParseFile(virConnectPtr conn,
|
|
virCapsPtr caps,
|
|
const char *filename,
|
|
int flags);
|
|
int qemudSaveDomainStatus(virConnectPtr conn,
|
|
struct qemud_driver *driver,
|
|
virDomainObjPtr vm);
|
|
|
|
#endif /* __QEMUD_CONF_H */
|