summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-04-17 10:43:42 +0200
committerThomas Haller <thaller@redhat.com>2019-04-18 11:11:44 +0200
commit1dd1dcb81e1e96db9d02ae18c2064a397e46448a (patch)
tree0c85d0f64b0d0277bd1315409beb4e417054bc57
parent91252bb2fbfd02d712ae556ecc816146155a6f85 (diff)
downloadNetworkManager-1dd1dcb81e1e96db9d02ae18c2064a397e46448a.tar.gz
platform: detect kernel support for FRA_UID_RANGE
-rw-r--r--src/platform/nm-linux-platform.c10
-rw-r--r--src/platform/nm-platform.c5
-rw-r--r--src/platform/nm-platform.h1
3 files changed, 16 insertions, 0 deletions
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 1fc7cc3908..93c7b61350 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -3448,6 +3448,16 @@ _new_from_nl_routing_rule (struct nlmsghdr *nlh, gboolean id_only)
G_STATIC_ASSERT_EXPR (G_STRUCT_OFFSET (NMFibRuleUidRange, end) == 4);
if (tb[FRA_UID_RANGE]) {
+
+ if (!_nm_platform_kernel_support_detected (NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_UID_RANGE)) {
+ /* support for FRA_UID_RANGE was added in 622ec2c9d52405973c9f1ca5116eb1c393adfc7d,
+ * kernel 4.10, 19 February 2017.
+ *
+ * We can only detect support if the attribute is present. A missing attribute
+ * is not conclusive. */
+ _nm_platform_kernel_support_init (NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_UID_RANGE, 1);
+ }
+
nla_memcpy_checked_size (&props->uid_range, tb[FRA_UID_RANGE], sizeof (props->uid_range));
props->uid_range_has = TRUE;
}
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index f16e7aec2a..f493951559 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -296,6 +296,11 @@ static const struct {
.name = "RTA_PREF",
.desc = "ability to set router preference for IPv6 routes",
},
+ [NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_UID_RANGE] = {
+ .compile_time_default = (FRA_MAX >= 20 /* FRA_UID_RANGE */),
+ .name = "FRA_UID_RANGE",
+ .desc = "FRA_UID_RANGE attribute for policy routing rules",
+ },
[NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_PROTOCOL] = {
.compile_time_default = (FRA_MAX >= 21 /* FRA_PROTOCOL */),
.name = "FRA_PROTOCOL",
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
index 639fe5a51f..4feb0e21f8 100644
--- a/src/platform/nm-platform.h
+++ b/src/platform/nm-platform.h
@@ -848,6 +848,7 @@ typedef enum {
NM_PLATFORM_KERNEL_SUPPORT_TYPE_EXTENDED_IFA_FLAGS,
NM_PLATFORM_KERNEL_SUPPORT_TYPE_USER_IPV6LL,
NM_PLATFORM_KERNEL_SUPPORT_TYPE_RTA_PREF,
+ NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_UID_RANGE,
NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_PROTOCOL,
/* this also includes FRA_SPORT_RANGE and FRA_DPORT_RANGE which