/* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "libnm-core-impl/nm-default-libnm-core.h" #include "libnm-glib-aux/nm-str-buf.h" #include "libnm-core-intern/nm-meta-setting-base.h" #include "libnm-core-intern/nm-core-internal.h" #include "libnm-base/nm-ethtool-base.h" #include "libnm-core-public/nm-setting-ethtool.h" #define INDENT 4 static const char * _xml_escape_attr(NMStrBuf *sbuf, const char *value) { gs_free char *s = NULL; nm_str_buf_reset(sbuf); s = g_markup_escape_text(value, -1); nm_str_buf_append_c(sbuf, '"'); nm_str_buf_append(sbuf, s); nm_str_buf_append_c(sbuf, '"'); return nm_str_buf_get_str(sbuf); } static const char * _indent_level(guint num_spaces) { static const char spaces[] = " "; nm_assert(num_spaces < G_N_ELEMENTS(spaces)); return &spaces[G_N_ELEMENTS(spaces) - num_spaces - 1]; } int main(int argc, char *argv[]) { nm_auto_str_buf NMStrBuf sbuf1 = NM_STR_BUF_INIT(NM_UTILS_GET_NEXT_REALLOC_SIZE_1000, FALSE); const NMSettInfoSetting *sett_info_settings = nmtst_sett_info_settings(); NMMetaSettingType meta_type; g_print("\n"); g_print("\n"); for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) { const NMSettInfoSetting *sis = &sett_info_settings[meta_type]; const NMMetaSettingInfo *msi = &nm_meta_setting_infos[meta_type]; nm_auto_unref_gtypeclass NMSettingClass *klass = NULL; guint prop_idx; GType gtype; gtype = msi->get_setting_gtype(); klass = g_type_class_ref(gtype); g_print("%ssetting_name)); g_print("\n%sgtype=%s", _indent_level(INDENT + 9), _xml_escape_attr(&sbuf1, g_type_name(gtype))); g_print("\n%s>\n", _indent_level(INDENT + 9)); for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) { const NMSettInfoProperty *sip = &sis->property_infos[prop_idx]; if (nm_streq(sip->name, NM_SETTING_NAME)) continue; g_print("%sname)); if (sip->is_deprecated) g_print("\n%sis-deprecated=\"1\"", _indent_level(2 * INDENT + 10)); if (sip->param_spec && NM_FLAGS_HAS(sip->param_spec->flags, NM_SETTING_PARAM_SECRET)) { g_print("\n%sis-secret=\"1\"", _indent_level(2 * INDENT + 10)); } if (sip->param_spec && G_PARAM_SPEC_VALUE_TYPE(sip->param_spec) == NM_TYPE_SETTING_SECRET_FLAGS) { g_print("\n%sis-secret-flags=\"1\"", _indent_level(2 * INDENT + 10)); } if (sip->property_type->dbus_type) { g_print("\n%sdbus-type=%s", _indent_level(2 * INDENT + 10), _xml_escape_attr(&sbuf1, (const char *) sip->property_type->dbus_type)); } if (sip->dbus_deprecated) { nm_assert(sip->property_type->dbus_type); g_print("\n%sdbus-deprecated=\"1\"", _indent_level(2 * INDENT + 10)); } if (sip->param_spec) { nm_assert(nm_streq(sip->name, sip->param_spec->name)); g_print("\n%sgprop-type=%s", _indent_level(2 * INDENT + 10), _xml_escape_attr(&sbuf1, g_type_name(G_PARAM_SPEC_VALUE_TYPE(sip->param_spec)))); } g_print("\n%s/>\n", _indent_level(2 * INDENT + 10)); } if (nm_streq(msi->setting_name, NM_SETTING_ETHTOOL_SETTING_NAME)) { NMEthtoolID ethtool_id; /* NMSettingEthtool's properties are "gendata" options. They are implemented differently. */ for (ethtool_id = _NM_ETHTOOL_ID_FIRST; ethtool_id <= _NM_ETHTOOL_ID_LAST; ethtool_id++) { g_print("%soptname)); g_print( "\n%sdbus-type=%s", _indent_level(2 * INDENT + 10), _xml_escape_attr(&sbuf1, (const char *) nm_ethtool_id_get_variant_type(ethtool_id))); g_print("\n%sis-setting-option=\"1\"", _indent_level(2 * INDENT + 10)); g_print("\n%s/>\n", _indent_level(2 * INDENT + 10)); } } g_print("%s\n", _indent_level(INDENT)); } g_print("\n"); return 0; }