Lines Matching full:event

45  * events.c - contains routines which create/destroy event sources,
46 * handle the event queue and process events from that queue.
49 /* Add new event sources here. */
61 /* Counter for event ids */
107 * Now we can safely initialize event sources. in nwamd_event_sources_init()
133 * event queue can be sorted by nearest time to present.
168 nwamd_event_t event; in nwamd_event_queue_fini() local
170 while ((event = uu_list_teardown(event_queue, &cookie)) != NULL) in nwamd_event_queue_fini()
171 nwamd_event_fini(event); in nwamd_event_queue_fini()
181 nwamd_event_t event; in nwamd_event_init() local
183 event = calloc(1, sizeof (struct nwamd_event)); in nwamd_event_init()
184 if (event == NULL) { in nwamd_event_init()
185 nlog(LOG_ERR, "nwamd_event_init: could not create %s event for " in nwamd_event_init()
191 /* Is this an externally-visible event? */ in nwamd_event_init()
193 event->event_send = B_TRUE; in nwamd_event_init()
194 event->event_msg = calloc(1, sizeof (struct nwam_event) + size); in nwamd_event_init()
195 if (event->event_msg == NULL) { in nwamd_event_init()
197 "nwamd_event_init: could not create %s event", in nwamd_event_init()
199 free(event); in nwamd_event_init()
202 event->event_msg->nwe_type = type; in nwamd_event_init()
203 event->event_msg->nwe_size = sizeof (struct nwam_event) + size; in nwamd_event_init()
205 event->event_send = B_FALSE; in nwamd_event_init()
206 event->event_msg = NULL; in nwamd_event_init()
209 event->event_type = type; in nwamd_event_init()
212 (void) strlcpy(event->event_object, object_name, in nwamd_event_init()
214 event->event_object_type = object_type; in nwamd_event_init()
216 event->event_object[0] = '\0'; in nwamd_event_init()
219 /* Set event id */ in nwamd_event_init()
220 event->event_id = atomic_add_64_nv(&event_id_counter, 1); in nwamd_event_init()
221 (void) clock_gettime(CLOCK_REALTIME, &event->event_time); in nwamd_event_init()
223 return (event); in nwamd_event_init()
227 nwamd_event_do_not_send(nwamd_event_t event) in nwamd_event_do_not_send() argument
230 "event %s for object %s", nwamd_event_name(event->event_type), in nwamd_event_do_not_send()
231 event->event_object[0] != '\0' ? in nwamd_event_do_not_send()
232 event->event_object : "<no object>"); in nwamd_event_do_not_send()
233 event->event_send = B_FALSE; in nwamd_event_do_not_send()
237 nwamd_event_fini(nwamd_event_t event) in nwamd_event_fini() argument
239 if (event != NULL) { in nwamd_event_fini()
240 free(event->event_msg); in nwamd_event_fini()
241 free(event); in nwamd_event_fini()
250 nwamd_event_t event; in nwamd_event_init_object_action() local
252 event = nwamd_event_init(NWAM_EVENT_TYPE_OBJECT_ACTION, in nwamd_event_init_object_action()
254 if (event == NULL) in nwamd_event_init_object_action()
257 event->event_msg->nwe_data.nwe_object_action.nwe_action = object_action; in nwamd_event_init_object_action()
258 event->event_msg->nwe_data.nwe_object_action.nwe_object_type = in nwamd_event_init_object_action()
260 (void) strlcpy(event->event_msg->nwe_data.nwe_object_action.nwe_name, in nwamd_event_init_object_action()
262 sizeof (event->event_msg->nwe_data.nwe_object_action.nwe_name)); in nwamd_event_init_object_action()
264 event->event_msg->nwe_data.nwe_object_action.nwe_parent[0] = in nwamd_event_init_object_action()
266 return (event); in nwamd_event_init_object_action()
269 (event->event_msg->nwe_data.nwe_object_action.nwe_parent, in nwamd_event_init_object_action()
271 sizeof (event->event_msg->nwe_data.nwe_object_action.nwe_parent)); in nwamd_event_init_object_action()
272 return (event); in nwamd_event_init_object_action()
279 nwamd_event_t event; in nwamd_event_init_object_state() local
281 event = nwamd_event_init(NWAM_EVENT_TYPE_OBJECT_STATE, in nwamd_event_init_object_state()
283 if (event == NULL) in nwamd_event_init_object_state()
286 event->event_msg->nwe_data.nwe_object_state.nwe_state = state; in nwamd_event_init_object_state()
287 event->event_msg->nwe_data.nwe_object_state.nwe_aux_state = aux_state; in nwamd_event_init_object_state()
288 event->event_msg->nwe_data.nwe_object_state.nwe_object_type = in nwamd_event_init_object_state()
290 (void) strlcpy(event->event_msg->nwe_data.nwe_object_state.nwe_name, in nwamd_event_init_object_state()
292 sizeof (event->event_msg->nwe_data.nwe_object_state.nwe_name)); in nwamd_event_init_object_state()
294 return (event); in nwamd_event_init_object_state()
300 nwamd_event_t event; in nwamd_event_init_priority_group_change() local
302 event = nwamd_event_init(NWAM_EVENT_TYPE_PRIORITY_GROUP, in nwamd_event_init_priority_group_change()
304 if (event == NULL) in nwamd_event_init_priority_group_change()
307 event->event_msg->nwe_data.nwe_priority_group_info.nwe_priority = in nwamd_event_init_priority_group_change()
310 return (event); in nwamd_event_init_priority_group_change()
316 nwamd_event_t event; in nwamd_event_init_link_action() local
327 event = nwamd_event_init(NWAM_EVENT_TYPE_LINK_ACTION, in nwamd_event_init_link_action()
330 if (event == NULL) in nwamd_event_init_link_action()
333 (void) strlcpy(event->event_msg->nwe_data.nwe_link_action.nwe_name, in nwamd_event_init_link_action()
335 sizeof (event->event_msg->nwe_data.nwe_link_action.nwe_name)); in nwamd_event_init_link_action()
336 event->event_msg->nwe_data.nwe_link_action.nwe_action = link_action; in nwamd_event_init_link_action()
338 return (event); in nwamd_event_init_link_action()
344 nwamd_event_t event; in nwamd_event_init_link_state() local
356 event = nwamd_event_init(NWAM_EVENT_TYPE_LINK_STATE, in nwamd_event_init_link_state()
359 if (event == NULL) in nwamd_event_init_link_state()
362 (void) strlcpy(event->event_msg->nwe_data.nwe_link_state.nwe_name, name, in nwamd_event_init_link_state()
363 sizeof (event->event_msg->nwe_data.nwe_link_state.nwe_name)); in nwamd_event_init_link_state()
364 event->event_msg->nwe_data.nwe_link_state.nwe_link_up = up; in nwamd_event_init_link_state()
366 return (event); in nwamd_event_init_link_state()
373 nwamd_event_t event; in nwamd_event_init_if_state() local
386 event = nwamd_event_init(NWAM_EVENT_TYPE_IF_STATE, in nwamd_event_init_if_state()
389 if (event == NULL) in nwamd_event_init_if_state()
392 (void) strlcpy(event->event_msg->nwe_data.nwe_if_state.nwe_name, in nwamd_event_init_if_state()
394 sizeof (event->event_msg->nwe_data.nwe_if_state.nwe_name)); in nwamd_event_init_if_state()
395 event->event_msg->nwe_data.nwe_if_state.nwe_flags = flags; in nwamd_event_init_if_state()
396 event->event_msg->nwe_data.nwe_if_state.nwe_addr_added = addr_added; in nwamd_event_init_if_state()
397 event->event_msg->nwe_data.nwe_if_state.nwe_addr_valid = (addr != NULL); in nwamd_event_init_if_state()
400 bcopy(addr, &(event->event_msg->nwe_data.nwe_if_state.nwe_addr), in nwamd_event_init_if_state()
406 &(event->event_msg->nwe_data.nwe_if_state.nwe_netmask), in nwamd_event_init_if_state()
411 return (event); in nwamd_event_init_if_state()
420 nwamd_event_t event; in nwamd_event_init_wlan() local
433 "event type %s (%d)", nwamd_event_name(type), type); in nwamd_event_init_wlan()
444 event = nwamd_event_init(type, NWAM_OBJECT_TYPE_NCU, size, object_name); in nwamd_event_init_wlan()
446 if (event == NULL) in nwamd_event_init_wlan()
449 (void) strlcpy(event->event_msg->nwe_data.nwe_wlan_info.nwe_name, name, in nwamd_event_init_wlan()
450 sizeof (event->event_msg->nwe_data.nwe_wlan_info.nwe_name)); in nwamd_event_init_wlan()
451 event->event_msg->nwe_data.nwe_wlan_info.nwe_connected = connected; in nwamd_event_init_wlan()
452 event->event_msg->nwe_data.nwe_wlan_info.nwe_num_wlans = num_wlans; in nwamd_event_init_wlan()
455 (void) memcpy(event->event_msg->nwe_data.nwe_wlan_info.nwe_wlans, wlans, in nwamd_event_init_wlan()
458 return (event); in nwamd_event_init_wlan()
483 * Add event to the event list.
486 nwamd_event_enqueue(nwamd_event_t event) in nwamd_event_enqueue() argument
488 nwamd_event_enqueue_timed(event, 0); in nwamd_event_enqueue()
492 * Schedule an event to be added to the event list for future processing.
493 * The event will be scheduled in delta_seconds seconds mod schedule delay and
497 nwamd_event_enqueue_timed(nwamd_event_t event, int delta_seconds) in nwamd_event_enqueue_timed() argument
501 nlog(LOG_DEBUG, "enqueueing event %lld %d (%s) for object %s in %ds", in nwamd_event_enqueue_timed()
502 event->event_id, event->event_type, in nwamd_event_enqueue_timed()
503 nwamd_event_name(event->event_type), in nwamd_event_enqueue_timed()
504 event->event_object[0] != 0 ? event->event_object : "none", in nwamd_event_enqueue_timed()
507 (void) clock_gettime(CLOCK_REALTIME, &event->event_time); in nwamd_event_enqueue_timed()
508 event->event_time.tv_sec += delta_seconds; in nwamd_event_enqueue_timed()
510 uu_list_node_init(event, &event->event_node, event_pool); in nwamd_event_enqueue_timed()
515 * Find appropriate location to insert the event based on time. in nwamd_event_enqueue_timed()
517 (void) uu_list_find(event_queue, event, NULL, &idx); in nwamd_event_enqueue_timed()
518 (void) uu_list_insert(event_queue, event, idx); in nwamd_event_enqueue_timed()
525 * Is the specified event enqueued on the event (or pending event queue)
532 nwamd_event_t event; in nwamd_event_enqueued() local
535 for (event = uu_list_first(event_queue); in nwamd_event_enqueued()
536 event != NULL; in nwamd_event_enqueued()
537 event = uu_list_next(event_queue, event)) { in nwamd_event_enqueued()
538 if (event->event_type != event_type) in nwamd_event_enqueued()
541 event->event_object_type != object_type) in nwamd_event_enqueued()
543 if (object != NULL && strcmp(object, event->event_object) != 0) in nwamd_event_enqueued()
572 * Remove event at head of event list for processing. This takes a number of
574 * nothing on the queue then it returns an event which says that the queue
580 nwamd_event_t event; in nwamd_event_dequeue() local
583 event = uu_list_first(event_queue); in nwamd_event_dequeue()
584 if (event == NULL && nsec == 0) { in nwamd_event_dequeue()
588 } while ((event = uu_list_first(event_queue)) == NULL); in nwamd_event_dequeue()
600 * Keep going as long as the first event hasn't matured and in nwamd_event_dequeue()
603 while ((event == NULL || !in_past(event->event_time)) && in nwamd_event_dequeue()
609 * no maximum waittime - just use the event in nwamd_event_dequeue()
610 * both an event and cap - take the least one in nwamd_event_dequeue()
614 eventwait = event->event_time; in nwamd_event_dequeue()
615 } else if (event != NULL) { in nwamd_event_dequeue()
617 diff = SEC_TO_NSEC(event->event_time.tv_sec - in nwamd_event_dequeue()
619 event->event_time.tv_nsec - waitcap.tv_nsec; in nwamd_event_dequeue()
624 eventwait = event->event_time; in nwamd_event_dequeue()
627 * Note that if the event is NULL then nsec is in nwamd_event_dequeue()
635 event = uu_list_first(event_queue); in nwamd_event_dequeue()
641 * The event at the top of the queue might be mature in which case in nwamd_event_dequeue()
643 * quiesced queue event. in nwamd_event_dequeue()
645 if (event != NULL && in_past(event->event_time)) { in nwamd_event_dequeue()
646 uu_list_remove(event_queue, event); in nwamd_event_dequeue()
647 uu_list_node_fini(event, &event->event_node, event_pool); in nwamd_event_dequeue()
649 event = nwamd_event_init(NWAM_EVENT_TYPE_QUEUE_QUIET, in nwamd_event_dequeue()
653 if (event != NULL) in nwamd_event_dequeue()
655 "dequeueing event %lld of type %d (%s) for object %s", in nwamd_event_dequeue()
656 event->event_id, event->event_type, in nwamd_event_dequeue()
657 nwamd_event_name(event->event_type), in nwamd_event_dequeue()
658 event->event_object[0] != 0 ? event->event_object : in nwamd_event_dequeue()
663 return (event); in nwamd_event_dequeue()
672 nlog(LOG_DEBUG, "nwamd_event_send: tossing event as nwamd " in nwamd_event_send()
687 * - event method is non-null
688 * - event method is valid for current object state (determined by
694 nwamd_event_run_method(nwamd_event_t event) in nwamd_event_run_method() argument
699 event_methods = nwamd_object_event_methods(event->event_object_type); in nwamd_event_run_method()
702 if (shutting_down && event->event_type != NWAM_EVENT_TYPE_OBJECT_FINI) { in nwamd_event_run_method()
704 "event %s for object %s", in nwamd_event_run_method()
705 nwamd_event_name(event->event_type), event->event_object); in nwamd_event_run_method()
713 event->event_type && in nwamd_event_run_method()
716 "(%p) %s: running method for event %s", in nwamd_event_run_method()
717 (void *)event, event->event_object, in nwamd_event_run_method()
718 nwamd_event_name(event->event_type)); in nwamd_event_run_method()
720 event_methods[i].event_method(event); in nwamd_event_run_method()
724 nlog(LOG_DEBUG, "(%p) %s: no matching method for event %d (%s)", in nwamd_event_run_method()
725 (void *)event, event->event_object, event->event_type, in nwamd_event_run_method()
726 nwamd_event_name(event->event_type)); in nwamd_event_run_method()
764 * Event handler thread
768 * for .1s) until we see the queue quiet event and then block.
777 nwamd_event_t event; in nwamd_event_handler() local
782 * the function that will process the event. in nwamd_event_handler()
785 event = nwamd_event_dequeue(queue_quiet_time); in nwamd_event_handler()
790 * This is an event with no associated object. in nwamd_event_handler()
792 if (event->event_object[0] == '\0') { in nwamd_event_handler()
793 switch (event->event_type) { in nwamd_event_handler()
797 * The only action for an INIT event in nwamd_event_handler()
798 * is to relay it to event listeners, in nwamd_event_handler()
805 event->event_msg->nwe_data. in nwamd_event_handler()
829 nwamd_event_run_method(event); in nwamd_event_handler()
857 "event %d (%s)had no object associated " in nwamd_event_handler()
858 "with it", event->event_type, in nwamd_event_handler()
859 nwamd_event_name(event->event_type)); in nwamd_event_handler()
864 * Event has an associated object - run event method in nwamd_event_handler()
867 nwamd_event_run_method(event); in nwamd_event_handler()
870 * Send associated message to listeners if event type is in nwamd_event_handler()
873 if (event->event_send) in nwamd_event_handler()
874 nwamd_event_send(event->event_msg); in nwamd_event_handler()
876 nwamd_event_fini(event); in nwamd_event_handler()
878 /* If we get here, we got a shutdown event. */ in nwamd_event_handler()