cli: split 'nmcli switch' --> 'nmcli networking' and 'nmcli radio'

This commit is contained in:
Jiří Klimeš
2013-02-28 14:53:11 +01:00
committed by Dan Williams
parent 7e7335471c
commit 9ddd7bc2dc
3 changed files with 73 additions and 42 deletions

View File

@@ -49,9 +49,11 @@ static NmcOutputField nmc_fields_nm_status[] = {
#if WITH_WIMAX #if WITH_WIMAX
#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX" #define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
#define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX" #define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
#define NMC_FIELDS_NM_STATUS_RADIO "WIFI-HW,WIFI,WWAN-HW,WWAN,WIMAX-HW,WIMAX"
#else #else
#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN" #define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
#define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN" #define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
#define NMC_FIELDS_NM_STATUS_RADIO "WIFI-HW,WIFI,WWAN-HW,WWAN"
#endif #endif
#define NMC_FIELDS_NM_STATUS_COMMON "RUNNING,STATE,WIFI-HW,WIFI,WWAN-HW,WWAN" #define NMC_FIELDS_NM_STATUS_COMMON "RUNNING,STATE,WIFI-HW,WIFI,WWAN-HW,WWAN"
#define NMC_FIELDS_NM_NETWORKING "NETWORKING" #define NMC_FIELDS_NM_NETWORKING "NETWORKING"
@@ -114,16 +116,26 @@ usage_general (void)
} }
static void static void
usage_switch (void) usage_networking (void)
{ {
fprintf (stderr, fprintf (stderr,
_("Usage: nmcli switch { COMMAND | help }\n\n" _("Usage: nmcli networking { COMMAND | help }\n\n"
" COMMAND := { [on/off] }\n\n"
"\n"
));
}
static void
usage_radio (void)
{
fprintf (stderr,
_("Usage: nmcli radio { COMMAND | help }\n\n"
#if WITH_WIMAX #if WITH_WIMAX
" COMMAND := { all | networking | wifi | wwan | wimax }\n\n" " COMMAND := { all | wifi | wwan | wimax }\n\n"
" all|networking|wifi|wwan|wimax [on/off]\n" " all|wifi|wwan|wimax [on/off]\n"
#else #else
" COMMAND := { all | networking | wifi | wwan }\n\n" " COMMAND := { all | wifi | wwan }\n\n"
" all|networking|wifi|wwan [on/off]\n" " all|wifi|wwan [on/off]\n"
#endif #endif
"\n" "\n"
)); ));
@@ -161,7 +173,7 @@ nm_state_to_string (NMState state)
} }
static gboolean static gboolean
show_nm_status (NmCli *nmc, const char *pretty_header_name, gboolean only_switches, gboolean new_cmd) show_nm_status (NmCli *nmc, const char *pretty_header_name, gboolean new_cmd, const char *print_flds)
{ {
gboolean nm_running; gboolean nm_running;
NMState state = NM_STATE_UNKNOWN; NMState state = NM_STATE_UNKNOWN;
@@ -173,8 +185,8 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, gboolean only_switch
#endif #endif
GError *error = NULL; GError *error = NULL;
const char *fields_str; const char *fields_str;
const char *fields_all = new_cmd ? (only_switches ? NMC_FIELDS_NM_STATUS_SWITCH : NMC_FIELDS_NM_STATUS_ALL) : NMC_FIELDS_NM_STATUS_ALL_OLD; const char *fields_all = new_cmd ? (print_flds ? print_flds : NMC_FIELDS_NM_STATUS_ALL) : NMC_FIELDS_NM_STATUS_ALL_OLD;
const char *fields_common = new_cmd ? (only_switches ? NMC_FIELDS_NM_STATUS_SWITCH : NMC_FIELDS_NM_STATUS_COMMON) : NMC_FIELDS_NM_STATUS_COMMON_OLD; const char *fields_common = new_cmd ? (print_flds ? print_flds : NMC_FIELDS_NM_STATUS_COMMON) : NMC_FIELDS_NM_STATUS_COMMON_OLD;
guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -415,7 +427,7 @@ do_general (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish; goto finish;
} }
show_nm_status (nmc, NULL, FALSE, TRUE); show_nm_status (nmc, NULL, TRUE, NULL);
} }
if (argc > 0) { if (argc > 0) {
@@ -425,7 +437,7 @@ do_general (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish; goto finish;
} }
show_nm_status (nmc, NULL, FALSE, TRUE); show_nm_status (nmc, NULL, TRUE, NULL);
} }
else if (matches (*argv, "permissions") == 0) { else if (matches (*argv, "permissions") == 0) {
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) { if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
@@ -454,7 +466,6 @@ finish:
return nmc->return_value; return nmc->return_value;
} }
static gboolean static gboolean
nmc_switch_show (NmCli *nmc, const char *switch_name, const char *header) nmc_switch_show (NmCli *nmc, const char *switch_name, const char *header)
{ {
@@ -471,7 +482,7 @@ nmc_switch_show (NmCli *nmc, const char *switch_name, const char *header)
nmc->print_output = NMC_PRINT_TERSE; nmc->print_output = NMC_PRINT_TERSE;
nmc->required_fields = g_strdup (switch_name); nmc->required_fields = g_strdup (switch_name);
return show_nm_status (nmc, header, TRUE, TRUE); return show_nm_status (nmc, header, TRUE, NMC_FIELDS_NM_STATUS_SWITCH);
} }
static gboolean static gboolean
@@ -495,10 +506,40 @@ nmc_switch_parse_on_off (NmCli *nmc, const char *arg1, const char *arg2, gboolea
} }
/* /*
* Entry point function for switch commands 'nmcli switch' * Entry point function for 'nmcli networking'
*/ */
NMCResultCode NMCResultCode
do_switch (NmCli *nmc, int argc, char **argv) do_networking (NmCli *nmc, int argc, char **argv)
{
gboolean enable_flag;
if (argc == 0)
nmc_switch_show (nmc, NMC_FIELDS_NM_NETWORKING, _("Networking"));
else if (argc > 0) {
if ( matches (*argv, "help") == 0
|| (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0)
|| (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) {
usage_networking ();
} else if (nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) {
nmc->get_client (nmc); /* create NMClient */
nm_client_networking_set_enabled (nmc->client, enable_flag);
} else {
usage_networking ();
g_string_printf (nmc->return_text, _("Error: 'networking' command '%s' is not valid."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
}
}
quit ();
return nmc->return_value;
}
/*
* Entry point function for radio switch commands 'nmcli radio'
*/
NMCResultCode
do_radio (NmCli *nmc, int argc, char **argv)
{ {
GError *error = NULL; GError *error = NULL;
gboolean enable_flag; gboolean enable_flag;
@@ -510,47 +551,34 @@ do_switch (NmCli *nmc, int argc, char **argv)
g_error_free (error); g_error_free (error);
goto finish; goto finish;
} }
show_nm_status (nmc, _("Network switches"), TRUE, TRUE); show_nm_status (nmc, _("Radio switches"), TRUE, NMC_FIELDS_NM_STATUS_RADIO);
} }
if (argc > 0) { if (argc > 0) {
if (matches (*argv, "all") == 0) { if (matches (*argv, "all") == 0) {
if (next_arg (&argc, &argv) != 0) { if (next_arg (&argc, &argv) != 0) {
/* no argument, show all switches */ /* no argument, show all radio switches */
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) { if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) {
g_string_printf (nmc->return_text, _("Error: %s."), error->message); g_string_printf (nmc->return_text, _("Error: %s."), error->message);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
g_error_free (error); g_error_free (error);
goto finish; goto finish;
} }
show_nm_status (nmc, _("Network switches"), TRUE, TRUE); show_nm_status (nmc, _("Radio switches"), TRUE, NMC_FIELDS_NM_STATUS_RADIO);
} else { } else {
if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
goto finish; goto finish;
nmc->get_client (nmc); /* create NMClient */ nmc->get_client (nmc); /* create NMClient */
nm_client_networking_set_enabled (nmc->client, enable_flag);
nm_client_wireless_set_enabled (nmc->client, enable_flag); nm_client_wireless_set_enabled (nmc->client, enable_flag);
nm_client_wimax_set_enabled (nmc->client, enable_flag); nm_client_wimax_set_enabled (nmc->client, enable_flag);
nm_client_wwan_set_enabled (nmc->client, enable_flag); nm_client_wwan_set_enabled (nmc->client, enable_flag);
} }
} }
else if (matches (*argv, "networking") == 0) {
if (next_arg (&argc, &argv) != 0) {
/* no argument, show current state of networking */
nmc_switch_show (nmc, NMC_FIELDS_NM_NETWORKING, _("Networking switch"));
} else {
if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
goto finish;
nmc->get_client (nmc); /* create NMClient */
nm_client_networking_set_enabled (nmc->client, enable_flag);
}
}
else if (matches (*argv, "wifi") == 0) { else if (matches (*argv, "wifi") == 0) {
if (next_arg (&argc, &argv) != 0) { if (next_arg (&argc, &argv) != 0) {
/* no argument, show current WiFi state */ /* no argument, show current WiFi state */
nmc_switch_show (nmc, NMC_FIELDS_NM_WIFI, _("Wi-Fi switch")); nmc_switch_show (nmc, NMC_FIELDS_NM_WIFI, _("Wi-Fi radio switch"));
} else { } else {
if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
goto finish; goto finish;
@@ -561,8 +589,8 @@ do_switch (NmCli *nmc, int argc, char **argv)
} }
else if (matches (*argv, "wwan") == 0) { else if (matches (*argv, "wwan") == 0) {
if (next_arg (&argc, &argv) != 0) { if (next_arg (&argc, &argv) != 0) {
/* no argument, show current WWAN state */ /* no argument, show current WWAN (mobile broadband) state */
nmc_switch_show (nmc, NMC_FIELDS_NM_WWAN, _("WWAN switch")); nmc_switch_show (nmc, NMC_FIELDS_NM_WWAN, _("WWAN radio switch"));
} else { } else {
if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
goto finish; goto finish;
@@ -575,7 +603,7 @@ do_switch (NmCli *nmc, int argc, char **argv)
else if (matches (*argv, "wimax") == 0) { else if (matches (*argv, "wimax") == 0) {
if (next_arg (&argc, &argv) != 0) { if (next_arg (&argc, &argv) != 0) {
/* no argument, show current WiMAX state */ /* no argument, show current WiMAX state */
nmc_switch_show (nmc, NMC_FIELDS_NM_WIMAX, _("WiMAX switch")); nmc_switch_show (nmc, NMC_FIELDS_NM_WIMAX, _("WiMAX radio switch"));
} else { } else {
if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag)) if (!nmc_switch_parse_on_off (nmc, *(argv-1), *argv, &enable_flag))
goto finish; goto finish;
@@ -588,11 +616,11 @@ do_switch (NmCli *nmc, int argc, char **argv)
else if ( matches (*argv, "help") == 0 else if ( matches (*argv, "help") == 0
|| (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0) || (g_str_has_prefix (*argv, "-") && matches ((*argv)+1, "help") == 0)
|| (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) { || (g_str_has_prefix (*argv, "--") && matches ((*argv)+2, "help") == 0)) {
usage_switch (); usage_radio ();
} }
else { else {
usage_switch (); usage_radio ();
g_string_printf (nmc->return_text, _("Error: 'switch' command '%s' is not valid."), *argv); g_string_printf (nmc->return_text, _("Error: 'radio' command '%s' is not valid."), *argv);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
} }
} }

View File

@@ -23,7 +23,8 @@
#include "nmcli.h" #include "nmcli.h"
NMCResultCode do_general (NmCli *nmc, int argc, char **argv); NMCResultCode do_general (NmCli *nmc, int argc, char **argv);
NMCResultCode do_switch (NmCli *nmc, int argc, char **argv); NMCResultCode do_networking (NmCli *nmc, int argc, char **argv);
NMCResultCode do_radio (NmCli *nmc, int argc, char **argv);
/* Backward compatibility only */ /* Backward compatibility only */
NMCResultCode do_network_manager (NmCli *nmc, int argc, char **argv); NMCResultCode do_network_manager (NmCli *nmc, int argc, char **argv);

View File

@@ -88,7 +88,8 @@ usage (const char *prog_name)
"\n" "\n"
"OBJECT\n" "OBJECT\n"
" g[eneral] NetworkManager's general status and operations\n" " g[eneral] NetworkManager's general status and operations\n"
" s[witch] NetworkManager switches\n" " n[etworking] overall networking control\n"
" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n" " c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n" " d[evice] devices managed by NetworkManager\n"
"\n"), "\n"),
@@ -107,7 +108,8 @@ static const struct cmd {
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv); NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
} nmcli_cmds[] = { } nmcli_cmds[] = {
{ "general", do_general }, { "general", do_general },
{ "switch", do_switch }, { "networking", do_networking },
{ "radio", do_radio },
{ "connection", do_connections }, { "connection", do_connections },
{ "device", do_devices }, { "device", do_devices },
{ "help", do_help }, { "help", do_help },