route-manager: make NMRouteManager namespace aware
authorThomas Haller <thaller@redhat.com>
Tue, 8 Mar 2016 13:09:41 +0000 (14:09 +0100)
committerThomas Haller <thaller@redhat.com>
Tue, 15 Mar 2016 11:56:58 +0000 (12:56 +0100)
src/nm-route-manager.c
src/nm-route-manager.h

index 84811d5..3cf2411 100644 (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);
 
 /*********************************************************************************************/
@@ -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);
 }
index 9a08496..1f4b817 100644 (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 */