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-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))
|
||||
|
||||
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