summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-09-18 12:29:06 +0200
committerThomas Haller <thaller@redhat.com>2017-09-26 19:36:51 +0200
commitccb83e34a346dea518ce76140ff44b1ac0cba531 (patch)
treea00f6791116988301a97aa8d62dfd42d10d6b505
parent6aed608011d84d87c8bf96f3c73db8806c6a739a (diff)
downloadNetworkManager-ccb83e34a346dea518ce76140ff44b1ac0cba531.tar.gz
cli: refactor printing IP6 device info
-rw-r--r--clients/cli/common.c184
-rw-r--r--clients/cli/utils.h7
2 files changed, 124 insertions, 67 deletions
diff --git a/clients/cli/common.c b/clients/cli/common.c
index 46b426d344..d3d83d474d 100644
--- a/clients/cli/common.c
+++ b/clients/cli/common.c
@@ -134,6 +134,97 @@ arr_out:
return arr;
}
+static gconstpointer
+_metagen_ip6_config_get_fcn (const NMMetaEnvironment *environment,
+ gpointer environment_user_data,
+ const NmcMetaGenericInfo *info,
+ gpointer target,
+ NMMetaAccessorGetType get_type,
+ NMMetaAccessorGetFlags get_flags,
+ NMMetaAccessorGetOutFlags *out_flags,
+ gpointer *out_to_free)
+{
+ NMIPConfig *cfg6 = target;
+ GPtrArray *ptr_array;
+ char **arr;
+ const char *const*arrc;
+ guint i = 0;
+
+ nm_assert (info->info_type < _NMC_GENERIC_INFO_TYPE_IP6_CONFIG_NUM);
+
+ NMC_HANDLE_TERMFORMAT (NM_META_TERM_COLOR_NORMAL);
+
+ switch (info->info_type) {
+ case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ADDRESS:
+ if (!NM_FLAGS_HAS (get_flags, NM_META_ACCESSOR_GET_FLAGS_ACCEPT_STRV))
+ return NULL;
+ ptr_array = nm_ip_config_get_addresses (cfg6);
+ if (ptr_array) {
+ arr = g_new (char *, ptr_array->len + 1);
+ for (i = 0; i < ptr_array->len; i++) {
+ NMIPAddress *addr = g_ptr_array_index (ptr_array, i);
+
+ arr[i] = g_strdup_printf ("%s/%u",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
+ }
+ arr[i] = NULL;
+ } else
+ arr = NULL;
+ goto arr_out;
+ case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_GATEWAY:
+ return nm_ip_config_get_gateway (cfg6);
+ case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ROUTE:
+ if (!NM_FLAGS_HAS (get_flags, NM_META_ACCESSOR_GET_FLAGS_ACCEPT_STRV))
+ return NULL;
+ ptr_array = nm_ip_config_get_routes (cfg6);
+ if (ptr_array) {
+ arr = g_new (char *, ptr_array->len + 1);
+ for (i = 0; i < ptr_array->len; i++) {
+ NMIPRoute *route = g_ptr_array_index (ptr_array, i);
+ const char *next_hop;
+
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "::";
+
+ arr[i] = g_strdup_printf ("dst = %s/%u, nh = %s%c mt = %u",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop,
+ nm_ip_route_get_metric (route) == -1 ? '\0' : ',',
+ (guint32) nm_ip_route_get_metric (route));
+ }
+ arr[i] = NULL;
+ } else
+ arr = NULL;
+ goto arr_out;
+ case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DNS:
+ if (!NM_FLAGS_HAS (get_flags, NM_META_ACCESSOR_GET_FLAGS_ACCEPT_STRV))
+ return NULL;
+ arrc = nm_ip_config_get_nameservers (cfg6);
+ goto arrc_out;
+ case NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DOMAIN:
+ if (!NM_FLAGS_HAS (get_flags, NM_META_ACCESSOR_GET_FLAGS_ACCEPT_STRV))
+ return NULL;
+ arrc = nm_ip_config_get_domains (cfg6);
+ goto arrc_out;
+ default:
+ break;
+ }
+
+ g_return_val_if_reached (NULL);
+
+arrc_out:
+ *out_flags |= NM_META_ACCESSOR_GET_OUT_FLAGS_STRV;
+ return arrc;
+
+arr_out:
+ *out_flags |= NM_META_ACCESSOR_GET_OUT_FLAGS_STRV;
+ *out_to_free = arr;
+ return arr;
+}
+
const NmcMetaGenericInfo *const metagen_ip4_config[_NMC_GENERIC_INFO_TYPE_IP4_CONFIG_NUM + 1] = {
#define _METAGEN_IP4_CONFIG(type, name) \
[type] = NMC_META_GENERIC(name, .info_type = type, .get_fcn = _metagen_ip4_config_get_fcn)
@@ -150,6 +241,21 @@ static const NmcMetaGenericInfo *const metagen_ip4_config_group[] = {
NULL,
};
+const NmcMetaGenericInfo *const metagen_ip6_config[_NMC_GENERIC_INFO_TYPE_IP6_CONFIG_NUM + 1] = {
+#define _METAGEN_IP6_CONFIG(type, name) \
+ [type] = NMC_META_GENERIC(name, .info_type = type, .get_fcn = _metagen_ip6_config_get_fcn)
+ _METAGEN_IP6_CONFIG (NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ADDRESS, "ADDRESS"),
+ _METAGEN_IP6_CONFIG (NMC_GENERIC_INFO_TYPE_IP6_CONFIG_GATEWAY, "GATEWAY"),
+ _METAGEN_IP6_CONFIG (NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ROUTE, "ROUTE"),
+ _METAGEN_IP6_CONFIG (NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DNS, "DNS"),
+ _METAGEN_IP6_CONFIG (NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DOMAIN, "DOMAIN"),
+};
+
+static const NmcMetaGenericInfo *const metagen_ip6_config_group[] = {
+ NMC_META_GENERIC_WITH_NESTED ("IP6", metagen_ip6_config, .name_header = N_("GROUP")),
+ NULL,
+};
+
/*****************************************************************************/
const NmcMetaGenericInfo *const nmc_fields_dhcp4_config[] = {
@@ -205,79 +311,23 @@ print_ip6_config (NMIPConfig *cfg6,
const char *group_prefix,
const char *one_field)
{
- GPtrArray *ptr_array;
- char **addr_arr = NULL;
- char **route_arr = NULL;
- char **dns_arr = NULL;
- char **domain_arr = NULL;
- int i = 0;
- const NMMetaAbstractInfo *const*tmpl;
- NmcOutputField *arr;
- NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
+ gs_free_error GError *error = NULL;
+ gs_free char *field_str = NULL;
if (cfg6 == NULL)
return FALSE;
- tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_ip6_config;
- out_indices = parse_output_fields (one_field,
- tmpl, FALSE, NULL, NULL);
- arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
- g_ptr_array_add (out.output_data, arr);
-
- /* addresses */
- ptr_array = nm_ip_config_get_addresses (cfg6);
- if (ptr_array) {
- addr_arr = g_new (char *, ptr_array->len + 1);
- for (i = 0; i < ptr_array->len; i++) {
- NMIPAddress *addr = (NMIPAddress *) g_ptr_array_index (ptr_array, i);
-
- addr_arr[i] = g_strdup_printf ("%s/%u",
- nm_ip_address_get_address (addr),
- nm_ip_address_get_prefix (addr));
- }
- addr_arr[i] = NULL;
- }
+ if (one_field)
+ field_str = g_strdup_printf ("IP6.%s", one_field);
- /* routes */
- ptr_array = nm_ip_config_get_routes (cfg6);
- if (ptr_array) {
- route_arr = g_new (char *, ptr_array->len + 1);
- for (i = 0; i < ptr_array->len; i++) {
- NMIPRoute *route = (NMIPRoute *) g_ptr_array_index (ptr_array, i);
- const char *next_hop;
-
- next_hop = nm_ip_route_get_next_hop (route);
- if (!next_hop)
- next_hop = "::";
-
- route_arr[i] = g_strdup_printf ("dst = %s/%u, nh = %s%c mt = %u",
- nm_ip_route_get_dest (route),
- nm_ip_route_get_prefix (route),
- next_hop,
- nm_ip_route_get_metric (route) == -1 ? '\0' : ',',
- (guint32) nm_ip_route_get_metric (route));
- }
- route_arr[i] = NULL;
+ if (!nmc_print (nmc_config,
+ (gpointer[]) { cfg6, NULL },
+ NULL,
+ (const NMMetaAbstractInfo *const*) metagen_ip6_config_group,
+ field_str,
+ &error)) {
+ return FALSE;
}
-
- /* DNS */
- dns_arr = g_strdupv ((char **) nm_ip_config_get_nameservers (cfg6));
-
- /* domains */
- domain_arr = g_strdupv ((char **) nm_ip_config_get_domains (cfg6));
-
- arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
- set_val_strc (arr, 0, group_prefix);
- set_val_arr (arr, 1, addr_arr);
- set_val_strc (arr, 2, nm_ip_config_get_gateway (cfg6));
- set_val_arr (arr, 3, route_arr);
- set_val_arr (arr, 4, dns_arr);
- set_val_arr (arr, 5, domain_arr);
- g_ptr_array_add (out.output_data, arr);
-
- print_data_prepare_width (out.output_data);
- print_data (nmc_config, out_indices, NULL, 0, &out);
-
return TRUE;
}
diff --git a/clients/cli/utils.h b/clients/cli/utils.h
index 19145974ea..ffc5b6f312 100644
--- a/clients/cli/utils.h
+++ b/clients/cli/utils.h
@@ -120,6 +120,13 @@ typedef enum {
NMC_GENERIC_INFO_TYPE_IP4_CONFIG_WINS,
_NMC_GENERIC_INFO_TYPE_IP4_CONFIG_NUM,
+ NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ADDRESS = 0,
+ NMC_GENERIC_INFO_TYPE_IP6_CONFIG_GATEWAY,
+ NMC_GENERIC_INFO_TYPE_IP6_CONFIG_ROUTE,
+ NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DNS,
+ NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DOMAIN,
+ _NMC_GENERIC_INFO_TYPE_IP6_CONFIG_NUM,
+
} NmcGenericInfoType;
#define NMC_HANDLE_TERMFORMAT(color) \