mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-27 04:40:09 +01:00
core: merge branch 'bg/restart-assume-rh1551958'
https://bugzilla.redhat.com/show_bug.cgi?id=1551958
This commit is contained in:
commit
cc1920d714
4 changed files with 22 additions and 69 deletions
|
|
@ -767,10 +767,6 @@ check_possible_match (NMConnection *orig,
|
|||
* @connections: a (optionally pre-sorted) list of connections from which to
|
||||
* find a matching connection to @original based on "inferrable" properties
|
||||
* @original: the #NMConnection to find a match for from @connections
|
||||
* @indicated: whether the match is already hinted/indicated. That is the
|
||||
* case when we found the connection in the state file from a previous run.
|
||||
* In this case, we perform a relexed check, as we have a good hint
|
||||
* that the connection actually matches.
|
||||
* @device_has_carrier: pass %TRUE if the device that generated @original has
|
||||
* a carrier, %FALSE if not
|
||||
* @match_filter_func: a function to check whether each connection from @connections
|
||||
|
|
@ -790,7 +786,6 @@ check_possible_match (NMConnection *orig,
|
|||
NMConnection *
|
||||
nm_utils_match_connection (NMConnection *const*connections,
|
||||
NMConnection *original,
|
||||
gboolean indicated,
|
||||
gboolean device_has_carrier,
|
||||
gint64 default_v4_metric,
|
||||
gint64 default_v6_metric,
|
||||
|
|
@ -811,24 +806,7 @@ nm_utils_match_connection (NMConnection *const*connections,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (indicated) {
|
||||
NMSettingConnection *s_orig, *s_cand;
|
||||
|
||||
s_orig = nm_connection_get_setting_connection (original);
|
||||
s_cand = nm_connection_get_setting_connection (candidate);
|
||||
|
||||
/* It is indicated that this connection matches. Assume we have
|
||||
* a match, but check for particular differences that let us
|
||||
* reject the candidate. */
|
||||
if (!nm_streq0 (nm_setting_connection_get_connection_type (s_orig),
|
||||
nm_setting_connection_get_connection_type (s_cand)))
|
||||
continue;
|
||||
if (!nm_streq0 (nm_setting_connection_get_slave_type (s_orig),
|
||||
nm_setting_connection_get_slave_type (s_cand)))
|
||||
continue;
|
||||
|
||||
/* this is good enough for a match */
|
||||
} else if (!nm_connection_diff (original, candidate, NM_SETTING_COMPARE_FLAG_INFERRABLE, &diffs)) {
|
||||
if (!nm_connection_diff (original, candidate, NM_SETTING_COMPARE_FLAG_INFERRABLE, &diffs)) {
|
||||
if (!best_match) {
|
||||
best_match = check_possible_match (original, candidate, diffs, device_has_carrier,
|
||||
default_v4_metric, default_v6_metric);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ typedef gboolean (NMUtilsMatchFilterFunc) (NMConnection *connection, gpointer us
|
|||
|
||||
NMConnection *nm_utils_match_connection (NMConnection *const*connections,
|
||||
NMConnection *original,
|
||||
gboolean indicated,
|
||||
gboolean device_has_carrier,
|
||||
gint64 default_v4_metric,
|
||||
gint64 default_v6_metric,
|
||||
|
|
|
|||
|
|
@ -2125,12 +2125,12 @@ get_existing_connection (NMManager *self,
|
|||
gboolean *out_generated)
|
||||
{
|
||||
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
NMConnection *connection = NULL;
|
||||
NMSettingsConnection *added = NULL;
|
||||
GError *error = NULL;
|
||||
NMDevice *master = NULL;
|
||||
int ifindex = nm_device_get_ifindex (device);
|
||||
NMSettingsConnection *matched;
|
||||
NMSettingsConnection *matched = NULL;
|
||||
NMSettingsConnection *connection_checked = NULL;
|
||||
gboolean assume_state_guess_assume = FALSE;
|
||||
const char *assume_state_connection_uuid = NULL;
|
||||
|
|
@ -2161,54 +2161,31 @@ get_existing_connection (NMManager *self,
|
|||
}
|
||||
}
|
||||
|
||||
/* The core of the API is nm_device_generate_connection() function and
|
||||
* update_connection() virtual method and the convenient connection_type
|
||||
* class attribute. Subclasses supporting the new API must have
|
||||
* update_connection() implemented, otherwise nm_device_generate_connection()
|
||||
* returns NULL.
|
||||
*/
|
||||
connection = nm_device_generate_connection (device, master, &maybe_later, &error);
|
||||
if (!connection) {
|
||||
if (!maybe_later)
|
||||
nm_device_assume_state_reset (device);
|
||||
_LOG2D (LOGD_DEVICE, device, "assume: cannot generate connection: %s",
|
||||
error->message);
|
||||
g_error_free (error);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nm_device_assume_state_get (device,
|
||||
&assume_state_guess_assume,
|
||||
&assume_state_connection_uuid);
|
||||
|
||||
/* Now we need to compare the generated connection to each configured
|
||||
* connection. The comparison function is the heart of the connection
|
||||
* assumption implementation and it must compare the connections very
|
||||
* carefully to sort out various corner cases. Also, the comparison is
|
||||
* not entirely symmetric.
|
||||
*
|
||||
* When no configured connection matches the generated connection, we keep
|
||||
* the generated connection instead.
|
||||
*/
|
||||
if ( assume_state_connection_uuid
|
||||
&& (connection_checked = nm_settings_get_connection_by_uuid (priv->settings, assume_state_connection_uuid))
|
||||
&& !active_connection_find_first (self, connection_checked, NULL,
|
||||
NM_ACTIVE_CONNECTION_STATE_DEACTIVATING)
|
||||
&& nm_device_check_connection_compatible (device, NM_CONNECTION (connection_checked))) {
|
||||
NMConnection *const connections[] = {
|
||||
NM_CONNECTION (connection_checked),
|
||||
NULL,
|
||||
};
|
||||
&& nm_device_check_connection_compatible (device, NM_CONNECTION (connection_checked)))
|
||||
matched = connection_checked;
|
||||
|
||||
matched = NM_SETTINGS_CONNECTION (nm_utils_match_connection (connections,
|
||||
connection,
|
||||
TRUE,
|
||||
nm_device_has_carrier (device),
|
||||
nm_device_get_route_metric (device, AF_INET),
|
||||
nm_device_get_route_metric (device, AF_INET6),
|
||||
NULL, NULL));
|
||||
} else
|
||||
matched = NULL;
|
||||
if (!matched) {
|
||||
/* The core of the API is nm_device_generate_connection() function and
|
||||
* update_connection() virtual method and the convenient connection_type
|
||||
* class attribute. Subclasses supporting the new API must have
|
||||
* update_connection() implemented, otherwise nm_device_generate_connection()
|
||||
* returns NULL.
|
||||
*/
|
||||
connection = nm_device_generate_connection (device, master, &maybe_later, &error);
|
||||
if (!connection) {
|
||||
if (!maybe_later)
|
||||
nm_device_assume_state_reset (device);
|
||||
_LOG2D (LOGD_DEVICE, device, "assume: cannot generate connection: %s", error->message);
|
||||
g_error_free (error);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!matched && assume_state_guess_assume) {
|
||||
gs_free NMSettingsConnection **connections = NULL;
|
||||
|
|
@ -2232,7 +2209,6 @@ get_existing_connection (NMManager *self,
|
|||
|
||||
matched = NM_SETTINGS_CONNECTION (nm_utils_match_connection ((NMConnection *const*) connections,
|
||||
connection,
|
||||
FALSE,
|
||||
nm_device_has_carrier (device),
|
||||
nm_device_get_route_metric (device, AF_INET),
|
||||
nm_device_get_route_metric (device, AF_INET6),
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@ _match_connection (GSList *connections,
|
|||
}
|
||||
list[i] = NULL;
|
||||
|
||||
return nm_utils_match_connection (list, original, FALSE, device_has_carrier, default_v4_metric, default_v6_metric, NULL, NULL);
|
||||
return nm_utils_match_connection (list, original, device_has_carrier, default_v4_metric, default_v6_metric, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue