cli: cleanup NMCCommand and declarations of func implementations

- move the main func declarations to nmcli.h and give them a common
prefix "nmc_command_func_" prefix.

- remove some of the header files that are now empty. In fact, these
headers did not really declare some well separated module. While we
probably should structure the code in nmcli better with better layering,
it was not and still is not. Having these dummy headers don't mean that
the code is well structured and they serve little purpose.

- move the static NMCommand lists variables into the function scope
where they are used.
This commit is contained in:
Thomas Haller 2020-04-05 11:47:07 +02:00
parent ef0c289104
commit e05f35f9f1
12 changed files with 107 additions and 163 deletions

View file

@ -4481,9 +4481,7 @@ clients_cli_nmcli_SOURCES = \
clients/cli/utils.c \
clients/cli/utils.h \
clients/cli/agent.c \
clients/cli/agent.h \
clients/cli/general.c \
clients/cli/general.h \
clients/cli/connections.c \
clients/cli/connections.h \
clients/cli/devices.c \

View file

@ -5,8 +5,6 @@
#include "nm-default.h"
#include "agent.h"
#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
@ -227,18 +225,17 @@ do_agent_all (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
}
static const NMCCommand agent_cmds[] = {
{ "secret", do_agent_secret, usage_agent_secret, TRUE, TRUE },
{ "polkit", do_agent_polkit, usage_agent_polkit, TRUE, TRUE },
{ "all", do_agent_all, usage_agent_all, TRUE, TRUE },
{ NULL, do_agent_all, usage, TRUE, TRUE },
};
NMCResultCode
do_agent (NmCli *nmc, int argc, char **argv)
nmc_command_func_agent (NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
nmc_do_cmd (nmc, agent_cmds, *argv, argc, argv);
static const NMCCommand cmds[] = {
{ "secret", do_agent_secret, usage_agent_secret, TRUE, TRUE },
{ "polkit", do_agent_polkit, usage_agent_polkit, TRUE, TRUE },
{ "all", do_agent_all, usage_agent_all, TRUE, TRUE },
{ NULL, do_agent_all, usage, TRUE, TRUE },
};
next_arg (nmc, &argc, &argv, NULL);
nmc_do_cmd (nmc, cmds, *argv, argc, argv);
return nmc->return_value;
}

View file

@ -1,13 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2014 Red Hat, Inc.
*/
#ifndef __NMC_AGENT_H__
#define __NMC_AGENT_H__
#include "nmcli.h"
NMCResultCode do_agent (NmCli *nmc, int argc, char **argv);
#endif /* __NMC_AGENT_H__ */

View file

@ -62,14 +62,6 @@ int nmc_rl_set_deftext (void);
char *nmc_parse_lldp_capabilities (guint value);
typedef struct {
const char *cmd;
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
void (*usage) (void);
gboolean needs_client;
gboolean needs_nm_running;
} NMCCommand;
void nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char **argv);
void nmc_complete_strv (const char *prefix, gssize nargs, const char *const*args);

View file

@ -9342,37 +9342,34 @@ nmcli_con_tab_completion (const char *text, int start, int end)
return match_array;
}
static const NMCCommand connection_cmds[] = {
{ "show", do_connections_show, usage_connection_show, TRUE, TRUE },
{ "up", do_connection_up, usage_connection_up, TRUE, TRUE },
{ "down", do_connection_down, usage_connection_down, TRUE, TRUE },
{ "add", do_connection_add, usage_connection_add, TRUE, TRUE },
{ "edit", do_connection_edit, usage_connection_edit, TRUE, TRUE },
{ "delete", do_connection_delete, usage_connection_delete, TRUE, TRUE },
{ "reload", do_connection_reload, usage_connection_reload, FALSE, FALSE },
{ "load", do_connection_load, usage_connection_load, TRUE, TRUE },
{ "modify", do_connection_modify, usage_connection_modify, TRUE, TRUE },
{ "clone", do_connection_clone, usage_connection_clone, TRUE, TRUE },
{ "import", do_connection_import, usage_connection_import, TRUE, TRUE },
{ "export", do_connection_export, usage_connection_export, TRUE, TRUE },
{ "monitor", do_connection_monitor, usage_connection_monitor, TRUE, TRUE },
{ NULL, do_connections_show, usage, TRUE, TRUE },
};
/* Entry point function for connections-related commands: 'nmcli connection' */
NMCResultCode
do_connections (NmCli *nmc, int argc, char **argv)
nmc_command_func_connection (NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "show", do_connections_show, usage_connection_show, TRUE, TRUE },
{ "up", do_connection_up, usage_connection_up, TRUE, TRUE },
{ "down", do_connection_down, usage_connection_down, TRUE, TRUE },
{ "add", do_connection_add, usage_connection_add, TRUE, TRUE },
{ "edit", do_connection_edit, usage_connection_edit, TRUE, TRUE },
{ "delete", do_connection_delete, usage_connection_delete, TRUE, TRUE },
{ "reload", do_connection_reload, usage_connection_reload, FALSE, FALSE },
{ "load", do_connection_load, usage_connection_load, TRUE, TRUE },
{ "modify", do_connection_modify, usage_connection_modify, TRUE, TRUE },
{ "clone", do_connection_clone, usage_connection_clone, TRUE, TRUE },
{ "import", do_connection_import, usage_connection_import, TRUE, TRUE },
{ "export", do_connection_export, usage_connection_export, TRUE, TRUE },
{ "monitor",do_connection_monitor, usage_connection_monitor, TRUE, TRUE },
{ NULL, do_connections_show, usage, TRUE, TRUE },
};
next_arg (nmc, &argc, &argv, NULL);
/* Register polkit agent */
nmc_start_polkit_agent_start_try (nmc);
/* Set completion function for 'nmcli con' */
rl_attempted_completion_function = nmcli_con_tab_completion;
nmc_do_cmd (nmc, connection_cmds, *argv, argc, argv);
nmc_do_cmd (nmc, cmds, *argv, argc, argv);
return nmc->return_value;
}

View file

@ -8,8 +8,6 @@
#include "nmcli.h"
NMCResultCode do_connections (NmCli *nmc, int argc, char **argv);
void monitor_connections (NmCli *nmc);
gboolean

View file

@ -4671,33 +4671,31 @@ nmcli_device_tab_completion (const char *text, int start, int end)
return match_array;
}
static const NMCCommand device_cmds[] = {
{ "status", do_devices_status, usage_device_status, TRUE, TRUE },
{ "show", do_device_show, usage_device_show, TRUE, TRUE },
{ "connect", do_device_connect, usage_device_connect, TRUE, TRUE },
{ "reapply", do_device_reapply, usage_device_reapply, TRUE, TRUE },
{ "disconnect", do_devices_disconnect, usage_device_disconnect, TRUE, TRUE },
{ "delete", do_devices_delete, usage_device_delete, TRUE, TRUE },
{ "set", do_device_set, usage_device_set, TRUE, TRUE },
{ "monitor", do_devices_monitor, usage_device_monitor, TRUE, TRUE },
{ "wifi", do_device_wifi, usage_device_wifi, FALSE, FALSE },
{ "lldp", do_device_lldp, usage_device_lldp, FALSE, FALSE },
{ "modify", do_device_modify, usage_device_modify, TRUE, TRUE },
{ NULL, do_devices_status, usage, TRUE, TRUE },
};
NMCResultCode
do_devices (NmCli *nmc, int argc, char **argv)
nmc_command_func_device (NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "status", do_devices_status, usage_device_status, TRUE, TRUE },
{ "show", do_device_show, usage_device_show, TRUE, TRUE },
{ "connect", do_device_connect, usage_device_connect, TRUE, TRUE },
{ "reapply", do_device_reapply, usage_device_reapply, TRUE, TRUE },
{ "disconnect", do_devices_disconnect, usage_device_disconnect, TRUE, TRUE },
{ "delete", do_devices_delete, usage_device_delete, TRUE, TRUE },
{ "set", do_device_set, usage_device_set, TRUE, TRUE },
{ "monitor", do_devices_monitor, usage_device_monitor, TRUE, TRUE },
{ "wifi", do_device_wifi, usage_device_wifi, FALSE, FALSE },
{ "lldp", do_device_lldp, usage_device_lldp, FALSE, FALSE },
{ "modify", do_device_modify, usage_device_modify, TRUE, TRUE },
{ NULL, do_devices_status, usage, TRUE, TRUE },
};
next_arg (nmc, &argc, &argv, NULL);
/* Register polkit agent */
nmc_start_polkit_agent_start_try (nmc);
rl_attempted_completion_function = (rl_completion_func_t *) nmcli_device_tab_completion;
nmc_do_cmd (nmc, device_cmds, *argv, argc, argv);
nmc_do_cmd (nmc, cmds, *argv, argc, argv);
return nmc->return_value;
}

View file

@ -8,8 +8,6 @@
#include "nmcli.h"
NMCResultCode do_devices (NmCli *nmc, int argc, char **argv);
void nmc_complete_device (NMClient *client, const char *prefix, gboolean wifi_only);
void nmc_complete_bssid (NMClient *client, const char *ifname, const char *bssid_prefix);

View file

@ -5,8 +5,6 @@
#include "nm-default.h"
#include "general.h"
#include <stdlib.h>
#include "nm-libnm-core-intern/nm-common-macros.h"
@ -868,28 +866,23 @@ do_general_hostname (NmCli *nmc, int argc, char **argv)
}
static const NMCCommand general_cmds[] = {
{ "status", do_general_status, usage_general_status, TRUE, TRUE },
{ "hostname", do_general_hostname, usage_general_hostname, TRUE, TRUE },
{ "permissions", do_general_permissions, usage_general_permissions, TRUE, TRUE },
{ "logging", do_general_logging, usage_general_logging, TRUE, TRUE },
{ "reload", do_general_reload, usage_general_reload, FALSE, FALSE },
{ NULL, do_general_status, usage_general, TRUE, TRUE },
};
/*
* Entry point function for general operations 'nmcli general'
*/
NMCResultCode
do_general (NmCli *nmc, int argc, char **argv)
nmc_command_func_general (NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "status", do_general_status, usage_general_status, TRUE, TRUE },
{ "hostname", do_general_hostname, usage_general_hostname, TRUE, TRUE },
{ "permissions", do_general_permissions, usage_general_permissions, TRUE, TRUE },
{ "logging", do_general_logging, usage_general_logging, TRUE, TRUE },
{ "reload", do_general_reload, usage_general_reload, FALSE, FALSE },
{ NULL, do_general_status, usage_general, TRUE, TRUE },
};
next_arg (nmc, &argc, &argv, NULL);
/* Register polkit agent */
nmc_start_polkit_agent_start_try (nmc);
nmc_do_cmd (nmc, general_cmds, *argv, argc, argv);
nmc_do_cmd (nmc, cmds, *argv, argc, argv);
return nmc->return_value;
}
@ -1039,22 +1032,18 @@ do_networking_show (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
}
static const NMCCommand networking_cmds[] = {
{ "on", do_networking_on, usage_networking_on, TRUE, TRUE },
{ "off", do_networking_off, usage_networking_off, TRUE, TRUE },
{ "connectivity", do_networking_connectivity, usage_networking_connectivity, TRUE, TRUE },
{ NULL, do_networking_show, usage_networking, TRUE, TRUE },
};
/*
* Entry point function for networking commands 'nmcli networking'
*/
NMCResultCode
do_networking (NmCli *nmc, int argc, char **argv)
nmc_command_func_networking (NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
nmc_do_cmd (nmc, networking_cmds, *argv, argc, argv);
static const NMCCommand cmds[] = {
{ "on", do_networking_on, usage_networking_on, TRUE, TRUE },
{ "off", do_networking_off, usage_networking_off, TRUE, TRUE },
{ "connectivity", do_networking_connectivity, usage_networking_connectivity, TRUE, TRUE },
{ NULL, do_networking_show, usage_networking, TRUE, TRUE },
};
next_arg (nmc, &argc, &argv, NULL);
nmc_do_cmd (nmc, cmds, *argv, argc, argv);
return nmc->return_value;
}
@ -1168,26 +1157,21 @@ do_radio_wwan (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
}
static const NMCCommand radio_cmds[] = {
{ "all", do_radio_all, usage_radio_all, TRUE, TRUE },
{ "wifi", do_radio_wifi, usage_radio_wifi, TRUE, TRUE },
{ "wwan", do_radio_wwan, usage_radio_wwan, TRUE, TRUE },
{ NULL, do_radio_all, usage_radio, TRUE, TRUE },
};
/*
* Entry point function for radio switch commands 'nmcli radio'
*/
NMCResultCode
do_radio (NmCli *nmc, int argc, char **argv)
nmc_command_func_radio (NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "all", do_radio_all, usage_radio_all, TRUE, TRUE },
{ "wifi", do_radio_wifi, usage_radio_wifi, TRUE, TRUE },
{ "wwan", do_radio_wwan, usage_radio_wwan, TRUE, TRUE },
{ NULL, do_radio_all, usage_radio, TRUE, TRUE },
};
next_arg (nmc, &argc, &argv, NULL);
/* Register polkit agent */
nmc_start_polkit_agent_start_try (nmc);
nmc_do_cmd (nmc, radio_cmds, *argv, argc, argv);
nmc_do_cmd (nmc, cmds, *argv, argc, argv);
return nmc->return_value;
}
@ -1428,11 +1412,8 @@ ac_overview (NmCli *nmc, NMActiveConnection *ac)
g_string_free (outbuf, TRUE);
}
/*
* Entry point function for 'nmcli' without arguments.
*/
NMCResultCode
do_overview (NmCli *nmc, int argc, char **argv)
nmc_command_func_overview (NmCli *nmc, int argc, char **argv)
{
NMDevice **devices;
const GPtrArray *p;
@ -1546,11 +1527,8 @@ do_overview (NmCli *nmc, int argc, char **argv)
return NMC_RESULT_SUCCESS;
}
/*
* Entry point function for 'nmcli monitor'
*/
NMCResultCode
do_monitor (NmCli *nmc, int argc, char **argv)
nmc_command_func_monitor (NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);

View file

@ -1,17 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2010 - 2014 Red Hat, Inc.
*/
#ifndef NMC_GENERAL_H
#define NMC_GENERAL_H
#include "nmcli.h"
NMCResultCode do_general (NmCli *nmc, int argc, char **argv);
NMCResultCode do_networking (NmCli *nmc, int argc, char **argv);
NMCResultCode do_radio (NmCli *nmc, int argc, char **argv);
NMCResultCode do_monitor (NmCli *nmc, int argc, char **argv);
NMCResultCode do_overview (NmCli *nmc, int argc, char **argv);
#endif /* NMC_GENERAL_H */

View file

@ -25,8 +25,6 @@
#include "common.h"
#include "connections.h"
#include "devices.h"
#include "general.h"
#include "agent.h"
#include "settings.h"
#if defined(NM_DIST_VERSION)
@ -258,17 +256,6 @@ usage (void)
"\n"));
}
static const NMCCommand nmcli_cmds[] = {
{ "general", do_general, NULL, FALSE, FALSE },
{ "monitor", do_monitor, NULL, TRUE, FALSE },
{ "networking", do_networking, NULL, FALSE, FALSE },
{ "radio", do_radio, NULL, FALSE, FALSE },
{ "connection", do_connections, NULL, FALSE, FALSE },
{ "device", do_devices, NULL, FALSE, FALSE },
{ "agent", do_agent, NULL, FALSE, FALSE },
{ NULL, do_overview, usage, TRUE, TRUE },
};
static gboolean
matches_arg (NmCli *nmc, int *argc, char ***argv, const char *pattern, char **arg)
{
@ -702,6 +689,16 @@ set_colors (NmcColorOption color_option,
static gboolean
process_command_line (NmCli *nmc, int argc, char **argv)
{
static const NMCCommand nmcli_cmds[] = {
{ "general", nmc_command_func_general, NULL, FALSE, FALSE },
{ "monitor", nmc_command_func_monitor, NULL, TRUE, FALSE },
{ "networking", nmc_command_func_networking, NULL, FALSE, FALSE },
{ "radio", nmc_command_func_radio, NULL, FALSE, FALSE },
{ "connection", nmc_command_func_connection, NULL, FALSE, FALSE },
{ "device", nmc_command_func_device, NULL, FALSE, FALSE },
{ "agent", nmc_command_func_agent, NULL, FALSE, FALSE },
{ NULL, nmc_command_func_overview, usage, TRUE, TRUE },
};
NmcColorOption colors = NMC_USE_COLOR_AUTO;
char *base;

View file

@ -164,4 +164,25 @@ void nmc_empty_output_fields (NmcOutputData *output_data);
.output_data = g_ptr_array_new_full (20, g_free), \
}
/*****************************************************************************/
typedef struct {
const char *cmd;
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
void (*usage) (void);
bool needs_client;
bool needs_nm_running;
} NMCCommand;
NMCResultCode nmc_command_func_agent (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_general (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_networking (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_radio (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_monitor (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_overview (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_connection (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_device (NmCli *nmc, int argc, char **argv);
/*****************************************************************************/
#endif /* NMC_NMCLI_H */