summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-03-08 14:09:41 +0100
committerThomas Haller <thaller@redhat.com>2016-03-15 12:56:58 +0100
commit56121fec8314d0c02b932506d59422c973d8c55b (patch)
treeb955b45cbe73c458f8539ad6cb15fd711f965b34
parent80136bed7405c4d97b6d1024cce15a7127d0c084 (diff)
downloadNetworkManager-56121fec8314d0c02b932506d59422c973d8c55b.tar.gz
route-manager: make NMRouteManager namespace aware
-rw-r--r--src/nm-route-manager.c48
-rw-r--r--src/nm-route-manager.h3
2 files changed, 47 insertions, 4 deletions
diff --git a/src/nm-route-manager.c b/src/nm-route-manager.c
index 84811d5ac7..3cf241186b 100644
--- a/src/nm-route-manager.c
+++ b/src/nm-route-manager.c
@@ -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);
/*********************************************************************************************/
@@ -1139,11 +1143,30 @@ static const VTableIP vtable_v6 = {
/*********************************************************************************************/
static void
-nm_route_manager_init (NMRouteManager *self)
+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);
- priv->platform = g_object_ref (NM_PLATFORM_GET);
+ 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->ip4_routes.entries = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Route));
priv->ip6_routes.entries = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP6Route));
@@ -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);
}
diff --git a/src/nm-route-manager.h b/src/nm-route-manager.h
index 9a08496f1d..1f4b81744f 100644
--- a/src/nm-route-manager.h
+++ b/src/nm-route-manager.h
@@ -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 */