qapi: add QMP command registration/lookup functions
Registration/lookup functions for that provide a lookup table for dispatching QMP commands. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Luiz Capitulino <lcapitulino@gmail.com>
This commit is contained in:
parent
d5f3c29cf8
commit
43c20a43ca
@ -376,6 +376,7 @@ libcacard-y = cac.o event.o vcard.o vreader.o vcard_emul_nss.o vcard_emul_type.o
|
|||||||
# qapi
|
# qapi
|
||||||
|
|
||||||
qapi-nested-y = qapi-visit-core.o qmp-input-visitor.o qmp-output-visitor.o qapi-dealloc-visitor.o
|
qapi-nested-y = qapi-visit-core.o qmp-input-visitor.o qmp-output-visitor.o qapi-dealloc-visitor.o
|
||||||
|
qapi-nested-y += qmp-registry.o
|
||||||
qapi-obj-y = $(addprefix qapi/, $(qapi-nested-y))
|
qapi-obj-y = $(addprefix qapi/, $(qapi-nested-y))
|
||||||
|
|
||||||
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
|
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
|
||||||
|
39
qapi/qmp-core.h
Normal file
39
qapi/qmp-core.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Core Definitions for QAPI/QMP Dispatch
|
||||||
|
*
|
||||||
|
* Copyright IBM, Corp. 2011
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Anthony Liguori <aliguori@us.ibm.com>
|
||||||
|
*
|
||||||
|
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
|
||||||
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef QMP_CORE_H
|
||||||
|
#define QMP_CORE_H
|
||||||
|
|
||||||
|
#include "qobject.h"
|
||||||
|
#include "qdict.h"
|
||||||
|
#include "error.h"
|
||||||
|
|
||||||
|
typedef void (QmpCommandFunc)(QDict *, QObject **, Error **);
|
||||||
|
|
||||||
|
typedef enum QmpCommandType
|
||||||
|
{
|
||||||
|
QCT_NORMAL,
|
||||||
|
} QmpCommandType;
|
||||||
|
|
||||||
|
typedef struct QmpCommand
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
QmpCommandType type;
|
||||||
|
QmpCommandFunc *fn;
|
||||||
|
QTAILQ_ENTRY(QmpCommand) node;
|
||||||
|
} QmpCommand;
|
||||||
|
|
||||||
|
void qmp_register_command(const char *name, QmpCommandFunc *fn);
|
||||||
|
QmpCommand *qmp_find_command(const char *name);
|
||||||
|
|
||||||
|
#endif
|
40
qapi/qmp-registry.c
Normal file
40
qapi/qmp-registry.c
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Core Definitions for QAPI/QMP Dispatch
|
||||||
|
*
|
||||||
|
* Copyright IBM, Corp. 2011
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Anthony Liguori <aliguori@us.ibm.com>
|
||||||
|
* Michael Roth <mdroth@us.ibm.com>
|
||||||
|
*
|
||||||
|
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
|
||||||
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qapi/qmp-core.h"
|
||||||
|
|
||||||
|
static QTAILQ_HEAD(, QmpCommand) qmp_commands =
|
||||||
|
QTAILQ_HEAD_INITIALIZER(qmp_commands);
|
||||||
|
|
||||||
|
void qmp_register_command(const char *name, QmpCommandFunc *fn)
|
||||||
|
{
|
||||||
|
QmpCommand *cmd = qemu_mallocz(sizeof(*cmd));
|
||||||
|
|
||||||
|
cmd->name = name;
|
||||||
|
cmd->type = QCT_NORMAL;
|
||||||
|
cmd->fn = fn;
|
||||||
|
QTAILQ_INSERT_TAIL(&qmp_commands, cmd, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
QmpCommand *qmp_find_command(const char *name)
|
||||||
|
{
|
||||||
|
QmpCommand *i;
|
||||||
|
|
||||||
|
QTAILQ_FOREACH(i, &qmp_commands, node) {
|
||||||
|
if (strcmp(i->name, name) == 0) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user