diff options
| author | Michael Biebl <biebl@debian.org> | 2018-09-08 17:44:06 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2018-09-08 17:44:06 +0200 |
| commit | 8f7a3cbbdd0c0a48277c341dd3a8ec8743ae9735 (patch) | |
| tree | 4353551fcb59cc822c3cadf2f4888f70601e8fbf /clients/cli/common.c | |
| parent | caf1db9d6fbc056cc6c76a24574890f6c7895f3d (diff) | |
New upstream version 1.13.90 upstream/1.13.90
Diffstat (limited to 'clients/cli/common.c')
| -rw-r--r-- | clients/cli/common.c | 191 |
1 files changed, 103 insertions, 88 deletions
diff --git a/clients/cli/common.c b/clients/cli/common.c index 09c86334..ede447ba 100644 --- a/clients/cli/common.c +++ b/clients/cli/common.c @@ -102,6 +102,8 @@ _ip_config_get_routes (NMIPConfig *cfg) return arr; } +/*****************************************************************************/ + static gconstpointer _metagen_ip4_config_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS) { @@ -177,6 +179,19 @@ 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) { @@ -247,17 +262,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"), -}; - 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) @@ -270,40 +274,92 @@ const NmcMetaGenericInfo *const metagen_ip6_config[_NMC_GENERIC_INFO_TYPE_IP6_CO /*****************************************************************************/ -const NmcMetaGenericInfo *const nmc_fields_dhcp_config[] = { - NMC_META_GENERIC ("GROUP"), /* 0 */ - NMC_META_GENERIC ("OPTION"), /* 1 */ - NULL, -}; +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); -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, + 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"), }; +/*****************************************************************************/ + gboolean -print_ip4_config (NMIPConfig *cfg4, - const NmcConfig *nmc_config, - const char *one_field) +print_ip_config (NMIPConfig *cfg, + int addr_family, + const NmcConfig *nmc_config, + const char *one_field) { gs_free_error GError *error = NULL; gs_free char *field_str = NULL; - if (cfg4 == NULL) + if (!cfg) return FALSE; - if (one_field) - field_str = g_strdup_printf ("IP4.%s", one_field); + if (one_field) { + field_str = g_strdup_printf ("IP%c.%s", + nm_utils_addr_family_to_char (addr_family), + one_field); + } if (!nmc_print (nmc_config, - (gpointer[]) { cfg4, NULL }, + (gpointer[]) { cfg, NULL }, + NULL, NULL, - NMC_META_GENERIC_GROUP ("IP4", metagen_ip4_config, N_("GROUP")), + addr_family == AF_INET + ? NMC_META_GENERIC_GROUP ("IP4", metagen_ip4_config, N_("GROUP")) + : NMC_META_GENERIC_GROUP ("IP6", metagen_ip6_config, N_("GROUP")), field_str, &error)) { return FALSE; @@ -312,24 +368,30 @@ print_ip4_config (NMIPConfig *cfg4, } gboolean -print_ip6_config (NMIPConfig *cfg6, - const NmcConfig *nmc_config, - const char *group_prefix, - const char *one_field) +print_dhcp_config (NMDhcpConfig *dhcp, + int addr_family, + const NmcConfig *nmc_config, + const char *one_field) { gs_free_error GError *error = NULL; gs_free char *field_str = NULL; - if (cfg6 == NULL) + if (!dhcp) return FALSE; - if (one_field) - field_str = g_strdup_printf ("IP6.%s", one_field); + if (one_field) { + field_str = g_strdup_printf ("DHCP%c.%s", + nm_utils_addr_family_to_char (addr_family), + one_field); + } if (!nmc_print (nmc_config, - (gpointer[]) { cfg6, NULL }, + (gpointer[]) { dhcp, NULL }, NULL, - NMC_META_GENERIC_GROUP ("IP6", metagen_ip6_config, N_("GROUP")), + 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")), field_str, &error)) { return FALSE; @@ -337,53 +399,6 @@ print_ip6_config (NMIPConfig *cfg6, 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 |