2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-29 15:28:56 +00:00

unixctl: Allow passing auxiliary data to unixctl commands.

This will allow users of unixctl to avoid using global variables, leading
to cleaner code.
This commit is contained in:
Ben Pfaff
2009-10-29 15:20:21 -07:00
parent dc81071d9f
commit 8ca79daaa0
6 changed files with 57 additions and 39 deletions

View File

@@ -44,7 +44,8 @@
#include "vlog.h"
struct unixctl_command {
void (*cb)(struct unixctl_conn *, const char *args);
unixctl_cb_func *cb;
void *aux;
};
struct unixctl_conn {
@@ -76,7 +77,8 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
static struct shash commands = SHASH_INITIALIZER(&commands);
static void
unixctl_help(struct unixctl_conn *conn, const char *args UNUSED)
unixctl_help(struct unixctl_conn *conn, const char *args UNUSED,
void *aux UNUSED)
{
struct ds ds = DS_EMPTY_INITIALIZER;
struct shash_node *node;
@@ -90,8 +92,7 @@ unixctl_help(struct unixctl_conn *conn, const char *args UNUSED)
}
void
unixctl_command_register(const char *name,
void (*cb)(struct unixctl_conn *, const char *args))
unixctl_command_register(const char *name, unixctl_cb_func *cb, void *aux)
{
struct unixctl_command *command;
@@ -99,6 +100,7 @@ unixctl_command_register(const char *name,
|| shash_find_data(&commands, name) == cb);
command = xmalloc(sizeof *command);
command->cb = cb;
command->aux = aux;
shash_add(&commands, name, command);
}
@@ -178,7 +180,7 @@ unixctl_server_create(const char *path, struct unixctl_server **serverp)
struct unixctl_server *server;
int error;
unixctl_command_register("help", unixctl_help);
unixctl_command_register("help", unixctl_help, NULL);
server = xmalloc(sizeof *server);
list_init(&server->conns);
@@ -282,7 +284,7 @@ process_command(struct unixctl_conn *conn, char *s)
command = shash_find_data(&commands, name);
if (command) {
command->cb(conn, args);
command->cb(conn, args, command->aux);
} else {
char *msg = xasprintf("\"%s\" is not a valid command", name);
unixctl_command_reply(conn, 400, msg);