libnm-util: clean up setting registration

Make setting type registration less icky; instead of having the
connection register all the settings, have the settings themselves
register that information at library load time.  Putting this sort
of thing in G_DEFINE_TYPE_WITH_CODE is apparently more standard
than the home-rolled stuff we had before.  Also document the
priority stuff so when adding new settings, people know what
priority to use.

(cleanups by jklimes)
This commit is contained in:
Dan Williams 2012-10-22 12:36:09 -05:00
parent 1277f9986c
commit 38e3819b4e
23 changed files with 266 additions and 237 deletions

View file

@ -74,4 +74,13 @@ p##_get_type (void) \
}
#endif
#if !GLIB_CHECK_VERSION(2,34,0)
static inline void
g_type_ensure (GType type)
{
if (G_UNLIKELY (type == (GType)-1))
g_error ("can't happen");
}
#endif
#endif /* NM_GLIB_COMPAT_H */

View file

@ -30,6 +30,7 @@
#include "nm-utils.h"
#include "nm-utils-private.h"
#include "nm-dbus-glib-types.h"
#include "nm-setting-private.h"
#include "nm-setting-8021x.h"
#include "nm-setting-bluetooth.h"
@ -116,203 +117,116 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
/*************************************************************/
static GHashTable *registered_settings = NULL;
#define DEFAULT_MAP_SIZE 20
static void __attribute__((constructor))
_ensure_registered (void)
{
g_type_init ();
_nm_utils_register_value_transformations ();
if (G_UNLIKELY (registered_settings == NULL))
registered_settings = g_hash_table_new (g_str_hash, g_str_equal);
}
static struct SettingInfo {
const char *name;
typedef struct {
GType type;
guint32 priority;
gboolean base_type;
GQuark error_quark;
} default_map[DEFAULT_MAP_SIZE] = { { NULL } };
} SettingInfo;
static void
setting_register (const char *name, GType type)
/*
* _nm_register_setting:
* @name: the name of the #NMSetting object to register
* @type: the #GType of the #NMSetting
* @priority: the sort priority of the setting, see below
* @error_quark: the setting's error quark
*
* INTERNAL ONLY: registers a setting's internal properties, like its priority
* and its error quark type, with libnm-util.
*
* A setting's priority should roughly follow the OSI layer model, but it also
* controls which settings get asked for secrets first. Thus settings which
* relate to things that must be working first, like hardware, should get a
* higher priority than things which layer on top of the hardware. For example,
* the GSM/CDMA settings should provide secrets before the PPP setting does,
* because a PIN is required to unlock the device before PPP can even start.
* Even settings without secrets should be assigned the right priority.
*
* 0: reserved for the Connection setting
*
* 1: hardware-related settings like Ethernet, WiFi, Infiniband, Bridge, etc.
* These priority 1 settings are also "base types", which means that at least
* one of them is required for the connection to be valid, and their name is
* valid in the 'type' property of the Connection setting.
*
* 2: hardware-related auxiliary settings that require a base setting to be
* successful first, like WiFi security, 802.1x, etc.
*
* 3: hardware-independent settings that are required before IP connectivity
* can be established, like PPP, PPPoE, etc.
*
* 4: IP-level stuff
*/
void
_nm_register_setting (const char *name,
const GType type,
const guint32 priority,
const GQuark error_quark)
{
SettingInfo *info;
g_return_if_fail (name != NULL);
g_return_if_fail (G_TYPE_IS_INSTANTIATABLE (type));
g_return_if_fail (type != G_TYPE_INVALID);
g_return_if_fail (type != G_TYPE_NONE);
g_return_if_fail (error_quark != 0);
g_return_if_fail (priority <= 4);
if (G_UNLIKELY (!registered_settings)) {
registered_settings = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify) g_free,
(GDestroyNotify) g_free);
}
_ensure_registered ();
if (g_hash_table_lookup (registered_settings, name))
g_warning ("Already have a creator function for '%s', overriding", name);
g_hash_table_insert (registered_settings, g_strdup (name), g_strdup (g_type_name (type)));
}
#if 0
static void
setting_unregister (const char *name)
{
if (registered_settings)
g_hash_table_remove (registered_settings, name);
}
#endif
static void
register_one_setting (const char *name,
GType type,
GQuark error_quark,
guint32 priority,
gboolean base_type)
{
static guint32 i = 0;
g_return_if_fail (i < DEFAULT_MAP_SIZE);
g_return_if_fail (default_map[i].name == NULL);
default_map[i].name = name;
default_map[i].type = type;
default_map[i].error_quark = error_quark;
default_map[i].priority = priority;
default_map[i].base_type = base_type;
i++;
setting_register (name, type);
}
static void
register_default_settings (void)
{
_nm_utils_register_value_transformations ();
if (G_LIKELY (default_map[0].name))
if (G_LIKELY (g_hash_table_lookup (registered_settings, name)))
return;
register_one_setting (NM_SETTING_CONNECTION_SETTING_NAME,
NM_TYPE_SETTING_CONNECTION,
NM_SETTING_CONNECTION_ERROR,
0, FALSE);
if (priority == 0)
g_assert_cmpstr (name, ==, NM_SETTING_CONNECTION_SETTING_NAME);
register_one_setting (NM_SETTING_WIRED_SETTING_NAME,
NM_TYPE_SETTING_WIRED,
NM_SETTING_WIRED_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_WIRELESS_SETTING_NAME,
NM_TYPE_SETTING_WIRELESS,
NM_SETTING_WIRELESS_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_OLPC_MESH_SETTING_NAME,
NM_TYPE_SETTING_OLPC_MESH,
NM_SETTING_OLPC_MESH_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_GSM_SETTING_NAME,
NM_TYPE_SETTING_GSM,
NM_SETTING_GSM_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_CDMA_SETTING_NAME,
NM_TYPE_SETTING_CDMA,
NM_SETTING_CDMA_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_TYPE_SETTING_BLUETOOTH,
NM_SETTING_BLUETOOTH_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_WIMAX_SETTING_NAME,
NM_TYPE_SETTING_WIMAX,
NM_SETTING_WIMAX_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_BOND_SETTING_NAME,
NM_TYPE_SETTING_BOND,
NM_SETTING_BOND_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_INFINIBAND_SETTING_NAME,
NM_TYPE_SETTING_INFINIBAND,
NM_SETTING_INFINIBAND_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_VLAN_SETTING_NAME,
NM_TYPE_SETTING_VLAN,
NM_SETTING_VLAN_ERROR,
1, TRUE);
register_one_setting (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
NM_TYPE_SETTING_WIRELESS_SECURITY,
NM_SETTING_WIRELESS_SECURITY_ERROR,
2, FALSE);
register_one_setting (NM_SETTING_SERIAL_SETTING_NAME,
NM_TYPE_SETTING_SERIAL,
NM_SETTING_SERIAL_ERROR,
2, FALSE);
register_one_setting (NM_SETTING_PPP_SETTING_NAME,
NM_TYPE_SETTING_PPP,
NM_SETTING_PPP_ERROR,
3, FALSE);
register_one_setting (NM_SETTING_PPPOE_SETTING_NAME,
NM_TYPE_SETTING_PPPOE,
NM_SETTING_PPPOE_ERROR,
3, TRUE);
register_one_setting (NM_SETTING_ADSL_SETTING_NAME,
NM_TYPE_SETTING_ADSL,
NM_SETTING_ADSL_ERROR,
3, TRUE);
register_one_setting (NM_SETTING_802_1X_SETTING_NAME,
NM_TYPE_SETTING_802_1X,
NM_SETTING_802_1X_ERROR,
3, FALSE);
register_one_setting (NM_SETTING_VPN_SETTING_NAME,
NM_TYPE_SETTING_VPN,
NM_SETTING_VPN_ERROR,
4, TRUE);
register_one_setting (NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_TYPE_SETTING_IP4_CONFIG,
NM_SETTING_IP4_CONFIG_ERROR,
6, FALSE);
register_one_setting (NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_TYPE_SETTING_IP6_CONFIG,
NM_SETTING_IP6_CONFIG_ERROR,
6, FALSE);
/* Be sure to update DEFAULT_MAP_SIZE if you add another setting!! */
info = g_slice_new0 (SettingInfo);
info->type = type;
info->priority = priority;
info->error_quark = error_quark;
g_hash_table_insert (registered_settings, (gpointer) name, info);
}
static guint32
get_priority_for_setting_type (GType type)
_get_setting_priority (NMSetting *setting)
{
int i;
GHashTableIter iter;
SettingInfo *info;
for (i = 0; default_map[i].name; i++) {
if (default_map[i].type == type)
return default_map[i].priority;
_ensure_registered ();
g_hash_table_iter_init (&iter, registered_settings);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &info)) {
if (G_OBJECT_TYPE (setting) == info->type)
return info->priority;
}
return G_MAXUINT32;
}
static gboolean
get_base_type_for_setting_type (GType type)
_is_setting_base_type (NMSetting *setting)
{
int i;
for (i = 0; default_map[i].name; i++) {
if (default_map[i].type == type)
return default_map[i].base_type;
}
return FALSE;
/* Historical oddity: PPPoE is a base-type even though it's not
* priority 1. It needs to be sorted *after* lower-level stuff like
* WiFi security or 802.1x for secrets, but it's still allowed as a
* base type.
*/
return _get_setting_priority (setting) == 1 || NM_IS_SETTING_PPPOE (setting);
}
/*************************************************************/
/**
* nm_connection_lookup_setting_type:
* @name: a setting name
@ -324,25 +238,18 @@ get_base_type_for_setting_type (GType type)
GType
nm_connection_lookup_setting_type (const char *name)
{
char *type_name;
GType type;
SettingInfo *info;
g_return_val_if_fail (name != NULL, G_TYPE_NONE);
if (!registered_settings)
register_default_settings ();
_ensure_registered ();
type_name = (char *) g_hash_table_lookup (registered_settings, name);
if (type_name) {
type = g_type_from_name (type_name);
if (!type)
g_warning ("Can not get type for '%s'.", type_name);
} else {
type = 0;
g_warning ("Unknown setting '%s'", name);
}
info = g_hash_table_lookup (registered_settings, name);
if (info)
return info->type;
return type;
g_warning ("Unknown setting '%s'", name);
return G_TYPE_INVALID;
}
/**
@ -357,13 +264,16 @@ nm_connection_lookup_setting_type (const char *name)
GType
nm_connection_lookup_setting_type_by_quark (GQuark error_quark)
{
int i;
SettingInfo *info;
GHashTableIter iter;
for (i = 0; default_map[i].name; i++) {
if (default_map[i].error_quark == error_quark)
return default_map[i].type;
_ensure_registered ();
g_hash_table_iter_init (&iter, registered_settings);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &info)) {
if (info->error_quark == error_quark)
return info->type;
}
return G_TYPE_INVALID;
}
@ -739,8 +649,8 @@ nm_connection_verify (NMConnection *connection, GError **error)
gpointer value;
GSList *all_settings = NULL;
gboolean success = TRUE;
NMSetting *base;
const char *ctype;
GType base_type;
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
@ -791,8 +701,8 @@ nm_connection_verify (NMConnection *connection, GError **error)
return FALSE;
}
base_type = nm_connection_lookup_setting_type (ctype);
if (base_type == 0) {
base = nm_connection_get_setting_by_name (connection, ctype);
if (!base) {
g_set_error_literal (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
@ -800,7 +710,7 @@ nm_connection_verify (NMConnection *connection, GError **error)
return FALSE;
}
if (!get_base_type_for_setting_type (base_type)) {
if (!_is_setting_base_type (base)) {
g_set_error (error,
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
@ -896,8 +806,8 @@ setting_priority_compare (gconstpointer a, gconstpointer b)
{
guint32 prio_a, prio_b;
prio_a = get_priority_for_setting_type (G_OBJECT_TYPE (NM_SETTING (a)));
prio_b = get_priority_for_setting_type (G_OBJECT_TYPE (NM_SETTING (b)));
prio_a = _get_setting_priority (NM_SETTING (a));
prio_b = _get_setting_priority (NM_SETTING (b));
if (prio_a < prio_b)
return -1;
@ -906,14 +816,6 @@ setting_priority_compare (gconstpointer a, gconstpointer b)
return 1;
}
static void
add_setting_to_list (gpointer key, gpointer data, gpointer user_data)
{
GSList **list = (GSList **) user_data;
*list = g_slist_insert_sorted (*list, NM_SETTING (data), setting_priority_compare);
}
/**
* nm_connection_need_secrets:
* @connection: the #NMConnection
@ -938,9 +840,11 @@ nm_connection_need_secrets (NMConnection *connection,
GPtrArray **hints)
{
NMConnectionPrivate *priv;
GHashTableIter hiter;
GSList *settings = NULL;
GSList *iter;
const char *name = NULL;
NMSetting *setting;
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
@ -950,15 +854,14 @@ nm_connection_need_secrets (NMConnection *connection,
priv = NM_CONNECTION_GET_PRIVATE (connection);
/* Get list of settings in priority order */
g_hash_table_foreach (priv->settings, add_setting_to_list, &settings);
g_hash_table_iter_init (&hiter, priv->settings);
while (g_hash_table_iter_next (&hiter, NULL, (gpointer) &setting))
settings = g_slist_insert_sorted (settings, setting, setting_priority_compare);
for (iter = settings; iter; iter = g_slist_next (iter)) {
NMSetting *setting = NM_SETTING (iter->data);
GPtrArray *secrets;
// FIXME: do something with requested secrets rather than asking for
// all of them. Maybe make secrets a hash table mapping
// settings name :: [list of secrets key names].
setting = NM_SETTING (iter->data);
secrets = nm_setting_need_secrets (setting);
if (secrets) {
if (hints)
@ -1234,14 +1137,7 @@ nm_connection_get_virtual_iface_name (NMConnection *connection)
NMConnection *
nm_connection_new (void)
{
GObject *object;
if (!registered_settings)
register_default_settings ();
object = g_object_new (NM_TYPE_CONNECTION, NULL);
return NM_CONNECTION (object);
return (NMConnection *) g_object_new (NM_TYPE_CONNECTION, NULL);
}
/**

View file

@ -81,7 +81,12 @@ nm_setting_802_1x_error_quark (void)
return quark;
}
G_DEFINE_TYPE (NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_802_1X_SETTING_NAME,
g_define_type_id,
2,
NM_SETTING_802_1X_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_802_1X)
#define NM_SETTING_802_1X_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_802_1X, NMSetting8021xPrivate))

View file

@ -55,7 +55,12 @@ nm_setting_adsl_error_quark (void)
return quark;
}
G_DEFINE_TYPE (NMSettingAdsl, nm_setting_adsl, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingAdsl, nm_setting_adsl, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_ADSL_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_ADSL_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_ADSL)
#define NM_SETTING_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_ADSL, NMSettingAdslPrivate))

View file

@ -32,6 +32,7 @@
#include "nm-setting-bluetooth.h"
#include "nm-setting-cdma.h"
#include "nm-setting-gsm.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-bluetooth
@ -62,7 +63,12 @@ nm_setting_bluetooth_error_quark (void)
}
G_DEFINE_TYPE (NMSettingBluetooth, nm_setting_bluetooth, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingBluetooth, nm_setting_bluetooth, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_BLUETOOTH_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_BLUETOOTH_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BLUETOOTH)
#define NM_SETTING_BLUETOOTH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothPrivate))

View file

@ -30,6 +30,7 @@
#include "nm-utils.h"
#include "nm-utils-private.h"
#include "nm-dbus-glib-types.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-bond
@ -58,7 +59,12 @@ nm_setting_bond_error_quark (void)
}
G_DEFINE_TYPE (NMSettingBond, nm_setting_bond, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingBond, nm_setting_bond, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_BOND_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_BOND_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BOND)
#define NM_SETTING_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BOND, NMSettingBondPrivate))

View file

@ -54,7 +54,12 @@ nm_setting_cdma_error_quark (void)
}
G_DEFINE_TYPE (NMSettingCdma, nm_setting_cdma, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingCdma, nm_setting_cdma, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_CDMA_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_CDMA_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_CDMA)
#define NM_SETTING_CDMA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_CDMA, NMSettingCdmaPrivate))

View file

@ -28,6 +28,7 @@
#include "nm-dbus-glib-types.h"
#include "nm-param-spec-specialized.h"
#include "nm-setting-connection.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-connection
@ -58,7 +59,12 @@ nm_setting_connection_error_quark (void)
}
G_DEFINE_TYPE (NMSettingConnection, nm_setting_connection, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingConnection, nm_setting_connection, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_CONNECTION_SETTING_NAME,
g_define_type_id,
0,
NM_SETTING_CONNECTION_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_CONNECTION)
#define NM_SETTING_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionPrivate))

View file

@ -56,7 +56,12 @@ nm_setting_gsm_error_quark (void)
}
G_DEFINE_TYPE (NMSettingGsm, nm_setting_gsm, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingGsm, nm_setting_gsm, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_GSM_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_GSM_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_GSM)
#define NM_SETTING_GSM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_GSM, NMSettingGsmPrivate))

View file

@ -25,6 +25,7 @@
#include "nm-setting-infiniband.h"
#include "nm-param-spec-specialized.h"
#include "nm-utils-private.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-infiniband
@ -52,7 +53,12 @@ nm_setting_infiniband_error_quark (void)
return quark;
}
G_DEFINE_TYPE (NMSettingInfiniband, nm_setting_infiniband, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingInfiniband, nm_setting_infiniband, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_INFINIBAND_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_INFINIBAND_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_INFINIBAND)
#define NM_SETTING_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandPrivate))

View file

@ -31,7 +31,7 @@
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
#include "nm-setting-private.h"
/**
@ -63,7 +63,12 @@ nm_setting_ip4_config_error_quark (void)
G_DEFINE_BOXED_TYPE (NMIP4Address, nm_ip4_address, nm_ip4_address_dup, nm_ip4_address_unref)
G_DEFINE_BOXED_TYPE (NMIP4Route, nm_ip4_route, nm_ip4_route_dup, nm_ip4_route_unref)
G_DEFINE_TYPE (NMSettingIP4Config, nm_setting_ip4_config, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingIP4Config, nm_setting_ip4_config, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_IP4_CONFIG_SETTING_NAME,
g_define_type_id,
4,
NM_SETTING_IP4_CONFIG_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP4_CONFIG)
#define NM_SETTING_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigPrivate))

View file

@ -30,6 +30,7 @@
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-ip6-config
@ -60,7 +61,12 @@ nm_setting_ip6_config_error_quark (void)
G_DEFINE_BOXED_TYPE (NMIP6Address, nm_ip6_address, nm_ip6_address_dup, nm_ip6_address_unref)
G_DEFINE_BOXED_TYPE (NMIP6Route, nm_ip6_route, nm_ip6_route_dup, nm_ip6_route_unref)
G_DEFINE_TYPE (NMSettingIP6Config, nm_setting_ip6_config, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingIP6Config, nm_setting_ip6_config, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_IP6_CONFIG_SETTING_NAME,
g_define_type_id,
4,
NM_SETTING_IP6_CONFIG_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP6_CONFIG)
#define NM_SETTING_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigPrivate))

View file

@ -35,6 +35,7 @@
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
#include "nm-utils-private.h"
#include "nm-setting-private.h"
GQuark
nm_setting_olpc_mesh_error_quark (void)
@ -48,7 +49,12 @@ nm_setting_olpc_mesh_error_quark (void)
static void nm_setting_olpc_mesh_init (NMSettingOlpcMesh *setting);
G_DEFINE_TYPE (NMSettingOlpcMesh, nm_setting_olpc_mesh, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingOlpcMesh, nm_setting_olpc_mesh, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_OLPC_MESH_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_OLPC_MESH_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OLPC_MESH)
#define NM_SETTING_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshPrivate))

View file

@ -24,6 +24,7 @@
*/
#include "nm-setting-ppp.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-ppp
@ -54,7 +55,12 @@ nm_setting_ppp_error_quark (void)
}
G_DEFINE_TYPE (NMSettingPPP, nm_setting_ppp, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingPPP, nm_setting_ppp, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_PPP_SETTING_NAME,
g_define_type_id,
3,
NM_SETTING_PPP_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PPP)
#define NM_SETTING_PPP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PPP, NMSettingPPPPrivate))

View file

@ -56,7 +56,12 @@ nm_setting_pppoe_error_quark (void)
}
G_DEFINE_TYPE (NMSettingPPPOE, nm_setting_pppoe, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingPPPOE, nm_setting_pppoe, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_PPPOE_SETTING_NAME,
g_define_type_id,
3,
NM_SETTING_PPPOE_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PPPOE)
#define NM_SETTING_PPPOE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PPPOE, NMSettingPPPOEPrivate))

View file

@ -21,11 +21,23 @@
#ifndef NM_SETTING_PRIVATE_H
#define NM_SETTING_PRIVATE_H
#include "nm-glib-compat.h"
#define NM_SETTING_SECRET_FLAGS_ALL \
(NM_SETTING_SECRET_FLAG_NONE | \
NM_SETTING_SECRET_FLAG_AGENT_OWNED | \
NM_SETTING_SECRET_FLAG_NOT_SAVED | \
NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
void _nm_register_setting (const char *name,
const GType type,
const guint32 priority,
const GQuark error_quark);
/* Ensure the setting's GType is registered at library load time */
#define NM_SETTING_REGISTER_TYPE(x) \
static void __attribute__((constructor)) register_setting (void) \
{ g_type_init (); g_type_ensure (x); }
#endif /* NM_SETTING_PRIVATE_H */

View file

@ -27,6 +27,7 @@
#include "nm-setting-serial.h"
#include "nm-glib-compat.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-serial
@ -57,7 +58,12 @@ nm_setting_serial_error_quark (void)
}
G_DEFINE_TYPE (NMSettingSerial, nm_setting_serial, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingSerial, nm_setting_serial, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_SERIAL_SETTING_NAME,
g_define_type_id,
2,
NM_SETTING_SERIAL_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_SERIAL)
#define NM_SETTING_SERIAL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_SERIAL, NMSettingSerialPrivate))

View file

@ -30,6 +30,7 @@
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
#include "nm-setting-connection.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-vlan
@ -57,7 +58,12 @@ nm_setting_vlan_error_quark (void)
return quark;
}
G_DEFINE_TYPE (NMSettingVlan, nm_setting_vlan, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingVlan, nm_setting_vlan, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_VLAN_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_VLAN_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VLAN)
#define NM_SETTING_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VLAN, NMSettingVlanPrivate))

View file

@ -64,7 +64,12 @@ nm_setting_vpn_error_quark (void)
}
G_DEFINE_TYPE (NMSettingVPN, nm_setting_vpn, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingVPN, nm_setting_vpn, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_VPN_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_VPN_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VPN)
#define NM_SETTING_VPN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VPN, NMSettingVPNPrivate))

View file

@ -26,6 +26,7 @@
#include "nm-setting-wimax.h"
#include "nm-param-spec-specialized.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-wimax
@ -54,7 +55,12 @@ nm_setting_wimax_error_quark (void)
}
G_DEFINE_TYPE (NMSettingWimax, nm_setting_wimax, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingWimax, nm_setting_wimax, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_WIMAX_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_WIMAX_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIMAX)
#define NM_SETTING_WIMAX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIMAX, NMSettingWimaxPrivate))

View file

@ -33,6 +33,7 @@
#include "nm-utils.h"
#include "nm-utils-private.h"
#include "nm-dbus-glib-types.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-wired
@ -61,7 +62,12 @@ nm_setting_wired_error_quark (void)
}
G_DEFINE_TYPE (NMSettingWired, nm_setting_wired, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingWired, nm_setting_wired, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_WIRED_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_WIRED_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRED)
#define NM_SETTING_WIRED_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRED, NMSettingWiredPrivate))

View file

@ -75,7 +75,12 @@ nm_setting_wireless_security_error_quark (void)
}
G_DEFINE_TYPE (NMSettingWirelessSecurity, nm_setting_wireless_security, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingWirelessSecurity, nm_setting_wireless_security, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
g_define_type_id,
2,
NM_SETTING_WIRELESS_SECURITY_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRELESS_SECURITY)
#define NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRELESS_SECURITY, NMSettingWirelessSecurityPrivate))

View file

@ -34,6 +34,7 @@
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
#include "nm-utils-private.h"
#include "nm-setting-private.h"
/**
* SECTION:nm-setting-wireless
@ -62,7 +63,12 @@ nm_setting_wireless_error_quark (void)
}
G_DEFINE_TYPE (NMSettingWireless, nm_setting_wireless, NM_TYPE_SETTING)
G_DEFINE_TYPE_WITH_CODE (NMSettingWireless, nm_setting_wireless, NM_TYPE_SETTING,
_nm_register_setting (NM_SETTING_WIRELESS_SETTING_NAME,
g_define_type_id,
1,
NM_SETTING_WIRELESS_ERROR))
NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRELESS)
#define NM_SETTING_WIRELESS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessPrivate))