summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-04-17 11:04:10 +0200
committerThomas Haller <thaller@redhat.com>2019-04-18 11:16:09 +0200
commitb6ff02e76f352cf39d7d41a715ee637f24be9da0 (patch)
tree02b16da9f5d46fe5e0f0801a96b16b4989797aed
parentb843c1eab8a119663116bc487b9ade40bc7f5754 (diff)
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.
-rw-r--r--src/platform/nm-platform.c23
1 files 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);