platform: add nm_platform_link_get_ifi_flags() helper
Add helper nm_platform_link_get_ifi_flags() to access the ifi-flags. This replaces the internal API _link_get_flags() and makes it public. However, the return value also allows to distinguish between errors and valid flags. Also, consider non-visible links. These are links that are in netlink, but not visible in udev. The ifi-flags are inherrently netlink specific, so it seems wrong to pretend that the link doesn't exist.
This commit is contained in:
@@ -1217,13 +1217,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1236,9 +1252,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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1269,9 +1283,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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1166,6 +1166,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);
|
||||
|
Reference in New Issue
Block a user