Mercurial > illumos > illumos-gate
comparison usr/src/cmd/fm/modules/common/sensor-transport/sensor_transport.c @ 12979:ab9ae749152f
PSARC/2009/617 Software Events Notification Parameters CLI
PSARC/2009/618 snmp-notify: SNMP Notification Daemon for Software Events
PSARC/2009/619 smtp-notify: Email Notification Daemon for Software Events
PSARC/2010/225 fmd for non-global Solaris zones
PSARC/2010/226 Solaris Instance UUID
PSARC/2010/227 nvlist_nvflag(3NVPAIR)
PSARC/2010/228 libfmevent additions
PSARC/2010/257 sysevent_evc_setpropnvl and sysevent_evc_getpropnvl
PSARC/2010/265 FMRI and FMA Event Stabilty, 'ireport' category 1 event class, and the 'sw' FMRI scheme
PSARC/2010/278 FMA/SMF integration: instance state transitions
PSARC/2010/279 Modelling panics within FMA
PSARC/2010/290 logadm.conf upgrade
6392476 fmdump needs to pretty-print
6393375 userland ereport/ireport event generation interfaces
6445732 Add email notification agent for FMA and software events
6804168 RFE: Allow an efficient means to monitor SMF services status changes
6866661 scf_values_destroy(3SCF) will segfault if is passed NULL
6884709 Add snmp notification agent for FMA and software events
6884712 Add private interface to tap into libfmd_msg macro expansion capabilities
6897919 fmd to run in a non-global zone
6897937 fmd use of non-private doors is not safe
6900081 add a UUID to Solaris kernel image for use in crashdump identification
6914884 model panic events as a defect diagnosis in FMA
6944862 fmd_case_open_uuid, fmd_case_uuisresolved, fmd_nvl_create_defect
6944866 log legacy sysevents in fmd
6944867 enumerate svc scheme in topo
6944868 software-diagnosis and software-response fmd modules
6944870 model SMF maintenance state as a defect diagnosis in FMA
6944876 savecore runs in foreground for systems with zfs root and dedicated dump
6965796 Implement notification parameters for SMF state transitions and FMA events
6968287 SUN-FM-MIB.mib needs to be updated to reflect Oracle information
6972331 logadm.conf upgrade PSARC/2010/290
author | Gavin Maltby <gavin.maltby@oracle.com> |
---|---|
date | Fri, 30 Jul 2010 17:04:17 +1000 |
parents | dac6771300a8 |
children |
comparison
equal
deleted
inserted
replaced
12978:19d842faf8e4 | 12979:ab9ae749152f |
---|---|
17 * information: Portions Copyright [yyyy] [name of copyright owner] | 17 * information: Portions Copyright [yyyy] [name of copyright owner] |
18 * | 18 * |
19 * CDDL HEADER END | 19 * CDDL HEADER END |
20 */ | 20 */ |
21 /* | 21 /* |
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. | 22 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. |
23 * Use is subject to license terms. | |
24 */ | 23 */ |
25 | 24 |
26 #include <fm/fmd_api.h> | 25 #include <fm/fmd_api.h> |
27 #include <fm/libtopo.h> | 26 #include <fm/libtopo.h> |
28 #include <fm/topo_hc.h> | 27 #include <fm/topo_hc.h> |
68 st_stats_t st_stats = { | 67 st_stats_t st_stats = { |
69 { "bad_fmri", FMD_TYPE_UINT64, "bad or missing resource/FRU FMRI" }, | 68 { "bad_fmri", FMD_TYPE_UINT64, "bad or missing resource/FRU FMRI" }, |
70 { "topo_errors", FMD_TYPE_UINT64, "errors walking topology" }, | 69 { "topo_errors", FMD_TYPE_UINT64, "errors walking topology" }, |
71 { "repairs", FMD_TYPE_UINT64, "auto repairs" } | 70 { "repairs", FMD_TYPE_UINT64, "auto repairs" } |
72 }; | 71 }; |
72 | |
73 static int st_check_component_complaints; | |
74 static int have_complained; | |
73 | 75 |
74 static int | 76 static int |
75 st_check_component(topo_hdl_t *thp, tnode_t *node, void *arg) | 77 st_check_component(topo_hdl_t *thp, tnode_t *node, void *arg) |
76 { | 78 { |
77 sensor_transport_t *stp = arg; | 79 sensor_transport_t *stp = arg; |
115 } | 117 } |
116 | 118 |
117 if (topo_method_invoke(node, TOPO_METH_SENSOR_FAILURE, | 119 if (topo_method_invoke(node, TOPO_METH_SENSOR_FAILURE, |
118 TOPO_METH_SENSOR_FAILURE_VERSION, NULL, &nvl, &err) != 0) { | 120 TOPO_METH_SENSOR_FAILURE_VERSION, NULL, &nvl, &err) != 0) { |
119 if (err == ETOPO_METHOD_NOTSUP) { | 121 if (err == ETOPO_METHOD_NOTSUP) { |
120 fmd_hdl_debug(hdl, "Method %s not supported on %s=%d", | 122 st_check_component_complaints++; |
121 TOPO_METH_SENSOR_FAILURE, name, | 123 if (!have_complained) { |
122 topo_node_instance(node)); | 124 fmd_hdl_debug(hdl, "Method %s not supported " |
125 "on %s=%d", TOPO_METH_SENSOR_FAILURE, name, | |
126 topo_node_instance(node)); | |
127 } | |
123 nvlist_free(rsrc); | 128 nvlist_free(rsrc); |
124 return (0); | 129 return (0); |
125 } | 130 } |
126 nvl = NULL; | 131 nvl = NULL; |
127 } | 132 } |
269 nvlist_free(rsrc); | 274 nvlist_free(rsrc); |
270 nvlist_free(nvl); | 275 nvlist_free(nvl); |
271 return (0); | 276 return (0); |
272 } | 277 } |
273 | 278 |
279 int st_timeout_verbose = 0; | |
280 | |
274 /*ARGSUSED*/ | 281 /*ARGSUSED*/ |
275 static void | 282 static void |
276 st_timeout(fmd_hdl_t *hdl, id_t id, void *data) | 283 st_timeout(fmd_hdl_t *hdl, id_t id, void *data) |
277 { | 284 { |
278 sensor_transport_t *stp; | 285 sensor_transport_t *stp; |
279 sensor_fault_t *sfp, **current; | 286 sensor_fault_t *sfp, **current; |
280 topo_hdl_t *thp; | 287 topo_hdl_t *thp; |
281 topo_walk_t *twp; | 288 topo_walk_t *twp; |
282 int err; | 289 int err; |
283 | 290 |
284 fmd_hdl_debug(hdl, "timeout: checking topology"); | 291 if (st_timeout_verbose) |
292 fmd_hdl_debug(hdl, "timeout: checking topology"); | |
285 | 293 |
286 stp = fmd_hdl_getspecific(hdl); | 294 stp = fmd_hdl_getspecific(hdl); |
287 thp = fmd_hdl_topo_hold(hdl, TOPO_VERSION); | 295 thp = fmd_hdl_topo_hold(hdl, TOPO_VERSION); |
288 | 296 |
289 if ((twp = topo_walk_init(thp, FM_FMRI_SCHEME_HC, st_check_component, | 297 if ((twp = topo_walk_init(thp, FM_FMRI_SCHEME_HC, st_check_component, |
292 fmd_hdl_error(hdl, "failed to walk topology: %s\n", | 300 fmd_hdl_error(hdl, "failed to walk topology: %s\n", |
293 topo_strerror(err)); | 301 topo_strerror(err)); |
294 st_stats.st_topo_errs.fmds_value.ui64++; | 302 st_stats.st_topo_errs.fmds_value.ui64++; |
295 return; | 303 return; |
296 } | 304 } |
305 | |
306 if (st_check_component_complaints) | |
307 have_complained++; | |
297 | 308 |
298 /* | 309 /* |
299 * Initialize values in our internal FRU list for this iteration of | 310 * Initialize values in our internal FRU list for this iteration of |
300 * sensor reads. Keep track of whether the FRU was faulted in the | 311 * sensor reads. Keep track of whether the FRU was faulted in the |
301 * previous pass so we don't send multiple ereports for the same | 312 * previous pass so we don't send multiple ereports for the same |