From 227c401a10a930af6fd5f123aef345fcd130d6aa Mon Sep 17 00:00:00 2001 From: Sebastien Bacher Date: Mon, 10 Dec 2018 21:58:18 +0100 Subject: Import Upstream version 1.12.6 --- src/platform/nm-netlink.h | 2 +- src/platform/nm-platform.c | 38 +++++++++++++++++++++++++++++--------- src/platform/nm-platform.h | 1 + src/platform/tests/test-cleanup.c | 2 +- src/platform/tests/test-common.c | 2 -- 5 files changed, 32 insertions(+), 13 deletions(-) (limited to 'src/platform') diff --git a/src/platform/nm-netlink.h b/src/platform/nm-netlink.h index 185269ba..7d7ea0d2 100644 --- a/src/platform/nm-netlink.h +++ b/src/platform/nm-netlink.h @@ -252,7 +252,7 @@ struct nlattr *nla_find (const struct nlattr *head, int len, int attrtype); static inline int nla_ok (const struct nlattr *nla, int remaining) { - return remaining >= sizeof(*nla) && + return remaining >= (int) sizeof(*nla) && nla->nla_len >= sizeof(*nla) && nla->nla_len <= remaining; } diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index f75019e8..227168ba 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -1191,13 +1191,29 @@ nm_platform_link_refresh (NMPlatform *self, int ifindex) return TRUE; } -static guint -_link_get_flags (NMPlatform *self, int ifindex) +int +nm_platform_link_get_ifi_flags (NMPlatform *self, + int ifindex, + guint requested_flags) { const NMPlatformLink *pllink; - pllink = nm_platform_link_get (self, ifindex); - return pllink ? pllink->n_ifi_flags : IFF_NOARP; + _CHECK_SELF (self, klass, -EINVAL); + + if (ifindex <= 0) + return -EINVAL; + + /* include invisible links (only in netlink, not udev). */ + pllink = NMP_OBJECT_CAST_LINK (nm_platform_link_get_obj (self, ifindex, FALSE)); + if (!pllink) + return -ENODEV; + + /* Errors are signaled as negative values. That means, you cannot request + * the most significant bit (2^31) with this API. Assert against that. */ + nm_assert ((int) requested_flags >= 0); + nm_assert (requested_flags < (guint) G_MAXINT); + + return (int) (pllink->n_ifi_flags & requested_flags); } /** @@ -1210,9 +1226,7 @@ _link_get_flags (NMPlatform *self, int ifindex) gboolean nm_platform_link_is_up (NMPlatform *self, int ifindex) { - _CHECK_SELF (self, klass, FALSE); - - return NM_FLAGS_HAS (_link_get_flags (self, ifindex), IFF_UP); + return nm_platform_link_get_ifi_flags (self, ifindex, IFF_UP) == IFF_UP; } /** @@ -1243,9 +1257,15 @@ nm_platform_link_is_connected (NMPlatform *self, int ifindex) gboolean nm_platform_link_uses_arp (NMPlatform *self, int ifindex) { - _CHECK_SELF (self, klass, FALSE); + int f; - return !NM_FLAGS_HAS (_link_get_flags (self, ifindex), IFF_NOARP); + f = nm_platform_link_get_ifi_flags (self, ifindex, IFF_NOARP); + + if (f < 0) + return FALSE; + if (f == IFF_NOARP) + return FALSE; + return TRUE; } /** diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 866df736..94028553 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -1111,6 +1111,7 @@ int nm_platform_link_get_ifindex (NMPlatform *self, const char *name); const char *nm_platform_link_get_name (NMPlatform *self, int ifindex); NMLinkType nm_platform_link_get_type (NMPlatform *self, int ifindex); gboolean nm_platform_link_is_software (NMPlatform *self, int ifindex); +int nm_platform_link_get_ifi_flags (NMPlatform *self, int ifindex, guint requested_flags); gboolean nm_platform_link_is_up (NMPlatform *self, int ifindex); gboolean nm_platform_link_is_connected (NMPlatform *self, int ifindex); gboolean nm_platform_link_uses_arp (NMPlatform *self, int ifindex); diff --git a/src/platform/tests/test-cleanup.c b/src/platform/tests/test-cleanup.c index 8b8c87d8..12d91812 100644 --- a/src/platform/tests/test-cleanup.c +++ b/src/platform/tests/test-cleanup.c @@ -60,7 +60,7 @@ test_cleanup_internal (void) g_assert (ifindex > 0); /* wait for kernel to add the IPv6 link local address... it takes a bit. */ - NMTST_WAIT_ASSERT (100, { + NMTST_WAIT_ASSERT (300, { gs_unref_array GArray *addrs = NULL; const NMPlatformIP6Address *a; diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c index 42569d5b..1095a2b1 100644 --- a/src/platform/tests/test-common.c +++ b/src/platform/tests/test-common.c @@ -787,8 +787,6 @@ nmtstp_ip_address_assert_lifetime (const NMPlatformIPAddress *addr, if (lft == NM_PLATFORM_LIFETIME_PERMANENT) g_assert_cmpint (adr, ==, NM_PLATFORM_LIFETIME_PERMANENT); else { - g_assert_cmpint (adr, <=, lft); - g_assert_cmpint (offset, <=, adr); g_assert_cmpint (adr - offset, <=, lft + CHECK_LIFETIME_MAX_DIFF); g_assert_cmpint (adr - offset, >=, lft - CHECK_LIFETIME_MAX_DIFF); } -- cgit 1.3.0-6-gf8a5