From cfebd0e50493f496926e115d6ed3a2482da2e598 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 6 Sep 2021 09:08:22 +0200 Subject: [PATCH] l3cfg: add a "result" structure to nm_l3_config_data_merge()'s add-obj-hook --- src/core/nm-l3-config-data.c | 21 ++++++++++++--------- src/core/nm-l3-config-data.h | 14 +++++++++----- src/core/nm-l3cfg.c | 15 ++++++++------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/core/nm-l3-config-data.c b/src/core/nm-l3-config-data.c index 4af73b34e6..0e4c4f289a 100644 --- a/src/core/nm-l3-config-data.c +++ b/src/core/nm-l3-config-data.c @@ -2696,7 +2696,7 @@ nm_l3_config_data_merge(NML3ConfigData * self, const guint32 * default_route_table_x /* length 2, for IS_IPv4 */, const guint32 * default_route_metric_x /* length 2, for IS_IPv4 */, const guint32 * default_route_penalty_x /* length 2, for IS_IPv4 */, - NML3ConfigMergeHookAddObj hook_add_addr, + NML3ConfigMergeHookAddObj hook_add_obj, gpointer hook_user_data) { static const guint32 x_default_route_table_x[2] = {RT_TABLE_MAIN, RT_TABLE_MAIN}; @@ -2734,19 +2734,22 @@ nm_l3_config_data_merge(NML3ConfigData * self, &obj, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) { NMPlatformIPXAddress addr_stack; - const NMPlatformIPAddress *addr = NULL; - NMTernary ip4acd_not_ready = NM_TERNARY_DEFAULT; + const NMPlatformIPAddress *addr = NULL; + NML3ConfigMergeHookResult hook_result = { + .ip4acd_not_ready = NM_OPTION_BOOL_DEFAULT, + }; - if (hook_add_addr && !hook_add_addr(src, obj, &ip4acd_not_ready, hook_user_data)) + if (hook_add_obj && !hook_add_obj(src, obj, &hook_result, hook_user_data)) continue; - if (IS_IPv4 && ip4acd_not_ready != NM_TERNARY_DEFAULT - && (!!ip4acd_not_ready) != NMP_OBJECT_CAST_IP4_ADDRESS(obj)->ip4acd_not_ready) { + nm_assert(IS_IPv4 || hook_result.ip4acd_not_ready == NM_OPTION_BOOL_DEFAULT); + if (hook_result.ip4acd_not_ready != NM_OPTION_BOOL_DEFAULT && IS_IPv4 + && (!!hook_result.ip4acd_not_ready) + != NMP_OBJECT_CAST_IP4_ADDRESS(obj)->ip4acd_not_ready) { addr_stack.a4 = *NMP_OBJECT_CAST_IP4_ADDRESS(obj); - addr_stack.a4.ip4acd_not_ready = (!!ip4acd_not_ready); + addr_stack.a4.ip4acd_not_ready = (!!hook_result.ip4acd_not_ready); addr = &addr_stack.ax; - } else - nm_assert(IS_IPv4 || ip4acd_not_ready == NM_TERNARY_DEFAULT); + } nm_l3_config_data_add_address_full(self, addr_family, diff --git a/src/core/nm-l3-config-data.h b/src/core/nm-l3-config-data.h index 7391c4c110..ac0278d3db 100644 --- a/src/core/nm-l3-config-data.h +++ b/src/core/nm-l3-config-data.h @@ -135,10 +135,14 @@ NML3ConfigData *nm_l3_config_data_new_from_platform(NMDedupMultiIndex * mu NMPlatform * platform, NMSettingIP6ConfigPrivacy ipv6_privacy_rfc4941); -typedef gboolean (*NML3ConfigMergeHookAddObj)(const NML3ConfigData *l3cd, - const NMPObject * obj, - NMTernary * out_ip4acd_not_ready, - gpointer user_data); +typedef struct { + NMOptionBool ip4acd_not_ready; +} NML3ConfigMergeHookResult; + +typedef gboolean (*NML3ConfigMergeHookAddObj)(const NML3ConfigData * l3cd, + const NMPObject * obj, + NML3ConfigMergeHookResult *result, + gpointer user_data); void nm_l3_config_data_merge(NML3ConfigData * self, const NML3ConfigData *src, @@ -146,7 +150,7 @@ void nm_l3_config_data_merge(NML3ConfigData * self, const guint32 *default_route_table_x /* length 2, for IS_IPv4 */, const guint32 *default_route_metric_x /* length 2, for IS_IPv4 */, const guint32 *default_route_penalty_x /* length 2, for IS_IPv4 */, - NML3ConfigMergeHookAddObj hook_add_addr, + NML3ConfigMergeHookAddObj hook_add_obj, gpointer hook_user_data); GPtrArray *nm_l3_config_data_get_blacklisted_ip4_routes(const NML3ConfigData *self, diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 06d74cadc7..90c3ec6546 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -2926,10 +2926,10 @@ typedef struct { } L3ConfigMergeHookAddObjData; static gboolean -_l3_hook_add_addr_cb(const NML3ConfigData *l3cd, - const NMPObject * obj, - NMTernary * out_ip4acd_not_ready, - gpointer user_data) +_l3_hook_add_obj_cb(const NML3ConfigData * l3cd, + const NMPObject * obj, + NML3ConfigMergeHookResult *hook_result, + gpointer user_data) { const L3ConfigMergeHookAddObjData *hook_data = user_data; NML3Cfg * self = hook_data->self; @@ -2937,7 +2937,8 @@ _l3_hook_add_addr_cb(const NML3ConfigData *l3cd, in_addr_t addr; gboolean acd_bad = FALSE; - nm_assert(out_ip4acd_not_ready && *out_ip4acd_not_ready == NM_TERNARY_DEFAULT); + nm_assert(hook_result); + nm_assert(hook_result->ip4acd_not_ready == NM_OPTION_BOOL_DEFAULT); if (NMP_OBJECT_GET_TYPE(obj) != NMP_OBJECT_TYPE_IP4_ADDRESS) return TRUE; @@ -2969,7 +2970,7 @@ _l3_hook_add_addr_cb(const NML3ConfigData *l3cd, acd_bad = TRUE; out: - *out_ip4acd_not_ready = acd_bad ? NM_TERNARY_TRUE : NM_TERNARY_FALSE; + hook_result->ip4acd_not_ready = acd_bad ? NM_OPTION_BOOL_TRUE : NM_OPTION_BOOL_FALSE; return TRUE; } @@ -3053,7 +3054,7 @@ _l3cfg_update_combined_config(NML3Cfg * self, l3cd_data->default_route_table_x, l3cd_data->default_route_metric_x, l3cd_data->default_route_penalty_x, - _l3_hook_add_addr_cb, + _l3_hook_add_obj_cb, &hook_data); }