migration: add qemu_get_fd
Reviewed-by: Orit Wasserman <owasserm@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9229bf3c2d
commit
70eb633034
@ -174,6 +174,13 @@ static int buffered_close(void *opaque)
|
|||||||
* 1: Time to stop
|
* 1: Time to stop
|
||||||
* negative: There has been an error
|
* negative: There has been an error
|
||||||
*/
|
*/
|
||||||
|
static int buffered_get_fd(void *opaque)
|
||||||
|
{
|
||||||
|
QEMUFileBuffered *s = opaque;
|
||||||
|
|
||||||
|
return qemu_get_fd(s->file);
|
||||||
|
}
|
||||||
|
|
||||||
static int buffered_rate_limit(void *opaque)
|
static int buffered_rate_limit(void *opaque)
|
||||||
{
|
{
|
||||||
QEMUFileBuffered *s = opaque;
|
QEMUFileBuffered *s = opaque;
|
||||||
@ -235,6 +242,7 @@ static void buffered_rate_tick(void *opaque)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const QEMUFileOps buffered_file_ops = {
|
static const QEMUFileOps buffered_file_ops = {
|
||||||
|
.get_fd = buffered_get_fd,
|
||||||
.put_buffer = buffered_put_buffer,
|
.put_buffer = buffered_put_buffer,
|
||||||
.close = buffered_close,
|
.close = buffered_close,
|
||||||
.rate_limit = buffered_rate_limit,
|
.rate_limit = buffered_rate_limit,
|
||||||
|
@ -47,6 +47,10 @@ typedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
|
|||||||
*/
|
*/
|
||||||
typedef int (QEMUFileCloseFunc)(void *opaque);
|
typedef int (QEMUFileCloseFunc)(void *opaque);
|
||||||
|
|
||||||
|
/* Called to return the OS file descriptor associated to the QEMUFile.
|
||||||
|
*/
|
||||||
|
typedef int (QEMUFileGetFD)(void *opaque);
|
||||||
|
|
||||||
/* Called to determine if the file has exceeded its bandwidth allocation. The
|
/* Called to determine if the file has exceeded its bandwidth allocation. The
|
||||||
* bandwidth capping is a soft limit, not a hard limit.
|
* bandwidth capping is a soft limit, not a hard limit.
|
||||||
*/
|
*/
|
||||||
@ -63,6 +67,7 @@ typedef struct QEMUFileOps {
|
|||||||
QEMUFilePutBufferFunc *put_buffer;
|
QEMUFilePutBufferFunc *put_buffer;
|
||||||
QEMUFileGetBufferFunc *get_buffer;
|
QEMUFileGetBufferFunc *get_buffer;
|
||||||
QEMUFileCloseFunc *close;
|
QEMUFileCloseFunc *close;
|
||||||
|
QEMUFileGetFD *get_fd;
|
||||||
QEMUFileRateLimit *rate_limit;
|
QEMUFileRateLimit *rate_limit;
|
||||||
QEMUFileSetRateLimit *set_rate_limit;
|
QEMUFileSetRateLimit *set_rate_limit;
|
||||||
QEMUFileGetRateLimit *get_rate_limit;
|
QEMUFileGetRateLimit *get_rate_limit;
|
||||||
@ -74,6 +79,7 @@ QEMUFile *qemu_fdopen(int fd, const char *mode);
|
|||||||
QEMUFile *qemu_fopen_socket(int fd);
|
QEMUFile *qemu_fopen_socket(int fd);
|
||||||
QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
|
QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
|
||||||
QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
|
QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
|
||||||
|
int qemu_get_fd(QEMUFile *f);
|
||||||
int qemu_stdio_fd(QEMUFile *f);
|
int qemu_stdio_fd(QEMUFile *f);
|
||||||
int qemu_fclose(QEMUFile *f);
|
int qemu_fclose(QEMUFile *f);
|
||||||
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
|
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
|
||||||
|
27
savevm.c
27
savevm.c
@ -188,6 +188,13 @@ typedef struct QEMUFileSocket
|
|||||||
QEMUFile *file;
|
QEMUFile *file;
|
||||||
} QEMUFileSocket;
|
} QEMUFileSocket;
|
||||||
|
|
||||||
|
static int socket_get_fd(void *opaque)
|
||||||
|
{
|
||||||
|
QEMUFileSocket *s = opaque;
|
||||||
|
|
||||||
|
return s->fd;
|
||||||
|
}
|
||||||
|
|
||||||
static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
|
static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
|
||||||
{
|
{
|
||||||
QEMUFileSocket *s = opaque;
|
QEMUFileSocket *s = opaque;
|
||||||
@ -210,6 +217,13 @@ static int socket_close(void *opaque)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int stdio_get_fd(void *opaque)
|
||||||
|
{
|
||||||
|
QEMUFileStdio *s = opaque;
|
||||||
|
|
||||||
|
return fileno(s->stdio_file);
|
||||||
|
}
|
||||||
|
|
||||||
static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
|
static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
|
||||||
{
|
{
|
||||||
QEMUFileStdio *s = opaque;
|
QEMUFileStdio *s = opaque;
|
||||||
@ -253,11 +267,13 @@ static int stdio_fclose(void *opaque)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const QEMUFileOps stdio_pipe_read_ops = {
|
static const QEMUFileOps stdio_pipe_read_ops = {
|
||||||
|
.get_fd = stdio_get_fd,
|
||||||
.get_buffer = stdio_get_buffer,
|
.get_buffer = stdio_get_buffer,
|
||||||
.close = stdio_pclose
|
.close = stdio_pclose
|
||||||
};
|
};
|
||||||
|
|
||||||
static const QEMUFileOps stdio_pipe_write_ops = {
|
static const QEMUFileOps stdio_pipe_write_ops = {
|
||||||
|
.get_fd = stdio_get_fd,
|
||||||
.put_buffer = stdio_put_buffer,
|
.put_buffer = stdio_put_buffer,
|
||||||
.close = stdio_pclose
|
.close = stdio_pclose
|
||||||
};
|
};
|
||||||
@ -307,11 +323,13 @@ int qemu_stdio_fd(QEMUFile *f)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const QEMUFileOps stdio_file_read_ops = {
|
static const QEMUFileOps stdio_file_read_ops = {
|
||||||
|
.get_fd = stdio_get_fd,
|
||||||
.get_buffer = stdio_get_buffer,
|
.get_buffer = stdio_get_buffer,
|
||||||
.close = stdio_fclose
|
.close = stdio_fclose
|
||||||
};
|
};
|
||||||
|
|
||||||
static const QEMUFileOps stdio_file_write_ops = {
|
static const QEMUFileOps stdio_file_write_ops = {
|
||||||
|
.get_fd = stdio_get_fd,
|
||||||
.put_buffer = stdio_put_buffer,
|
.put_buffer = stdio_put_buffer,
|
||||||
.close = stdio_fclose
|
.close = stdio_fclose
|
||||||
};
|
};
|
||||||
@ -345,6 +363,7 @@ fail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const QEMUFileOps socket_read_ops = {
|
static const QEMUFileOps socket_read_ops = {
|
||||||
|
.get_fd = socket_get_fd,
|
||||||
.get_buffer = socket_get_buffer,
|
.get_buffer = socket_get_buffer,
|
||||||
.close = socket_close
|
.close = socket_close
|
||||||
};
|
};
|
||||||
@ -492,6 +511,14 @@ static void qemu_fill_buffer(QEMUFile *f)
|
|||||||
qemu_file_set_error(f, len);
|
qemu_file_set_error(f, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int qemu_get_fd(QEMUFile *f)
|
||||||
|
{
|
||||||
|
if (f->ops->get_fd) {
|
||||||
|
return f->ops->get_fd(f->opaque);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/** Closes the file
|
/** Closes the file
|
||||||
*
|
*
|
||||||
* Returns negative error value if any error happened on previous operations or
|
* Returns negative error value if any error happened on previous operations or
|
||||||
|
Loading…
Reference in New Issue
Block a user