summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2010-03-22 18:43:28 +0100
committerJiří Klimeš <jklimes@redhat.com>2010-03-22 18:43:28 +0100
commit21638ff470833cc4aeb050949dffad6382f2fffb (patch)
treedec6fe5a887f3c5b8f6d0eaf247ddada920b699d /cli
parent6ab52b33eeb302b3ad4ca545bbbc2eb387ea8255 (diff)
downloadNetworkManager-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.c30
-rw-r--r--cli/src/devices.c273
-rw-r--r--cli/src/network-manager.c28
-rw-r--r--cli/src/nmcli.c14
-rw-r--r--cli/src/nmcli.h11
-rw-r--r--cli/src/utils.c39
-rw-r--r--cli/src/utils.h1
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, ...);