mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-28 18:00:10 +01:00
l3cfg: add a "result" structure to nm_l3_config_data_merge()'s add-obj-hook
This commit is contained in:
parent
3b92ad8b6d
commit
cfebd0e504
3 changed files with 29 additions and 21 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue