summaryrefslogtreecommitdiff
path: root/src/nm-ip4-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-ip4-config.c')
-rw-r--r--src/nm-ip4-config.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index eca46085ad..d5df277b14 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -46,14 +46,22 @@ G_STATIC_ASSERT (G_MAXUINT >= 0xFFFFFFFF);
/*****************************************************************************/
-static gboolean
-_idx_obj_id_equal_ip4_route (const NMPlatformIP4Route *r_a,
- const NMPlatformIP4Route *r_b)
+gboolean
+nm_ip_config_obj_id_equal_ip4_route (const NMPlatformIP4Route *r_a,
+ const NMPlatformIP4Route *r_b)
{
return r_a->network == r_b->network
&& r_a->plen == r_b->plen;
}
+gboolean
+nm_ip_config_obj_id_equal_ip6_route (const NMPlatformIP6Route *r_a,
+ const NMPlatformIP6Route *r_b)
+{
+ return r_a->plen == r_b->plen
+ && IN6_ARE_ADDR_EQUAL (&r_a->network, &r_b->network);
+}
+
static guint
_idx_obj_id_hash (const NMDedupMultiIdxType *idx_type,
const NMDedupMultiObj *obj)
@@ -68,10 +76,13 @@ _idx_obj_id_hash (const NMDedupMultiIdxType *idx_type,
case NMP_OBJECT_TYPE_IP4_ROUTE:
h = 40303327;
h = NM_HASH_COMBINE (h, o->ip4_route.network);
- h = NM_HASH_COMBINE (h, o->ip4_route.plen);
+ h = NM_HASH_COMBINE (h, o->ip_route.plen);
break;
case NMP_OBJECT_TYPE_IP6_ROUTE:
- g_return_val_if_reached (0);
+ h = 577629323;
+ h = NM_HASH_COMBINE_IN6_ADDR (h, &o->ip6_route.network);
+ h = NM_HASH_COMBINE (h, o->ip_route.plen);
+ break;
default:
g_return_val_if_reached (0);
};
@@ -94,9 +105,9 @@ _idx_obj_id_equal (const NMDedupMultiIdxType *idx_type,
case NMP_OBJECT_TYPE_IP6_ADDRESS:
g_return_val_if_reached (FALSE);
case NMP_OBJECT_TYPE_IP4_ROUTE:
- return _idx_obj_id_equal_ip4_route (&o_a->ip4_route, &o_b->ip4_route);
+ return nm_ip_config_obj_id_equal_ip4_route (&o_a->ip4_route, &o_b->ip4_route);
case NMP_OBJECT_TYPE_IP6_ROUTE:
- g_return_val_if_reached (FALSE);
+ return nm_ip_config_obj_id_equal_ip6_route (&o_a->ip6_route, &o_b->ip6_route);
default:
g_return_val_if_reached (FALSE);
};
@@ -1300,7 +1311,7 @@ nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relev
if (nm_platform_ip4_route_cmp (r_src, r_dst) != 0) {
are_equal = FALSE;
- if (!_idx_obj_id_equal_ip4_route (r_src, r_dst)) {
+ if (!nm_ip_config_obj_id_equal_ip4_route (r_src, r_dst)) {
has_relevant_changes = TRUE;
break;
}