From b22a7b55d0bc5a7999dccaeacdde745f5ace9d66 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Thu, 23 Feb 2023 17:11:22 +0100 Subject: New upstream version 1.42.2 --- src/libnm-platform/nmp-global-tracker.c | 45 +++++++++++++++++++++++---------- src/libnm-platform/nmp-global-tracker.h | 6 +++++ 2 files changed, 38 insertions(+), 13 deletions(-) (limited to 'src/libnm-platform') diff --git a/src/libnm-platform/nmp-global-tracker.c b/src/libnm-platform/nmp-global-tracker.c index 09f1e217..122ba0ea 100644 --- a/src/libnm-platform/nmp-global-tracker.c +++ b/src/libnm-platform/nmp-global-tracker.c @@ -1155,11 +1155,12 @@ nmp_global_tracker_track_rule_default(NMPGlobalTracker *self, /* track the default rules. See also `man ip-rule`. */ if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET)) { + nmp_global_tracker_track_local_rule(self, addr_family, track_priority, user_tag, NULL); nmp_global_tracker_track_rule(self, &((NMPlatformRoutingRule){ .addr_family = AF_INET, - .priority = 0, - .table = RT_TABLE_LOCAL, + .priority = 32766, + .table = RT_TABLE_MAIN, .action = FR_ACT_TO_TBL, .protocol = RTPROT_KERNEL, }), @@ -1169,19 +1170,22 @@ nmp_global_tracker_track_rule_default(NMPGlobalTracker *self, nmp_global_tracker_track_rule(self, &((NMPlatformRoutingRule){ .addr_family = AF_INET, - .priority = 32766, - .table = RT_TABLE_MAIN, + .priority = 32767, + .table = RT_TABLE_DEFAULT, .action = FR_ACT_TO_TBL, .protocol = RTPROT_KERNEL, }), track_priority, user_tag, NULL); + } + if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET6)) { + nmp_global_tracker_track_local_rule(self, addr_family, track_priority, user_tag, NULL); nmp_global_tracker_track_rule(self, &((NMPlatformRoutingRule){ - .addr_family = AF_INET, - .priority = 32767, - .table = RT_TABLE_DEFAULT, + .addr_family = AF_INET6, + .priority = 32766, + .table = RT_TABLE_MAIN, .action = FR_ACT_TO_TBL, .protocol = RTPROT_KERNEL, }), @@ -1189,10 +1193,23 @@ nmp_global_tracker_track_rule_default(NMPGlobalTracker *self, user_tag, NULL); } - if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET6)) { +} + +void +nmp_global_tracker_track_local_rule(NMPGlobalTracker *self, + int addr_family, + gint32 track_priority, + gconstpointer user_tag, + gconstpointer user_tag_untrack) +{ + g_return_if_fail(NMP_IS_GLOBAL_TRACKER(self)); + + nm_assert(NM_IN_SET(addr_family, AF_UNSPEC, AF_INET, AF_INET6)); + + if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET)) { nmp_global_tracker_track_rule(self, &((NMPlatformRoutingRule){ - .addr_family = AF_INET6, + .addr_family = AF_INET, .priority = 0, .table = RT_TABLE_LOCAL, .action = FR_ACT_TO_TBL, @@ -1200,18 +1217,20 @@ nmp_global_tracker_track_rule_default(NMPGlobalTracker *self, }), track_priority, user_tag, - NULL); + user_tag_untrack); + } + if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET6)) { nmp_global_tracker_track_rule(self, &((NMPlatformRoutingRule){ .addr_family = AF_INET6, - .priority = 32766, - .table = RT_TABLE_MAIN, + .priority = 0, + .table = RT_TABLE_LOCAL, .action = FR_ACT_TO_TBL, .protocol = RTPROT_KERNEL, }), track_priority, user_tag, - NULL); + user_tag_untrack); } } diff --git a/src/libnm-platform/nmp-global-tracker.h b/src/libnm-platform/nmp-global-tracker.h index 08a4d85f..c6d7bc11 100644 --- a/src/libnm-platform/nmp-global-tracker.h +++ b/src/libnm-platform/nmp-global-tracker.h @@ -46,6 +46,12 @@ void nmp_global_tracker_track_rule_default(NMPGlobalTracker *self, gint32 track_priority, gconstpointer user_tag); +void nmp_global_tracker_track_local_rule(NMPGlobalTracker *self, + int addr_family, + gint32 track_priority, + gconstpointer user_tag, + gconstpointer user_tag_untrack); + void nmp_global_tracker_track_rule_from_platform(NMPGlobalTracker *self, NMPlatform *platform, int addr_family, -- cgit 1.3.0-6-gf8a5