merge: branch 'bg/issue1902'

core: fix again l3cd comparison

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2372
This commit is contained in:
Beniamino Galvani 2026-05-04 13:05:54 +00:00
commit ed3cab3aaa
2 changed files with 58 additions and 9 deletions

View file

@ -2604,15 +2604,15 @@ nm_l3_config_data_cmp_full(const NML3ConfigData *a,
const NMPObject *def_route_a = a->best_default_route_x[IS_IPv4];
const NMPObject *def_route_b = b->best_default_route_x[IS_IPv4];
if (def_route_a != def_route_b) {
if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_ROUTES)) {
NM_CMP_RETURN(
nmp_object_cmp_full(def_route_a,
def_route_b,
NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_IFINDEX)
? NMP_OBJECT_CMP_FLAGS_NONE
: NMP_OBJECT_CMP_FLAGS_IGNORE_IFINDEX));
} else if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_ROUTES_ID)) {
if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_ROUTES)) {
NM_CMP_RETURN(nmp_object_cmp_full(def_route_a,
def_route_b,
NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_IFINDEX)
? NMP_OBJECT_CMP_FLAGS_NONE
: NMP_OBJECT_CMP_FLAGS_IGNORE_IFINDEX));
} else if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_ROUTES_ID)) {
NM_CMP_DIRECT(!!def_route_a, !!def_route_b);
if (def_route_a && def_route_b) {
if (NM_FLAGS_HAS(flags, NM_L3_CONFIG_CMP_FLAGS_IFINDEX)) {
NM_CMP_DIRECT(def_route_a->obj_with_ifindex.ifindex,
def_route_b->obj_with_ifindex.ifindex);

View file

@ -20,6 +20,7 @@
#include "dns/nm-dns-manager.h"
#include "nm-connectivity.h"
#include "nm-firewall-utils.h"
#include "nm-l3-config-data.h"
#include "nm-test-utils-core.h"
@ -2823,6 +2824,51 @@ test_icmp6_checksum(void)
/*****************************************************************************/
static void
test_l3_config_data_cmp_default_routes(void)
{
nm_auto_unref_dedup_multi_index NMDedupMultiIndex *multi_idx = nm_dedup_multi_index_new();
nm_auto_unref_l3cd_init NML3ConfigData *a = NULL;
nm_auto_unref_l3cd_init NML3ConfigData *b = NULL;
const int IFINDEX = 1;
a = nm_l3_config_data_new(multi_idx, IFINDEX, NM_IP_CONFIG_SOURCE_USER);
nm_l3_config_data_add_route_4(
a,
NM_PLATFORM_IP4_ROUTE_INIT(.ifindex = IFINDEX,
.network = 0,
.plen = 0,
.gateway = nmtst_inet4_from_string("192.168.1.1"),
.metric = 100));
b = nm_l3_config_data_new(multi_idx, IFINDEX, NM_IP_CONFIG_SOURCE_USER);
nm_l3_config_data_add_route_4(
b,
NM_PLATFORM_IP4_ROUTE_INIT(.ifindex = IFINDEX,
.network = 0,
.plen = 0,
.gateway = nmtst_inet4_from_string("192.168.1.1"),
.metric = 100,
.table_coerced = nm_platform_route_table_coerce(100)));
nm_l3_config_data_seal(a);
nm_l3_config_data_seal(b);
g_assert(nm_l3_config_data_get_best_default_route(a, AF_INET));
g_assert(!nm_l3_config_data_get_best_default_route(b, AF_INET));
g_assert_cmpint(nm_l3_config_data_cmp_full(a, b, NM_L3_CONFIG_CMP_FLAGS_ROUTES_ID), !=, 0);
g_assert_cmpint(nm_l3_config_data_cmp_full(b, a, NM_L3_CONFIG_CMP_FLAGS_ROUTES_ID), !=, 0);
g_assert_cmpint(nm_l3_config_data_cmp_full(b, a, NM_L3_CONFIG_CMP_FLAGS_ADDRESSES), ==, 0);
g_assert_cmpint(nm_l3_config_data_cmp_full(b, a, NM_L3_CONFIG_CMP_FLAGS_ADDRESSES), ==, 0);
g_assert_cmpint(nm_l3_config_data_cmp_full(a, a, NM_L3_CONFIG_CMP_FLAGS_ALL), ==, 0);
g_assert_cmpint(nm_l3_config_data_cmp_full(b, b, NM_L3_CONFIG_CMP_FLAGS_ALL), ==, 0);
}
/*****************************************************************************/
NMTST_DEFINE();
int
@ -2901,5 +2947,8 @@ main(int argc, char **argv)
g_test_add_func("/core/general/test_icmp6_checksum", test_icmp6_checksum);
g_test_add_func("/core/general/test_l3_config_data_cmp_default_routes",
test_l3_config_data_cmp_default_routes);
return g_test_run();
}