From 682d2c842adaa7e27bc20bf028c81ca5a6842c23 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sat, 30 Oct 2021 11:56:18 +0200 Subject: [PATCH] core: drop redundant "gateway" variable for NMIPConfig The "gateway" variable was redundant to best_default_route. It was somewhat convenient to have, because the best_default_route pointer might change, but the next hop might still be the same. So it was easy to track whether it changes. But it's also redundant information. By relying on best_default_route alone we have all the information we need. --- src/core/nm-ip-config.c | 38 ++++++++++++++++++-------------------- src/core/nm-ip-config.h | 1 - 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/core/nm-ip-config.c b/src/core/nm-ip-config.c index 4bbe1e1a4a..b3e599400e 100644 --- a/src/core/nm-ip-config.c +++ b/src/core/nm-ip-config.c @@ -100,14 +100,17 @@ get_property_ip(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec g_value_set_variant(value, priv->v_address_data); break; case PROP_IP_GATEWAY: - if (priv->v_gateway.addr) { + if (priv->v_gateway.best_default_route) { + const NMIPAddr *gateway; + + gateway = nm_platform_ip_route_get_gateway( + addr_family, + NMP_OBJECT_CAST_IP_ROUTE(priv->v_gateway.best_default_route)); g_value_set_variant( value, - g_variant_new_string( - nm_utils_inet_ntop(addr_family, priv->v_gateway.addr, sbuf_addr))); - } else { + g_variant_new_string(nm_utils_inet_ntop(addr_family, gateway, sbuf_addr))); + } else g_value_set_variant(value, nm_g_variant_singleton_s_empty()); - } break; case PROP_IP_ROUTE_DATA: g_value_set_variant(value, priv->v_route_data); @@ -212,7 +215,6 @@ finalize(GObject *object) nm_g_variant_unref(priv->v_route_data); nm_g_variant_unref(priv->v_routes); - g_free(priv->v_gateway.addr); nmp_object_unref(priv->v_gateway.best_default_route); nm_l3_config_data_unref(priv->l3cd); @@ -763,21 +765,17 @@ _handle_platform_change(NMIPConfig *self, guint32 obj_type_flags, gboolean is_in } } - if (nmp_object_ref_set(&priv->v_gateway.best_default_route, best_default_route)) { - gconstpointer gateway_next_hop; - - gateway_next_hop = priv->v_gateway.best_default_route - ? nm_platform_ip_route_get_gateway( - addr_family, - NMP_OBJECT_CAST_IP_ROUTE(priv->v_gateway.best_default_route)) - : NULL; - - if (!nm_ip_addr_equal(addr_family, priv->v_gateway.addr, gateway_next_hop)) { - g_free(priv->v_gateway.addr); - priv->v_gateway.addr = - g_memdup(gateway_next_hop, nm_utils_addr_family_to_size(addr_family)); + if (priv->v_gateway.best_default_route != best_default_route) { + if (!nm_ip_addr_equal( + addr_family, + nm_platform_ip_route_get_gateway( + addr_family, + NMP_OBJECT_CAST_IP_ROUTE(priv->v_gateway.best_default_route)), + nm_platform_ip_route_get_gateway(addr_family, + NMP_OBJECT_CAST_IP_ROUTE(best_default_route)))) best_default_route_changed = TRUE; - } + + nmp_object_ref_set(&priv->v_gateway.best_default_route, best_default_route); } } diff --git a/src/core/nm-ip-config.h b/src/core/nm-ip-config.h index cfe964d0ee..5b2552e3a3 100644 --- a/src/core/nm-ip-config.h +++ b/src/core/nm-ip-config.h @@ -31,7 +31,6 @@ struct _NMIPConfigPrivate { GVariant * v_routes; struct { const NMPObject *best_default_route; - NMIPAddr * addr; } v_gateway; gulong l3cfg_notify_id; };