diff options
author | Thomas Haller <thaller@redhat.com> | 2016-03-08 14:09:41 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-03-15 12:56:58 +0100 |
commit | 56121fec8314d0c02b932506d59422c973d8c55b (patch) | |
tree | b955b45cbe73c458f8539ad6cb15fd711f965b34 | |
parent | 80136bed7405c4d97b6d1024cce15a7127d0c084 (diff) | |
download | NetworkManager-56121fec8314d0c02b932506d59422c973d8c55b.tar.gz |
route-manager: make NMRouteManager namespace aware
-rw-r--r-- | src/nm-route-manager.c | 48 | ||||
-rw-r--r-- | src/nm-route-manager.h | 3 |
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 */ |