l3cfg: refactor modification of address in nm_l3_config_data_merge()

This commit is contained in:
Thomas Haller 2021-09-06 09:53:58 +02:00
parent 075bdefb71
commit 2eb7983a04
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -2733,44 +2733,60 @@ nm_l3_config_data_merge(NML3ConfigData * self,
src, src,
&obj, &obj,
NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) { NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) {
NMPlatformIPXAddress addr_stack; const NMPlatformIPAddress *a_src = NMP_OBJECT_CAST_IP_ADDRESS(obj);
const NMPlatformIPAddress *addr = NULL; NMPlatformIPXAddress a;
NML3ConfigMergeHookResult hook_result = { NML3ConfigMergeHookResult hook_result = {
.ip4acd_not_ready = NM_OPTION_BOOL_DEFAULT, .ip4acd_not_ready = NM_OPTION_BOOL_DEFAULT,
}; };
#define _ensure_a() \
G_STMT_START \
{ \
if (a_src != &a.ax) { \
a_src = &a.ax; \
if (IS_IPv4) \
a.a4 = *NMP_OBJECT_CAST_IP4_ADDRESS(obj); \
else \
a.a6 = *NMP_OBJECT_CAST_IP6_ADDRESS(obj); \
} \
} \
G_STMT_END
nm_assert(a_src->ifindex == self->ifindex);
if (hook_add_obj && !hook_add_obj(src, obj, &hook_result, hook_user_data)) if (hook_add_obj && !hook_add_obj(src, obj, &hook_result, hook_user_data))
continue; continue;
nm_assert(IS_IPv4 || hook_result.ip4acd_not_ready == NM_OPTION_BOOL_DEFAULT); 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 if (hook_result.ip4acd_not_ready != NM_OPTION_BOOL_DEFAULT && IS_IPv4
&& (!!hook_result.ip4acd_not_ready) && (!!hook_result.ip4acd_not_ready)
!= NMP_OBJECT_CAST_IP4_ADDRESS(obj)->ip4acd_not_ready) { != ((const NMPlatformIP4Address *) a_src)->ip4acd_not_ready) {
addr_stack.a4 = *NMP_OBJECT_CAST_IP4_ADDRESS(obj); _ensure_a();
addr_stack.a4.ip4acd_not_ready = (!!hook_result.ip4acd_not_ready); a.a4.ip4acd_not_ready = (!!hook_result.ip4acd_not_ready);
addr = &addr_stack.ax;
} }
nm_l3_config_data_add_address_full(self, nm_l3_config_data_add_address_full(self,
addr_family, addr_family,
addr ? NULL : obj, a_src == &a.ax ? NULL : obj,
addr, a_src == &a.ax ? a_src : NULL,
NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE, NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE,
NULL); NULL);
} }
#undef _ensure_a
if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_ROUTES)) { if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_ROUTES)) {
nm_l3_config_data_iter_obj_for_each (&iter, nm_l3_config_data_iter_obj_for_each (&iter,
src, src,
&obj, &obj,
NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) {
const NMPlatformIPRoute *r_src = NMP_OBJECT_CAST_IP_ROUTE(obj); const NMPlatformIPRoute * r_src = NMP_OBJECT_CAST_IP_ROUTE(obj);
NMPlatformIPXRoute r; NMPlatformIPXRoute r;
NML3ConfigMergeHookResult hook_result = { NML3ConfigMergeHookResult hook_result = {
.ip4acd_not_ready = NM_OPTION_BOOL_DEFAULT, .ip4acd_not_ready = NM_OPTION_BOOL_DEFAULT,
}; };
#define _ensure_r() \ #define _ensure_r() \
G_STMT_START \ G_STMT_START \
{ \ { \
@ -2780,11 +2796,12 @@ nm_l3_config_data_merge(NML3ConfigData * self,
r.r4 = *NMP_OBJECT_CAST_IP4_ROUTE(obj); \ r.r4 = *NMP_OBJECT_CAST_IP4_ROUTE(obj); \
else \ else \
r.r6 = *NMP_OBJECT_CAST_IP6_ROUTE(obj); \ r.r6 = *NMP_OBJECT_CAST_IP6_ROUTE(obj); \
r.rx.ifindex = self->ifindex; \
} \ } \
} \ } \
G_STMT_END G_STMT_END
nm_assert(r_src->ifindex == self->ifindex);
if (hook_add_obj && !hook_add_obj(src, obj, &hook_result, hook_user_data)) if (hook_add_obj && !hook_add_obj(src, obj, &hook_result, hook_user_data))
continue; continue;