diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | tools/Makefile.am | 25 | ||||
-rw-r--r-- | tools/generate-settings-spec.c | 457 |
3 files changed, 1 insertions, 483 deletions
diff --git a/.gitignore b/.gitignore index 71b4f6146b..dad1ec51f6 100644 --- a/.gitignore +++ b/.gitignore @@ -222,6 +222,4 @@ valgrind-*.log /tui/newt/libnmt-newt.a /tui/nmtui -/tools/generate-settings-spec - /vapi/*.vapi diff --git a/tools/Makefile.am b/tools/Makefile.am index 2fea947bb4..e8b568a9f8 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,26 +1,3 @@ -GENERATE_SETTINGS_SPEC_SOURCE = generate-settings-spec.c - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include \ - -I$(top_srcdir)/libnm-util \ - -I$(top_builddir)/libnm-util \ - -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \ - $(GLIB_CFLAGS) \ - $(DBUS_CFLAGS) - -noinst_PROGRAMS = \ - generate-settings-spec - -generate_settings_spec_SOURCES = \ - $(GENERATE_SETTINGS_SPEC_SOURCE) - -generate_settings_spec_LDADD = \ - $(top_builddir)/libnm-util/libnm-util.la \ - $(GLIB_LIBS) \ - $(DBUS_LIBS) - EXTRA_DIST = \ doc-generator.xsl \ - check-exports.sh \ - $(GENERATE_SETTINGS_SPEC_SOURCE) + check-exports.sh diff --git a/tools/generate-settings-spec.c b/tools/generate-settings-spec.c deleted file mode 100644 index f53fdba16e..0000000000 --- a/tools/generate-settings-spec.c +++ /dev/null @@ -1,457 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Dan Williams <dcbw@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - * (C) Copyright 2009 - 2013 Red Hat, Inc. - */ - -#include <stdio.h> -#include <errno.h> -#include <unistd.h> -#include <string.h> -#include <time.h> - -#include <glib.h> -#include <dbus/dbus-glib.h> -#include "config.h" - -#include <nm-setting.h> -#include <nm-setting-8021x.h> -#include <nm-setting-adsl.h> -#include <nm-setting-bluetooth.h> -#include <nm-setting-bond.h> -#include <nm-setting-bridge.h> -#include <nm-setting-bridge-port.h> -#include <nm-setting-cdma.h> -#include <nm-setting-connection.h> -#include <nm-setting-dcb.h> -#include <nm-setting-gsm.h> -#include <nm-setting-infiniband.h> -#include <nm-setting-ip4-config.h> -#include <nm-setting-ip6-config.h> -#include <nm-setting-olpc-mesh.h> -#include <nm-setting-ppp.h> -#include <nm-setting-pppoe.h> -#include <nm-setting-serial.h> -#include <nm-setting-team.h> -#include <nm-setting-team-port.h> -#include <nm-setting-vlan.h> -#include <nm-setting-vpn.h> -#include <nm-setting-wimax.h> -#include <nm-setting-wired.h> -#include <nm-setting-wireless.h> -#include <nm-setting-wireless-security.h> - -#include <nm-utils.h> - -typedef NMSetting* (*SettingNewFunc) (void); - -static SettingNewFunc funcs[] = { - nm_setting_802_1x_new, - nm_setting_adsl_new, - nm_setting_bluetooth_new, - nm_setting_bond_new, - nm_setting_bridge_new, - nm_setting_bridge_port_new, - nm_setting_cdma_new, - nm_setting_connection_new, - nm_setting_dcb_new, - nm_setting_gsm_new, - nm_setting_infiniband_new, - nm_setting_ip4_config_new, - nm_setting_ip6_config_new, - nm_setting_olpc_mesh_new, - nm_setting_ppp_new, - nm_setting_pppoe_new, - nm_setting_serial_new, - nm_setting_team_new, - nm_setting_team_port_new, - nm_setting_vlan_new, - nm_setting_vpn_new, - nm_setting_wimax_new, - nm_setting_wired_new, - nm_setting_wireless_new, - nm_setting_wireless_security_new, - NULL -}; - -typedef struct { - const char *gvalue_name; - const char *new_name; -} TypeNameElement; - -static TypeNameElement name_map[] = { - { "gchararray", "string" }, - { "GSList_gchararray_", "array of string" }, - { "GArray_guchar_", "byte array" }, - { "gboolean", "boolean" }, - { "guint64", "uint64" }, - { "gint", "int32" }, - { "guint", "uint32" }, - { "GArray_guint_", "array of uint32" }, - { "GPtrArray_GArray_guint__", "array of array of uint32" }, - { "GPtrArray_GArray_guchar__", "array of byte array" }, - { "GPtrArray_gchararray_", "array of string" }, - { "GHashTable_gchararray+gchararray_", "dict of (string::string)" }, - { "GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___", "array of (byte array, uint32, byte array)" }, - { "GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__", "array of (byte array, uint32, byte array, uint32)" }, - { NULL, NULL } -}; - -static void -write_one_setting (FILE *f, gboolean book, SettingNewFunc func) -{ - NMSetting *s; - GParamSpec **props, **iter; - guint num; - const char *row_fmt_str; - - s = func (); - - /* write out section header */ - (void) fprintf (f, - "<table>\n" - " <title>%s setting</title>\n" - " <tgroup cols=\"4\">\n" - " <thead>\n" - " <row>\n" - " <entry>Key Name</entry>\n" - " <entry>Value Type</entry>\n" - " <entry>Default Value</entry>\n" - " <entry>Value Description</entry>\n" - " </row>\n" - " </thead>\n" - " <tbody>\n", - nm_setting_get_name (s)); - - props = g_object_class_list_properties (G_OBJECT_GET_CLASS (G_OBJECT (s)), &num); - for (iter = props; iter && *iter; iter++) { - const char *key_name, *value_type, *value_desc; - char *default_value; - TypeNameElement *name_iter; - GValue value = G_VALUE_INIT; - char *flags_str = NULL; - - value_type = g_type_name (G_PARAM_SPEC_VALUE_TYPE (*iter)); - for (name_iter = &name_map[0]; name_iter && name_iter->gvalue_name; name_iter++) { - if (!strcmp (value_type, name_iter->gvalue_name)) { - value_type = name_iter->new_name; - break; - } - } - - key_name = g_param_spec_get_name (*iter); - value_desc = g_param_spec_get_blurb (*iter); - - g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (*iter)); - g_param_value_set_default (*iter, &value); - default_value = g_strdup_value_contents (&value); - if (default_value && !strcmp (default_value, "NULL")) { - g_free (default_value); - default_value = NULL; - } - - if (!strcmp (key_name, NM_SETTING_NAME)) { - g_free (default_value); - default_value = NULL; - g_object_get (G_OBJECT (s), NM_SETTING_NAME, &default_value, NULL); - } - - if (g_str_has_suffix (key_name, "-flags")) - flags_str = g_strdup_printf (" (see <xref linkend=\"secrets-flags\"/> for flag values)"); - - if (book) - row_fmt_str = - " <row>\n" - " <entry><screen>%s</screen></entry>\n" - " <entry><screen>%s</screen></entry>\n" - " <entry><screen>%s</screen></entry>\n" - " <entry>%s%s</entry>\n" - " </row>\n"; - else - row_fmt_str = - " <row>\n" - " <entry align=\"left\">%s</entry>\n" - " <entry align=\"left\">%s</entry>\n" - " <entry align=\"left\">%s</entry>\n" - " <entry>%s%s</entry>\n" - " </row>\n"; - - (void) fprintf (f, row_fmt_str, - key_name, - value_type, - default_value ? default_value : "", - value_desc, - flags_str ? flags_str : ""); - - g_free (flags_str); - g_free (default_value); - } - - (void) fprintf (f, - " </tbody>\n" - " </tgroup>\n" - "</table>\n"); - - g_object_unref (s); -} - -static void -writer_header_docbook_section (FILE *f) -{ - (void) fprintf (f, - "<?xml version=\"1.0\"?>\n" - "<!DOCTYPE section PUBLIC \"-//OASIS//DTD DocBook XML V4.3//EN\"\n" - " \"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd\" [\n" - "<!ENTITY %% local.common.attrib \"xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'\">" - "]>" - "<section>\n" - " <title>Configuration Settings</title>\n" - " <para>\n"); -} - -static void -writer_footer_docbook_section (FILE *f) -{ - (void) fprintf (f, - " </para>\n" - "</section>\n"); -} - -static void -writer_header_docbook_manpage (FILE *f) -{ - char time_str[64]; - time_t t; - - t = time (NULL); - strftime (time_str, sizeof (time_str), "%d %B %Y", localtime (&t)); - - (void) fprintf (f, - "<?xml version=\"1.0\"?>\n" - "<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.3//EN\"\n" - " \"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd\" [\n" - "<!ENTITY %% local.common.attrib \"xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'\">" - "]>" - "<refentry id=\"nm-settings\">\n" - " <refentryinfo>\n" - " <date>%s</date>\n" - " </refentryinfo>\n" - " <refmeta>\n" - " <refentrytitle>nm-settings</refentrytitle>\n" - " <manvolnum>5</manvolnum>\n" - " <refmiscinfo class=\"source\">NetworkManager</refmiscinfo>\n" - " <refmiscinfo class=\"manual\">Configuration</refmiscinfo>\n" - " <refmiscinfo class=\"version\">%s</refmiscinfo>\n" - " </refmeta>\n" - " <refnamediv>\n" - " <refname>nm-settings</refname>\n" - " <refpurpose>Description of settings and properties of NetworkManager connection profiles</refpurpose>\n" - " </refnamediv>\n" - " <refsect1>\n" - " <title>DESCRIPTION</title>\n" - " <para>\n" - " NetworkManager is based on a concept of connection profiles, sometimes referred to as\n" - " connections only. These connection profiles contain a network configuration. When\n" - " NetworkManager activates a connection profile on a network device the configuration will\n" - " be applied and an active network connection will be established. Users are free to create\n" - " as many connection profiles as they see fit. Thus they are flexible in having various network\n" - " configurations for different networking needs. The connection profiles are handled by\n" - " NetworkManager via <emphasis>settings service</emphasis> and are exported on D-Bus\n" - " (<emphasis>/org/freedesktop/NetworkManager/Settings/<num></emphasis> objects).\n" - " The conceptual objects can be described as follows:\n" - " <variablelist>\n" - " <varlistentry>\n" - " <term>Connection (profile)</term>\n" - " <listitem>\n" - " <para>\n" - " A specific, encapsulated, independent group of settings describing\n" - " all the configuration required to connect to a specific network.\n" - " It is referred to by a unique identifier called the UUID. A connection\n" - " is tied to a one specific device type, but not necessarily a specific\n" - " hardware device. It is composed of one or more <emphasis>Settings</emphasis>\n" - " objects.\n" - " </para>\n" - " </listitem>\n" - " </varlistentry>\n" - " </variablelist>\n" - " <variablelist>\n" - " <varlistentry>\n" - " <term>Setting</term>\n" - " <listitem>\n" - " <para>\n" - " A group of related key/value pairs describing a specific piece of a\n" - " <emphasis>Connection (profile)</emphasis>. Settings keys and allowed values are\n" - " described in the tables below. Keys are also reffered to as properties.\n" - " Developers can find the setting objects and their properties in the libnm-util\n" - " sources. Look for the <function>class_init</function> functions near the bottom of\n" - " each setting source file.\n" - " </para>\n" - " </listitem>\n" - " </varlistentry>\n" - " </variablelist>\n" - " <variablelist>\n" - " <para>\n" - " The settings and properties shown in tables below list all available connection\n" - " configuration options. However, note that not all settings are applicable to all\n" - " connection types. NetworkManager provides a command-line tool <emphasis>nmcli</emphasis>\n" - " that allows direct configuration of the settings and properties according to a connection\n" - " profile type. <emphasis>nmcli</emphasis> connection editor has also a built-in\n" - " <emphasis>describe</emphasis> command that can display description of particular settings\n" - " and properties of this page.\n" - " </para>\n" - " </variablelist>\n", - time_str, VERSION); -} - -static void -writer_footer_docbook_manpage (FILE *f) -{ - (void) fprintf (f, - " </para>\n" - " <refsect2 id=\"secrets-flags\">\n" - " <title>Secret flag types:</title>\n" - " <para>\n" - " Each secret property in a setting has an associated <emphasis>flags</emphasis> property\n" - " that describes how to handle that secret. The <emphasis>flags</emphasis> property is a bitfield\n" - " that contains zero or more of the following values logically OR-ed together.\n" - " </para>\n" - " <itemizedlist>\n" - " <listitem>\n" - " <para>0x0 (none) - the system is responsible for providing and storing this secret.</para>\n" - " </listitem>\n" - " <listitem>\n" - " <para>0x1 (agent-owned) - a user-session secret agent is responsible for providing and storing\n" - " this secret; when it is required, agents will be asked to provide it.</para>\n" - " </listitem>\n" - " <listitem>\n" - " <para>0x2 (not-saved) - this secret should not be saved but should be requested from the user\n" - " each time it is required. This flag should be used for One-Time-Pad secrets, PIN codes from hardware tokens,\n" - " or if the user simply does not want to save the secret.</para>\n" - " </listitem>\n" - " <listitem>\n" - " <para>0x4 (not-required) - in some situations it cannot be automatically determined that a secret\n" - " is required or not. This flag hints that the secret is not required and should not be requested from the user.</para>\n" - " </listitem>\n" - " </itemizedlist>\n" - " </refsect2>\n" - " </refsect1>\n" - " <refsect1>\n" - " <title>AUTHOR</title>\n" - " <para>\n" - " <author>\n" - " <firstname>NetworkManager developers</firstname>\n" - " </author>\n" - " </para>\n" - " </refsect1>\n" - " <refsect1>\n" - " <title>FILES</title>\n" - " <para>/etc/NetworkManager/system-connections</para>\n" - " <para>or distro plugin-specific location</para>\n" - " </refsect1>\n" - " <refsect1>\n" - " <title>SEE ALSO</title>\n" - " <para>https://live.gnome.org/NetworkManagerConfiguration</para>\n" - " <para>NetworkManager(8), nmcli(1), nmcli-examples(5), NetworkManager.conf(5)</para>\n" - " </refsect1>\n" - "</refentry>\n"); -} - -static void -usage (const char *str) -{ - fprintf (stderr, "Usage: %s <type> <output file> [<type> <output file>]\n" - "<type> := book|refentry\n", - str); - _exit (1); -} - -int -main (int argc, char *argv[]) -{ - GError *error = NULL; - FILE *f1 = NULL, *f2 = NULL; - SettingNewFunc *fptr; - const char *book_file = NULL, *refentry_file = NULL;; - - if (argc != 3 && argc != 5) - usage (argv[0]); - - if (strcmp (argv[1], "book") == 0) - book_file = argv[2]; - else if (strcmp (argv[1], "refentry") == 0) - refentry_file = argv[2]; - else - usage (argv[0]); - - if (argc == 5) { - if (strcmp (argv[3], "book") == 0 && !book_file) - book_file = argv[4]; - else if (strcmp (argv[3], "refentry") == 0 && !refentry_file) - refentry_file = argv[4]; - else - usage (argv[0]); - } - -#if !GLIB_CHECK_VERSION (2, 35, 0) - g_type_init (); -#endif - - if (!nm_utils_init (&error)) { - fprintf (stderr, "ERR: failed to initialize libnm-util: %s", error->message); - _exit (2); - } - - if (book_file) { - f1 = fopen (book_file, "w"); - if (!f1) { - fprintf (stderr, "ERR: could not create %s: %d\n", book_file, errno); - _exit (3); - } - } - if (refentry_file) { - f2 = fopen (refentry_file, "w"); - if (!f2) { - fprintf (stderr, "ERR: could not create %s: %d\n", refentry_file, errno); - _exit (3); - } - } - - /* Write out docbook 'book' xml - for html generation */ - if (f1) { - writer_header_docbook_section (f1); - for (fptr = funcs; fptr && *fptr; fptr++) - write_one_setting (f1, TRUE, *fptr); - writer_footer_docbook_section (f1); - } - - /* Write out docbook 'refentry' xml - for man page generation */ - if (f2) { - writer_header_docbook_manpage (f2); - for (fptr = funcs; fptr && *fptr; fptr++) - write_one_setting (f2, FALSE, *fptr); - writer_footer_docbook_manpage (f2); - } - - if (f1) - fclose (f1); - if (f2) - fclose (f2); - _exit (0); -} - |