mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-09 08:18:03 +02:00
settings: merge "connection-updated" and "connection-updated-by-user" signals
This is mostly interesting of NMPolicy, which no longer needs to subscribe to two almost identical signals (where the by-user signal was always invoked together with the plain "updated" signal).
This commit is contained in:
parent
65c55e2a78
commit
3164c026a2
4 changed files with 52 additions and 67 deletions
|
|
@ -80,8 +80,7 @@ static gboolean find_master (NMManager *self,
|
||||||
|
|
||||||
static void nm_manager_update_state (NMManager *manager);
|
static void nm_manager_update_state (NMManager *manager);
|
||||||
|
|
||||||
static void connection_changed (NMSettings *settings, NMConnection *connection,
|
static void connection_changed (NMManager *self, NMConnection *connection);
|
||||||
NMManager *manager);
|
|
||||||
|
|
||||||
#define TAG_ACTIVE_CONNETION_ADD_AND_ACTIVATE "act-con-add-and-activate"
|
#define TAG_ACTIVE_CONNETION_ADD_AND_ACTIVATE "act-con-add-and-activate"
|
||||||
|
|
||||||
|
|
@ -1148,7 +1147,7 @@ retry_connections_for_parent_device (NMManager *self, NMDevice *device)
|
||||||
ifname = nm_manager_get_connection_iface (self, candidate, &parent, &error);
|
ifname = nm_manager_get_connection_iface (self, candidate, &parent, &error);
|
||||||
if (ifname) {
|
if (ifname) {
|
||||||
if (!nm_platform_link_get_by_ifname (NM_PLATFORM_GET, ifname))
|
if (!nm_platform_link_get_by_ifname (NM_PLATFORM_GET, ifname))
|
||||||
connection_changed (priv->settings, candidate, self);
|
connection_changed (self, candidate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1157,34 +1156,40 @@ retry_connections_for_parent_device (NMManager *self, NMDevice *device)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
connection_changed (NMSettings *settings,
|
connection_changed (NMManager *self,
|
||||||
NMConnection *connection,
|
NMConnection *connection)
|
||||||
NMManager *manager)
|
|
||||||
{
|
{
|
||||||
NMDevice *device;
|
NMDevice *device;
|
||||||
|
|
||||||
if (!nm_connection_is_virtual (connection))
|
if (!nm_connection_is_virtual (connection))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
device = system_create_virtual_device (manager, connection);
|
device = system_create_virtual_device (self, connection);
|
||||||
if (!device)
|
if (!device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Maybe the device that was created was needed by some other
|
/* Maybe the device that was created was needed by some other
|
||||||
* connection's device (parent of a VLAN). Let the connections
|
* connection's device (parent of a VLAN). Let the connections
|
||||||
* can use the newly created device as a parent know. */
|
* can use the newly created device as a parent know. */
|
||||||
retry_connections_for_parent_device (manager, device);
|
retry_connections_for_parent_device (self, device);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
connection_removed (NMSettings *settings,
|
connection_added_cb (NMSettings *settings,
|
||||||
NMSettingsConnection *connection,
|
NMConnection *connection,
|
||||||
NMManager *manager)
|
NMManager *self)
|
||||||
{
|
{
|
||||||
/*
|
connection_changed (self, connection);
|
||||||
* Do not delete existing virtual devices to keep connectivity up.
|
}
|
||||||
* Virtual devices are reused when NetworkManager is restarted.
|
|
||||||
*/
|
static void
|
||||||
|
connection_updated_cb (NMSettings *settings,
|
||||||
|
NMConnection *connection,
|
||||||
|
gboolean by_user,
|
||||||
|
NMManager *self)
|
||||||
|
{
|
||||||
|
if (by_user)
|
||||||
|
connection_changed (self, connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -4403,7 +4408,7 @@ nm_manager_start (NMManager *self, GError **error)
|
||||||
_LOGD (LOGD_CORE, "creating virtual devices...");
|
_LOGD (LOGD_CORE, "creating virtual devices...");
|
||||||
connections = nm_settings_get_connections (priv->settings);
|
connections = nm_settings_get_connections (priv->settings);
|
||||||
for (iter = connections; iter; iter = iter->next)
|
for (iter = connections; iter; iter = iter->next)
|
||||||
connection_changed (priv->settings, NM_CONNECTION (iter->data), self);
|
connection_changed (self, NM_CONNECTION (iter->data));
|
||||||
g_slist_free (connections);
|
g_slist_free (connections);
|
||||||
|
|
||||||
priv->devices_inited = TRUE;
|
priv->devices_inited = TRUE;
|
||||||
|
|
@ -5080,11 +5085,14 @@ constructed (GObject *object)
|
||||||
g_signal_connect (priv->settings, "notify::" NM_SETTINGS_HOSTNAME,
|
g_signal_connect (priv->settings, "notify::" NM_SETTINGS_HOSTNAME,
|
||||||
G_CALLBACK (system_hostname_changed_cb), self);
|
G_CALLBACK (system_hostname_changed_cb), self);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
|
||||||
G_CALLBACK (connection_changed), self);
|
G_CALLBACK (connection_added_cb), self);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER,
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
|
||||||
G_CALLBACK (connection_changed), self);
|
G_CALLBACK (connection_updated_cb), self);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
|
/*
|
||||||
G_CALLBACK (connection_removed), self);
|
* Do not delete existing virtual devices to keep connectivity up.
|
||||||
|
* Virtual devices are reused when NetworkManager is restarted.
|
||||||
|
* Hence, don't react on NM_SETTINGS_SIGNAL_CONNECTION_REMOVED.
|
||||||
|
*/
|
||||||
|
|
||||||
priv->policy = nm_policy_new (self, priv->settings);
|
priv->policy = nm_policy_new (self, priv->settings);
|
||||||
g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP4_DEVICE,
|
g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP4_DEVICE,
|
||||||
|
|
@ -5394,8 +5402,8 @@ dispose (GObject *object)
|
||||||
g_signal_handlers_disconnect_by_func (priv->settings, settings_startup_complete_changed, manager);
|
g_signal_handlers_disconnect_by_func (priv->settings, settings_startup_complete_changed, manager);
|
||||||
g_signal_handlers_disconnect_by_func (priv->settings, system_unmanaged_devices_changed_cb, manager);
|
g_signal_handlers_disconnect_by_func (priv->settings, system_unmanaged_devices_changed_cb, manager);
|
||||||
g_signal_handlers_disconnect_by_func (priv->settings, system_hostname_changed_cb, manager);
|
g_signal_handlers_disconnect_by_func (priv->settings, system_hostname_changed_cb, manager);
|
||||||
g_signal_handlers_disconnect_by_func (priv->settings, connection_changed, manager);
|
g_signal_handlers_disconnect_by_func (priv->settings, connection_added_cb, manager);
|
||||||
g_signal_handlers_disconnect_by_func (priv->settings, connection_removed, manager);
|
g_signal_handlers_disconnect_by_func (priv->settings, connection_updated_cb, manager);
|
||||||
g_clear_object (&priv->settings);
|
g_clear_object (&priv->settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1664,39 +1664,34 @@ dns_config_changed (NMDnsManager *dns_manager, gpointer user_data)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
connection_updated (NMSettings *settings,
|
connection_updated (NMSettings *settings,
|
||||||
NMConnection *connection,
|
NMSettingsConnection *connection,
|
||||||
|
gboolean by_user,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
NMPolicyPrivate *priv = user_data;
|
NMPolicyPrivate *priv = user_data;
|
||||||
NMPolicy *self = priv->self;
|
NMPolicy *self = priv->self;
|
||||||
|
|
||||||
schedule_activate_all (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
connection_updated_by_user (NMSettings *settings,
|
|
||||||
NMSettingsConnection *connection,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
NMPolicyPrivate *priv = user_data;
|
|
||||||
const GSList *iter;
|
const GSList *iter;
|
||||||
NMDevice *device = NULL;
|
NMDevice *device = NULL;
|
||||||
|
|
||||||
/* find device with given connection */
|
if (by_user) {
|
||||||
for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
|
/* find device with given connection */
|
||||||
NMDevice *dev = NM_DEVICE (iter->data);
|
for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
|
||||||
|
NMDevice *dev = NM_DEVICE (iter->data);
|
||||||
|
|
||||||
if (nm_device_get_settings_connection (dev) == connection) {
|
if (nm_device_get_settings_connection (dev) == connection) {
|
||||||
device = dev;
|
device = dev;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (device)
|
||||||
|
nm_device_reapply_settings_immediately (device);
|
||||||
|
|
||||||
|
/* Reset auto retries back to default since connection was updated */
|
||||||
|
nm_settings_connection_reset_autoconnect_retries (connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device)
|
schedule_activate_all (self);
|
||||||
nm_device_reapply_settings_immediately (device);
|
|
||||||
|
|
||||||
/* Reset auto retries back to default since connection was updated */
|
|
||||||
nm_settings_connection_reset_autoconnect_retries (connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -1892,7 +1887,6 @@ constructed (GObject *object)
|
||||||
|
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED, (GCallback) connection_added, priv);
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED, (GCallback) connection_added, priv);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED, (GCallback) connection_updated, priv);
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED, (GCallback) connection_updated, priv);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER, (GCallback) connection_updated_by_user, priv);
|
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, (GCallback) connection_removed, priv);
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, (GCallback) connection_removed, priv);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, (GCallback) connection_visibility_changed, priv);
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, (GCallback) connection_visibility_changed, priv);
|
||||||
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, (GCallback) secret_agent_registered, priv);
|
g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, (GCallback) secret_agent_registered, priv);
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,6 @@ typedef struct {
|
||||||
enum {
|
enum {
|
||||||
CONNECTION_ADDED,
|
CONNECTION_ADDED,
|
||||||
CONNECTION_UPDATED,
|
CONNECTION_UPDATED,
|
||||||
CONNECTION_UPDATED_BY_USER,
|
|
||||||
CONNECTION_REMOVED,
|
CONNECTION_REMOVED,
|
||||||
CONNECTION_VISIBILITY_CHANGED,
|
CONNECTION_VISIBILITY_CHANGED,
|
||||||
AGENT_REGISTERED,
|
AGENT_REGISTERED,
|
||||||
|
|
@ -844,17 +843,11 @@ next:
|
||||||
static void
|
static void
|
||||||
connection_updated (NMSettingsConnection *connection, gboolean by_user, gpointer user_data)
|
connection_updated (NMSettingsConnection *connection, gboolean by_user, gpointer user_data)
|
||||||
{
|
{
|
||||||
if (by_user) {
|
|
||||||
g_signal_emit (NM_SETTINGS (user_data),
|
|
||||||
signals[CONNECTION_UPDATED_BY_USER],
|
|
||||||
0,
|
|
||||||
connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_signal_emit (NM_SETTINGS (user_data),
|
g_signal_emit (NM_SETTINGS (user_data),
|
||||||
signals[CONNECTION_UPDATED],
|
signals[CONNECTION_UPDATED],
|
||||||
0,
|
0,
|
||||||
connection);
|
connection,
|
||||||
|
by_user);
|
||||||
g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_UPDATED, connection);
|
g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_UPDATED, connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2447,17 +2440,8 @@ nm_settings_class_init (NMSettingsClass *class)
|
||||||
G_OBJECT_CLASS_TYPE (object_class),
|
G_OBJECT_CLASS_TYPE (object_class),
|
||||||
G_SIGNAL_RUN_FIRST,
|
G_SIGNAL_RUN_FIRST,
|
||||||
0, NULL, NULL,
|
0, NULL, NULL,
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
NULL,
|
||||||
G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
|
G_TYPE_NONE, 2, NM_TYPE_SETTINGS_CONNECTION, G_TYPE_BOOLEAN);
|
||||||
|
|
||||||
signals[CONNECTION_UPDATED_BY_USER] =
|
|
||||||
g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER,
|
|
||||||
G_OBJECT_CLASS_TYPE (object_class),
|
|
||||||
G_SIGNAL_RUN_FIRST,
|
|
||||||
0,
|
|
||||||
NULL, NULL,
|
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
|
|
||||||
|
|
||||||
signals[CONNECTION_REMOVED] =
|
signals[CONNECTION_REMOVED] =
|
||||||
g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
|
g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@
|
||||||
|
|
||||||
#define NM_SETTINGS_SIGNAL_CONNECTION_ADDED "connection-added"
|
#define NM_SETTINGS_SIGNAL_CONNECTION_ADDED "connection-added"
|
||||||
#define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED "connection-updated"
|
#define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED "connection-updated"
|
||||||
#define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER "connection-updated-by-user"
|
|
||||||
#define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed"
|
#define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed"
|
||||||
#define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed"
|
#define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed"
|
||||||
#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered"
|
#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue