From 6698bf58bb53fb07838c52ca67293dd5352ec31c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 12 Sep 2017 15:27:59 +0200 Subject: [PATCH] core: track routes with source RTPROT_KERNEL (rtm_protocol) in NMIP4Config/NMIP6Config Let's not treat those routes special. I think this was originally done, because we relied on kernel to add the IPv4 device route, so we would ignore RTPROT_KERNEL routes and not delete them. We want to track them for various reasons: - for consistency, there is nothing special except that they might be added by kernel. - we expose the routes of NMIP4Config/NMIP6Config on D-Bus. That should include also routes such as device routes. Note, this commit changes that we now expose device routes on D-Bus too. --- src/nm-ip4-config.c | 4 +--- src/nm-ip6-config.c | 4 +--- src/platform/nm-platform.c | 18 +++++++++--------- src/platform/nm-platform.h | 4 ++-- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index 58127dafab..f3d87814ee 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -697,8 +697,6 @@ nm_ip4_config_capture (NMDedupMultiIndex *multi_idx, NMPlatform *platform, int i if (route->table_coerced) continue; - if (route->rt_source == NM_IP_CONFIG_SOURCE_RTPROT_KERNEL) - continue; _add_route (self, plobj, NULL, NULL); } @@ -838,7 +836,7 @@ nm_ip4_config_commit (const NMIP4Config *self, AF_INET, ifindex, routes, - nm_platform_lookup_predicate_routes_main_skip_rtprot_kernel, + nm_platform_lookup_predicate_routes_main, NULL)) success = FALSE; diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 97d25d549c..ce77394256 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -501,8 +501,6 @@ nm_ip6_config_capture (NMDedupMultiIndex *multi_idx, NMPlatform *platform, int i if (route->table_coerced) continue; - if (route->rt_source == NM_IP_CONFIG_SOURCE_RTPROT_KERNEL) - continue; _add_route (self, plobj, NULL, NULL); } @@ -553,7 +551,7 @@ nm_ip6_config_commit (const NMIP6Config *self, AF_INET6, ifindex, routes, - nm_platform_lookup_predicate_routes_main_skip_rtprot_kernel, + nm_platform_lookup_predicate_routes_main, NULL)) success = FALSE; diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 4cae03a944..47ac8bfd52 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -2898,6 +2898,15 @@ nm_platform_lookup (NMPlatform *self, lookup); } +gboolean +nm_platform_lookup_predicate_routes_main (const NMPObject *obj, + gpointer user_data) +{ + nm_assert (NM_IN_SET (NMP_OBJECT_GET_TYPE (obj), NMP_OBJECT_TYPE_IP4_ROUTE, + NMP_OBJECT_TYPE_IP6_ROUTE)); + return !obj->ip_route.table_coerced; +} + gboolean nm_platform_lookup_predicate_routes_main_skip_rtprot_kernel (const NMPObject *obj, gpointer user_data) @@ -2908,15 +2917,6 @@ nm_platform_lookup_predicate_routes_main_skip_rtprot_kernel (const NMPObject *ob && obj->ip_route.rt_source != NM_IP_CONFIG_SOURCE_RTPROT_KERNEL; } -gboolean -nm_platform_lookup_predicate_routes_skip_rtprot_kernel (const NMPObject *obj, - gpointer user_data) -{ - nm_assert (NM_IN_SET (NMP_OBJECT_GET_TYPE (obj), NMP_OBJECT_TYPE_IP4_ROUTE, - NMP_OBJECT_TYPE_IP6_ROUTE)); - return obj->ip_route.rt_source != NM_IP_CONFIG_SOURCE_RTPROT_KERNEL; -} - /** * nm_platform_lookup_clone: * @self: diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 8075a08b86..917f623d01 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -957,10 +957,10 @@ struct _NMPLookup; const struct _NMDedupMultiHeadEntry *nm_platform_lookup (NMPlatform *platform, const struct _NMPLookup *lookup); +gboolean nm_platform_lookup_predicate_routes_main (const NMPObject *obj, + gpointer user_data); gboolean nm_platform_lookup_predicate_routes_main_skip_rtprot_kernel (const NMPObject *obj, gpointer user_data); -gboolean nm_platform_lookup_predicate_routes_skip_rtprot_kernel (const NMPObject *obj, - gpointer user_data); GPtrArray *nm_platform_lookup_clone (NMPlatform *platform, const struct _NMPLookup *lookup,