From 062be85d82a37910ad5bdb5c33e8fe2fca929f09 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 17 Apr 2019 11:04:10 +0200 Subject: [PATCH] platform: compare routing rules according to kernel support for FRA_L3MDEV Also, in nm_platform_routing_rule_cmp() always compare the routing table field, also if l3mdev is set. For kernel, we cannot set table and l3mdev together, hence such rules don't really exist (or if we try to configure it, it will be rejected by kernel). But as far as nm_platform_routing_rule_cmp() is concerned, if the table is set, always compare it. (cherry picked from commit b6ff02e76f352cf39d7d41a715ee637f24be9da0) --- src/platform/nm-platform.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index c9b99987cb..88508c97f7 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -7463,9 +7463,12 @@ nm_platform_routing_rule_hash_update (const NMPlatformRoutingRule *obj, : FALSE)), obj->suppress_prefixlen_inverse, obj->suppress_ifgroup_inverse, - ( cmp_full - ? obj->l3mdev - : (guint8) !!obj->l3mdev), + ( _routing_rule_compare (cmp_type, + NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_L3MDEV) + ? ( cmp_full + ? (guint16) obj->l3mdev + : (guint16) !!obj->l3mdev) + : G_MAXUINT16), obj->action, obj->tos, obj->src_len, @@ -7540,13 +7543,15 @@ nm_platform_routing_rule_cmp (const NMPlatformRoutingRule *a, NM_CMP_FIELD (a, b, priority); NM_CMP_FIELD (a, b, tun_id); - if (cmp_full) - NM_CMP_FIELD (a, b, l3mdev); - else - NM_CMP_FIELD_BOOL (a, b, l3mdev); + if (_routing_rule_compare (cmp_type, + NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_L3MDEV)) { + if (cmp_full) + NM_CMP_FIELD (a, b, l3mdev); + else + NM_CMP_FIELD_BOOL (a, b, l3mdev); + } - if (cmp_full || !a->l3mdev) - NM_CMP_FIELD (a, b, table); + NM_CMP_FIELD (a, b, table); NM_CMP_DIRECT (a->flags & flags_mask, b->flags & flags_mask);