diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2010-03-22 18:43:28 +0100 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2010-03-22 18:43:28 +0100 |
commit | 21638ff470833cc4aeb050949dffad6382f2fffb (patch) | |
tree | dec6fe5a887f3c5b8f6d0eaf247ddada920b699d /cli | |
parent | 6ab52b33eeb302b3ad4ca545bbbc2eb387ea8255 (diff) | |
download | NetworkManager-21638ff470833cc4aeb050949dffad6382f2fffb.tar.gz |
cli: convert 'dev list' to new format; checking options validity for terse
Diffstat (limited to 'cli')
-rw-r--r-- | cli/src/connections.c | 30 | ||||
-rw-r--r-- | cli/src/devices.c | 273 | ||||
-rw-r--r-- | cli/src/network-manager.c | 28 | ||||
-rw-r--r-- | cli/src/nmcli.c | 14 | ||||
-rw-r--r-- | cli/src/nmcli.h | 11 | ||||
-rw-r--r-- | cli/src/utils.c | 39 | ||||
-rw-r--r-- | cli/src/utils.h | 1 |
7 files changed, 278 insertions, 118 deletions
diff --git a/cli/src/connections.c b/cli/src/connections.c index 129235d3eb..b5e31feebe 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -154,7 +154,7 @@ show_connection (NMConnection *data, gpointer user_data) nmc->allowed_fields[6].value = nm_setting_connection_get_autoconnect (s_con) ? _("yes") : _("no"); nmc->allowed_fields[7].value = nm_setting_connection_get_read_only (s_con) ? _("yes") : _("no"); - nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (nmc->print_fields, nmc->allowed_fields); g_free (timestamp_str); @@ -227,12 +227,12 @@ do_connections_list (NmCli *nmc, int argc, char **argv) if (argc == 0) { valid_param_specified = TRUE; - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("System connections"); print_fields (nmc->print_fields, nmc->allowed_fields); g_slist_foreach (nmc->system_connections, (GFunc) show_connection, nmc); - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("User connections"); print_fields (nmc->print_fields, nmc->allowed_fields); g_slist_foreach (nmc->user_connections, (GFunc) show_connection, nmc); @@ -264,7 +264,7 @@ do_connections_list (NmCli *nmc, int argc, char **argv) else if (strcmp (*argv, "system") == 0) { valid_param_specified = TRUE; - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("System connections"); print_fields (nmc->print_fields, nmc->allowed_fields); g_slist_foreach (nmc->system_connections, (GFunc) show_connection, nmc); @@ -273,7 +273,7 @@ do_connections_list (NmCli *nmc, int argc, char **argv) else if (strcmp (*argv, "user") == 0) { valid_param_specified = TRUE; - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("User connections"); print_fields (nmc->print_fields, nmc->allowed_fields); g_slist_foreach (nmc->user_connections, (GFunc) show_connection, nmc); @@ -353,7 +353,7 @@ show_active_connection (gpointer data, gpointer user_data) info->nmc->allowed_fields[6].value = nm_active_connection_get_specific_object (active); info->nmc->allowed_fields[7].value = NM_IS_VPN_CONNECTION (active) ? _("yes") : _("no"); - info->nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + info->nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (info->nmc->print_fields, info->nmc->allowed_fields); break; } @@ -403,7 +403,7 @@ do_connections_status (NmCli *nmc, int argc, char **argv) goto error; } - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("Active connections"); print_fields (nmc->print_fields, nmc->allowed_fields); @@ -1266,6 +1266,7 @@ get_connections_cb (NMSettingsInterface *settings, gpointer user_data) ArgsInfo *args = (ArgsInfo *) user_data; static gboolean system_cb_called = FALSE; static gboolean user_cb_called = FALSE; + GError *error = NULL; if (NM_IS_REMOTE_SETTINGS_SYSTEM (settings)) { system_cb_called = TRUE; @@ -1282,13 +1283,19 @@ get_connections_cb (NMSettingsInterface *settings, gpointer user_data) return; if (args->argc == 0) { + if (!nmc_terse_option_check (args->nmc->print_output, args->nmc->required_fields, &error)) + goto error; args->nmc->return_value = do_connections_list (args->nmc, args->argc, args->argv); } else { if (matches (*args->argv, "list") == 0) { + if (!nmc_terse_option_check (args->nmc->print_output, args->nmc->required_fields, &error)) + goto error; args->nmc->return_value = do_connections_list (args->nmc, args->argc-1, args->argv+1); } else if (matches(*args->argv, "status") == 0) { + if (!nmc_terse_option_check (args->nmc->print_output, args->nmc->required_fields, &error)) + goto error; args->nmc->return_value = do_connections_status (args->nmc, args->argc-1, args->argv+1); } else if (matches(*args->argv, "up") == 0) { @@ -1310,6 +1317,15 @@ get_connections_cb (NMSettingsInterface *settings, gpointer user_data) if (!args->nmc->should_wait) quit (); + return; + +error: + g_string_printf (args->nmc->return_text, _("Error: %s."), error->message); + args->nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + args->nmc->should_wait = FALSE; + g_error_free (error); + quit (); + return; } diff --git a/cli/src/devices.c b/cli/src/devices.c index ce7741facc..e82dda628e 100644 --- a/cli/src/devices.c +++ b/cli/src/devices.c @@ -65,6 +65,73 @@ static NmcOutputField nmc_fields_dev_status[] = { #define NMC_FIELDS_DEV_STATUS_ALL "DEVICE,TYPE,STATE" #define NMC_FIELDS_DEV_STATUS_COMMON "DEVICE,TYPE,STATE" +/* Available field for 'dev list' - general part */ +static NmcOutputField nmc_fields_dev_list_general[] = { + {"NAME", N_("NAME"), 10, NULL, 0}, /* 0 */ + {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 1 */ + {"TYPE", N_("TYPE"), 17, NULL, 0}, /* 2 */ + {"DRIVER", N_("DRIVER"), 10, NULL, 0}, /* 3 */ + {"HWADDR", N_("HWADDR"), 19, NULL, 0}, /* 4 */ + {"STATE", N_("STATE"), 14, NULL, 0}, /* 5 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_DEV_LIST_GENERAL_ALL "NAME,DEVICE,TYPE,DRIVER,HWADDR,STATE" +#define NMC_FIELDS_DEV_LIST_GENERAL_COMMON "NAME,DEVICE,TYPE,DRIVER,HWADDR,STATE" + +/* Available field for 'dev list' - capabilities part */ +static NmcOutputField nmc_fields_dev_list_cap[] = { + {"NAME", N_("NAME"), 13, NULL, 0}, /* 0 */ + {"CARRIER-DETECT", N_("CARRIER-DETECT"), 16, NULL, 0}, /* 1 */ + {"SPEED", N_("SPEED"), 10, NULL, 0}, /* 2 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_DEV_LIST_CAP_ALL "NAME,CARRIER-DETECT,SPEED" +#define NMC_FIELDS_DEV_LIST_CAP_COMMON "NAME,CARRIER-DETECT,SPEED" + +/* Available field for 'dev list' - wired properties part */ +static NmcOutputField nmc_fields_dev_list_wired_prop[] = { + {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */ + {"CARRIER", N_("CARRIER"), 10, NULL, 0}, /* 1 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_DEV_LIST_WIRED_PROP_ALL "NAME,CARRIER" +#define NMC_FIELDS_DEV_LIST_WIRED_PROP_COMMON "NAME,CARRIER" + + +/* Available field for 'dev list' - wireless properties part */ +static NmcOutputField nmc_fields_dev_list_wifi_prop[] = { + {"NAME", N_("NAME"), 18, NULL, 0}, /* 0 */ + {"WEP", N_("WEP"), 5, NULL, 0}, /* 1 */ + {"WPA", N_("WPA"), 5, NULL, 0}, /* 2 */ + {"WPA2", N_("WPA2"), 6, NULL, 0}, /* 3 */ + {"TKIP", N_("TKIP"), 6, NULL, 0}, /* 4 */ + {"CCMP", N_("CCMP"), 6, NULL, 0}, /* 5 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_DEV_LIST_WIFI_PROP_ALL "NAME,WEP,WPA,WPA2,TKIP,CCMP" +#define NMC_FIELDS_DEV_LIST_WIFI_PROP_COMMON "NAME,WEP,WPA,WPA2,TKIP,CCMP" + +/* Available field for 'dev list' - IPv4 settings part */ +static NmcOutputField nmc_fields_dev_list_ip4_settings[] = { + {"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */ + {"ADDRESS", N_("ADDRESS"), 15, NULL, 0}, /* 1 */ + {"PREFIX", N_("PREFIX"), 20, NULL, 0}, /* 2 */ + {"GATEWAY", N_("GATEWAY"), 20, NULL, 0}, /* 3 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_DEV_LIST_IP4_SETTINGS_ALL "NAME,ADDRESS,PREFIX,GATEWAY" +#define NMC_FIELDS_DEV_LIST_IP4_SETTINGS_COMMON "NAME,ADDRESS,PREFIX,GATEWAY" + +/* Available field for 'dev list' - IPv4 settings DNS part */ +static NmcOutputField nmc_fields_dev_list_ip4_dns[] = { + {"NAME", N_("NAME"), 15, NULL, 0}, /* 0 */ + {"DNS", N_("DNS"), 17, NULL, 0}, /* 1 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_DEV_LIST_IP4_DNS_ALL "NAME,DNS" +#define NMC_FIELDS_DEV_LIST_IP4_DNS_COMMON "NAME,DNS" + + /* Available field for 'dev wifi list' */ static NmcOutputField nmc_fields_dev_wifi_list[] = { {"SSID", N_("SSID"), 33, NULL, 0}, /* 0 */ @@ -78,10 +145,12 @@ static NmcOutputField nmc_fields_dev_wifi_list[] = { {"RSN-FLAGS", N_("RSN-FLAGS"), 25, NULL, 0}, /* 8 */ {"DEVICE", N_("DEVICE"), 10, NULL, 0}, /* 9 */ {"ACTIVE", N_("ACTIVE"), 8, NULL, 0}, /* 10 */ + {"NAME", N_("NAME"), 8, NULL, 0}, /* 11 */ /* For WiFi scan in nm dev list */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_DEV_WIFI_LIST_ALL "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE" #define NMC_FIELDS_DEV_WIFI_LIST_COMMON "SSID,BSSID,MODE,FREQ,RATE,SIGNAL,SECURITY,ACTIVE" +#define NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIFI_LIST_COMMON /* static function prototypes */ @@ -203,6 +272,7 @@ ap_wpa_rsn_flags_to_string (guint32 flags) return ret_str; } +#if 0 static void print_header (const char *label, const char *iface, const char *connection) { @@ -222,6 +292,7 @@ print_header (const char *label, const char *iface, const char *connection) g_string_free (string, TRUE); } +#endif static gchar * ip4_address_as_string (guint32 ip) @@ -318,8 +389,9 @@ detail_access_point (gpointer data, gpointer user_data) info->nmc->allowed_fields[8].value = rsn_flags_str; info->nmc->allowed_fields[9].value = info->device; info->nmc->allowed_fields[10].value = active ? _("yes") : _("no"); + info->nmc->allowed_fields[11].value = "AP"; - info->nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + info->nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (info->nmc->print_fields, info->nmc->allowed_fields); g_free (ssid_str); @@ -343,44 +415,48 @@ show_device_info (gpointer data, gpointer user_data) NmCli *nmc = (NmCli *) user_data; APInfo *info; char *tmp; + const char *hwaddr = NULL; NMDeviceState state; - const char *dev_type; guint32 caps; guint32 speed; + char *speed_str = NULL; const GArray *array; - gboolean is_default = FALSE; - const char *id = NULL; - - state = nm_device_get_state (device); - print_header (_("Device"), nm_device_get_iface (device), id); + 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 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; /* General information */ - dev_type = get_device_type (device); - print_table_line (0, _("Type"), 25, dev_type, 0, NULL); - print_table_line (0, _("Driver"), 25, nm_device_get_driver (device) ? nm_device_get_driver (device) : _("(unknown)"), 0, NULL); - print_table_line (0, _("State"), 25, device_state_to_string (state), 0, NULL); - if (is_default) - print_table_line (0, _("Default"), 25, _("yes"), 0, NULL); - else - print_table_line (0, _("Default"), 25, _("no"), 0, NULL); + nmc->allowed_fields = nmc_fields_dev_list_general; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.header_name = _("Device details"); + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_GENERAL_ALL, nmc->allowed_fields, NULL); + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ - tmp = NULL; + state = nm_device_get_state (device); if (NM_IS_DEVICE_ETHERNET (device)) - tmp = g_strdup (nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device))); + hwaddr = nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device)); else if (NM_IS_DEVICE_WIFI (device)) - tmp = g_strdup (nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device))); + hwaddr = nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device)); - if (tmp) { - print_table_line (0, _("HW Address"), 25, tmp, 0, NULL); - g_free (tmp); - } + nmc->allowed_fields[0].value = "GENERAL"; + nmc->allowed_fields[1].value = nm_device_get_iface (device); + nmc->allowed_fields[2].value = get_device_type (device); + nmc->allowed_fields[3].value = nm_device_get_driver (device) ? nm_device_get_driver (device) : _("(unknown)"); + nmc->allowed_fields[4].value = hwaddr ? hwaddr : _("unknown)"); + nmc->allowed_fields[5].value = device_state_to_string (state); + + nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + + printf ("\n"); /* empty line */ /* Capabilities */ - caps = nm_device_get_capabilities (device); - printf (_("\n Capabilities:\n")); - if (caps & NM_DEVICE_CAP_CARRIER_DETECT) - print_table_line (2, _("Carrier Detect"), 23, _("yes"), 0, NULL); + nmc->allowed_fields = nmc_fields_dev_list_cap; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_CAP_ALL, nmc->allowed_fields, NULL); + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ + caps = nm_device_get_capabilities (device); speed = 0; if (NM_IS_DEVICE_ETHERNET (device)) { /* Speed in Mb/s */ @@ -390,14 +466,16 @@ show_device_info (gpointer data, gpointer user_data) speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device)); speed /= 1000; } + if (speed) + speed_str = g_strdup_printf (_("%u Mb/s"), speed); - if (speed) { - char *speed_string; + nmc->allowed_fields[0].value = "CAPABILITIES"; + nmc->allowed_fields[1].value = (caps & NM_DEVICE_CAP_CARRIER_DETECT) ? _("yes") : _("no"); + nmc->allowed_fields[2].value = speed_str ? speed_str : _("unknown"); - speed_string = g_strdup_printf (_("%u Mb/s"), speed); - print_table_line (2, _("Speed"), 23, speed_string, 0, NULL); - g_free (speed_string); - } + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + g_free (speed_str); /* Wireless specific information */ if ((NM_IS_DEVICE_WIFI (device))) { @@ -406,31 +484,36 @@ show_device_info (gpointer data, gpointer user_data) const char *active_bssid = NULL; const GPtrArray *aps; - printf (_("\n Wireless Properties\n")); + printf ("\n"); /* empty line */ wcaps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device)); - if (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104)) - print_table_line (2, _("WEP Encryption"), 23, _("yes"), 0, NULL); - if (wcaps & NM_WIFI_DEVICE_CAP_WPA) - print_table_line (2, _("WPA Encryption"), 23, _("yes"), 0, NULL); - if (wcaps & NM_WIFI_DEVICE_CAP_RSN) - print_table_line (2, _("WPA2 Encryption"), 23, _("yes"), 0, NULL); - if (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP) - print_table_line (2, _("TKIP cipher"), 23, _("yes"), 0, NULL); - if (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP) - print_table_line (2, _("CCMP cipher"), 23, _("yes"), 0, NULL); + nmc->allowed_fields = nmc_fields_dev_list_wifi_prop; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_WIFI_PROP_ALL, nmc->allowed_fields, NULL); + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ + + nmc->allowed_fields[0].value = "WIFI-PROPERTIES"; + nmc->allowed_fields[1].value = (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104)) ? _("yes") : _("no"); + nmc->allowed_fields[2].value = (wcaps & NM_WIFI_DEVICE_CAP_WPA) ? _("yes") : _("no"); + nmc->allowed_fields[3].value = (wcaps & NM_WIFI_DEVICE_CAP_RSN) ? _("yes") : _("no"); + nmc->allowed_fields[4].value = (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP) ? _("yes") : _("no"); + nmc->allowed_fields[5].value = (wcaps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP) ? _("yes") : _("no"); + + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + printf ("\n"); /* empty line */ + + /* Wireless access points */ if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) { active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device)); active_bssid = active_ap ? nm_access_point_get_hw_address (active_ap) : NULL; } - printf (_("\n Wireless Access Points\n")); - - nmc->print_fields.flags = NMC_PF_FLAG_HEADER; - nmc->print_fields.indent = 2; /* Indent by 2 spaces */ - nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_WIFI_LIST_COMMON, nmc->allowed_fields, NULL); + nmc->allowed_fields = nmc_fields_dev_wifi_list; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST, nmc->allowed_fields, NULL); print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ info = g_malloc0 (sizeof (APInfo)); @@ -442,12 +525,18 @@ show_device_info (gpointer data, gpointer user_data) g_ptr_array_foreach ((GPtrArray *) aps, detail_access_point, (gpointer) info); g_free (info); } else if (NM_IS_DEVICE_ETHERNET (device)) { - printf (_("\n Wired Properties\n")); + printf ("\n"); /* empty line */ + /* Wired properties */ + nmc->allowed_fields = nmc_fields_dev_list_wired_prop; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_WIRED_PROP_ALL, nmc->allowed_fields, NULL); + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ - if (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) - print_table_line (2, _("Carrier"), 23, _("on"), 0, NULL); - else - print_table_line (2, _("Carrier"), 23, _("off"), 0, NULL); + nmc->allowed_fields[0].value = "WIRED-PROPERTIES"; + nmc->allowed_fields[1].value = (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) ? _("on") : _("off"); + + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ } /* IP Setup info */ @@ -455,42 +544,62 @@ show_device_info (gpointer data, gpointer user_data) NMIP4Config *cfg = nm_device_get_ip4_config (device); GSList *iter; - printf (_("\n IPv4 Settings:\n")); + printf ("\n"); /* empty line */ + + nmc->allowed_fields = nmc_fields_dev_list_ip4_settings; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_IP4_SETTINGS_ALL, nmc->allowed_fields, NULL); + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ for (iter = (GSList *) nm_ip4_config_get_addresses (cfg); iter; iter = g_slist_next (iter)) { NMIP4Address *addr = (NMIP4Address *) iter->data; guint32 prefix = nm_ip4_address_get_prefix (addr); char *tmp2; + char *addr_str, *prefix_str, *gateway_str; - tmp = ip4_address_as_string (nm_ip4_address_get_address (addr)); - print_table_line (2, _("Address"), 23, tmp, 0, NULL); - g_free (tmp); + addr_str = ip4_address_as_string (nm_ip4_address_get_address (addr)); tmp2 = ip4_address_as_string (nm_utils_ip4_prefix_to_netmask (prefix)); - tmp = g_strdup_printf ("%d (%s)", prefix, tmp2); + prefix_str = g_strdup_printf ("%d (%s)", prefix, tmp2); g_free (tmp2); - print_table_line (2, _("Prefix"), 23, tmp, 0, NULL); - g_free (tmp); - tmp = ip4_address_as_string (nm_ip4_address_get_gateway (addr)); - print_table_line (2, _("Gateway"), 23, tmp, 0, NULL); - g_free (tmp); - printf ("\n"); - } + gateway_str = ip4_address_as_string (nm_ip4_address_get_gateway (addr)); + + nmc->allowed_fields[0].value = "IPv4-SETTINGS"; + nmc->allowed_fields[1].value = addr_str; + nmc->allowed_fields[2].value = prefix_str; + nmc->allowed_fields[3].value = gateway_str; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + g_free (addr_str); + g_free (prefix_str); + g_free (gateway_str); + } array = nm_ip4_config_get_nameservers (cfg); if (array) { int i; + printf ("\n"); /* empty line */ + + nmc->allowed_fields = nmc_fields_dev_list_ip4_dns; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_DEV_LIST_IP4_DNS_ALL, nmc->allowed_fields, NULL); + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ + for (i = 0; i < array->len; i++) { tmp = ip4_address_as_string (g_array_index (array, guint32, i)); - print_table_line (2, _("DNS"), 23, tmp, 0, NULL); + nmc->allowed_fields[0].value = "IPv4-DNS"; + nmc->allowed_fields[1].value = tmp; + + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ g_free (tmp); } } } - printf ("\n\n"); + printf ("\n"); } static void @@ -500,7 +609,7 @@ show_device_status (NMDevice *device, NmCli *nmc) nmc->allowed_fields[1].value = get_device_type (device); nmc->allowed_fields[2].value = device_state_to_string (nm_device_get_state (device)); - nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (nmc->print_fields, nmc->allowed_fields); } @@ -549,7 +658,7 @@ do_devices_status (NmCli *nmc, int argc, char **argv) goto error; } - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("Status of devices"); print_fields (nmc->print_fields, nmc->allowed_fields); @@ -598,9 +707,6 @@ do_devices_list (NmCli *nmc, int argc, char **argv) devices = nm_client_get_devices (nmc->client); - /* Set allowed fields for use while printing in detail_access_point() */ - nmc->allowed_fields = nmc_fields_dev_wifi_list; - if (iface_specified) { for (i = 0; devices && (i < devices->len); i++) { NMDevice *candidate = g_ptr_array_index (devices, i); @@ -852,7 +958,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv) goto error; } - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("WiFi scan list"); if (iface) { @@ -979,15 +1085,22 @@ do_device_wifi (NmCli *nmc, int argc, char **argv) NMCResultCode do_devices (NmCli *nmc, int argc, char **argv) { + GError *error = NULL; + /* create NMClient */ if (!nmc->get_client (nmc)) - goto error; + goto end; - if (argc == 0) - nmc->return_value = do_devices_status (nmc, argc-1, argv+1); + if (argc == 0) { + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; + nmc->return_value = do_devices_status (nmc, 0, NULL); + } if (argc > 0) { if (matches (*argv, "status") == 0) { + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; nmc->return_value = do_devices_status (nmc, argc-1, argv+1); } else if (matches (*argv, "list") == 0) { @@ -997,6 +1110,8 @@ do_devices (NmCli *nmc, int argc, char **argv) nmc->return_value = do_device_disconnect (nmc, argc-1, argv+1); } else if (matches (*argv, "wifi") == 0) { + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; nmc->return_value = do_device_wifi (nmc, argc-1, argv+1); } else if (strcmp (*argv, "help") == 0) { @@ -1008,6 +1123,12 @@ do_devices (NmCli *nmc, int argc, char **argv) } } +end: + return nmc->return_value; + error: + g_string_printf (nmc->return_text, _("Error: %s."), error->message); + nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + g_error_free (error); return nmc->return_value; } diff --git a/cli/src/network-manager.c b/cli/src/network-manager.c index b3fda87d4b..e4fbe2ea85 100644 --- a/cli/src/network-manager.c +++ b/cli/src/network-manager.c @@ -130,7 +130,7 @@ show_nm_status (NmCli *nmc) return nmc->return_value; } - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("NetworkManager status"); print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ @@ -152,7 +152,7 @@ show_nm_status (NmCli *nmc) nmc->allowed_fields[4].value = wwan_hw_enabled_str; nmc->allowed_fields[5].value = wwan_enabled_str; - nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ return NMC_RESULT_SUCCESS; @@ -163,6 +163,7 @@ show_nm_status (NmCli *nmc) NMCResultCode do_network_manager (NmCli *nmc, int argc, char **argv) { + GError *error = NULL; gboolean enable_wifi; gboolean enable_wwan; guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; @@ -174,11 +175,15 @@ do_network_manager (NmCli *nmc, int argc, char **argv) goto end; if (argc == 0) { + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; nmc->return_value = show_nm_status (nmc); } if (argc > 0) { if (matches (*argv, "status") == 0) { + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; nmc->return_value = show_nm_status (nmc); } else if (matches (*argv, "sleep") == 0) { @@ -190,6 +195,8 @@ do_network_manager (NmCli *nmc, int argc, char **argv) else if (matches (*argv, "wifi") == 0) { if (next_arg (&argc, &argv) != 0) { /* no argument, show current WiFi state */ + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; if (nmc->required_fields && strcasecmp (nmc->required_fields, "WIFI")) { g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"), nmc->required_fields, NMC_FIELDS_NM_WIFI); @@ -198,11 +205,11 @@ do_network_manager (NmCli *nmc, int argc, char **argv) } nmc->allowed_fields = nmc_fields_nm_status; nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_WIFI, nmc->allowed_fields, NULL); - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("WiFi enabled"); print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ nmc->allowed_fields[3].value = nm_client_wireless_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ } else { if (!strcmp (*argv, "on")) @@ -219,6 +226,8 @@ do_network_manager (NmCli *nmc, int argc, char **argv) } else if (matches (*argv, "wwan") == 0) { if (next_arg (&argc, &argv) != 0) { + if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error)) + goto error; /* no argument, show current WWAN state */ if (nmc->required_fields && strcasecmp (nmc->required_fields, "WWAN")) { g_string_printf (nmc->return_text, _("Error: '--fields' value '%s' is not valid here; allowed fields: %s"), @@ -228,11 +237,11 @@ do_network_manager (NmCli *nmc, int argc, char **argv) } nmc->allowed_fields = nmc_fields_nm_status; nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_NM_WWAN, nmc->allowed_fields, NULL); - nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_HEADER; + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_MAIN_HEADER | NMC_PF_FLAG_FIELD_NAMES; nmc->print_fields.header_name = _("WWAN enabled"); print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ nmc->allowed_fields[5].value = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled"); - nmc->print_fields.flags &= ~NMC_PF_FLAG_HEADER; /* Clear HEADER flag */ + nmc->print_fields.flags &= ~NMC_PF_FLAG_MAIN_HEADER & ~NMC_PF_FLAG_FIELD_NAMES; /* Clear header flags */ print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */ } else { if (!strcmp (*argv, "on")) @@ -259,4 +268,11 @@ do_network_manager (NmCli *nmc, int argc, char **argv) end: quit (); return nmc->return_value; + +error: + quit (); + g_string_printf (nmc->return_text, _("Error: %s."), error->message); + nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + g_error_free (error); + return nmc->return_value; } diff --git a/cli/src/nmcli.c b/cli/src/nmcli.c index ad793406fb..10017f6254 100644 --- a/cli/src/nmcli.c +++ b/cli/src/nmcli.c @@ -201,20 +201,6 @@ parse_command_line (NmCli *nmc, int argc, char **argv) argv++; } - /* Some validity options checks */ - if (nmc->print_output == NMC_PRINT_TERSE) { - if (!nmc->required_fields) { - g_string_printf (nmc->return_text, _("Option '--terse' requires specifying '--fields'.")); - nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; - return nmc->return_value; - } else if ( !strcasecmp (nmc->required_fields, "all") - || !strcasecmp (nmc->required_fields, "common")) { - g_string_printf (nmc->return_text, _("Option '--terse' requires specific '--fields' option, not 'all' or 'common'.")); - nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; - return nmc->return_value; - } - } - if (argc > 1) return do_cmd (nmc, argv[1], argc-1, argv+1); diff --git a/cli/src/nmcli.h b/cli/src/nmcli.h index 8b4c34207e..5ff1ea943c 100644 --- a/cli/src/nmcli.h +++ b/cli/src/nmcli.h @@ -63,11 +63,12 @@ typedef struct { } NmcOutputField; /* Flags for NmcPrintFields */ -#define NMC_PF_FLAG_MULTILINE 0x00000001 /* Multiline output instead of tabular*/ -#define NMC_PF_FLAG_TERSE 0x00000002 /* Terse outpud mode */ -#define NMC_PF_FLAG_PRETTY 0x00000004 /* Pretty output mode */ -#define NMC_PF_FLAG_HEADER 0x00000008 /* Print headers instead of values */ -#define NMC_PF_FLAG_ESCAPE 0x00000010 /* Escape column separator and '\' */ +#define NMC_PF_FLAG_MULTILINE 0x00000001 /* Multiline output instead of tabular*/ +#define NMC_PF_FLAG_TERSE 0x00000002 /* Terse outpud mode */ +#define NMC_PF_FLAG_PRETTY 0x00000004 /* Pretty output mode */ +#define NMC_PF_FLAG_MAIN_HEADER 0x00000008 /* Print main header */ +#define NMC_PF_FLAG_FIELD_NAMES 0x00000010 /* Print field names instead of values */ +#define NMC_PF_FLAG_ESCAPE 0x00000020 /* Escape column separator and '\' */ typedef struct { GArray *indices; /* Array of field indices to the array of allowed fields */ diff --git a/cli/src/utils.c b/cli/src/utils.c index 416af4ea32..7dea6a1b94 100644 --- a/cli/src/utils.c +++ b/cli/src/utils.c @@ -91,6 +91,24 @@ done: return array; } +gboolean +nmc_terse_option_check (NMCPrintOutput print_output, const char *fields, GError **error) +{ + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (print_output == NMC_PRINT_TERSE) { + if (!fields) { + g_set_error (error, 0, 0, _("Option '--terse' requires specifying '--fields'")); + return FALSE; + } else if ( !strcasecmp (fields, "all") + || !strcasecmp (fields, "common")) { + g_set_error (error, 0, 0, _("Option '--terse' requires specific '--fields' option values , not '%s'"), fields); + return FALSE; + } + } + return TRUE; +} + /* * Print both headers or values of 'field_values' array. * Entries to print and their order are specified via indices @@ -110,20 +128,21 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) gboolean multiline = fields.flags & NMC_PF_FLAG_MULTILINE; gboolean terse = fields.flags & NMC_PF_FLAG_TERSE; gboolean pretty = fields.flags & NMC_PF_FLAG_PRETTY; - gboolean header = fields.flags & NMC_PF_FLAG_HEADER; + gboolean main_header = fields.flags & NMC_PF_FLAG_MAIN_HEADER; + gboolean field_names = fields.flags & NMC_PF_FLAG_FIELD_NAMES; gboolean escape = fields.flags & NMC_PF_FLAG_ESCAPE; /* No headers are printed in terse mode: - * - neither whole name header nor field (column) names + * - neither main header nor field (column) names */ - if (header && terse) + if ((main_header || field_names) && terse) return; if (multiline) { /* --- Multiline mode --- */ enum { ML_HEADER_WIDTH = 79 }; - if (header && pretty) { - /* Print the table header */ + if (main_header && pretty) { + /* Print the main header */ int header_width = g_utf8_strlen (fields.header_name, -1) + 4; table_width = header_width < ML_HEADER_WIDTH ? ML_HEADER_WIDTH : header_width; @@ -137,7 +156,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) } /* Print values */ - if (!header) { + if (!field_names) { for (i = 0; i < fields.indices->len; i++) { char *tmp; idx = g_array_index (fields.indices, int, i); @@ -159,7 +178,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) for (i = 0; i < fields.indices->len; i++) { idx = g_array_index (fields.indices, int, i); - if (header) + if (field_names) value = _(field_values[idx].name_l10n); else value = field_values[idx].value; @@ -187,8 +206,8 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) } } - /* Print the table header */ - if (header && pretty) { + /* Print the main table header */ + if (main_header && pretty) { int header_width = g_utf8_strlen (fields.header_name, -1) + 4; table_width = table_width < header_width ? header_width : table_width; @@ -213,7 +232,7 @@ print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]) } /* Print horizontal separator */ - if (header && pretty) { + if (field_names && pretty) { if (str->len > 0) { line = g_strnfill (table_width, '-'); printf ("%s\n", line); diff --git a/cli/src/utils.h b/cli/src/utils.h index 513d214b83..75e9c921e9 100644 --- a/cli/src/utils.h +++ b/cli/src/utils.h @@ -28,6 +28,7 @@ int matches (const char *cmd, const char *pattern); int next_arg (int *argc, char ***argv); GArray *parse_output_fields (const char *fields_str, const NmcOutputField fields_array[], GError **error); +gboolean nmc_terse_option_check (NMCPrintOutput print_output, const char *fields, GError **error); void print_fields (const NmcPrintFields fields, const NmcOutputField field_values[]); void print_table_header (const char *name, ...); void print_table_line (int indent, ...); |