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