qemu_agent.h 5.4 KB
Newer Older
D
Daniel P. Berrange 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * qemu_agent.h: interaction with QEMU guest agent
 *
 * Copyright (C) 2006-2012 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
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
D
Daniel P. Berrange 已提交
20 21
 */

22
#pragma once
D
Daniel P. Berrange 已提交
23

24 25
#include "internal.h"
#include "domain_conf.h"
D
Daniel P. Berrange 已提交
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

typedef struct _qemuAgent qemuAgent;
typedef qemuAgent *qemuAgentPtr;

typedef struct _qemuAgentCallbacks qemuAgentCallbacks;
typedef qemuAgentCallbacks *qemuAgentCallbacksPtr;
struct _qemuAgentCallbacks {
    void (*destroy)(qemuAgentPtr mon,
                    virDomainObjPtr vm);
    void (*eofNotify)(qemuAgentPtr mon,
                      virDomainObjPtr vm);
    void (*errorNotify)(qemuAgentPtr mon,
                        virDomainObjPtr vm);
};


qemuAgentPtr qemuAgentOpen(virDomainObjPtr vm,
43
                           const virDomainChrSourceDef *config,
44
                           GMainContext *context,
45 46
                           qemuAgentCallbacksPtr cb,
                           bool singleSync);
D
Daniel P. Berrange 已提交
47 48 49

void qemuAgentClose(qemuAgentPtr mon);

50 51
void qemuAgentNotifyClose(qemuAgentPtr mon);

52 53 54
typedef enum {
    QEMU_AGENT_EVENT_NONE = 0,
    QEMU_AGENT_EVENT_SHUTDOWN,
55 56
    QEMU_AGENT_EVENT_SUSPEND,
    QEMU_AGENT_EVENT_RESET,
57 58 59 60 61
} qemuAgentEvent;

void qemuAgentNotifyEvent(qemuAgentPtr mon,
                          qemuAgentEvent event);

D
Daniel P. Berrange 已提交
62 63 64 65 66 67 68 69
typedef enum {
    QEMU_AGENT_SHUTDOWN_POWERDOWN,
    QEMU_AGENT_SHUTDOWN_REBOOT,
    QEMU_AGENT_SHUTDOWN_HALT,

    QEMU_AGENT_SHUTDOWN_LAST,
} qemuAgentShutdownMode;

70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
typedef struct _qemuAgentDiskInfo qemuAgentDiskInfo;
typedef qemuAgentDiskInfo *qemuAgentDiskInfoPtr;
struct _qemuAgentDiskInfo {
    char *serial;
    virPCIDeviceAddress pci_controller;
    char *bus_type;
    unsigned int bus;
    unsigned int target;
    unsigned int unit;
    char *devnode;
};

typedef struct _qemuAgentFSInfo qemuAgentFSInfo;
typedef qemuAgentFSInfo *qemuAgentFSInfoPtr;
struct _qemuAgentFSInfo {
    char *mountpoint; /* path to mount point */
    char *name;       /* device name in the guest (e.g. "sda1") */
    char *fstype;     /* filesystem type */
    long long total_bytes;
    long long used_bytes;
    size_t ndisks;
    qemuAgentDiskInfoPtr *disks;
};
void qemuAgentFSInfoFree(qemuAgentFSInfoPtr info);

D
Daniel P. Berrange 已提交
95 96 97
int qemuAgentShutdown(qemuAgentPtr mon,
                      qemuAgentShutdownMode mode);

98 99
int qemuAgentFSFreeze(qemuAgentPtr mon,
                      const char **mountpoints, unsigned int nmountpoints);
100
int qemuAgentFSThaw(qemuAgentPtr mon);
101
int qemuAgentGetFSInfo(qemuAgentPtr mon, qemuAgentFSInfoPtr **info);
102

103 104
int qemuAgentSuspend(qemuAgentPtr mon,
                     unsigned int target);
105 106 107 108 109

int qemuAgentArbitraryCommand(qemuAgentPtr mon,
                              const char *cmd,
                              char **result,
                              int timeout);
M
Michal Privoznik 已提交
110 111
int qemuAgentFSTrim(qemuAgentPtr mon,
                    unsigned long long minimum);
112 113 114 115 116 117 118 119


typedef struct _qemuAgentCPUInfo qemuAgentCPUInfo;
typedef qemuAgentCPUInfo *qemuAgentCPUInfoPtr;
struct _qemuAgentCPUInfo {
    unsigned int id;    /* logical cpu ID */
    bool online;        /* true if the CPU is activated */
    bool offlinable;    /* true if the CPU can be offlined */
120 121

    bool modified; /* set to true if the vcpu state needs to be changed */
122 123 124 125
};

int qemuAgentGetVCPUs(qemuAgentPtr mon, qemuAgentCPUInfoPtr *info);
int qemuAgentSetVCPUs(qemuAgentPtr mon, qemuAgentCPUInfoPtr cpus, size_t ncpus);
126 127 128
int qemuAgentUpdateCPUInfo(unsigned int nvcpus,
                           qemuAgentCPUInfoPtr cpuinfo,
                           int ncpuinfo);
129

130 131
int
qemuAgentGetHostname(qemuAgentPtr mon,
132 133
                     char **hostname,
                     bool report_unsupported);
134

135 136 137 138 139 140 141
int qemuAgentGetTime(qemuAgentPtr mon,
                     long long *seconds,
                     unsigned int *nseconds);
int qemuAgentSetTime(qemuAgentPtr mon,
                     long long seconds,
                     unsigned int nseconds,
                     bool sync);
142 143 144 145

int qemuAgentGetInterfaces(qemuAgentPtr mon,
                           virDomainInterfacePtr **ifaces);

146 147 148 149
int qemuAgentSetUserPassword(qemuAgentPtr mon,
                             const char *user,
                             const char *password,
                             bool crypted);
150 151 152 153 154

int qemuAgentGetUsers(qemuAgentPtr mon,
                      virTypedParameterPtr *params,
                      int *nparams,
                      int *maxparams);
155 156 157 158 159

int qemuAgentGetOSInfo(qemuAgentPtr mon,
                       virTypedParameterPtr *params,
                       int *nparams,
                       int *maxparams);
160 161 162 163 164

int qemuAgentGetTimezone(qemuAgentPtr mon,
                         virTypedParameterPtr *params,
                         int *nparams,
                         int *maxparams);
165 166 167

void qemuAgentSetResponseTimeout(qemuAgentPtr mon,
                                 int timeout);