Skip to content

Commit

Permalink
events: emit device-change event on newlink
Browse files Browse the repository at this point in the history
Emit device-change events on newlink netlink events,
which change things without to change the UP states.
  • Loading branch information
mtomaschewski committed Aug 27, 2014
1 parent 90e310e commit 3521a0d
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 4 deletions.
1 change: 1 addition & 0 deletions include/wicked/constants.h
Expand Up @@ -104,6 +104,7 @@ typedef enum ni_modem_type {
typedef enum ni_event {
NI_EVENT_DEVICE_CREATE = 0,
NI_EVENT_DEVICE_DELETE,
NI_EVENT_DEVICE_CHANGE,
NI_EVENT_DEVICE_READY,
NI_EVENT_DEVICE_UP,
NI_EVENT_DEVICE_DOWN,
Expand Down
6 changes: 6 additions & 0 deletions schema/interface.xml
Expand Up @@ -335,6 +335,12 @@
e.g. udev finished its rename work and the name is final.
</description>
</signal>
<signal name="deviceChange">
<description>
This generic signal is emitted whenever the kernel emits newlink event
without any changes of the IFF_UP state flags of the device.
</description>
</signal>
<signal name="deviceUp">
<description>
This signal is emitted whenever a device's IFF_UP flag is set.
Expand Down
1 change: 1 addition & 0 deletions src/dbus-objects/interface.c
Expand Up @@ -981,6 +981,7 @@ __ni_objectmodel_device_event(ni_dbus_server_t *server, ni_dbus_object_t *object
static ni_intmap_t __ni_objectmodel_event_names[] = {
{ "deviceCreate", NI_EVENT_DEVICE_CREATE },
{ "deviceDelete", NI_EVENT_DEVICE_DELETE },
{ "deviceChange", NI_EVENT_DEVICE_CHANGE },
{ "deviceReady", NI_EVENT_DEVICE_READY },
{ "deviceUp", NI_EVENT_DEVICE_UP },
{ "deviceDown", NI_EVENT_DEVICE_DOWN },
Expand Down
17 changes: 13 additions & 4 deletions src/ifevent.c
Expand Up @@ -169,13 +169,14 @@ __ni_netdev_process_events(ni_netconfig_t *nc, ni_netdev_t *dev, unsigned int ol
};
size_t flags = sizeof(flag_transitions)/sizeof(flag_transitions[0]);
unsigned int i, new_flags, flags_changed;
ni_uint_array_t events = NI_UINT_ARRAY_INIT;

new_flags = dev->link.ifflags;
flags_changed = old_flags ^ new_flags;

if (dev->created) {
dev->created = 0;
__ni_netdev_event(nc, dev, NI_EVENT_DEVICE_CREATE);
ni_uint_array_append(&events, NI_EVENT_DEVICE_CREATE);
}

/* transition up */
Expand All @@ -184,7 +185,7 @@ __ni_netdev_process_events(ni_netconfig_t *nc, ni_netdev_t *dev, unsigned int ol
if ((flags_changed & edge->flag) == 0)
continue;
if (new_flags & edge->flag) {
__ni_netdev_event(nc, dev, edge->event_up);
ni_uint_array_append(&events, edge->event_up);
}
}

Expand All @@ -198,14 +199,22 @@ __ni_netdev_process_events(ni_netconfig_t *nc, ni_netdev_t *dev, unsigned int ol
ni_ipv6_ra_info_flush(&dev->ipv6->radv);

if (edge->event_down)
__ni_netdev_event(nc, dev, edge->event_down);
ni_uint_array_append(&events, edge->event_down);
}
}

if (dev->deleted) {
dev->deleted = 0;
__ni_netdev_event(nc, dev, NI_EVENT_DEVICE_DELETE);
ni_uint_array_append(&events, NI_EVENT_DEVICE_DELETE);
} else
if (events.count == 0) {
__ni_netdev_event(nc, dev, NI_EVENT_DEVICE_CHANGE);
}

for (i = 0; i < events.count; ++i) {
__ni_netdev_event(nc, dev, events.data[i]);
}
ni_uint_array_destroy(&events);
}


Expand Down
1 change: 1 addition & 0 deletions src/names.c
Expand Up @@ -448,6 +448,7 @@ ni_arphrd_type_to_name(unsigned int type)
static const ni_intmap_t __event_names[] = {
{ "device-create", NI_EVENT_DEVICE_CREATE },
{ "device-delete", NI_EVENT_DEVICE_DELETE },
{ "device-change", NI_EVENT_DEVICE_CHANGE },
{ "device-ready", NI_EVENT_DEVICE_READY },
{ "device-up", NI_EVENT_DEVICE_UP },
{ "device-down", NI_EVENT_DEVICE_DOWN },
Expand Down

0 comments on commit 3521a0d

Please sign in to comment.