diff options
author | Thomas Haller <thaller@redhat.com> | 2022-02-07 19:23:27 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2022-02-09 19:13:05 +0100 |
commit | 5489aa596b23890480bc64657c96e2997a762f06 (patch) | |
tree | 28b9bb5b66c1396f930df80d8708c8f3ab2da831 | |
parent | 81f6ba83776a89036983ec226932f5730fa52032 (diff) | |
download | NetworkManager-5489aa596b23890480bc64657c96e2997a762f06.tar.gz |
platform: return boolean changed value from nmp_route_manager_track()
-rw-r--r-- | src/libnm-platform/nmp-route-manager.c | 57 | ||||
-rw-r--r-- | src/libnm-platform/nmp-route-manager.h | 46 |
2 files changed, 61 insertions, 42 deletions
diff --git a/src/libnm-platform/nmp-route-manager.c b/src/libnm-platform/nmp-route-manager.c index 6828bb57f9..c5ca02600c 100644 --- a/src/libnm-platform/nmp-route-manager.c +++ b/src/libnm-platform/nmp-route-manager.c @@ -286,8 +286,10 @@ _track_data_lookup(GHashTable *by_data, const NMPObject *obj, gconstpointer user * because it enforces ownership of the now tracked rule. On the other hand, * a plain nmp_route_manager_untrack_rule() merely forgets about the tracking. * The purpose here is to set this to %NMP_ROUTE_MANAGER_EXTERN_WEAKLY_TRACKED_USER_TAG. + * + * Returns: %TRUE, if something changed. */ -void +gboolean nmp_route_manager_track(NMPRouteManager *self, NMPObjectType obj_type, gconstpointer obj, @@ -300,19 +302,22 @@ nmp_route_manager_track(NMPRouteManager *self, TrackData *track_data; TrackObjData *obj_data; TrackUserTagData *user_tag_data; - gboolean changed = FALSE; + gboolean changed = FALSE; + gboolean changed_untrack = FALSE; guint32 track_priority_val; gboolean track_priority_present; - g_return_if_fail(NMP_IS_ROUTE_MANAGER(self)); - g_return_if_fail(obj); - g_return_if_fail(user_tag); + g_return_val_if_fail(NMP_IS_ROUTE_MANAGER(self), FALSE); + g_return_val_if_fail(obj, FALSE); + g_return_val_if_fail(user_tag, FALSE); /* The route must not be tied to an interface. We can only handle here * blackhole/unreachable/prohibit route types. */ - g_return_if_fail(obj_type == NMP_OBJECT_TYPE_ROUTING_RULE - || (NM_IN_SET(obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE) - && ((const NMPlatformIPRoute *) obj)->ifindex == 0)); + g_return_val_if_fail( + obj_type == NMP_OBJECT_TYPE_ROUTING_RULE + || (NM_IN_SET(obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE) + && ((const NMPlatformIPRoute *) obj)->ifindex == 0), + FALSE); nm_assert(track_priority != G_MININT32); @@ -381,8 +386,10 @@ nmp_route_manager_track(NMPRouteManager *self, TrackData *track_data_untrack; track_data_untrack = _track_data_lookup(self->by_data, p_obj_stack, user_tag_untrack); - if (track_data_untrack) + if (track_data_untrack) { _track_data_untrack(self, track_data_untrack, FALSE, TRUE); + changed_untrack = TRUE; + } } else nm_assert_not_reached(); } @@ -399,6 +406,8 @@ nmp_route_manager_track(NMPRouteManager *self, NMP_OBJECT_GET_CLASS(track_data->obj)->obj_type_name, nmp_object_to_string(track_data->obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); } + + return changed || changed_untrack; } static void @@ -453,7 +462,7 @@ _track_data_untrack(NMPRouteManager *self, g_hash_table_remove(self->by_data, track_data); } -void +gboolean nmp_route_manager_untrack(NMPRouteManager *self, NMPObjectType obj_type, gconstpointer obj, @@ -462,22 +471,27 @@ nmp_route_manager_untrack(NMPRouteManager *self, NMPObject obj_stack; const NMPObject *p_obj_stack; TrackData *track_data; + gboolean changed = FALSE; - g_return_if_fail(NMP_IS_ROUTE_MANAGER(self)); + g_return_val_if_fail(NMP_IS_ROUTE_MANAGER(self), FALSE); nm_assert(NM_IN_SET(obj_type, NMP_OBJECT_TYPE_IP4_ROUTE, NMP_OBJECT_TYPE_IP6_ROUTE, NMP_OBJECT_TYPE_ROUTING_RULE)); - g_return_if_fail(obj); - g_return_if_fail(user_tag); + g_return_val_if_fail(obj, FALSE); + g_return_val_if_fail(user_tag, FALSE); p_obj_stack = nmp_object_stackinit(&obj_stack, obj_type, obj); nm_assert(nmp_object_is_visible(p_obj_stack)); track_data = _track_data_lookup(self->by_data, p_obj_stack, user_tag); - if (track_data) + if (track_data) { _track_data_untrack(self, track_data, TRUE, FALSE); + changed = TRUE; + } + + return changed; } void @@ -497,7 +511,7 @@ nmp_route_manager_set_dirty(NMPRouteManager *self, gconstpointer user_tag) track_data->dirty = TRUE; } -void +gboolean nmp_route_manager_untrack_all(NMPRouteManager *self, gconstpointer user_tag, gboolean all /* or only dirty */) @@ -505,23 +519,28 @@ nmp_route_manager_untrack_all(NMPRouteManager *self, TrackData *track_data; TrackData *track_data_safe; TrackUserTagData *user_tag_data; + gboolean changed = FALSE; - g_return_if_fail(NMP_IS_ROUTE_MANAGER(self)); - g_return_if_fail(user_tag); + g_return_val_if_fail(NMP_IS_ROUTE_MANAGER(self), FALSE); + g_return_val_if_fail(user_tag, FALSE); user_tag_data = g_hash_table_lookup(self->by_user_tag, &user_tag); if (!user_tag_data) - return; + return FALSE; c_list_for_each_entry_safe (track_data, track_data_safe, &user_tag_data->user_tag_lst_head, user_tag_lst) { - if (all || track_data->dirty) + if (all || track_data->dirty) { _track_data_untrack(self, track_data, FALSE, FALSE); + changed = TRUE; + } } if (c_list_is_empty(&user_tag_data->user_tag_lst_head)) g_hash_table_remove(self->by_user_tag, user_tag_data); + + return changed; } /*****************************************************************************/ diff --git a/src/libnm-platform/nmp-route-manager.h b/src/libnm-platform/nmp-route-manager.h index 23e4c2d341..a61a68ca98 100644 --- a/src/libnm-platform/nmp-route-manager.h +++ b/src/libnm-platform/nmp-route-manager.h @@ -19,26 +19,26 @@ void nmp_route_manager_unref(NMPRouteManager *self); #define nm_auto_unref_route_manager nm_auto(_nmp_route_manager_unref) NM_AUTO_DEFINE_FCN0(NMPRouteManager *, _nmp_route_manager_unref, nmp_route_manager_unref); -void nmp_route_manager_track(NMPRouteManager *self, - NMPObjectType obj_type, - gconstpointer obj, - gint32 track_priority, - gconstpointer user_tag, - gconstpointer user_tag_untrack); - -static inline void +gboolean nmp_route_manager_track(NMPRouteManager *self, + NMPObjectType obj_type, + gconstpointer obj, + gint32 track_priority, + gconstpointer user_tag, + gconstpointer user_tag_untrack); + +static inline gboolean nmp_route_manager_track_rule(NMPRouteManager *self, const NMPlatformRoutingRule *routing_rule, gint32 track_priority, gconstpointer user_tag, gconstpointer user_tag_untrack) { - nmp_route_manager_track(self, - NMP_OBJECT_TYPE_ROUTING_RULE, - routing_rule, - track_priority, - user_tag, - user_tag_untrack); + return nmp_route_manager_track(self, + NMP_OBJECT_TYPE_ROUTING_RULE, + routing_rule, + track_priority, + user_tag, + user_tag_untrack); } void nmp_route_manager_track_rule_default(NMPRouteManager *self, @@ -52,24 +52,24 @@ void nmp_route_manager_track_rule_from_platform(NMPRouteManager *self, gint32 tracking_priority, gconstpointer user_tag); -void nmp_route_manager_untrack(NMPRouteManager *self, - NMPObjectType obj_type, - gconstpointer obj, - gconstpointer user_tag); +gboolean nmp_route_manager_untrack(NMPRouteManager *self, + NMPObjectType obj_type, + gconstpointer obj, + gconstpointer user_tag); -static inline void +static inline gboolean nmp_route_manager_untrack_rule(NMPRouteManager *self, const NMPlatformRoutingRule *routing_rule, gconstpointer user_tag) { - nmp_route_manager_untrack(self, NMP_OBJECT_TYPE_ROUTING_RULE, routing_rule, user_tag); + return nmp_route_manager_untrack(self, NMP_OBJECT_TYPE_ROUTING_RULE, routing_rule, user_tag); } void nmp_route_manager_set_dirty(NMPRouteManager *self, gconstpointer user_tag); -void nmp_route_manager_untrack_all(NMPRouteManager *self, - gconstpointer user_tag, - gboolean all /* or only dirty */); +gboolean nmp_route_manager_untrack_all(NMPRouteManager *self, + gconstpointer user_tag, + gboolean all /* or only dirty */); void nmp_route_manager_sync(NMPRouteManager *self, NMPObjectType obj_type, gboolean keep_deleted); |