Commit 096ac93f authored by Thomas Haller's avatar Thomas Haller

cli: rework printing of dhcp options

parent 59ea03cc
......@@ -270,12 +270,67 @@ 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);
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_ip6_config[] = {
NMC_META_GENERIC ("GROUP"), /* 0 */
NMC_META_GENERIC ("ADDRESS"), /* 1 */
......@@ -343,45 +398,24 @@ print_dhcp_config (NMDhcpConfig *dhcp,
const char *group_prefix,
const char *one_field)
{
GHashTable *table;
const NMMetaAbstractInfo *const*tmpl;
NmcOutputField *arr;
gs_free_error GError *error = NULL;
gs_free char *field_str = NULL;
if (dhcp == NULL)
if (!dhcp)
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);
if (one_field)
field_str = g_strdup_printf ("%s.%s", group_prefix, one_field);
return TRUE;
if (!nmc_print (nmc_config,
(gpointer[]) { dhcp, NULL },
NULL,
NMC_META_GENERIC_GROUP (group_prefix, metagen_dhcp_config, N_("GROUP")),
field_str,
&error)) {
return FALSE;
}
return FALSE;
return TRUE;
}
/*
......
......@@ -84,6 +84,6 @@ const char *nmc_error_get_simple_message (GError *error);
extern const NmcMetaGenericInfo *const metagen_ip4_config[];
extern const NmcMetaGenericInfo *const nmc_fields_ip6_config[];
extern const NmcMetaGenericInfo *const nmc_fields_dhcp_config[];
extern const NmcMetaGenericInfo *const metagen_dhcp_config[];
#endif /* NMC_COMMON_H */
......@@ -776,9 +776,9 @@ const NmcMetaGenericInfo *const metagen_con_active_vpn[_NMC_GENERIC_INFO_TYPE_CO
const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[] = {
NMC_META_GENERIC_WITH_NESTED ("GENERAL", metagen_con_active_general), /* 0 */
NMC_META_GENERIC_WITH_NESTED ("IP4", metagen_ip4_config), /* 1 */
NMC_META_GENERIC_WITH_NESTED ("DHCP4", nmc_fields_dhcp_config + 1), /* 2 */
NMC_META_GENERIC_WITH_NESTED ("DHCP4", metagen_dhcp_config), /* 2 */
NMC_META_GENERIC_WITH_NESTED ("IP6", nmc_fields_ip6_config + 1), /* 3 */
NMC_META_GENERIC_WITH_NESTED ("DHCP6", nmc_fields_dhcp_config + 1), /* 4 */
NMC_META_GENERIC_WITH_NESTED ("DHCP6", metagen_dhcp_config), /* 4 */
NMC_META_GENERIC_WITH_NESTED ("VPN", metagen_con_active_vpn), /* 5 */
NULL,
};
......
......@@ -209,9 +209,9 @@ const NmcMetaGenericInfo *const nmc_fields_dev_show_sections[] = {
NMC_META_GENERIC_WITH_NESTED ("WIMAX-PROPERTIES", nmc_fields_dev_show_wimax_prop + 1), /* 5 */
NMC_META_GENERIC_WITH_NESTED ("NSP", nmc_fields_dev_wimax_list + 1), /* 6 */
NMC_META_GENERIC_WITH_NESTED ("IP4", metagen_ip4_config), /* 7 */
NMC_META_GENERIC_WITH_NESTED ("DHCP4", nmc_fields_dhcp_config + 1), /* 8 */
NMC_META_GENERIC_WITH_NESTED ("DHCP4", metagen_dhcp_config), /* 8 */
NMC_META_GENERIC_WITH_NESTED ("IP6", nmc_fields_ip6_config + 1), /* 9 */
NMC_META_GENERIC_WITH_NESTED ("DHCP6", nmc_fields_dhcp_config + 1), /* 10 */
NMC_META_GENERIC_WITH_NESTED ("DHCP6", metagen_dhcp_config), /* 10 */
NMC_META_GENERIC_WITH_NESTED ("BOND", nmc_fields_dev_show_master_prop + 1), /* 11 */
NMC_META_GENERIC_WITH_NESTED ("TEAM", nmc_fields_dev_show_team_prop + 1), /* 12 */
NMC_META_GENERIC_WITH_NESTED ("BRIDGE", nmc_fields_dev_show_master_prop + 1), /* 13 */
......
......@@ -189,7 +189,7 @@ complete_fields (const char *option, const char *prefix)
h = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, NULL);
complete_field (h, metagen_ip4_config);
complete_field (h, nmc_fields_dhcp_config);
complete_field (h, metagen_dhcp_config);
complete_field (h, nmc_fields_ip6_config);
complete_field (h, metagen_con_show);
complete_field (h, metagen_con_active_general);
......
......@@ -121,6 +121,9 @@ typedef enum {
NMC_GENERIC_INFO_TYPE_IP6_CONFIG_DOMAIN,
_NMC_GENERIC_INFO_TYPE_IP6_CONFIG_NUM,
NMC_GENERIC_INFO_TYPE_DHCP_CONFIG_OPTION = 0,
_NMC_GENERIC_INFO_TYPE_DHCP_CONFIG_NUM,
NMC_GENERIC_INFO_TYPE_CON_SHOW_NAME = 0,
NMC_GENERIC_INFO_TYPE_CON_SHOW_UUID,
NMC_GENERIC_INFO_TYPE_CON_SHOW_TYPE,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment