diff options
Diffstat (limited to 'src/platform/nm-fake-platform.c')
-rw-r--r-- | src/platform/nm-fake-platform.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c index b2878e3b0c..7194707b29 100644 --- a/src/platform/nm-fake-platform.c +++ b/src/platform/nm-fake-platform.c @@ -49,6 +49,11 @@ typedef struct { int vlan_id; } NMFakePlatformLink; +typedef struct { + int ifindex; + NMPlatform *platform; +} NMFakePlatformLinkData; + #define NM_FAKE_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_FAKE_PLATFORM, NMFakePlatformPrivate)) G_DEFINE_TYPE (NMFakePlatform, nm_fake_platform, NM_TYPE_PLATFORM) @@ -175,6 +180,23 @@ _nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *l) } static gboolean +_link_announce (NMFakePlatformLinkData *data) +{ + NMFakePlatformLink *device = link_get (data->platform, data->ifindex); + + if (device) + g_signal_emit_by_name (data->platform, + NM_PLATFORM_SIGNAL_LINK_CHANGED, + device->link.ifindex, + device, + NM_PLATFORM_SIGNAL_ADDED, + NM_PLATFORM_REASON_INTERNAL); + g_free (data); + + return FALSE; +} + +static gboolean link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *address, size_t address_len) { NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform); @@ -184,8 +206,12 @@ link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *a g_array_append_val (priv->links, device); - if (device.link.ifindex) - g_signal_emit_by_name (platform, NM_PLATFORM_SIGNAL_LINK_CHANGED, device.link.ifindex, &device, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_INTERNAL); + if (device.link.ifindex) { + NMFakePlatformLinkData *data = g_new (NMFakePlatformLinkData, 1); + data->ifindex = device.link.ifindex; + data->platform = platform; + g_idle_add ((GSourceFunc) _link_announce, data); + } return TRUE; } @@ -273,6 +299,12 @@ link_get_type_name (NMPlatform *platform, int ifindex) return type_to_type_name (link_get_type (platform, ifindex)); } +static gboolean +link_get_unmanaged (NMPlatform *platform, int ifindex, gboolean *managed) +{ + return FALSE; +} + static void link_changed (NMPlatform *platform, NMFakePlatformLink *device) { @@ -1358,6 +1390,7 @@ nm_fake_platform_class_init (NMFakePlatformClass *klass) platform_class->link_get_name = link_get_name; platform_class->link_get_type = link_get_type; platform_class->link_get_type_name = link_get_type_name; + platform_class->link_get_unmanaged = link_get_unmanaged; platform_class->link_set_up = link_set_up; platform_class->link_set_down = link_set_down; |