diff options
| author | Michael Biebl <biebl@debian.org> | 2023-02-23 17:11:22 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2023-02-23 17:11:22 +0100 |
| commit | b22a7b55d0bc5a7999dccaeacdde745f5ace9d66 (patch) | |
| tree | 597d2716cfa4b904c98717b874371e0e7b5e0c71 /src/libnm-platform | |
| parent | 1372848511cb896b80b51ed1a3e9606bd9816631 (diff) | |
New upstream version 1.42.2 upstream/1.42.2
Diffstat (limited to 'src/libnm-platform')
| -rw-r--r-- | src/libnm-platform/nmp-global-tracker.c | 45 | ||||
| -rw-r--r-- | src/libnm-platform/nmp-global-tracker.h | 6 |
2 files changed, 38 insertions, 13 deletions
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, |