summary refs log tree commit diff
path: root/cli/src/devices.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2012-10-26 21:32:57 +0200
committerMichael Biebl <biebl@debian.org>2012-10-26 21:32:57 +0200
commit36cb2f364a821e1be50b23e03a18891ec55adb06 (patch)
treedcc7ff4019373acf1583c3271c4efbddbf43aa6c /cli/src/devices.c
parent8c98b34228abb4dfde822ad89106b4d8b2287639 (diff)
Imported Upstream version 0.9.6.4 upstream/0.9.6.4
Diffstat (limited to 'cli/src/devices.c')
-rw-r--r--cli/src/devices.c86
1 files changed, 82 insertions, 4 deletions
diff --git a/cli/src/devices.c b/cli/src/devices.c
index 6b9367b4..420fd403 100644
--- a/cli/src/devices.c
+++ b/cli/src/devices.c
@@ -90,14 +90,16 @@ static NmcOutputField nmc_fields_dev_list_sections[] = {
 	{"DHCP4",             N_("DHCP4"),             0, NULL, 0},  /* 8 */
 	{"IP6",               N_("IP6"),               0, NULL, 0},  /* 9 */
 	{"DHCP6",             N_("DHCP6"),             0, NULL, 0},  /* 10 */
+	{"BOND",              N_("BOND"),              0, NULL, 0},  /* 11 */
+	{"VLAN",              N_("VLAN"),              0, NULL, 0},  /* 12 */
 	{NULL,                NULL,                    0, NULL, 0}
 };
 #if WITH_WIMAX
-#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL     "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
-#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON  "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
+#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL     "GENERAL,CAPABILITIES,BOND,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
+#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON  "GENERAL,CAPABILITIES,BOND,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,WIMAX-PROPERTIES,NSP,IP4,DHCP4,IP6,DHCP6"
 #else
-#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL     "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
-#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON  "GENERAL,CAPABILITIES,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
+#define NMC_FIELDS_DEV_LIST_SECTIONS_ALL     "GENERAL,CAPABILITIES,BOND,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
+#define NMC_FIELDS_DEV_LIST_SECTIONS_COMMON  "GENERAL,CAPABILITIES,BOND,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,IP4,DHCP4,IP6,DHCP6"
 #endif
 
 /* Available fields for 'dev list' - GENERAL part */
@@ -210,6 +212,24 @@ static NmcOutputField nmc_fields_dev_wimax_list[] = {
 #define NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST  "NAME,"NMC_FIELDS_DEV_WIMAX_LIST_COMMON
 #endif
 
+/* Available fields for 'dev list' - BOND part */
+static NmcOutputField nmc_fields_dev_list_bond_prop[] = {
+	{"NAME",            N_("NAME"),     18, NULL, 0},  /* 0 */
+	{"SLAVES",          N_("SLAVES"),   20, NULL, 0},  /* 1 */
+	{NULL,              NULL,            0, NULL, 0}
+};
+#define NMC_FIELDS_DEV_LIST_BOND_PROP_ALL     "NAME,SLAVES"
+#define NMC_FIELDS_DEV_LIST_BOND_PROP_COMMON  "NAME,SLAVES"
+
+/* Available fields for 'dev list' - VLAN part */
+static NmcOutputField nmc_fields_dev_list_vlan_prop[] = {
+	{"NAME",            N_("NAME"),     18, NULL, 0},  /* 0 */
+	{"ID",              N_("ID"),        5, NULL, 0},  /* 1 */
+	{NULL,              NULL,            0, NULL, 0}
+};
+#define NMC_FIELDS_DEV_LIST_VLAN_PROP_ALL     "NAME,ID"
+#define NMC_FIELDS_DEV_LIST_VLAN_PROP_COMMON  "NAME,ID"
+
 
 /* glib main loop variable - defined in nmcli.c */
 extern GMainLoop *loop;
@@ -627,6 +647,7 @@ show_device_info (gpointer data, gpointer user_data)
 			was_output = TRUE;
 		}
 
+
 		/* Wireless specific information */
 		if ((NM_IS_DEVICE_WIFI (device))) {
 			NMDeviceWifiCapabilities wcaps;
@@ -790,6 +811,63 @@ show_device_info (gpointer data, gpointer user_data)
 			if (dhcp6 && !strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[10].name))
 				was_output = print_dhcp6_config (dhcp6, nmc, nmc_fields_dev_list_sections[10].name);
 		}
+
+		/* Bond-specific information */
+		if ((NM_IS_DEVICE_BOND (device))) {
+			if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[11].name)) {
+				const GPtrArray *slaves;
+				GString *bond_slaves_str;
+				int idx;
+
+				bond_slaves_str = g_string_new (NULL);
+				slaves = nm_device_bond_get_slaves (NM_DEVICE_BOND (device));
+				for (idx = 0; slaves && idx < slaves->len; idx++) {
+					NMDevice *slave = g_ptr_array_index (slaves, idx);
+					const char *iface = nm_device_get_iface (slave);
+
+					g_string_append (bond_slaves_str, iface);
+					g_string_append_c (bond_slaves_str, ' ');
+				}
+				if (bond_slaves_str->len > 0)
+					g_string_truncate (bond_slaves_str, bond_slaves_str->len-1);  /* Chop off last space */
+
+				nmc->allowed_fields = nmc_fields_dev_list_bond_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_BOND_PROP_ALL, nmc->allowed_fields, NULL);
+				print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+
+				nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[11].name;  /* "BOND" */
+				nmc->allowed_fields[1].value = bond_slaves_str->str;
+
+				nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
+				print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+
+				g_string_free (bond_slaves_str, TRUE);
+				was_output = TRUE;
+			}
+		}
+
+		/* VLAN-specific information */
+		if ((NM_IS_DEVICE_VLAN (device))) {
+			if (!strcasecmp (nmc_fields_dev_list_sections[section_idx].name, nmc_fields_dev_list_sections[12].name)) {
+				char * vlan_id_str = g_strdup_printf ("%u", nm_device_vlan_get_vlan_id (NM_DEVICE_VLAN (device)));
+
+				nmc->allowed_fields = nmc_fields_dev_list_vlan_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_VLAN_PROP_ALL, nmc->allowed_fields, NULL);
+				print_fields (nmc->print_fields, nmc->allowed_fields); /* Print header */
+
+				nmc->allowed_fields[0].value = nmc_fields_dev_list_sections[12].name;  /* "VLAN" */
+				nmc->allowed_fields[1].value = vlan_id_str;
+
+				nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
+				print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
+
+				g_free (vlan_id_str);
+				was_output = TRUE;
+			}
+		}
+
 	}
 
 	if (sections_array)