diff options
| author | Michael Biebl <biebl@debian.org> | 2018-09-23 10:10:27 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2018-09-23 10:10:27 +0200 |
| commit | e126f3e804c35480c4f075777430419d6ece23da (patch) | |
| tree | 5d5821ebcda8cd6ac34d2483bb3354910e508930 /clients/cli/common.c | |
| parent | c240974325c552cad177c457d6ff04e381fd77a3 (diff) | |
New upstream version 1.12.4 upstream/1.12.4
Diffstat (limited to 'clients/cli/common.c')
| -rw-r--r-- | clients/cli/common.c | 191 |
1 files changed, 88 insertions, 103 deletions
diff --git a/clients/cli/common.c b/clients/cli/common.c index 88e98154..4aea0d5b 100644 --- a/clients/cli/common.c +++ b/clients/cli/common.c @@ -102,8 +102,6 @@ _ip_config_get_routes (NMIPConfig *cfg) return arr; } -/*****************************************************************************/ - static gconstpointer _metagen_ip4_config_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS) { @@ -179,19 +177,6 @@ arr_out: 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) - _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_ADDRESS, "ADDRESS"), - _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_GATEWAY, "GATEWAY"), - _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_ROUTE, "ROUTE"), - _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_DNS, "DNS"), - _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_DOMAIN, "DOMAIN"), - _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_WINS, "WINS"), -}; - -/*****************************************************************************/ - static gconstpointer _metagen_ip6_config_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS) { @@ -262,6 +247,17 @@ arr_out: 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) + _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_ADDRESS, "ADDRESS"), + _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_GATEWAY, "GATEWAY"), + _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_ROUTE, "ROUTE"), + _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_DNS, "DNS"), + _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_DOMAIN, "DOMAIN"), + _METAGEN_IP4_CONFIG (NMC_GENERIC_INFO_TYPE_IP4_CONFIG_WINS, "WINS"), +}; + 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) @@ -274,92 +270,40 @@ const NmcMetaGenericInfo *const metagen_ip6_config[_NMC_GENERIC_INFO_TYPE_IP6_CO /*****************************************************************************/ -static gconstpointer -_metagen_dhcp_config_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS) -{ - NMDhcpConfig *dhcp = target; - guint i; - char **arr = NULL; - - NMC_HANDLE_COLOR (NM_META_COLOR_NONE); - - switch (info->info_type) { - case NMC_GENERIC_INFO_TYPE_DHCP_CONFIG_OPTION: - { - GHashTable *table; - gs_free char **arr2 = NULL; - guint n; - - if (!NM_FLAGS_HAS (get_flags, NM_META_ACCESSOR_GET_FLAGS_ACCEPT_STRV)) - return NULL; - - table = nm_dhcp_config_get_options (dhcp); - if (!table) - goto arr_out; - - arr2 = (char **) nm_utils_strdict_get_keys (table, TRUE, &n); - if (!n) - goto arr_out; - - nm_assert (arr2 && !arr2[n] && n == NM_PTRARRAY_LEN (arr2)); - for (i = 0; i < n; i++) { - const char *k = arr2[i]; - const char *v; - - nm_assert (k); - v = g_hash_table_lookup (table, k); - arr2[i] = g_strdup_printf ("%s = %s", k, v); - } - - arr = g_steal_pointer (&arr2); - goto arr_out; - } - default: - break; - } - - g_return_val_if_reached (NULL); - -arr_out: - NM_SET_OUT (out_is_default, !arr || !arr[0]); - *out_flags |= NM_META_ACCESSOR_GET_OUT_FLAGS_STRV; - *out_to_free = arr; - return arr; -} - -const NmcMetaGenericInfo *const metagen_dhcp_config[_NMC_GENERIC_INFO_TYPE_DHCP_CONFIG_NUM + 1] = { -#define _METAGEN_DHCP_CONFIG(type, name) \ - [type] = NMC_META_GENERIC(name, .info_type = type, .get_fcn = _metagen_dhcp_config_get_fcn) - _METAGEN_DHCP_CONFIG (NMC_GENERIC_INFO_TYPE_DHCP_CONFIG_OPTION, "OPTION"), +const NmcMetaGenericInfo *const nmc_fields_dhcp_config[] = { + NMC_META_GENERIC ("GROUP"), /* 0 */ + NMC_META_GENERIC ("OPTION"), /* 1 */ + NULL, }; -/*****************************************************************************/ +const NmcMetaGenericInfo *const nmc_fields_ip6_config[] = { + NMC_META_GENERIC ("GROUP"), /* 0 */ + NMC_META_GENERIC ("ADDRESS"), /* 1 */ + NMC_META_GENERIC ("GATEWAY"), /* 2 */ + NMC_META_GENERIC ("ROUTE"), /* 3 */ + NMC_META_GENERIC ("DNS"), /* 4 */ + NMC_META_GENERIC ("DOMAIN"), /* 5 */ + NULL, +}; gboolean -print_ip_config (NMIPConfig *cfg, - int addr_family, - const NmcConfig *nmc_config, - const char *one_field) +print_ip4_config (NMIPConfig *cfg4, + const NmcConfig *nmc_config, + const char *one_field) { gs_free_error GError *error = NULL; gs_free char *field_str = NULL; - if (!cfg) + if (cfg4 == NULL) return FALSE; - if (one_field) { - field_str = g_strdup_printf ("IP%c.%s", - nm_utils_addr_family_to_char (addr_family), - one_field); - } + if (one_field) + field_str = g_strdup_printf ("IP4.%s", one_field); if (!nmc_print (nmc_config, - (gpointer[]) { cfg, NULL }, - NULL, + (gpointer[]) { cfg4, NULL }, NULL, - addr_family == AF_INET - ? NMC_META_GENERIC_GROUP ("IP4", metagen_ip4_config, N_("GROUP")) - : NMC_META_GENERIC_GROUP ("IP6", metagen_ip6_config, N_("GROUP")), + NMC_META_GENERIC_GROUP ("IP4", metagen_ip4_config, N_("GROUP")), field_str, &error)) { return FALSE; @@ -368,30 +312,24 @@ print_ip_config (NMIPConfig *cfg, } gboolean -print_dhcp_config (NMDhcpConfig *dhcp, - int addr_family, - const NmcConfig *nmc_config, - const char *one_field) +print_ip6_config (NMIPConfig *cfg6, + const NmcConfig *nmc_config, + const char *group_prefix, + const char *one_field) { gs_free_error GError *error = NULL; gs_free char *field_str = NULL; - if (!dhcp) + if (cfg6 == NULL) return FALSE; - if (one_field) { - field_str = g_strdup_printf ("DHCP%c.%s", - nm_utils_addr_family_to_char (addr_family), - one_field); - } + if (one_field) + field_str = g_strdup_printf ("IP6.%s", one_field); if (!nmc_print (nmc_config, - (gpointer[]) { dhcp, NULL }, + (gpointer[]) { cfg6, NULL }, NULL, - NULL, - addr_family == AF_INET - ? NMC_META_GENERIC_GROUP ("DHCP4", metagen_dhcp_config, N_("GROUP")) - : NMC_META_GENERIC_GROUP ("DHCP6", metagen_dhcp_config, N_("GROUP")), + NMC_META_GENERIC_GROUP ("IP6", metagen_ip6_config, N_("GROUP")), field_str, &error)) { return FALSE; @@ -399,6 +337,53 @@ print_dhcp_config (NMDhcpConfig *dhcp, return TRUE; } +gboolean +print_dhcp_config (NMDhcpConfig *dhcp, + const NmcConfig *nmc_config, + const char *group_prefix, + const char *one_field) +{ + GHashTable *table; + const NMMetaAbstractInfo *const*tmpl; + NmcOutputField *arr; + + if (dhcp == NULL) + return FALSE; + + table = nm_dhcp_config_get_options (dhcp); + if (table) { + char **options_arr = NULL; + NMC_OUTPUT_DATA_DEFINE_SCOPED (out); + gs_free const char **keys = NULL; + guint i, nkeys; + + tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dhcp_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); + + keys = (const char **) g_hash_table_get_keys_as_array (table, &nkeys); + nm_utils_strv_sort (keys, nkeys); + + options_arr = g_new (char *, nkeys + 1); + for (i = 0; i < nkeys; i++) + options_arr[i] = g_strdup_printf ("%s = %s", keys[i], (const char *) g_hash_table_lookup (table, keys[i])); + options_arr[i] = NULL; + + arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX); + set_val_strc (arr, 0, group_prefix); + set_val_arr (arr, 1, options_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; + } + return FALSE; +} + /* * nmc_find_connection: * @connections: array of NMConnections to search in |