route-manager: make NMRouteManager namespace aware

This commit is contained in:
Thomas Haller 2016-03-08 14:09:41 +01:00
parent 80136bed74
commit 56121fec83
2 changed files with 47 additions and 4 deletions

View file

@ -73,6 +73,10 @@ typedef struct {
G_DEFINE_TYPE (NMRouteManager, nm_route_manager, G_TYPE_OBJECT);
NM_GOBJECT_PROPERTIES_DEFINE_BASE (
PROP_PLATFORM,
);
NM_DEFINE_SINGLETON_GETTER (NMRouteManager, nm_route_manager_get, NM_TYPE_ROUTE_MANAGER);
/*********************************************************************************************/
@ -1138,13 +1142,32 @@ static const VTableIP vtable_v6 = {
/*********************************************************************************************/
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMRouteManager *self = NM_ROUTE_MANAGER (object);
NMRouteManagerPrivate *priv = NM_ROUTE_MANAGER_GET_PRIVATE (self);
switch (prop_id) {
case PROP_PLATFORM:
/* construct-only */
priv->platform = g_value_get_object (value) ? : NM_PLATFORM_GET;
if (!priv->platform)
g_return_if_reached ();
g_object_ref (priv->platform);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
nm_route_manager_init (NMRouteManager *self)
{
NMRouteManagerPrivate *priv = NM_ROUTE_MANAGER_GET_PRIVATE (self);
priv->platform = g_object_ref (NM_PLATFORM_GET);
priv->ip4_routes.entries = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Route));
priv->ip6_routes.entries = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP6Route));
priv->ip4_routes.effective_metrics = g_array_new (FALSE, FALSE, sizeof (gint64));
@ -1159,6 +1182,14 @@ nm_route_manager_init (NMRouteManager *self)
(GDestroyNotify) _ip4_device_routes_purge_entry_free);
}
NMRouteManager *
nm_route_manager_new (NMPlatform *platform)
{
return g_object_new (NM_TYPE_ROUTE_MANAGER,
NM_ROUTE_MANAGER_PLATFORM, platform,
NULL);
}
static void
dispose (GObject *object)
{
@ -1168,8 +1199,6 @@ dispose (GObject *object)
g_hash_table_remove_all (priv->ip4_device_routes.entries);
_ip4_device_routes_cancel (self);
g_clear_object (&priv->platform);
G_OBJECT_CLASS (nm_route_manager_parent_class)->dispose (object);
}
@ -1189,6 +1218,8 @@ finalize (GObject *object)
g_hash_table_unref (priv->ip4_device_routes.entries);
g_clear_object (&priv->platform);
G_OBJECT_CLASS (nm_route_manager_parent_class)->finalize (object);
}
@ -1200,6 +1231,15 @@ nm_route_manager_class_init (NMRouteManagerClass *klass)
g_type_class_add_private (klass, sizeof (NMRouteManagerPrivate));
/* virtual methods */
object_class->set_property = set_property;
object_class->dispose = dispose;
object_class->finalize = finalize;
obj_properties[PROP_PLATFORM] =
g_param_spec_object (NM_ROUTE_MANAGER_PLATFORM, "", "",
NM_TYPE_PLATFORM,
G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
}

View file

@ -31,6 +31,8 @@
#define NM_IS_ROUTE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ROUTE_MANAGER))
#define NM_ROUTE_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ROUTE_MANAGER, NMRouteManagerClass))
#define NM_ROUTE_MANAGER_PLATFORM "platform"
struct _NMRouteManager {
GObject parent;
};
@ -48,5 +50,6 @@ gboolean nm_route_manager_route_flush (NMRouteManager *self, int ifindex);
void nm_route_manager_ip4_route_register_device_route_purge_list (NMRouteManager *self, GArray *device_route_purge_list);
NMRouteManager *nm_route_manager_get (void);
NMRouteManager *nm_route_manager_new (NMPlatform *platform);
#endif /* NM_ROUTE_MANAGER_H */