summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2014-09-24 12:00:47 +0200
committerJiří Klimeš <jklimes@redhat.com>2014-09-25 19:09:05 +0200
commit6c27af638577267bfbc56e00ae5e02803a005695 (patch)
tree9dcc4465b5b7ec1eb83b39bc34abe4f48f1f30bc
parent0b6bd87848f4bded703171e66298d9f53b4462e5 (diff)
cli: show capabilities for Bluetooth devices
-rw-r--r--clients/cli/devices.c65
1 files changed, 60 insertions, 5 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index d12f625eb0..dfc6d9a404 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -196,6 +196,15 @@ static NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL "NAME,ID"
#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,ID"
+/* Available fields for 'device show' - BLUETOOTH part */
+static NmcOutputField nmc_fields_dev_show_bluetooth[] = {
+ {"NAME", N_("NAME"), 0}, /* 0 */
+ {"CAPABILITIES", N_("CAPABILITIES"), 0}, /* 1 */
+ {NULL, NULL, 0}
+};
+#define NMC_FIELDS_DEV_SHOW_BLUETOOTH_ALL "NAME,CAPABILITIES"
+#define NMC_FIELDS_DEV_SHOW_BLUETOOTH_COMMON "NAME,CAPABILITIES"
+
/* defined in common.c */
extern NmcOutputField nmc_fields_ip4_config[];
extern NmcOutputField nmc_fields_ip6_config[];
@@ -219,17 +228,18 @@ static NmcOutputField nmc_fields_dev_show_sections[] = {
{"TEAM", N_("TEAM"), 0, nmc_fields_dev_show_master_prop + 1 }, /* 12 */
{"BRIDGE", N_("BRIDGE"), 0, nmc_fields_dev_show_master_prop + 1 }, /* 13 */
{"VLAN", N_("VLAN"), 0, nmc_fields_dev_show_vlan_prop + 1 }, /* 14 */
- {"CONNECTIONS", N_("CONNECTIONS"), 0, nmc_fields_dev_show_connections + 1 }, /* 15 */
+ {"BLUETOOTH", N_("BLUETOOTH"), 0, nmc_fields_dev_show_bluetooth + 1 }, /* 15 */
+ {"CONNECTIONS", N_("CONNECTIONS"), 0, nmc_fields_dev_show_connections + 1 }, /* 16 */
{NULL, NULL, 0, NULL }
};
#if WITH_WIMAX
#define NMC_FIELDS_DEV_SHOW_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,TEAM,BRIDGE,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,"\
- "WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
+ "WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,BLUETOOTH,IP4,DHCP4,IP6,DHCP6"
#define NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON "GENERAL.DEVICE,GENERAL.TYPE,GENERAL.HWADDR,GENERAL.MTU,GENERAL.STATE,"\
"GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
#else
#define NMC_FIELDS_DEV_SHOW_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,TEAM,BRIDGE,VLAN,CONNECTIONS,WIFI-PROPERTIES,AP,"\
- "WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
+ "WIRED-PROPERTIES,BLUETOOTH,IP4,DHCP4,IP6,DHCP6"
#define NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON "GENERAL.DEVICE,GENERAL.TYPE,GENERAL.HWADDR,GENERAL.MTU,GENERAL.STATE,"\
"GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
#endif
@@ -647,6 +657,32 @@ fill_output_wimax_nsp (NMWimaxNsp *nsp, NmCli *nmc, NMDevice *dev, int idx, guin
}
#endif
+static char *
+bluetooth_caps_to_string (NMBluetoothCapabilities caps)
+{
+ char *caps_str[8]; /* Enough space for caps and terminating NULL */
+ char *ret_str;
+ int i = 0;
+
+ if (caps & NM_BT_CAPABILITY_DUN)
+ caps_str[i++] = g_strdup ("DUN");
+ if (caps & NM_BT_CAPABILITY_NAP)
+ caps_str[i++] = g_strdup ("NAP");
+
+ if (i == 0)
+ caps_str[i++] = g_strdup (_("(none)"));
+
+ caps_str[i] = NULL;
+
+ ret_str = g_strjoinv (" ", caps_str);
+
+ i = 0;
+ while (caps_str[i])
+ g_free (caps_str[i++]);
+
+ return ret_str;
+}
+
static const char *
construct_header_name (const char *base, const char *spec)
{
@@ -1096,8 +1132,27 @@ show_device_info (NMDevice *device, NmCli *nmc)
}
}
+ if (NM_IS_DEVICE_BT (device)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[15].name)) {
+ tmpl = nmc_fields_dev_show_bluetooth;
+ tmpl_len = sizeof (nmc_fields_dev_show_bluetooth);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_BLUETOOTH_ALL,
+ tmpl, FALSE, NULL, NULL);
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[15].name); /* "BLUETOOTH" */
+ set_val_str (arr, 1, bluetooth_caps_to_string (nm_device_bt_get_capabilities (NM_DEVICE_BT (device))));
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+ was_output = TRUE;
+ }
+ }
+
/* section CONNECTIONS */
- if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[15].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[16].name)) {
const GPtrArray *avail_cons;
GString *ac_paths_str;
char **ac_arr = NULL;
@@ -1135,7 +1190,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
g_string_append_c (ac_paths_str, '}');
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
- set_val_strc (arr, 0, nmc_fields_dev_show_sections[15].name); /* "CONNECTIONS" */
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[16].name); /* "CONNECTIONS" */
set_val_str (arr, 1, ac_paths_str->str);
set_val_arr (arr, 2, (ac_arr));
g_ptr_array_add (nmc->output_data, arr);