diff options
Diffstat (limited to 'src/platform')
-rw-r--r-- | src/platform/nmp-rules-manager.c | 10 | ||||
-rw-r--r-- | src/platform/nmp-rules-manager.h | 3 | ||||
-rw-r--r-- | src/platform/tests/test-route.c | 8 |
3 files changed, 14 insertions, 7 deletions
diff --git a/src/platform/nmp-rules-manager.c b/src/platform/nmp-rules-manager.c index ae19b33dfc..9e3435507b 100644 --- a/src/platform/nmp-rules-manager.c +++ b/src/platform/nmp-rules-manager.c @@ -471,7 +471,8 @@ nmp_rules_manager_untrack_all (NMPRulesManager *self, } void -nmp_rules_manager_sync (NMPRulesManager *self) +nmp_rules_manager_sync (NMPRulesManager *self, + gboolean keep_deleted_rules) { const NMDedupMultiHeadEntry *pl_head_entry; NMDedupMultiIter pl_iter; @@ -486,7 +487,7 @@ nmp_rules_manager_sync (NMPRulesManager *self) if (!self->by_data) return; - _LOGD ("sync"); + _LOGD ("sync%s", keep_deleted_rules ? " (don't remove any rules)" : ""); pl_head_entry = nm_platform_lookup_obj_type (self->platform, NMP_OBJECT_TYPE_ROUTING_RULE); if (pl_head_entry) { @@ -508,6 +509,11 @@ nmp_rules_manager_sync (NMPRulesManager *self) obj_data->added_by_us = FALSE; } + if (keep_deleted_rules) { + _LOGD ("forget/leak rule added by us: %s", nmp_object_to_string (plobj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + continue; + } + if (!rules_to_delete) rules_to_delete = g_ptr_array_new_with_free_func ((GDestroyNotify) nmp_object_unref); diff --git a/src/platform/nmp-rules-manager.h b/src/platform/nmp-rules-manager.h index 491df31d4a..a1e5543548 100644 --- a/src/platform/nmp-rules-manager.h +++ b/src/platform/nmp-rules-manager.h @@ -54,7 +54,8 @@ void nmp_rules_manager_untrack_all (NMPRulesManager *self, gconstpointer user_tag, gboolean all /* or only dirty */); -void nmp_rules_manager_sync (NMPRulesManager *self); +void nmp_rules_manager_sync (NMPRulesManager *self, + gboolean keep_deleted_rules); /*****************************************************************************/ diff --git a/src/platform/tests/test-route.c b/src/platform/tests/test-route.c index 60bd4e0170..ae3367779c 100644 --- a/src/platform/tests/test-route.c +++ b/src/platform/tests/test-route.c @@ -1546,12 +1546,12 @@ again: USER_TAG_2); } if (nmtst_get_rand_int () % objs_sync->len == 0) { - nmp_rules_manager_sync (rules_manager); + nmp_rules_manager_sync (rules_manager, FALSE); g_assert_cmpint (nmtstp_platform_routing_rules_get_count (platform, AF_UNSPEC), ==, i + 1); } } - nmp_rules_manager_sync (rules_manager); + nmp_rules_manager_sync (rules_manager, FALSE); g_assert_cmpint (nmtstp_platform_routing_rules_get_count (platform, AF_UNSPEC), ==, objs_sync->len); for (i = 0; i < objs_sync->len; i++) { @@ -1578,12 +1578,12 @@ again: break; } if (nmtst_get_rand_int () % objs_sync->len == 0) { - nmp_rules_manager_sync (rules_manager); + nmp_rules_manager_sync (rules_manager, FALSE); g_assert_cmpint (nmtstp_platform_routing_rules_get_count (platform, AF_UNSPEC), ==, objs_sync->len - i - 1); } } - nmp_rules_manager_sync (rules_manager); + nmp_rules_manager_sync (rules_manager, FALSE); } else { for (i = 0; i < objs->len;) { |