Lines Matching defs:xip

256 fmd_xprt_class_hash_insert(fmd_xprt_impl_t *xip,
262 ASSERT(MUTEX_HELD(&xip->xi_lock));
287 fmd_xprt_class_hash_delete(fmd_xprt_impl_t *xip,
293 ASSERT(MUTEX_HELD(&xip->xi_lock));
331 fmd_xprt_subscribe_modhash(fmd_xprt_impl_t *xip, fmd_modhash_t *mhp)
333 fmd_xprt_t *xp = (fmd_xprt_t *)xip;
345 (void) pthread_mutex_lock(&xip->xi_lock);
346 ASSERT(!(xip->xi_flags & FMD_XPRT_SUBSCRIBER));
347 xip->xi_flags |= FMD_XPRT_SUBSCRIBER;
348 (void) pthread_mutex_unlock(&xip->xi_lock);
368 fmd_xprt_transition(fmd_xprt_impl_t *xip,
371 fmd_xprt_t *xp = (fmd_xprt_t *)xip;
376 TRACE((FMD_DBG_XPRT, "xprt %u -> %s\n", xip->xi_id, tag));
378 xip->xi_state = state;
381 (void) pthread_mutex_lock(&xip->xi_stats_lock);
382 fmd_strfree(xip->xi_stats->xs_state.fmds_value.str);
383 xip->xi_stats->xs_state.fmds_value.str = s;
384 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
392 fmd_xprt_subscribe_modhash(xip, fmd.d_mod_hash);
399 if (xip->xi_flags & FMD_XPRT_RDWR) {
407 nvl = fmd_protocol_xprt_ctl(xip->xi_queue->eq_mod,
408 "resource.fm.xprt.run", xip->xi_version);
412 fmd_eventq_insert_at_time(xip->xi_queue, e);
417 fmd_xprt_authupdate(fmd_xprt_impl_t *xip)
419 char *s = fmd_fmri_auth2str(xip->xi_auth);
421 (void) pthread_mutex_lock(&xip->xi_stats_lock);
422 fmd_strfree(xip->xi_stats->xs_authority.fmds_value.str);
423 xip->xi_stats->xs_authority.fmds_value.str = s;
424 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
428 fmd_xprt_vmismatch(fmd_xprt_impl_t *xip, nvlist_t *nvl, uint_t *rversionp)
433 (void) pthread_mutex_lock(&xip->xi_stats_lock);
434 xip->xi_stats->xs_discarded.fmds_value.ui64++;
435 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
437 fmd_xprt_transition(xip, _fmd_xprt_state_err, "ERR");
441 if (rversion > xip->xi_version) {
443 xip->xi_id, rversion, xip->xi_version);
445 (void) pthread_mutex_lock(&xip->xi_stats_lock);
446 xip->xi_stats->xs_discarded.fmds_value.ui64++;
447 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
449 fmd_xprt_transition(xip, _fmd_xprt_state_err, "ERR");
460 fmd_xprt_event_syn(fmd_xprt_impl_t *xip, nvlist_t *nvl)
466 if (fmd_xprt_vmismatch(xip, nvl, &vers))
473 if (xip->xi_auth == NULL &&
476 (void) nvlist_xdup(nvl, &xip->xi_auth, &fmd.d_nva);
477 fmd_xprt_authupdate(xip);
480 nvl = fmd_protocol_xprt_ctl(xip->xi_queue->eq_mod,
481 "resource.fm.xprt.ack", xip->xi_version);
485 fmd_eventq_insert_at_time(xip->xi_queue, e);
487 xip->xi_version = MIN(FM_RSRC_XPRT_VERSION, vers);
488 fmd_xprt_transition(xip, _fmd_xprt_state_sub, "SUB");
492 fmd_xprt_event_ack(fmd_xprt_impl_t *xip, nvlist_t *nvl)
496 if (fmd_xprt_vmismatch(xip, nvl, &vers))
503 if (xip->xi_auth == NULL &&
506 (void) nvlist_xdup(nvl, &xip->xi_auth, &fmd.d_nva);
507 fmd_xprt_authupdate(xip);
510 xip->xi_version = MIN(FM_RSRC_XPRT_VERSION, vers);
511 fmd_xprt_transition(xip, _fmd_xprt_state_sub, "SUB");
524 fmd_xprt_impl_t *xip = arg;
538 FM_LIST_SUSPECT_CLASS, cip->ci_uuid, xip->xi_id);
540 fmd_dispq_dispatch_gid(fmd.d_disp, e, class, xip->xi_queue->eq_sgid);
572 fmd_xprt_event_run(fmd_xprt_impl_t *xip, nvlist_t *nvl)
574 if (!fmd_xprt_vmismatch(xip, nvl, NULL)) {
575 fmd_xprt_transition(xip, _fmd_xprt_state_run, "RUN");
576 fmd_case_hash_apply(fmd.d_cases, fmd_xprt_send_case, xip);
581 fmd_xprt_event_sub(fmd_xprt_impl_t *xip, nvlist_t *nvl)
585 if (fmd_xprt_vmismatch(xip, nvl, NULL))
591 (void) pthread_mutex_lock(&xip->xi_lock);
592 (void) fmd_xprt_class_hash_insert(xip, &xip->xi_lsub, class);
593 (void) pthread_mutex_unlock(&xip->xi_lock);
595 (void) pthread_mutex_lock(&xip->xi_stats_lock);
596 xip->xi_stats->xs_subscriptions.fmds_value.ui64++;
597 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
601 fmd_xprt_event_unsub(fmd_xprt_impl_t *xip, nvlist_t *nvl)
606 if (fmd_xprt_vmismatch(xip, nvl, NULL))
612 (void) pthread_mutex_lock(&xip->xi_lock);
613 (void) fmd_xprt_class_hash_delete(xip, &xip->xi_lsub, class);
614 (void) pthread_mutex_unlock(&xip->xi_lock);
616 (void) pthread_mutex_lock(&xip->xi_stats_lock);
617 xip->xi_stats->xs_subscriptions.fmds_value.ui64--;
618 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
620 nvl = fmd_protocol_xprt_sub(xip->xi_queue->eq_mod,
621 "resource.fm.xprt.unsuback", xip->xi_version, class);
625 fmd_eventq_insert_at_time(xip->xi_queue, e);
629 fmd_xprt_event_unsuback(fmd_xprt_impl_t *xip, nvlist_t *nvl)
633 if (fmd_xprt_vmismatch(xip, nvl, NULL))
639 (void) pthread_mutex_lock(&xip->xi_lock);
640 (void) fmd_xprt_class_hash_delete(xip, &xip->xi_usub, class);
641 (void) pthread_mutex_unlock(&xip->xi_lock);
648 fmd_xprt_event_uuclose(fmd_xprt_impl_t *xip, nvlist_t *nvl)
653 if (fmd_xprt_vmismatch(xip, nvl, NULL))
671 fmd_xprt_event_uuresolved(fmd_xprt_impl_t *xip, nvlist_t *nvl)
676 if (fmd_xprt_vmismatch(xip, nvl, NULL))
694 fmd_xprt_event_updated(fmd_xprt_impl_t *xip, nvlist_t *nvl)
699 if (fmd_xprt_vmismatch(xip, nvl, NULL))
712 if (!(xip->xi_flags & FMD_XPRT_NO_REMOTE_REPAIR)) {
730 fmd_xprt_event_error(fmd_xprt_impl_t *xip, nvlist_t *nvl)
734 (void) pthread_mutex_lock(&xip->xi_stats_lock);
735 xip->xi_stats->xs_discarded.fmds_value.ui64++;
736 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
739 TRACE((FMD_DBG_XPRT, "xprt %u bad event %s\n", xip->xi_id, class));
741 fmd_xprt_transition(xip, _fmd_xprt_state_err, "ERR");
745 fmd_xprt_event_drop(fmd_xprt_impl_t *xip, nvlist_t *nvl)
749 (void) pthread_mutex_lock(&xip->xi_stats_lock);
750 xip->xi_stats->xs_discarded.fmds_value.ui64++;
751 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
754 TRACE((FMD_DBG_XPRT, "xprt %u drop event %s\n", xip->xi_id, class));
761 fmd_xprt_impl_t *xip = fmd_zalloc(sizeof (fmd_xprt_impl_t), FMD_SLEEP);
770 (void) pthread_mutex_init(&xip->xi_lock, NULL);
771 (void) pthread_cond_init(&xip->xi_cv, NULL);
772 (void) pthread_mutex_init(&xip->xi_stats_lock, NULL);
774 xip->xi_auth = auth;
775 xip->xi_data = data;
776 xip->xi_version = FM_RSRC_XPRT_VERSION;
777 xip->xi_flags = flags;
786 xip->xi_id = fmd_idspace_alloc(fmd.d_xprt_ids, xip);
789 xip->xi_flags |= FMD_XPRT_DSUSPENDED;
798 xip->xi_flags |= FMD_XPRT_ISUSPENDED;
811 sizeof (statv[i].fmds_name), "fmd.xprt.%u.%s", xip->xi_id,
815 xip->xi_stats = (fmd_xprt_stat_t *)fmd_ustat_insert(
818 if (xip->xi_stats == NULL)
821 xip->xi_stats->xs_module.fmds_value.str =
824 if (xip->xi_auth != NULL)
825 fmd_xprt_authupdate(xip);
831 xip->xi_queue = fmd_eventq_create(mp, &xip->xi_stats->xs_evqstat,
832 &xip->xi_stats_lock, mp->mod_stats->ms_xprtqlimit.fmds_value.ui32);
834 if (xip->xi_flags & FMD_XPRT_SMASK)
835 fmd_eventq_suspend(xip->xi_queue);
842 fmd_xprt_class_hash_create(&xip->xi_lsub, xip->xi_queue);
843 fmd_xprt_class_hash_create(&xip->xi_rsub, NULL);
844 fmd_xprt_class_hash_create(&xip->xi_usub, fmd.d_rmod->mod_queue);
858 fmd_xprt_transition(xip, _fmd_xprt_state_run, "RUN");
860 fmd_xprt_transition(xip, _fmd_xprt_state_syn, "SYN");
862 fmd_xprt_transition(xip, _fmd_xprt_state_ack, "ACK");
872 (void) snprintf(buf, sizeof (buf), "%s/%u.log", s, xip->xi_id);
873 xip->xi_log = fmd_log_open(fmd.d_rootdir, buf, FMD_LOG_XPRT);
877 fmd_list_append(&mp->mod_transports, xip);
894 if ((xip->xi_thread = fmd_thread_create(mp,
895 (fmd_thread_f *)fmd_xprt_send, xip)) == NULL) {
898 "failed to create thread for transport %u", xip->xi_id);
900 fmd_xprt_destroy((fmd_xprt_t *)xip);
915 fmd_eventq_insert_at_time(xip->xi_queue, e);
918 fmd_dprintf(FMD_DBG_XPRT, "opened transport %u\n", xip->xi_id);
919 return ((fmd_xprt_t *)xip);
925 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
926 fmd_module_t *mp = xip->xi_queue->eq_mod;
927 uint_t id = xip->xi_id;
934 fmd_list_delete(&mp->mod_transports, xip);
940 (void) pthread_mutex_lock(&xip->xi_lock);
942 while (xip->xi_busy != 0)
943 (void) pthread_cond_wait(&xip->xi_cv, &xip->xi_lock);
950 (void) fmd_idspace_free(fmd.d_xprt_ids, xip->xi_id);
952 if (xip->xi_thread != NULL) {
953 fmd_eventq_abort(xip->xi_queue);
955 fmd_thread_destroy(xip->xi_thread, FMD_THREAD_JOIN);
959 if (xip->xi_log != NULL)
960 fmd_log_rele(xip->xi_log);
978 fmd_xprt_class_hash_destroy(&xip->xi_lsub);
979 fmd_xprt_class_hash_destroy(&xip->xi_rsub);
980 fmd_xprt_class_hash_destroy(&xip->xi_usub);
992 sizeof (sp[i].fmds_name), "fmd.xprt.%u.%s", xip->xi_id,
998 fmd_free(xip->xi_stats, sizeof (fmd_xprt_stat_t));
999 fmd_eventq_destroy(xip->xi_queue);
1000 nvlist_free(xip->xi_auth);
1001 fmd_free(xip, sizeof (fmd_xprt_impl_t));
1009 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1013 (void) pthread_mutex_lock(&xip->xi_lock);
1015 oflags = xip->xi_flags;
1016 xip->xi_flags |= flags;
1018 if (!(oflags & FMD_XPRT_SMASK) && (xip->xi_flags & FMD_XPRT_SMASK) != 0)
1019 fmd_eventq_suspend(xip->xi_queue);
1021 (void) pthread_cond_broadcast(&xip->xi_cv);
1023 while (xip->xi_busy != 0)
1024 (void) pthread_cond_wait(&xip->xi_cv, &xip->xi_lock);
1026 (void) pthread_mutex_unlock(&xip->xi_lock);
1032 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1036 (void) pthread_mutex_lock(&xip->xi_lock);
1038 oflags = xip->xi_flags;
1039 xip->xi_flags &= ~flags;
1041 if ((oflags & FMD_XPRT_SMASK) != 0 && !(xip->xi_flags & FMD_XPRT_SMASK))
1042 fmd_eventq_resume(xip->xi_queue);
1044 (void) pthread_cond_broadcast(&xip->xi_cv);
1045 (void) pthread_mutex_unlock(&xip->xi_lock);
1051 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1052 fmd_module_t *mp = xip->xi_queue->eq_mod;
1056 while ((ep = fmd_eventq_delete(xip->xi_queue)) != NULL) {
1063 xip->xi_id, (char *)FMD_EVENT_DATA(ep));
1066 fmd_eventq_done(xip->xi_queue);
1069 fmd_eventq_insert_at_time(xip->xi_queue, ep);
1070 (void) pthread_mutex_lock(&xip->xi_stats_lock);
1071 xip->xi_stats->xs_retried.fmds_value.ui64++;
1072 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
1076 (void) pthread_mutex_lock(&xip->xi_stats_lock);
1077 xip->xi_stats->xs_lost.fmds_value.ui64++;
1078 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
1096 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1101 fmd_module_lock(xip->xi_queue->eq_mod);
1102 cp = fmd_case_create(xip->xi_queue->eq_mod, NULL, NULL);
1104 fmd_module_unlock(xip->xi_queue->eq_mod);
1191 fmd_module_unlock(xip->xi_queue->eq_mod);
1201 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1274 if (xip->xi_flags & FMD_XPRT_EXTERNAL)
1290 if (xip->xi_flags & FMD_XPRT_EXTERNAL)
1310 (xip->xi_flags & FMD_XPRT_HCONLY)) {
1324 (xip->xi_flags & FMD_XPRT_HC_PRESENT_ONLY)) {
1338 fmd_module_lock(xip->xi_queue->eq_mod);
1339 if ((cp = fmd_case_recreate(xip->xi_queue->eq_mod, xp,
1348 fmd_module_unlock(xip->xi_queue->eq_mod);
1443 fmd_module_unlock(xip->xi_queue->eq_mod);
1449 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1467 (void) pthread_mutex_lock(&xip->xi_lock);
1469 while (xip->xi_flags & (FMD_XPRT_DSUSPENDED | FMD_XPRT_ISUSPENDED)) {
1472 (void) pthread_mutex_unlock(&xip->xi_lock);
1476 (void) pthread_cond_wait(&xip->xi_cv, &xip->xi_lock);
1479 xip->xi_busy++;
1480 ASSERT(xip->xi_busy != 0);
1482 (void) pthread_mutex_unlock(&xip->xi_lock);
1484 (void) pthread_mutex_lock(&xip->xi_stats_lock);
1485 xip->xi_stats->xs_received.fmds_value.ui64++;
1486 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
1492 (void) pthread_mutex_lock(&xip->xi_stats_lock);
1493 xip->xi_stats->xs_discarded.fmds_value.ui64++;
1494 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
1500 fmd_dprintf(FMD_DBG_XPRT, "xprt %u %s %s\n", xip->xi_id,
1531 (void) pthread_mutex_lock(&xip->xi_stats_lock);
1532 xip->xi_stats->xs_discarded.fmds_value.ui64++;
1533 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
1547 xip->xi_id, (void *)nvl, class);
1549 (void) pthread_mutex_lock(&xip->xi_stats_lock);
1550 xip->xi_stats->xs_timeouts.fmds_value.ui64++;
1551 (void) pthread_mutex_unlock(&xip->xi_stats_lock);
1589 if (xip->xi_log != NULL) {
1592 fmd_log_append(xip->xi_log, e, NULL);
1610 for (xrp = xip->xi_state; xrp->xr_class != NULL; xrp++) {
1613 xrp->xr_func(xip, nvl);
1651 if (xip->xi_flags & FMD_XPRT_CACHE_AS_LOCAL)
1671 fmd_module_lock(xip->xi_queue->eq_mod);
1683 fmd_module_unlock(xip->xi_queue->eq_mod);
1698 fmd_module_lock(xip->xi_queue->eq_mod);
1707 fmd_module_unlock(xip->xi_queue->eq_mod);
1717 fmd_module_lock(xip->xi_queue->eq_mod);
1729 fmd_module_unlock(xip->xi_queue->eq_mod);
1735 if (logonly == FMD_B_TRUE || (xip->xi_flags & FMD_XPRT_EXTERNAL)) {
1749 (void) pthread_mutex_lock(&xip->xi_lock);
1751 ASSERT(xip->xi_busy != 0);
1752 xip->xi_busy--;
1754 (void) pthread_cond_broadcast(&xip->xi_cv);
1755 (void) pthread_mutex_unlock(&xip->xi_lock);
1761 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1767 if ((xip->xi_flags & FMD_XPRT_RDWR) == FMD_XPRT_RDONLY)
1770 TRACE((FMD_DBG_XPRT, "xprt %u closing case %s\n", xip->xi_id, uuid));
1772 nvl = fmd_protocol_xprt_uuclose(xip->xi_queue->eq_mod,
1773 "resource.fm.xprt.uuclose", xip->xi_version, uuid);
1777 fmd_eventq_insert_at_time(xip->xi_queue, e);
1786 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1792 if ((xip->xi_flags & FMD_XPRT_RDWR) == FMD_XPRT_RDONLY)
1795 TRACE((FMD_DBG_XPRT, "xprt %u resolving case %s\n", xip->xi_id, uuid));
1797 nvl = fmd_protocol_xprt_uuresolved(xip->xi_queue->eq_mod,
1798 "resource.fm.xprt.uuresolved", xip->xi_version, uuid);
1802 fmd_eventq_insert_at_time(xip->xi_queue, e);
1812 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1818 if ((xip->xi_flags & FMD_XPRT_RDWR) == FMD_XPRT_RDONLY)
1821 TRACE((FMD_DBG_XPRT, "xprt %u updating case %s\n", xip->xi_id, uuid));
1823 nvl = fmd_protocol_xprt_updated(xip->xi_queue->eq_mod,
1824 "resource.fm.xprt.updated", xip->xi_version, uuid, statusp,
1829 fmd_eventq_insert_at_time(xip->xi_queue, e);
1840 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1847 if ((xip->xi_flags & FMD_XPRT_RDWR) == FMD_XPRT_RDONLY)
1850 if (!(xip->xi_flags & FMD_XPRT_SUBSCRIBER))
1853 (void) pthread_mutex_lock(&xip->xi_lock);
1854 refs = fmd_xprt_class_hash_insert(xip, &xip->xi_rsub, class);
1855 (void) pthread_mutex_unlock(&xip->xi_lock);
1861 "xprt %u subscribing to %s\n", xip->xi_id, class);
1863 nvl = fmd_protocol_xprt_sub(xip->xi_queue->eq_mod,
1864 "resource.fm.xprt.subscribe", xip->xi_version, class);
1868 fmd_eventq_insert_at_time(xip->xi_queue, e);
1878 fmd_xprt_impl_t *xip = (fmd_xprt_impl_t *)xp;
1885 if ((xip->xi_flags & FMD_XPRT_RDWR) == FMD_XPRT_RDONLY)
1888 if (!(xip->xi_flags & FMD_XPRT_SUBSCRIBER))
1895 (void) pthread_mutex_lock(&xip->xi_lock);
1897 if ((refs = fmd_xprt_class_hash_delete(xip, &xip->xi_rsub, class)) == 0)
1898 (void) fmd_xprt_class_hash_insert(xip, &xip->xi_usub, class);
1900 (void) pthread_mutex_unlock(&xip->xi_lock);
1906 "xprt %u unsubscribing from %s\n", xip->xi_id, class);
1908 nvl = fmd_protocol_xprt_sub(xip->xi_queue->eq_mod,
1909 "resource.fm.xprt.unsubscribe", xip->xi_version, class);
1913 fmd_eventq_insert_at_time(xip->xi_queue, e);