193 lines
9.0 KiB
Diff
193 lines
9.0 KiB
Diff
From 88b55127e70ab18974a00b7285e2b9ee36846dc8 Mon Sep 17 00:00:00 2001
|
|
From: Martin Wilck <mwilck@suse.com>
|
|
Date: Wed, 24 Aug 2022 22:39:44 +0200
|
|
Subject: [PATCH] multipathd: Fix command completion in interactive mode
|
|
|
|
The command completion never worked, because the handlers
|
|
array wasn't initialized in client mode.
|
|
|
|
The handlers array is now also required in multipathc,
|
|
but it doesn't need the actual handler functions. To keep
|
|
multipathc as small as possible, we just add a handler table
|
|
with NULL handler functions.
|
|
|
|
Signed-off-by: Martin Wilck <mwilck@suse.com>
|
|
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
multipathd/callbacks.c | 59 +++++++++++++++++++++++++++++++++++++
|
|
multipathd/cli.c | 2 ++
|
|
multipathd/cli_handlers.c | 61 ++-------------------------------------
|
|
multipathd/main.c | 1 -
|
|
4 files changed, 63 insertions(+), 60 deletions(-)
|
|
create mode 100644 multipathd/callbacks.c
|
|
|
|
diff --git a/multipathd/callbacks.c b/multipathd/callbacks.c
|
|
new file mode 100644
|
|
index 0000000..11edc5c
|
|
--- /dev/null
|
|
+++ b/multipathd/callbacks.c
|
|
@@ -0,0 +1,59 @@
|
|
+void init_handler_callbacks(void)
|
|
+{
|
|
+ set_handler_callback(LIST+PATHS, HANDLER(cli_list_paths));
|
|
+ set_handler_callback(LIST+PATHS+FMT, HANDLER(cli_list_paths_fmt));
|
|
+ set_handler_callback(LIST+PATHS+RAW+FMT, HANDLER(cli_list_paths_raw));
|
|
+ set_handler_callback(LIST+PATH, HANDLER(cli_list_path));
|
|
+ set_handler_callback(LIST+MAPS, HANDLER(cli_list_maps));
|
|
+ set_handler_callback(LIST+STATUS, HANDLER(cli_list_status));
|
|
+ set_unlocked_handler_callback(LIST+DAEMON, HANDLER(cli_list_daemon));
|
|
+ set_handler_callback(LIST+MAPS+STATUS, HANDLER(cli_list_maps_status));
|
|
+ set_handler_callback(LIST+MAPS+STATS, HANDLER(cli_list_maps_stats));
|
|
+ set_handler_callback(LIST+MAPS+FMT, HANDLER(cli_list_maps_fmt));
|
|
+ set_handler_callback(LIST+MAPS+RAW+FMT, HANDLER(cli_list_maps_raw));
|
|
+ set_handler_callback(LIST+MAPS+TOPOLOGY, HANDLER(cli_list_maps_topology));
|
|
+ set_handler_callback(LIST+TOPOLOGY, HANDLER(cli_list_maps_topology));
|
|
+ set_handler_callback(LIST+MAPS+JSON, HANDLER(cli_list_maps_json));
|
|
+ set_handler_callback(LIST+MAP+TOPOLOGY, HANDLER(cli_list_map_topology));
|
|
+ set_handler_callback(LIST+MAP+FMT, HANDLER(cli_list_map_fmt));
|
|
+ set_handler_callback(LIST+MAP+RAW+FMT, HANDLER(cli_list_map_fmt));
|
|
+ set_handler_callback(LIST+MAP+JSON, HANDLER(cli_list_map_json));
|
|
+ set_handler_callback(LIST+CONFIG+LOCAL, HANDLER(cli_list_config_local));
|
|
+ set_handler_callback(LIST+CONFIG, HANDLER(cli_list_config));
|
|
+ set_handler_callback(LIST+BLACKLIST, HANDLER(cli_list_blacklist));
|
|
+ set_handler_callback(LIST+DEVICES, HANDLER(cli_list_devices));
|
|
+ set_handler_callback(LIST+WILDCARDS, HANDLER(cli_list_wildcards));
|
|
+ set_handler_callback(RESET+MAPS+STATS, HANDLER(cli_reset_maps_stats));
|
|
+ set_handler_callback(RESET+MAP+STATS, HANDLER(cli_reset_map_stats));
|
|
+ set_handler_callback(ADD+PATH, HANDLER(cli_add_path));
|
|
+ set_handler_callback(DEL+PATH, HANDLER(cli_del_path));
|
|
+ set_handler_callback(ADD+MAP, HANDLER(cli_add_map));
|
|
+ set_handler_callback(DEL+MAP, HANDLER(cli_del_map));
|
|
+ set_handler_callback(DEL+MAPS, HANDLER(cli_del_maps));
|
|
+ set_handler_callback(SWITCH+MAP+GROUP, HANDLER(cli_switch_group));
|
|
+ set_unlocked_handler_callback(RECONFIGURE, HANDLER(cli_reconfigure));
|
|
+ set_handler_callback(SUSPEND+MAP, HANDLER(cli_suspend));
|
|
+ set_handler_callback(RESUME+MAP, HANDLER(cli_resume));
|
|
+ set_handler_callback(RESIZE+MAP, HANDLER(cli_resize));
|
|
+ set_handler_callback(RELOAD+MAP, HANDLER(cli_reload));
|
|
+ set_handler_callback(RESET+MAP, HANDLER(cli_reassign));
|
|
+ set_handler_callback(REINSTATE+PATH, HANDLER(cli_reinstate));
|
|
+ set_handler_callback(FAIL+PATH, HANDLER(cli_fail));
|
|
+ set_handler_callback(DISABLEQ+MAP, HANDLER(cli_disable_queueing));
|
|
+ set_handler_callback(RESTOREQ+MAP, HANDLER(cli_restore_queueing));
|
|
+ set_handler_callback(DISABLEQ+MAPS, HANDLER(cli_disable_all_queueing));
|
|
+ set_handler_callback(RESTOREQ+MAPS, HANDLER(cli_restore_all_queueing));
|
|
+ set_unlocked_handler_callback(QUIT, HANDLER(cli_quit));
|
|
+ set_unlocked_handler_callback(SHUTDOWN, HANDLER(cli_shutdown));
|
|
+ set_handler_callback(GETPRSTATUS+MAP, HANDLER(cli_getprstatus));
|
|
+ set_handler_callback(SETPRSTATUS+MAP, HANDLER(cli_setprstatus));
|
|
+ set_handler_callback(UNSETPRSTATUS+MAP, HANDLER(cli_unsetprstatus));
|
|
+ set_handler_callback(FORCEQ+DAEMON, HANDLER(cli_force_no_daemon_q));
|
|
+ set_handler_callback(RESTOREQ+DAEMON, HANDLER(cli_restore_no_daemon_q));
|
|
+ set_handler_callback(GETPRKEY+MAP, HANDLER(cli_getprkey));
|
|
+ set_handler_callback(SETPRKEY+MAP+KEY, HANDLER(cli_setprkey));
|
|
+ set_handler_callback(UNSETPRKEY+MAP, HANDLER(cli_unsetprkey));
|
|
+ set_handler_callback(SETMARGINAL+PATH, HANDLER(cli_set_marginal));
|
|
+ set_handler_callback(UNSETMARGINAL+PATH, HANDLER(cli_unset_marginal));
|
|
+ set_handler_callback(UNSETMARGINAL+MAP, HANDLER(cli_unset_all_marginal));
|
|
+}
|
|
diff --git a/multipathd/cli.c b/multipathd/cli.c
|
|
index 1facf89..8033db0 100644
|
|
--- a/multipathd/cli.c
|
|
+++ b/multipathd/cli.c
|
|
@@ -16,6 +16,7 @@
|
|
|
|
#include "mpath_cmd.h"
|
|
#include "cli.h"
|
|
+#include "cli_handlers.h"
|
|
#include "debug.h"
|
|
#include "strbuf.h"
|
|
|
|
@@ -506,6 +507,7 @@ cli_init (void) {
|
|
if (alloc_handlers())
|
|
return 1;
|
|
|
|
+ init_handler_callbacks();
|
|
return 0;
|
|
}
|
|
|
|
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
|
index f75e176..7d4f267 100644
|
|
--- a/multipathd/cli_handlers.c
|
|
+++ b/multipathd/cli_handlers.c
|
|
@@ -1547,62 +1547,5 @@ static int cli_unset_all_marginal(void * v, char ** reply, int * len, void * dat
|
|
return reload_and_sync_map(mpp, vecs, 0);
|
|
}
|
|
|
|
-void init_handler_callbacks(void)
|
|
-{
|
|
- set_handler_callback(LIST+PATHS, cli_list_paths);
|
|
- set_handler_callback(LIST+PATHS+FMT, cli_list_paths_fmt);
|
|
- set_handler_callback(LIST+PATHS+RAW+FMT, cli_list_paths_raw);
|
|
- set_handler_callback(LIST+PATH, cli_list_path);
|
|
- set_handler_callback(LIST+MAPS, cli_list_maps);
|
|
- set_handler_callback(LIST+STATUS, cli_list_status);
|
|
- set_unlocked_handler_callback(LIST+DAEMON, cli_list_daemon);
|
|
- set_handler_callback(LIST+MAPS+STATUS, cli_list_maps_status);
|
|
- set_handler_callback(LIST+MAPS+STATS, cli_list_maps_stats);
|
|
- set_handler_callback(LIST+MAPS+FMT, cli_list_maps_fmt);
|
|
- set_handler_callback(LIST+MAPS+RAW+FMT, cli_list_maps_raw);
|
|
- set_handler_callback(LIST+MAPS+TOPOLOGY, cli_list_maps_topology);
|
|
- set_handler_callback(LIST+TOPOLOGY, cli_list_maps_topology);
|
|
- set_handler_callback(LIST+MAPS+JSON, cli_list_maps_json);
|
|
- set_handler_callback(LIST+MAP+TOPOLOGY, cli_list_map_topology);
|
|
- set_handler_callback(LIST+MAP+FMT, cli_list_map_fmt);
|
|
- set_handler_callback(LIST+MAP+RAW+FMT, cli_list_map_fmt);
|
|
- set_handler_callback(LIST+MAP+JSON, cli_list_map_json);
|
|
- set_handler_callback(LIST+CONFIG+LOCAL, cli_list_config_local);
|
|
- set_handler_callback(LIST+CONFIG, cli_list_config);
|
|
- set_handler_callback(LIST+BLACKLIST, cli_list_blacklist);
|
|
- set_handler_callback(LIST+DEVICES, cli_list_devices);
|
|
- set_handler_callback(LIST+WILDCARDS, cli_list_wildcards);
|
|
- set_handler_callback(RESET+MAPS+STATS, cli_reset_maps_stats);
|
|
- set_handler_callback(RESET+MAP+STATS, cli_reset_map_stats);
|
|
- set_handler_callback(ADD+PATH, cli_add_path);
|
|
- set_handler_callback(DEL+PATH, cli_del_path);
|
|
- set_handler_callback(ADD+MAP, cli_add_map);
|
|
- set_handler_callback(DEL+MAP, cli_del_map);
|
|
- set_handler_callback(DEL+MAPS, cli_del_maps);
|
|
- set_handler_callback(SWITCH+MAP+GROUP, cli_switch_group);
|
|
- set_unlocked_handler_callback(RECONFIGURE, cli_reconfigure);
|
|
- set_handler_callback(SUSPEND+MAP, cli_suspend);
|
|
- set_handler_callback(RESUME+MAP, cli_resume);
|
|
- set_handler_callback(RESIZE+MAP, cli_resize);
|
|
- set_handler_callback(RELOAD+MAP, cli_reload);
|
|
- set_handler_callback(RESET+MAP, cli_reassign);
|
|
- set_handler_callback(REINSTATE+PATH, cli_reinstate);
|
|
- set_handler_callback(FAIL+PATH, cli_fail);
|
|
- set_handler_callback(DISABLEQ+MAP, cli_disable_queueing);
|
|
- set_handler_callback(RESTOREQ+MAP, cli_restore_queueing);
|
|
- set_handler_callback(DISABLEQ+MAPS, cli_disable_all_queueing);
|
|
- set_handler_callback(RESTOREQ+MAPS, cli_restore_all_queueing);
|
|
- set_unlocked_handler_callback(QUIT, cli_quit);
|
|
- set_unlocked_handler_callback(SHUTDOWN, cli_shutdown);
|
|
- set_handler_callback(GETPRSTATUS+MAP, cli_getprstatus);
|
|
- set_handler_callback(SETPRSTATUS+MAP, cli_setprstatus);
|
|
- set_handler_callback(UNSETPRSTATUS+MAP, cli_unsetprstatus);
|
|
- set_handler_callback(FORCEQ+DAEMON, cli_force_no_daemon_q);
|
|
- set_handler_callback(RESTOREQ+DAEMON, cli_restore_no_daemon_q);
|
|
- set_handler_callback(GETPRKEY+MAP, cli_getprkey);
|
|
- set_handler_callback(SETPRKEY+MAP+KEY, cli_setprkey);
|
|
- set_handler_callback(UNSETPRKEY+MAP, cli_unsetprkey);
|
|
- set_handler_callback(SETMARGINAL+PATH, cli_set_marginal);
|
|
- set_handler_callback(UNSETMARGINAL+PATH, cli_unset_marginal);
|
|
- set_handler_callback(UNSETMARGINAL+MAP, cli_unset_all_marginal);
|
|
-}
|
|
+#define HANDLER(x) x
|
|
+#include "callbacks.c"
|
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
|
index 08fb992..be7ae60 100644
|
|
--- a/multipathd/main.c
|
|
+++ b/multipathd/main.c
|
|
@@ -1669,7 +1669,6 @@ uxlsnrloop (void * ap)
|
|
/* Tell main thread that thread has started */
|
|
post_config_state(DAEMON_CONFIGURE);
|
|
|
|
- init_handler_callbacks();
|
|
umask(077);
|
|
uxsock_listen(&uxsock_trigger, ux_sock, ap);
|
|
|
|
--
|
|
2.33.0
|
|
|