summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-01-30 19:52:53 +0100
committerThomas Haller <thaller@redhat.com>2015-02-03 13:01:53 +0100
commitb814c3122acbf9105effd54976cb675672264930 (patch)
treeae9c4e9a007a2549f285ef76936cd070768eaac8
parentac9dd4c8324c2f8c8d06cada245496c4c3511379 (diff)
downloadNetworkManager-b814c3122acbf9105effd54976cb675672264930.tar.gz
config: implement reloading of connectivity parameters
-rw-r--r--src/nm-config.c7
-rw-r--r--src/nm-config.h2
-rw-r--r--src/nm-manager.c25
3 files changed, 32 insertions, 2 deletions
diff --git a/src/nm-config.c b/src/nm-config.c
index 4362ea3cdf..5ecfc0bbfc 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -594,7 +594,12 @@ nm_config_reload (NMConfig *self)
/* reloading configuration means we have to carefully check every single option
* that we want to support and take specific actions. */
- /* FIXME: no actual reloading implemented yet */
+ if ( nm_config_data_get_connectivity_interval (old_data) != nm_config_data_get_connectivity_interval (new_data)
+ || g_strcmp0 (nm_config_data_get_connectivity_uri (old_data), nm_config_data_get_connectivity_uri (new_data))
+ || g_strcmp0 (nm_config_data_get_connectivity_response (old_data), nm_config_data_get_connectivity_response (new_data))) {
+ nm_log_dbg (LOGD_CORE, "config: reload: change '" NM_CONFIG_CHANGES_CONNECTIVITY "'");
+ g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONNECTIVITY, NULL);
+ }
if (g_hash_table_size (changes))
new_data = g_object_ref (new_data);
diff --git a/src/nm-config.h b/src/nm-config.h
index 68f1a4ed30..8e8bca3406 100644
--- a/src/nm-config.h
+++ b/src/nm-config.h
@@ -40,6 +40,8 @@ G_BEGIN_DECLS
/* Signals */
#define NM_CONFIG_SIGNAL_CONFIG_CHANGED "config-changed"
+#define NM_CONFIG_CHANGES_CONNECTIVITY "connectivity"
+
typedef struct NMConfigCmdLineOptions NMConfigCmdLineOptions;
struct _NMConfig {
diff --git a/src/nm-manager.c b/src/nm-manager.c
index e10c173543..ad76da7c4d 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -167,6 +167,7 @@ typedef struct {
GSList *devices;
NMState state;
+ NMConfig *config;
NMConnectivity *connectivity;
int ignore_link_added_cb;
@@ -463,6 +464,18 @@ active_connection_get_by_path (NMManager *manager, const char *path)
/************************************************************************/
+static void
+_config_changed_cb (NMConfig *config, NMConfigData *config_data, GHashTable *changes, NMConfigData *old_data, NMManager *self)
+{
+ g_object_set (NM_MANAGER_GET_PRIVATE (self)->connectivity,
+ NM_CONNECTIVITY_URI, nm_config_data_get_connectivity_uri (config_data),
+ NM_CONNECTIVITY_INTERVAL, nm_config_data_get_connectivity_interval (config_data),
+ NM_CONNECTIVITY_RESPONSE, nm_config_data_get_connectivity_response (config_data),
+ NULL);
+}
+
+/************************************************************************/
+
static NMDevice *
nm_manager_get_device_by_udi (NMManager *manager, const char *udi)
{
@@ -4751,7 +4764,13 @@ nm_manager_new (NMSettings *settings,
g_signal_connect (priv->policy, "notify::" NM_POLICY_ACTIVATING_IP6_DEVICE,
G_CALLBACK (policy_activating_device_changed), singleton);
- config_data = nm_config_get_data (nm_config_get ());
+ priv->config = g_object_ref (nm_config_get ());
+ g_signal_connect (G_OBJECT (priv->config),
+ NM_CONFIG_SIGNAL_CONFIG_CHANGED,
+ G_CALLBACK (_config_changed_cb),
+ singleton);
+
+ config_data = nm_config_get_data (priv->config);
priv->connectivity = nm_connectivity_new (nm_config_data_get_connectivity_uri (config_data),
nm_config_data_get_connectivity_interval (config_data),
nm_config_data_get_connectivity_response (config_data));
@@ -5075,6 +5094,10 @@ dispose (GObject *object)
g_clear_object (&priv->primary_connection);
g_clear_object (&priv->activating_connection);
+ if (priv->config) {
+ g_signal_handlers_disconnect_by_func (priv->config, _config_changed_cb, manager);
+ g_clear_object (&priv->config);
+ }
if (priv->connectivity) {
g_signal_handlers_disconnect_by_func (priv->connectivity, connectivity_changed, manager);
g_clear_object (&priv->connectivity);