platform: add nm_platform_link_get()

Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
Thomas Haller
2014-04-22 16:02:15 +02:00
parent ed868a388b
commit 66e2e932b5
4 changed files with 51 additions and 0 deletions

View File

@@ -184,6 +184,16 @@ link_added_emit (gpointer user_data)
return FALSE; return FALSE;
} }
static gboolean
_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
{
NMFakePlatformLink *device = link_get (platform, ifindex);
if (device)
*link = device->link;
return !!device;
}
static gboolean static gboolean
link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *address, size_t address_len) link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *address, size_t address_len)
{ {
@@ -1288,6 +1298,7 @@ nm_fake_platform_class_init (NMFakePlatformClass *klass)
platform_class->sysctl_set = sysctl_set; platform_class->sysctl_set = sysctl_set;
platform_class->sysctl_get = sysctl_get; platform_class->sysctl_get = sysctl_get;
platform_class->link_get = _nm_platform_link_get;
platform_class->link_get_all = link_get_all; platform_class->link_get_all = link_get_all;
platform_class->link_add = link_add; platform_class->link_add = link_add;
platform_class->link_delete = link_delete; platform_class->link_delete = link_delete;

View File

@@ -1877,6 +1877,22 @@ link_get_all (NMPlatform *platform)
return links; return links;
} }
static gboolean
_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
auto_nl_object struct rtnl_link *rtnllink;
rtnllink = rtnl_link_get (priv->link_cache, ifindex);
if (rtnllink) {
if (link_is_announceable (platform, rtnllink)) {
if (init_link (platform, link, rtnllink))
return TRUE;
}
}
return FALSE;
}
static struct nl_object * static struct nl_object *
build_rtnl_link (int ifindex, const char *name, NMLinkType type) build_rtnl_link (int ifindex, const char *name, NMLinkType type)
{ {
@@ -3804,6 +3820,7 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
platform_class->sysctl_set = sysctl_set; platform_class->sysctl_set = sysctl_set;
platform_class->sysctl_get = sysctl_get; platform_class->sysctl_get = sysctl_get;
platform_class->link_get = _nm_platform_link_get;
platform_class->link_get_all = link_get_all; platform_class->link_get_all = link_get_all;
platform_class->link_add = link_add; platform_class->link_add = link_add;
platform_class->link_delete = link_delete; platform_class->link_delete = link_delete;

View File

@@ -439,6 +439,27 @@ nm_platform_link_get_all (void)
return result; return result;
} }
/**
* nm_platform_link_get:
* @ifindex: ifindex of the link
* @link: (out): output NMPlatformLink structure.
*
* If a link with given @ifindex exists, fill the given NMPlatformLink
* structure.
*
* Returns: %TRUE, if such a link exists, %FALSE otherwise.
* If the link does not exist, the content of @link is undefined.
**/
gboolean
nm_platform_link_get (int ifindex, NMPlatformLink *link)
{
g_return_val_if_fail (ifindex > 0, FALSE);
g_return_val_if_fail (link, FALSE);
g_return_val_if_fail (klass->link_get, FALSE);
return !!klass->link_get (platform, ifindex, link);
}
/** /**
* nm_platform_link_add: * nm_platform_link_add:
* @name: Interface name * @name: Interface name

View File

@@ -346,6 +346,7 @@ typedef struct {
gboolean (*sysctl_set) (NMPlatform *, const char *path, const char *value); gboolean (*sysctl_set) (NMPlatform *, const char *path, const char *value);
char * (*sysctl_get) (NMPlatform *, const char *path); char * (*sysctl_get) (NMPlatform *, const char *path);
gboolean (*link_get) (NMPlatform *platform, int ifindex, NMPlatformLink *link);
GArray *(*link_get_all) (NMPlatform *); GArray *(*link_get_all) (NMPlatform *);
gboolean (*link_add) (NMPlatform *, const char *name, NMLinkType type, const void *address, size_t address_len); gboolean (*link_add) (NMPlatform *, const char *name, NMLinkType type, const void *address, size_t address_len);
gboolean (*link_delete) (NMPlatform *, int ifindex); gboolean (*link_delete) (NMPlatform *, int ifindex);
@@ -477,6 +478,7 @@ char *nm_platform_sysctl_get (const char *path);
gint32 nm_platform_sysctl_get_int32 (const char *path, gint32 fallback); gint32 nm_platform_sysctl_get_int32 (const char *path, gint32 fallback);
gint64 nm_platform_sysctl_get_int_checked (const char *path, guint base, gint64 min, gint64 max, gint64 fallback); gint64 nm_platform_sysctl_get_int_checked (const char *path, guint base, gint64 min, gint64 max, gint64 fallback);
gboolean nm_platform_link_get (int ifindex, NMPlatformLink *link);
GArray *nm_platform_link_get_all (void); GArray *nm_platform_link_get_all (void);
gboolean nm_platform_dummy_add (const char *name); gboolean nm_platform_dummy_add (const char *name);
gboolean nm_platform_bridge_add (const char *name, const void *address, size_t address_len); gboolean nm_platform_bridge_add (const char *name, const void *address, size_t address_len);