core: separate active and applied connection

Clone the connection upon activation. This makes it safe for the user
to modify the original connection while it is activated.

This involves several changes:

- NMActiveConnection gets @settings_connection and @applied_connection.
  To support add-and-activate, we constructing a NMActiveConnection with
  no connection set. Previously, we would set the "connection" field to
  a temporary NMConnection. Now NMManager piggybacks this temporary
  connection as object-data (TAG_ACTIVE_CONNETION_ADD_AND_ACTIVATE).

- get rid of the functions nm_active_connection_get_connection_type()
  and nm_active_connection_get_connection_uuid(). From their names
  it is unclear whether this returns the settings or applied connection.
  The (few) callers should figure that out themselves.

- rename nm_active_connection_get_id() to
  nm_active_connection_get_settings_connection_id(). This function
  is only used internally for logging.

- dispatcher calls now get two connections as well. The
  applied-connection is used for the connection data, while
  the settings-connection is used for the connection path.

- needs special handling for properties that apply immediately
  when changed (nm_device_reapply_settings_immediately()).

Co-Authored-By: Thomas Haller <thaller@redhat.com>

https://bugzilla.gnome.org/show_bug.cgi?id=724041
This commit is contained in:
Lubomir Rintel
2015-07-14 16:53:24 +02:00
committed by Thomas Haller
parent c9b3617c35
commit 06da353242
36 changed files with 1330 additions and 847 deletions

View File

@@ -47,26 +47,28 @@ typedef struct {
GType nm_act_request_get_type (void);
NMActRequest *nm_act_request_new (NMConnection *connection,
NMActRequest *nm_act_request_new (NMSettingsConnection *settings_connection,
const char *specific_object,
NMAuthSubject *subject,
NMDevice *device);
NMConnection *nm_act_request_get_connection (NMActRequest *req);
NMSettingsConnection *nm_act_request_get_settings_connection (NMActRequest *req);
gboolean nm_act_request_get_shared (NMActRequest *req);
NMConnection *nm_act_request_get_applied_connection (NMActRequest *req);
void nm_act_request_set_shared (NMActRequest *req, gboolean shared);
gboolean nm_act_request_get_shared (NMActRequest *req);
void nm_act_request_add_share_rule (NMActRequest *req,
const char *table,
const char *rule);
void nm_act_request_set_shared (NMActRequest *req, gboolean shared);
void nm_act_request_add_share_rule (NMActRequest *req,
const char *table,
const char *rule);
/* Secrets handling */
typedef void (*NMActRequestSecretsFunc) (NMActRequest *req,
NMActRequestGetSecretsCallId call_id,
NMConnection *connection,
NMSettingsConnection *connection,
GError *error,
gpointer user_data);
@@ -78,6 +80,7 @@ NMActRequestGetSecretsCallId nm_act_request_get_secrets (NMActRequest *req,
gpointer callback_data);
void nm_act_request_cancel_secrets (NMActRequest *req, NMActRequestGetSecretsCallId call_id);
void nm_act_request_clear_secrets (NMActRequest *self);
#endif /* __NETWORKMANAGER_ACTIVATION_REQUEST_H__ */