platform: add reason attribute to all signals

This commit is contained in:
Pavel Šimerda
2013-08-02 18:51:06 +02:00
parent c1bbacae4c
commit 356cad68fa
11 changed files with 61 additions and 49 deletions

View File

@@ -39,7 +39,6 @@
#include "NetworkManagerUtils.h"
#include "nm-logging.h"
#include "nm-enum-types.h"
#include "nm-platform.h"
#include "nm-dbus-manager.h"
#include "nm-platform.h"
@@ -321,7 +320,7 @@ error:
}
static void
lost_link (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMDeviceAdsl *device_adsl)
lost_link (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformReason reason, NMDeviceAdsl *device_adsl)
{
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device_adsl);
NMDevice *device = NM_DEVICE (device_adsl);

View File

@@ -325,12 +325,12 @@ static void cp_connection_updated (NMConnectionProvider *cp, NMConnection *conne
static const char *state_to_string (NMDeviceState state);
static void link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMDevice *device);
static void link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformReason reason, NMDevice *device);
static void check_carrier (NMDevice *device);
static void nm_device_queued_ip_config_change_clear (NMDevice *self);
static void update_ip_config (NMDevice *self);
static void device_ip_changed (NMPlatform *platform, int ifindex, gpointer platform_object, gpointer user_data);
static void device_ip_changed (NMPlatform *platform, int ifindex, gpointer platform_object, NMPlatformReason reason, gpointer user_data);
static const char const *platform_ip_signals[] = {
NM_PLATFORM_IP4_ADDRESS_ADDED,
@@ -1149,7 +1149,7 @@ nm_device_set_carrier (NMDevice *device, gboolean carrier)
}
static void
link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMDevice *device)
link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformReason reason, NMDevice *device)
{
NMDeviceClass *klass = NM_DEVICE_GET_CLASS (device);
@@ -5911,7 +5911,7 @@ queued_ip_config_change (gpointer user_data)
}
static void
device_ip_changed (NMPlatform *platform, int ifindex, gpointer platform_object, gpointer user_data)
device_ip_changed (NMPlatform *platform, int ifindex, gpointer platform_object, NMPlatformReason reason, gpointer user_data)
{
NMDevice *self = user_data;

View File

@@ -2246,6 +2246,7 @@ static void
platform_link_added_cb (NMPlatform *platform,
int ifindex,
NMPlatformLink *link,
NMPlatformReason reason,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);
@@ -2358,6 +2359,7 @@ static void
platform_link_removed_cb (NMPlatform *platform,
int ifindex,
NMPlatformLink *link,
NMPlatformReason reason,
gpointer user_data)
{
NMManager *self = NM_MANAGER (user_data);

View File

@@ -179,7 +179,7 @@ link_added_emit (gpointer user_data)
device = link_get (info->platform, info->ifindex);
g_assert (device);
g_signal_emit_by_name (info->platform, NM_PLATFORM_LINK_ADDED, info->ifindex, &(device->link));
g_signal_emit_by_name (info->platform, NM_PLATFORM_LINK_ADDED, info->ifindex, &device->link, NM_PLATFORM_REASON_INTERNAL);
return FALSE;
}
@@ -249,7 +249,7 @@ link_delete (NMPlatform *platform, int ifindex)
memset (route, 0, sizeof (*route));
}
g_signal_emit_by_name (platform, NM_PLATFORM_LINK_REMOVED, ifindex, &deleted_device);
g_signal_emit_by_name (platform, NM_PLATFORM_LINK_REMOVED, ifindex, &deleted_device, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -298,7 +298,7 @@ link_changed (NMPlatform *platform, NMFakePlatformLink *device)
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
int i;
g_signal_emit_by_name (platform, "link-changed", device->link.ifindex, &device->link);
g_signal_emit_by_name (platform, "link-changed", device->link.ifindex, &device->link, NM_PLATFORM_REASON_INTERNAL);
if (device->link.master) {
NMFakePlatformLink *master = link_get (platform, device->link.master);
@@ -755,12 +755,12 @@ ip4_address_add (NMPlatform *platform, int ifindex, in_addr_t addr, int plen, gu
continue;
memcpy (item, &address, sizeof (address));
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ADDRESS_CHANGED, ifindex, &address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ADDRESS_CHANGED, ifindex, &address, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
g_array_append_val (priv->ip4_addresses, address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ADDRESS_ADDED, ifindex, &address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ADDRESS_ADDED, ifindex, &address, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -791,12 +791,12 @@ ip6_address_add (NMPlatform *platform, int ifindex, struct in6_addr addr, int pl
continue;
memcpy (item, &address, sizeof (address));
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ADDRESS_CHANGED, ifindex, &address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ADDRESS_CHANGED, ifindex, &address, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
g_array_append_val (priv->ip6_addresses, address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ADDRESS_ADDED, ifindex, &address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ADDRESS_ADDED, ifindex, &address, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -815,7 +815,7 @@ ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
memcpy (&deleted_address, address, sizeof (deleted_address));
memset (address, 0, sizeof (*address));
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ADDRESS_REMOVED, ifindex, &deleted_address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ADDRESS_REMOVED, ifindex, &deleted_address, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
}
@@ -838,7 +838,7 @@ ip6_address_delete (NMPlatform *platform, int ifindex, struct in6_addr addr, int
memcpy (&deleted_address, address, sizeof (deleted_address));
memset (address, 0, sizeof (*address));
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ADDRESS_REMOVED, ifindex, &deleted_address);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ADDRESS_REMOVED, ifindex, &deleted_address, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
}
@@ -962,12 +962,12 @@ ip4_route_add (NMPlatform *platform, int ifindex, in_addr_t network, int plen,
continue;
memcpy (item, &route, sizeof (route));
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ROUTE_CHANGED, ifindex, &route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ROUTE_CHANGED, ifindex, &route, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
g_array_append_val (priv->ip4_routes, route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ROUTE_ADDED, ifindex, &route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ROUTE_ADDED, ifindex, &route, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -999,12 +999,12 @@ ip6_route_add (NMPlatform *platform, int ifindex, struct in6_addr network, int p
continue;
memcpy (item, &route, sizeof (route));
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ROUTE_CHANGED, ifindex, &route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ROUTE_CHANGED, ifindex, &route, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
g_array_append_val (priv->ip6_routes, route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ROUTE_ADDED, ifindex, &route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ROUTE_ADDED, ifindex, &route, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -1057,7 +1057,7 @@ ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen
memcpy (&deleted_route, route, sizeof (deleted_route));
memset (route, 0, sizeof (*route));
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ROUTE_REMOVED, ifindex, &deleted_route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP4_ROUTE_REMOVED, ifindex, &deleted_route, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -1072,7 +1072,7 @@ ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, in
memcpy (&deleted_route, route, sizeof (deleted_route));
memset (route, 0, sizeof (*route));
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ROUTE_REMOVED, ifindex, &deleted_route);
g_signal_emit_by_name (platform, NM_PLATFORM_IP6_ROUTE_REMOVED, ifindex, &deleted_route, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}

View File

@@ -760,7 +760,7 @@ object_has_ifindex (struct nl_object *object, int ifindex)
}
}
static gboolean refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed);
static gboolean refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed, NMPlatformReason reason);
static void
check_cache_items (NMPlatform *platform, struct nl_cache *cache, int ifindex)
@@ -772,12 +772,12 @@ check_cache_items (NMPlatform *platform, struct nl_cache *cache, int ifindex)
debug ("cache %p object %p", cloned_cache, object);
g_assert (nl_object_get_cache (object) == cloned_cache);
if (object_has_ifindex (object, ifindex))
refresh_object (platform, object, TRUE);
refresh_object (platform, object, TRUE, NM_PLATFORM_REASON_CACHE_CHECK);
}
}
static void
announce_object (NMPlatform *platform, const struct nl_object *object, ObjectStatus status)
announce_object (NMPlatform *platform, const struct nl_object *object, ObjectStatus status, NMPlatformReason reason)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
ObjectType object_type = object_type_from_nl_object (object);
@@ -825,7 +825,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
break;
}
g_signal_emit_by_name (platform, sig, device.ifindex, &device);
g_signal_emit_by_name (platform, sig, device.ifindex, &device, reason);
}
return;
case IP4_ADDRESS:
@@ -845,7 +845,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
break;
}
g_signal_emit_by_name (platform, sig, address.ifindex, &address);
g_signal_emit_by_name (platform, sig, address.ifindex, &address, reason);
}
return;
case IP6_ADDRESS:
@@ -853,7 +853,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
NMPlatformIP6Address address;
init_ip6_address (&address, (struct rtnl_addr *) object);
g_signal_emit_by_name (platform, sig, address.ifindex, &address);
g_signal_emit_by_name (platform, sig, address.ifindex, &address, reason);
}
return;
case IP4_ROUTE:
@@ -861,7 +861,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
NMPlatformIP4Route route;
init_ip4_route (&route, (struct rtnl_route *) object);
g_signal_emit_by_name (platform, sig, route.ifindex, &route);
g_signal_emit_by_name (platform, sig, route.ifindex, &route, reason);
}
return;
case IP6_ROUTE:
@@ -869,7 +869,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
NMPlatformIP6Route route;
init_ip6_route (&route, (struct rtnl_route *) object);
g_signal_emit_by_name (platform, sig, route.ifindex, &route);
g_signal_emit_by_name (platform, sig, route.ifindex, &route, reason);
}
return;
default:
@@ -880,7 +880,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
static struct nl_object * build_rtnl_link (int ifindex, const char *name, NMLinkType type);
static gboolean
refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed)
refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed, NMPlatformReason reason)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
auto_nl_object struct nl_object *cached_object = NULL;
@@ -900,7 +900,7 @@ refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed
if (cached_object) {
nl_cache_remove (cached_object);
announce_object (platform, cached_object, REMOVED);
announce_object (platform, cached_object, REMOVED, reason);
}
} else {
g_return_val_if_fail (kernel_object, FALSE);
@@ -912,7 +912,7 @@ refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed
nle = nl_cache_add (cache, kernel_object);
g_return_val_if_fail (!nle, FALSE);
announce_object (platform, kernel_object, cached_object ? CHANGED : ADDED);
announce_object (platform, kernel_object, cached_object ? CHANGED : ADDED, reason);
/* Refresh the master device (even on enslave/release) */
if (object_type_from_nl_object (kernel_object) == LINK) {
@@ -922,12 +922,12 @@ refresh_object (NMPlatform *platform, struct nl_object *object, gboolean removed
if (kernel_master) {
master_object = build_rtnl_link (kernel_master, NULL, NM_LINK_TYPE_NONE);
refresh_object (platform, master_object, FALSE);
refresh_object (platform, master_object, FALSE, NM_PLATFORM_REASON_INTERNAL);
nl_object_put (master_object);
}
if (cached_master && cached_master != kernel_master) {
master_object = build_rtnl_link (cached_master, NULL, NM_LINK_TYPE_NONE);
refresh_object (platform, master_object, FALSE);
refresh_object (platform, master_object, FALSE, NM_PLATFORM_REASON_INTERNAL);
nl_object_put (master_object);
}
}
@@ -959,7 +959,7 @@ add_object (NMPlatform *platform, struct nl_object *obj)
return FALSE;
}
return refresh_object (platform, object, FALSE);
return refresh_object (platform, object, FALSE, NM_PLATFORM_REASON_INTERNAL);
}
/* Decreases the reference count if @obj for convenience */
@@ -992,7 +992,7 @@ delete_object (NMPlatform *platform, struct nl_object *obj)
return FALSE;
}
refresh_object (platform, object, TRUE);
refresh_object (platform, object, TRUE, NM_PLATFORM_REASON_INTERNAL);
return TRUE;
}
@@ -1063,7 +1063,7 @@ event_notification (struct nl_msg *msg, gpointer user_data)
if (!g_hash_table_lookup (priv->udev_devices, GINT_TO_POINTER (ifindex)))
return NL_OK;
}
announce_object (platform, cached_object, REMOVED);
announce_object (platform, cached_object, REMOVED, NM_PLATFORM_REASON_EXTERNAL);
return NL_OK;
case RTM_NEWLINK:
@@ -1084,7 +1084,7 @@ event_notification (struct nl_msg *msg, gpointer user_data)
error ("netlink cache error: %s", nl_geterror (nle));
return NL_OK;
}
announce_object (platform, kernel_object, ADDED);
announce_object (platform, kernel_object, ADDED, NM_PLATFORM_REASON_EXTERNAL);
return NL_OK;
}
/* Ignore non-change
@@ -1101,7 +1101,7 @@ event_notification (struct nl_msg *msg, gpointer user_data)
error ("netlink cache error: %s", nl_geterror (nle));
return NL_OK;
}
announce_object (platform, kernel_object, CHANGED);
announce_object (platform, kernel_object, CHANGED, NM_PLATFORM_REASON_EXTERNAL);
return NL_OK;
default:
@@ -1286,7 +1286,7 @@ link_change (NMPlatform *platform, int ifindex, struct rtnl_link *change)
return FALSE;
}
return refresh_object (platform, (struct nl_object *) rtnllink, FALSE);
return refresh_object (platform, (struct nl_object *) rtnllink, FALSE, NM_PLATFORM_REASON_INTERNAL);
}
static gboolean
@@ -2397,7 +2397,7 @@ udev_device_added (NMPlatform *platform,
return;
}
announce_object (platform, (struct nl_object *) rtnllink, ADDED);
announce_object (platform, (struct nl_object *) rtnllink, ADDED, NM_PLATFORM_REASON_EXTERNAL);
}
static void
@@ -2431,7 +2431,7 @@ udev_device_removed (NMPlatform *platform,
auto_nl_object struct rtnl_link *device = rtnl_link_get (priv->link_cache, ifindex);
if (device)
announce_object (platform, (struct nl_object *) device, REMOVED);
announce_object (platform, (struct nl_object *) device, REMOVED, NM_PLATFORM_REASON_EXTERNAL);
}
}

View File

@@ -27,6 +27,7 @@
#include "nm-platform.h"
#include "nm-logging.h"
#include "nm-enum-types.h"
#define debug(...) nm_log_dbg (LOGD_PLATFORM, __VA_ARGS__)
@@ -1734,7 +1735,7 @@ nm_platform_init (NMPlatform *object)
G_SIGNAL_RUN_FIRST, \
G_CALLBACK (method), \
NULL, NULL, NULL, \
G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER); \
G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_POINTER, NM_TYPE_PLATFORM_REASON);
static void
nm_platform_class_init (NMPlatformClass *platform_class)

View File

@@ -49,6 +49,16 @@ typedef enum {
NM_PLATFORM_ERROR_NO_FIRMWARE
} NMPlatformError;
typedef enum {
NM_PLATFORM_REASON_NONE,
/* Event was requested by NetworkManager. */
NM_PLATFORM_REASON_INTERNAL,
/* Event came from the kernel. */
NM_PLATFORM_REASON_EXTERNAL,
/* Event is a result of cache checking and cleanups. */
NM_PLATFORM_REASON_CACHE_CHECK
} NMPlatformReason;
typedef enum {
/* Please don't interpret type numbers outside nm-platform and use functions
* like nm_platform_link_is_software() and nm_platform_supports_slaves().

View File

@@ -7,7 +7,7 @@
#define IP6_PLEN 64
static void
ip4_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Address *received, SignalData *data)
ip4_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Address *received, NMPlatformReason reason, SignalData *data)
{
g_assert (received);
g_assert_cmpint (received->ifindex, ==, ifindex);
@@ -25,7 +25,7 @@ ip4_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Address *r
}
static void
ip6_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Address *received, SignalData *data)
ip6_address_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Address *received, NMPlatformReason reason, SignalData *data)
{
g_assert (received);
g_assert_cmpint (received->ifindex, ==, ifindex);

View File

@@ -48,7 +48,7 @@ free_signal (SignalData *data)
}
void
link_callback (NMPlatform *platform, int ifindex, NMPlatformLink *received, SignalData *data)
link_callback (NMPlatform *platform, int ifindex, NMPlatformLink *received, NMPlatformReason reason, SignalData *data)
{
GArray *links;

View File

@@ -33,7 +33,7 @@ void accept_signal (SignalData *data);
void wait_signal (SignalData *data);
void free_signal (SignalData *data);
void link_callback (NMPlatform *platform, int ifindex, NMPlatformLink *received, SignalData *data);
void link_callback (NMPlatform *platform, int ifindex, NMPlatformLink *received, NMPlatformReason reason, SignalData *data);
void run_command (const char *format, ...);

View File

@@ -3,7 +3,7 @@
#define DEVICE_NAME "nm-test-device"
static void
ip4_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Route *received, SignalData *data)
ip4_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Route *received, NMPlatformReason reason, SignalData *data)
{
g_assert (received);
g_assert_cmpint (received->ifindex, ==, ifindex);
@@ -21,7 +21,7 @@ ip4_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP4Route *recei
}
static void
ip6_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Route *received, SignalData *data)
ip6_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Route *received, NMPlatformReason reason, SignalData *data)
{
g_assert (received);
g_assert_cmpint (received->ifindex, ==, ifindex);