annotate usr/src/cmd/fm/fmadm/common/faulty.c @ 10234:c4cea2ed5803

6839705 libtopo needs updates in order to cope with ILOM 3 6840169 libtopo: topo xml schema and parsing code needs to be extended to support defining array propvals 6840764 fmtopo can't print TOPO_TYPE_INT32_ARRAY and TOPO_TYPE_UINT64_ARRAY propvals 6844530 dimm/cs serial propmethods in chip enumerator needlessly recompute IPMI entity name 6836314 add support for sensor-transport module on ILOM-based X4450 platforms 6844635 libtopo: pull chassis-specific xml out of i86pc-hc-topology.xml into seperate map 6844639 libtopo: add DIMM serial to chip-select nodes on X4140/4240/4440 6845699 libipmi: implementation of ipmi_sunoem_led_get/set interfaces needs to be updated for ILOM 3 6677012 libtopo: small leaks on snapshot creation 6535637 Add Severity level to payload of list.suspects event 6850083 libtopo: need to add JEDEC id for Hyundai Electronics to jedec_tbl in the chip enumerator 6844145 sys/bmc_intf.h should be delivered 6855750 fmadm faulty will fail to expand message tokens that reference event payload 6862378 libtopo: need to register TOPO_METH_SENSOR_FAILURE on ses nodes
author Robert Johnston <Robert.Johnston@Sun.COM>
date Fri, 31 Jul 2009 13:25:53 -0700
parents f84d3cc28d24
children ec0e4f3134ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
3 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
5 * Common Development and Distribution License (the "License").
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
6 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
7 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
10 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
11 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
12 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
18 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
19 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
20 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
21 /*
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
23 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
24 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
25
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
26 #include <sys/types.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
27 #include <fmadm.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
28 #include <errno.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
29 #include <limits.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
30 #include <strings.h>
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
31 #include <stdio.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
32 #include <unistd.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
33 #include <sys/wait.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
34 #include <sys/stat.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
35 #include <fcntl.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
36 #include <fm/fmd_log.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
37 #include <sys/fm/protocol.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
38 #include <fm/libtopo.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
39 #include <fm/fmd_adm.h>
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
40 #include <fm/fmd_msg.h>
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
41 #include <dlfcn.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
42 #include <sys/systeminfo.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
43 #include <sys/utsname.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
44 #include <libintl.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
45 #include <locale.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
46 #include <sys/smbios.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
47 #include <libdevinfo.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
48 #include <stdlib.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
49
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
50 #define offsetof(s, m) ((size_t)(&(((s*)0)->m)))
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
51
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
52 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
53 * Fault records are added to catalog by calling add_fault_record_to_catalog()
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
54 * records are stored in order of importance to the system.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
55 * If -g flag is set or not_suppressed is not set and the class fru, fault,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
56 * type are the same then details are merged into an existing record, with uuid
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
57 * records are stored in time order.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
58 * For each record information is extracted from nvlist and merged into linked
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
59 * list each is checked for identical records for which percentage certainty are
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
60 * added together.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
61 * print_catalog() is called to print out catalog and release external resources
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
62 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
63 * /---------------\
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
64 * status_rec_list -> | | -|
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
65 * \---------------/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
66 * \/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
67 * /---------------\ /-------\ /-------\
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
68 * status_fru_list | status_record | -> | uurec | -> | uurec | -|
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
69 * \/ | | |- | | <- | |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
70 * /-------------\ | | \-------/ \-------/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
71 * | | -> | | \/ \/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
72 * \-------------/ | | /-------\ /-------\
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
73 * \/ | | -> | asru | -> | asru |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
74 * --- | | | | <- | |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
75 * | | \-------/ \-------/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
76 * status_asru_list | class |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
77 * \/ | resource | /-------\ /-------\
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
78 * /-------------\ | fru | -> | list | -> | list |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
79 * | | -> | serial | | | <- | |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
80 * \-------------/ | | \-------/ \-------/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
81 * \/ \---------------/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
82 * --- \/ /\
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
83 * /---------------\
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
84 * | status_record |
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
85 * \---------------/
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
86 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
87 * Fmadm faulty takes a number of options which affect the format of the
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
88 * output displayed. By default, the display reports the FRU and ASRU along
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
89 * with other information on per-case basis as in the example below.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
90 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
91 * --------------- ------------------------------------ -------------- -------
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
92 * TIME EVENT-ID MSG-ID SEVERITY
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
93 * --------------- ------------------------------------ -------------- -------
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
94 * Sep 21 10:01:36 d482f935-5c8f-e9ab-9f25-d0aaafec1e6c AMD-8000-2F Major
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
95 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
96 * Fault class : fault.memory.dimm_sb
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
97 * Affects : mem:///motherboard=0/chip=0/memory-controller=0/dimm=0/rank=0
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
98 * faulted but still in service
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
99 * FRU : "CPU 0 DIMM 0" (hc://.../memory-controller=0/dimm=0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
100 * faulty
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
101 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
102 * Description : The number of errors associated with this memory module has
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
103 * exceeded acceptable levels. Refer to
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
104 * http://sun.com/msg/AMD-8000-2F for more information.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
105 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
106 * Response : Pages of memory associated with this memory module are being
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
107 * removed from service as errors are reported.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
108 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
109 * Impact : Total system memory capacity will be reduced as pages are
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
110 * retired.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
111 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
112 * Action : Schedule a repair procedure to replace the affected memory
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
113 * module. Use fmdump -v -u <EVENT_ID> to identify the module.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
114 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
115 * The -v flag is similar, but adds some additonal information such as the
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
116 * resource. The -s flag is also similar but just gives the top line summary.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
117 * All these options (ie without the -f or -r flags) use the print_catalog()
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
118 * function to do the display.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
119 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
120 * The -f flag changes the output so that it appears sorted on a per-fru basis.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
121 * The output is somewhat cut down compared to the default output. If -f is
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
122 * used, then print_fru() is used to print the output.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
123 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
124 * -----------------------------------------------------------------------------
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
125 * "SLOT 2" (hc://.../hostbridge=3/pciexrc=3/pciexbus=4/pciexdev=0) faulty
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
126 * 5ca4aeb3-36...f6be-c2e8166dc484 2 suspects in this FRU total certainty 100%
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
127 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
128 * Description : A problem was detected for a PCI device.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
129 * Refer to http://sun.com/msg/PCI-8000-7J for more information.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
130 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
131 * Response : One or more device instances may be disabled
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
132 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
133 * Impact : Possible loss of services provided by the device instances
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
134 * associated with this fault
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
135 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
136 * Action : Schedule a repair procedure to replace the affected device.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
137 * Use fmdump -v -u <EVENT_ID> to identify the device or contact
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
138 * Sun for support.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
139 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
140 * The -r flag changes the output so that it appears sorted on a per-asru basis.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
141 * The output is very much cut down compared to the default output, just giving
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
142 * the asru fmri and state. Here print_asru() is used to print the output.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
143 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
144 * mem:///motherboard=0/chip=0/memory-controller=0/dimm=0/rank=0 degraded
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
145 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
146 * For all fmadm faulty options, the sequence of events is
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
147 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
148 * 1) Walk through all the cases in the system using fmd_adm_case_iter() and
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
149 * for each case call dfault_rec(). This will call add_fault_record_to_catalog()
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
150 * This will extract the data from the nvlist and call catalog_new_record() to
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
151 * save the data away in various linked lists in the catalogue.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
152 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
153 * 2) Once this is done, the data can be supplemented by using
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
154 * fmd_adm_rsrc_iter(). However this is now only necessary for the -i option.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
155 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
156 * 3) Finally print_catalog(), print_fru() or print_asru() are called as
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
157 * appropriate to display the information from the catalogue sorted in the
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
158 * requested way.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
159 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
160 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
161
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
162 typedef struct name_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
163 struct name_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
164 struct name_list *prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
165 char *name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
166 uint8_t pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
167 uint8_t max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
168 ushort_t count;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
169 int status;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
170 char *label;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
171 } name_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
172
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
173 typedef struct ari_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
174 char *ari_uuid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
175 struct ari_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
176 } ari_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
177
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
178 typedef struct uurec {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
179 struct uurec *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
180 struct uurec *prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
181 char *uuid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
182 ari_list_t *ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
183 name_list_t *asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
184 uint64_t sec;
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
185 nvlist_t *event;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
186 } uurec_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
187
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
188 typedef struct uurec_select {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
189 struct uurec_select *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
190 char *uuid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
191 } uurec_select_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
192
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
193 typedef struct host_id {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
194 char *chassis;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
195 char *server;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
196 char *platform;
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
197 char *domain;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
198 } hostid_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
199
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
200 typedef struct host_id_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
201 hostid_t hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
202 struct host_id_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
203 } host_id_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
204
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
205 typedef struct status_record {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
206 hostid_t *host;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
207 int nrecs;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
208 uurec_t *uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
209 char *severity; /* in C locale */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
210 char *msgid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
211 name_list_t *class;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
212 name_list_t *resource;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
213 name_list_t *asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
214 name_list_t *fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
215 name_list_t *serial;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
216 uint8_t not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
217 } status_record_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
218
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
219 typedef struct sr_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
220 struct sr_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
221 struct sr_list *prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
222 struct status_record *status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
223 } sr_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
224
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
225 typedef struct resource_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
226 struct resource_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
227 struct resource_list *prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
228 sr_list_t *status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
229 char *resource;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
230 uint8_t not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
231 uint8_t max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
232 } resource_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
233
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
234 typedef struct tgetlabel_data {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
235 char *label;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
236 char *fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
237 } tgetlabel_data_t;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
238
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
239 sr_list_t *status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
240 resource_list_t *status_fru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
241 resource_list_t *status_asru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
242
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
243 static int max_display;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
244 static int max_fault = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
245 static topo_hdl_t *topo_handle;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
246 static char *topo_handle_uuid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
247 static host_id_list_t *host_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
248 static int n_server;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
249 static int opt_g;
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
250 static fmd_msg_hdl_t *fmadm_msghdl = NULL; /* handle for libfmd_msg calls */
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
251
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
252 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
253 format_date(char *buf, size_t len, uint64_t sec)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
254 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
255 if (sec > LONG_MAX) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
256 (void) fprintf(stderr,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
257 "record time is too large for 32-bit utility\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
258 (void) snprintf(buf, len, "0x%llx", sec);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
259 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
260 time_t tod = (time_t)sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
261 (void) strftime(buf, len, "%b %d %T", localtime(&tod));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
262 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
263
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
264 return (buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
265 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
266
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
267 static hostid_t *
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
268 find_hostid_in_list(char *platform, char *chassis, char *server, char *domain)
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
269 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
270 hostid_t *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
271 host_id_list_t *hostp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
272
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
273 if (platform == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
274 platform = "-";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
275 if (server == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
276 server = "-";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
277 hostp = host_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
278 while (hostp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
279 if (hostp->hostid.platform &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
280 strcmp(hostp->hostid.platform, platform) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
281 hostp->hostid.server &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
282 strcmp(hostp->hostid.server, server) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
283 (chassis == NULL || hostp->hostid.chassis == NULL ||
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
284 strcmp(chassis, hostp->hostid.chassis) == 0) &&
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
285 (domain == NULL || hostp->hostid.domain == NULL ||
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
286 strcmp(domain, hostp->hostid.domain) == 0)) {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
287 rt = &hostp->hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
288 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
289 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
290 hostp = hostp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
291 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
292 if (rt == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
293 hostp = malloc(sizeof (host_id_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
294 hostp->hostid.platform = strdup(platform);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
295 hostp->hostid.server = strdup(server);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
296 hostp->hostid.chassis = chassis ? strdup(chassis) : NULL;
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
297 hostp->hostid.domain = domain ? strdup(domain) : NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
298 hostp->next = host_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
299 host_list = hostp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
300 rt = &hostp->hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
301 n_server++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
302 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
303 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
304 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
305
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
306 static hostid_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
307 find_hostid(nvlist_t *nvl)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
308 {
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
309 char *platform = NULL, *chassis = NULL, *server = NULL, *domain = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
310 nvlist_t *auth, *fmri;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
311 hostid_t *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
312
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
313 if (nvlist_lookup_nvlist(nvl, FM_SUSPECT_DE, &fmri) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
314 nvlist_lookup_nvlist(fmri, FM_FMRI_AUTHORITY, &auth) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
315 (void) nvlist_lookup_string(auth, FM_FMRI_AUTH_PRODUCT,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
316 &platform);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
317 (void) nvlist_lookup_string(auth, FM_FMRI_AUTH_SERVER, &server);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
318 (void) nvlist_lookup_string(auth, FM_FMRI_AUTH_CHASSIS,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
319 &chassis);
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
320 (void) nvlist_lookup_string(auth, FM_FMRI_AUTH_DOMAIN, &domain);
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
321 rt = find_hostid_in_list(platform, chassis, server, domain);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
322 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
323 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
324 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
325
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
326 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
327 * compare two fru strings which are made up of substrings seperated by '/'
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
328 * return true if every substring is the same in the two strings, or if a
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
329 * substring is null in one.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
330 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
331
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
332 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
333 frucmp(char *f1, char *f2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
334 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
335 char c1, c2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
336 int i = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
337
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
338 for (;;) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
339 c1 = *f1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
340 c2 = *f2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
341 if (c1 == c2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
342 i = (c1 == '/') ? 0 : i + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
343 } else if (i == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
344 if (c1 == '/') {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
345 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
346 f2++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
347 } while ((c2 = *f2) != 0 && c2 != '/');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
348 if (c2 == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
349 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
350 } else if (c2 == '/') {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
351 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
352 f1++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
353 } while ((c1 = *f1) != 0 && c1 != '/');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
354 if (c1 == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
355 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
356 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
357 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
358 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
359 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
360 if (c1 == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
361 return (0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
362 f1++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
363 f2++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
364 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
365 return (1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
366 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
367
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
368 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
369 tgetlabel(topo_hdl_t *thp, tnode_t *node, void *arg)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
370 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
371 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
372 char *fru_name, *lname;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
373 nvlist_t *fru = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
374 int rt = TOPO_WALK_NEXT;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
375 tgetlabel_data_t *tdp = (tgetlabel_data_t *)arg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
376
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
377 if (topo_node_fru(node, &fru, NULL, &err) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
378 if (topo_fmri_nvl2str(thp, fru, &fru_name, &err) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
379 if (frucmp(tdp->fru, fru_name) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
380 topo_node_label(node, &lname, &err) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
381 tdp->label = strdup(lname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
382 topo_hdl_strfree(thp, lname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
383 rt = TOPO_WALK_TERMINATE;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
384 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
385 topo_hdl_strfree(thp, fru_name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
386 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
387 nvlist_free(fru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
388 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
389 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
390 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
391
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
392 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
393 label_get_topo(void)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
394 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
395 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
396
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
397 topo_handle = topo_open(TOPO_VERSION, 0, &err);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
398 if (topo_handle) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
399 topo_handle_uuid = topo_snap_hold(topo_handle, NULL, &err);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
400 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
401 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
402
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
403 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
404 label_release_topo(void)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
405 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
406 if (topo_handle_uuid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
407 topo_hdl_strfree(topo_handle, topo_handle_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
408 if (topo_handle) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
409 topo_snap_release(topo_handle);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
410 topo_close(topo_handle);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
411 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
412 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
413
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
414 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
415 get_fmri_label(char *fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
416 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
417 topo_walk_t *twp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
418 tgetlabel_data_t td;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
419 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
420
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
421 td.label = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
422 td.fru = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
423 if (topo_handle == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
424 label_get_topo();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
425 if (topo_handle_uuid) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
426 twp = topo_walk_init(topo_handle, FM_FMRI_SCHEME_HC,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
427 tgetlabel, &td, &err);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
428 if (twp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
429 topo_walk_step(twp, TOPO_WALK_CHILD);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
430 topo_walk_fini(twp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
431 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
432 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
433 return (td.label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
434 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
435
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
436 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
437 get_nvl2str_topo(nvlist_t *nvl)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
438 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
439 char *name = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
440 char *tname;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
441 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
442 char *scheme = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
443 char *mod_name = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
444 char buf[128];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
445
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
446 if (topo_handle == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
447 label_get_topo();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
448 if (topo_fmri_nvl2str(topo_handle, nvl, &tname, &err) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
449 name = strdup(tname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
450 topo_hdl_strfree(topo_handle, tname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
451 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
452 (void) nvlist_lookup_string(nvl, FM_FMRI_SCHEME, &scheme);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
453 (void) nvlist_lookup_string(nvl, FM_FMRI_MOD_NAME, &mod_name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
454 if (scheme && strcmp(scheme, FM_FMRI_SCHEME_FMD) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
455 mod_name) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
456 (void) snprintf(buf, sizeof (buf), "%s:///module/%s",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
457 scheme, mod_name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
458 name = strdup(buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
459 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
460 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
461 return (name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
462 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
463
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
464 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
465 set_priority(char *s)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
466 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
467 int rt = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
468
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
469 if (s) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
470 if (strcmp(s, "Minor") == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
471 rt = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
472 else if (strcmp(s, "Major") == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
473 rt = 10;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
474 else if (strcmp(s, "Critical") == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
475 rt = 100;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
476 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
477 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
478 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
479
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
480 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
481 cmp_priority(char *s1, char *s2, uint64_t t1, uint64_t t2, uint8_t p1,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
482 uint8_t p2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
483 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
484 int r1, r2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
485 int rt;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
486
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
487 r1 = set_priority(s1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
488 r2 = set_priority(s2);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
489 rt = r1 - r2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
490 if (rt == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
491 if (t1 > t2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
492 rt = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
493 else if (t1 < t2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
494 rt = -1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
495 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
496 rt = p1 - p2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
497 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
498 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
499 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
500
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
501 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
502 * merge two lists into one, by comparing enties in new and moving into list if
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
503 * name is not there or free off memory for names which are already there
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
504 * add_pct indicates if pct is the sum or highest pct
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
505 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
506 static name_list_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
507 merge_name_list(name_list_t **list, name_list_t *new, int add_pct)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
508 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
509 name_list_t *lp, *np, *sp, *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
510 int max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
511
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
512 rt = *list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
513 np = new;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
514 while (np) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
515 lp = *list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
516 while (lp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
517 if (strcmp(lp->name, np->name) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
518 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
519 lp = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
520 if (lp == *list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
521 lp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
522 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
523 if (np->next == new)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
524 sp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
525 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
526 sp = np->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
527 if (lp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
528 lp->status |= (np->status & FM_SUSPECT_FAULTY);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
529 if (add_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
530 lp->pct += np->pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
531 lp->count += np->count;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
532 } else if (np->pct > lp->pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
533 lp->pct = np->pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
534 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
535 max_pct = np->max_pct;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
536 if (np->label)
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
537 free(np->label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
538 free(np->name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
539 free(np);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
540 np = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
541 if (max_pct > lp->max_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
542 lp->max_pct = max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
543 if (lp->max_pct > lp->prev->max_pct &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
544 lp != *list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
545 lp->prev->next = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
546 lp->next->prev = lp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
547 np = lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
548 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
549 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
550 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
551 if (np) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
552 lp = *list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
553 if (lp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
554 if (np->max_pct > lp->max_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
555 np->next = lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
556 np->prev = lp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
557 lp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
558 lp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
559 *list = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
560 rt = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
561 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
562 lp = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
563 while (lp != *list &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
564 np->max_pct < lp->max_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
565 lp = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
566 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
567 np->next = lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
568 np->prev = lp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
569 lp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
570 lp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
571 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
572 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
573 *list = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
574 np->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
575 np->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
576 rt = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
577 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
578 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
579 np = sp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
580 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
581 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
582 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
583
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
584 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
585 * compare entries in two lists return true if the two lists have identical
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
586 * content. The two lists may not have entries in the same order, so we compare
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
587 * the size of the list as well as trying to find every entry from one list in
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
588 * the other.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
589 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
590 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
591 cmp_name_list(name_list_t *lxp1, name_list_t *lxp2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
592 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
593 name_list_t *lp1, *lp2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
594 int l1 = 0, l2 = 0, common = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
595
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
596 lp2 = lxp2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
597 while (lp2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
598 l2++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
599 lp2 = lp2->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
600 if (lp2 == lxp2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
601 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
602 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
603 lp1 = lxp1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
604 while (lp1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
605 l1++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
606 lp2 = lxp2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
607 while (lp2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
608 if (strcmp(lp2->name, lp1->name) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
609 common++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
610 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
611 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
612 lp2 = lp2->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
613 if (lp2 == lxp2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
614 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
615 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
616 lp1 = lp1->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
617 if (lp1 == lxp1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
618 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
619 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
620 if (l1 == l2 && l2 == common)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
621 return (0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
622 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
623 return (1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
624 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
625
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
626 static name_list_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
627 alloc_name_list(char *name, uint8_t pct)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
628 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
629 name_list_t *nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
630
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
631 nlp = malloc(sizeof (*nlp));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
632 nlp->name = strdup(name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
633 nlp->pct = pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
634 nlp->max_pct = pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
635 nlp->count = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
636 nlp->next = nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
637 nlp->prev = nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
638 nlp->status = 0;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
639 nlp->label = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
640 return (nlp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
641 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
642
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
643 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
644 free_name_list(name_list_t *list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
645 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
646 name_list_t *next = list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
647 name_list_t *lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
648
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
649 if (list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
650 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
651 lp = next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
652 next = lp->next;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
653 if (lp->label)
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
654 free(lp->label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
655 free(lp->name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
656 free(lp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
657 } while (next != list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
658 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
659 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
660
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
661 static status_record_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
662 new_record_init(uurec_t *uurec_p, char *msgid, name_list_t *class,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
663 name_list_t *fru, name_list_t *asru, name_list_t *resource,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
664 name_list_t *serial, boolean_t not_suppressed,
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
665 hostid_t *hostid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
666 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
667 status_record_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
668
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
669 status_rec_p = (status_record_t *)malloc(sizeof (status_record_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
670 status_rec_p->nrecs = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
671 status_rec_p->host = hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
672 status_rec_p->uurec = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
673 uurec_p->next = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
674 uurec_p->prev = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
675 uurec_p->asru = asru;
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
676 if ((status_rec_p->severity = fmd_msg_getitem_id(fmadm_msghdl, NULL,
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
677 msgid, FMD_MSG_ITEM_SEVERITY)) == NULL)
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
678 status_rec_p->severity = strdup("unknown");
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
679 status_rec_p->class = class;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
680 status_rec_p->fru = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
681 status_rec_p->asru = asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
682 status_rec_p->resource = resource;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
683 status_rec_p->serial = serial;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
684 status_rec_p->msgid = strdup(msgid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
685 status_rec_p->not_suppressed = not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
686 return (status_rec_p);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
687 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
688
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
689 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
690 * add record to given list maintaining order higher priority first.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
691 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
692 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
693 add_rec_list(status_record_t *status_rec_p, sr_list_t **list_pp)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
694 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
695 sr_list_t *tp, *np, *sp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
696 int order;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
697 uint64_t sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
698
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
699 np = malloc(sizeof (sr_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
700 np->status_record = status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
701 sec = status_rec_p->uurec->sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
702 if ((sp = *list_pp) == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
703 *list_pp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
704 np->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
705 np->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
706 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
707 /* insert new record in front of lower priority */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
708 tp = sp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
709 order = cmp_priority(status_rec_p->severity,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
710 sp->status_record->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
711 tp->status_record->uurec->sec, 0, 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
712 if (order > 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
713 *list_pp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
714 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
715 tp = sp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
716 while (tp != sp &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
717 cmp_priority(status_rec_p->severity,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
718 tp->status_record->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
719 tp->status_record->uurec->sec, 0, 0)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
720 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
721 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
722 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
723 np->next = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
724 np->prev = tp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
725 tp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
726 tp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
727 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
728 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
729
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
730 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
731 add_resource(status_record_t *status_rec_p, resource_list_t **rp,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
732 resource_list_t *np)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
733 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
734 int order;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
735 uint64_t sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
736 resource_list_t *sp, *tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
737 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
738 char *severity = status_rec_p->severity;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
739
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
740 add_rec_list(status_rec_p, &np->status_rec_list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
741 if ((sp = *rp) == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
742 np->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
743 np->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
744 *rp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
745 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
746 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
747 * insert new record in front of lower priority
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
748 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
749 tp = sp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
750 srp = sp->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
751 sec = status_rec_p->uurec->sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
752 order = cmp_priority(severity, srp->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
753 srp->uurec->sec, np->max_pct, sp->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
754 if (order > 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
755 *rp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
756 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
757 srp = tp->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
758 while (tp != sp &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
759 cmp_priority(severity, srp->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
760 srp->uurec->sec, np->max_pct, sp->max_pct) < 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
761 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
762 srp = tp->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
763 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
764 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
765 np->next = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
766 np->prev = tp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
767 tp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
768 tp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
769 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
770 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
771
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
772 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
773 add_resource_list(status_record_t *status_rec_p, name_list_t *fp,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
774 resource_list_t **rpp)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
775 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
776 int order;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
777 resource_list_t *np, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
778 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
779
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
780 np = *rpp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
781 end = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
782 while (np) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
783 if (strcmp(fp->name, np->resource) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
784 np->not_suppressed |= status_rec_p->not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
785 srp = np->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
786 order = cmp_priority(status_rec_p->severity,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
787 srp->severity, status_rec_p->uurec->sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
788 srp->uurec->sec, fp->max_pct, np->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
789 if (order > 0 && np != end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
790 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
791 * remove from list and add again using
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
792 * new priority
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
793 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
794 np->prev->next = np->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
795 np->next->prev = np->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
796 add_resource(status_rec_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
797 rpp, np);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
798 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
799 add_rec_list(status_rec_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
800 &np->status_rec_list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
801 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
802 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
803 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
804 np = np->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
805 if (np == end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
806 np = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
807 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
808 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
809 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
810 if (np == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
811 np = malloc(sizeof (resource_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
812 np->resource = fp->name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
813 np->not_suppressed = status_rec_p->not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
814 np->status_rec_list = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
815 np->max_pct = fp->max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
816 add_resource(status_rec_p, rpp, np);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
817 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
818 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
819
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
820 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
821 add_list(status_record_t *status_rec_p, name_list_t *listp,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
822 resource_list_t **glistp)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
823 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
824 name_list_t *fp, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
825
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
826 fp = listp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
827 end = fp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
828 while (fp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
829 add_resource_list(status_rec_p, fp, glistp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
830 fp = fp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
831 if (fp == end)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
832 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
833 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
834 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
835
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
836 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
837 * add record to rec, fru and asru lists.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
838 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
839 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
840 catalog_new_record(uurec_t *uurec_p, char *msgid, name_list_t *class,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
841 name_list_t *fru, name_list_t *asru, name_list_t *resource,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
842 name_list_t *serial, boolean_t not_suppressed,
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
843 hostid_t *hostid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
844 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
845 status_record_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
846
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
847 status_rec_p = new_record_init(uurec_p, msgid, class, fru, asru,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
848 resource, serial, not_suppressed, hostid);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
849 add_rec_list(status_rec_p, &status_rec_list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
850 if (status_rec_p->fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
851 add_list(status_rec_p, status_rec_p->fru, &status_fru_list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
852 if (status_rec_p->asru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
853 add_list(status_rec_p, status_rec_p->asru, &status_asru_list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
854 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
855
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
856 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
857 * add uuid and diagnoses time to an existing record for similar fault on the
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
858 * same fru
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
859 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
860 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
861 catalog_merge_record(status_record_t *status_rec_p, uurec_t *uurec_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
862 name_list_t *asru, name_list_t *resource, name_list_t *serial,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
863 boolean_t not_suppressed)
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
864 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
865 uurec_t *uurec1_p;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
866
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
867 status_rec_p->nrecs++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
868 /* add uurec in time order */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
869 if (status_rec_p->uurec->sec > uurec_p->sec) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
870 uurec_p->next = status_rec_p->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
871 uurec_p->prev = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
872 status_rec_p->uurec = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
873 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
874 uurec1_p = status_rec_p->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
875 while (uurec1_p->next && uurec1_p->next->sec <= uurec_p->sec)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
876 uurec1_p = uurec1_p->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
877 if (uurec1_p->next)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
878 uurec1_p->next->prev = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
879 uurec_p->next = uurec1_p->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
880 uurec_p->prev = uurec1_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
881 uurec1_p->next = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
882 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
883 status_rec_p->not_suppressed |= not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
884 uurec_p->asru = merge_name_list(&status_rec_p->asru, asru, 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
885 (void) merge_name_list(&status_rec_p->resource, resource, 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
886 (void) merge_name_list(&status_rec_p->serial, serial, 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
887 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
888
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
889 static status_record_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
890 record_in_catalog(name_list_t *class, name_list_t *fru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
891 char *msgid, hostid_t *host)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
892 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
893 sr_list_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
894 status_record_t *srp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
895
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
896 status_rec_p = status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
897 while (status_rec_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
898 srp = status_rec_p->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
899 if (host == srp->host &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
900 cmp_name_list(class, srp->class) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
901 cmp_name_list(fru, srp->fru) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
902 strcmp(msgid, srp->msgid) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
903 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
904 if (status_rec_p->next == status_rec_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
905 srp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
906 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
907 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
908 status_rec_p = status_rec_p->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
909 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
910 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
911 return (srp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
912 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
913
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
914 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
915 get_serial_no(nvlist_t *nvl, name_list_t **serial_p, uint8_t pct)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
916 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
917 char *name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
918 char *serial = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
919 char **lserial = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
920 uint64_t serint;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
921 name_list_t *nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
922 int j;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
923 uint_t nelem;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
924 char buf[64];
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
925
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
926 if (nvlist_lookup_string(nvl, FM_FMRI_SCHEME, &name) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
927 if (strcmp(name, FM_FMRI_SCHEME_CPU) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
928 if (nvlist_lookup_uint64(nvl, FM_FMRI_CPU_SERIAL_ID,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
929 &serint) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
930 (void) snprintf(buf, sizeof (buf), "%llX",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
931 serint);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
932 nlp = alloc_name_list(buf, pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
933 (void) merge_name_list(serial_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
934 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
935 } else if (strcmp(name, FM_FMRI_SCHEME_MEM) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
936 if (nvlist_lookup_string_array(nvl,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
937 FM_FMRI_MEM_SERIAL_ID, &lserial, &nelem) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
938 nlp = alloc_name_list(lserial[0], pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
939 for (j = 1; j < nelem; j++) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
940 name_list_t *n1lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
941 n1lp = alloc_name_list(lserial[j], pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
942 (void) merge_name_list(&nlp, n1lp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
943 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
944 (void) merge_name_list(serial_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
945 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
946 } else if (strcmp(name, FM_FMRI_SCHEME_HC) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
947 if (nvlist_lookup_string(nvl, FM_FMRI_HC_SERIAL_ID,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
948 &serial) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
949 nlp = alloc_name_list(serial, pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
950 (void) merge_name_list(serial_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
951 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
952 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
953 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
954 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
955
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
956 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
957 extract_record_info(nvlist_t *nvl, name_list_t **class_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
958 name_list_t **fru_p, name_list_t **serial_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
959 name_list_t **resource_p, name_list_t **asru_p, uint8_t status)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
960 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
961 nvlist_t *lfru, *lasru, *rsrc;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
962 name_list_t *nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
963 char *name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
964 uint8_t lpct = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
965 char *lclass = NULL;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
966 char *label;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
967
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
968 (void) nvlist_lookup_uint8(nvl, FM_FAULT_CERTAINTY, &lpct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
969 if (nvlist_lookup_string(nvl, FM_CLASS, &lclass) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
970 nlp = alloc_name_list(lclass, lpct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
971 (void) merge_name_list(class_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
972 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
973 if (nvlist_lookup_nvlist(nvl, FM_FAULT_FRU, &lfru) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
974 name = get_nvl2str_topo(lfru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
975 if (name != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
976 nlp = alloc_name_list(name, lpct);
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
977 nlp->status = status & ~(FM_SUSPECT_UNUSABLE |
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
978 FM_SUSPECT_DEGRADED);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
979 free(name);
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
980 if (nvlist_lookup_string(nvl, FM_FAULT_LOCATION,
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
981 &label) == 0)
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
982 nlp->label = strdup(label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
983 (void) merge_name_list(fru_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
984 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
985 get_serial_no(lfru, serial_p, lpct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
986 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
987 if (nvlist_lookup_nvlist(nvl, FM_FAULT_ASRU, &lasru) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
988 name = get_nvl2str_topo(lasru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
989 if (name != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
990 nlp = alloc_name_list(name, lpct);
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
991 nlp->status = status & ~(FM_SUSPECT_NOT_PRESENT |
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
992 FM_SUSPECT_REPAIRED | FM_SUSPECT_REPLACED |
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
993 FM_SUSPECT_ACQUITTED);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
994 free(name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
995 (void) merge_name_list(asru_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
996 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
997 get_serial_no(lasru, serial_p, lpct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
998 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
999 if (nvlist_lookup_nvlist(nvl, FM_FAULT_RESOURCE, &rsrc) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1000 name = get_nvl2str_topo(rsrc);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1001 if (name != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1002 nlp = alloc_name_list(name, lpct);
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1003 nlp->status = status;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1004 free(name);
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1005 if (nvlist_lookup_string(nvl, FM_FAULT_LOCATION,
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1006 &label) == 0)
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1007 nlp->label = strdup(label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1008 (void) merge_name_list(resource_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1009 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1010 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1011 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1012
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1013 static void
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1014 add_fault_record_to_catalog(nvlist_t *nvl, uint64_t sec, char *uuid)
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1015 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1016 char *msgid = "-";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1017 uint_t i, size = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1018 name_list_t *class = NULL, *resource = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1019 name_list_t *asru = NULL, *fru = NULL, *serial = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1020 nvlist_t **nva;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1021 uint8_t *ba;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1022 status_record_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1023 uurec_t *uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1024 hostid_t *host;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1025 boolean_t not_suppressed = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1026 boolean_t any_present = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1027
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1028 (void) nvlist_lookup_string(nvl, FM_SUSPECT_DIAG_CODE, &msgid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1029 (void) nvlist_lookup_uint32(nvl, FM_SUSPECT_FAULT_SZ, &size);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1030 (void) nvlist_lookup_boolean_value(nvl, FM_SUSPECT_MESSAGE,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1031 &not_suppressed);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1032
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1033 if (size != 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1034 (void) nvlist_lookup_nvlist_array(nvl, FM_SUSPECT_FAULT_LIST,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1035 &nva, &size);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1036 (void) nvlist_lookup_uint8_array(nvl, FM_SUSPECT_FAULT_STATUS,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1037 &ba, &size);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1038 for (i = 0; i < size; i++) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1039 extract_record_info(nva[i], &class, &fru, &serial,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1040 &resource, &asru, ba[i]);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1041 if (!(ba[i] & FM_SUSPECT_NOT_PRESENT) &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1042 (ba[i] & FM_SUSPECT_FAULTY))
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1043 any_present = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1044 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1045 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1046 * also suppress if no resources present
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1047 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1048 if (any_present == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1049 not_suppressed = 0;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1050 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1051
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1052 uurec_p = (uurec_t *)malloc(sizeof (uurec_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1053 uurec_p->uuid = strdup(uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1054 uurec_p->sec = sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1055 uurec_p->ari_uuid_list = NULL;
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1056 uurec_p->event = NULL;
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1057 (void) nvlist_dup(nvl, &uurec_p->event, 0);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1058 host = find_hostid(nvl);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1059 if (not_suppressed && !opt_g)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1060 status_rec_p = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1061 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1062 status_rec_p = record_in_catalog(class, fru, msgid, host);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1063 if (status_rec_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1064 catalog_merge_record(status_rec_p, uurec_p, asru, resource,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1065 serial, not_suppressed);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1066 free_name_list(class);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1067 free_name_list(fru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1068 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1069 catalog_new_record(uurec_p, msgid, class, fru, asru,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1070 resource, serial, not_suppressed, host);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1071 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1072 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1073
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1074 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1075 update_asru_state_in_catalog(const char *uuid, const char *ari_uuid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1076 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1077 sr_list_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1078 uurec_t *uurp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1079 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1080
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1081 srp = status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1082 if (srp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1083 for (;;) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1084 uurp = srp->status_record->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1085 while (uurp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1086 if (strcmp(uuid, uurp->uuid) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1087 ari_list = (ari_list_t *)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1088 malloc(sizeof (ari_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1089 ari_list->ari_uuid = strdup(ari_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1090 ari_list->next = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1091 uurp->ari_uuid_list = ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1092 return;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1093 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1094 uurp = uurp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1095 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1096 if (srp->next == status_rec_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1097 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1098 srp = srp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1099 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1100 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1101 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1102
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1103 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1104 print_line(char *label, char *buf)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1105 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1106 char *cp, *ep, *wp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1107 char c;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1108 int i;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1109 int lsz;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1110 char *padding;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1111
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1112 lsz = strlen(label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1113 padding = malloc(lsz + 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1114 for (i = 0; i < lsz; i++)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1115 padding[i] = ' ';
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1116 padding[i] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1117 cp = buf;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1118 ep = buf;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1119 c = *ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1120 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1121 while (c) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1122 i = lsz;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1123 wp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1124 while ((c = *ep) != NULL && (wp == NULL || i < 80)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1125 if (c == ' ')
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1126 wp = ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1127 else if (c == '\n') {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1128 i = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1129 *ep = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1130 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1131 ep++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1132 } while ((c = *ep) != NULL && c == ' ');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1133 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1134 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1135 ep++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1136 i++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1137 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1138 if (i >= 80 && wp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1139 *wp = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1140 ep = wp + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1141 c = *ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1142 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1143 (void) printf("%s%s\n", label, cp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1144 cp = ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1145 label = padding;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1146 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1147 free(padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1148 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1149
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1150 static void
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1151 print_dict_info_line(nvlist_t *e, fmd_msg_item_t what, const char *linehdr)
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1152 {
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1153 char *cp = fmd_msg_getitem_nv(fmadm_msghdl, NULL, e, what);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1154
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1155 if (cp) {
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1156 print_line(dgettext("FMD", linehdr), cp);
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1157 free(cp);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1158 }
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1159 }
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1160
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1161 static void
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1162 print_dict_info(nvlist_t *nvl)
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1163 {
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1164 print_dict_info_line(nvl, FMD_MSG_ITEM_DESC, "Description : ");
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1165 print_dict_info_line(nvl, FMD_MSG_ITEM_RESPONSE, "Response : ");
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1166 print_dict_info_line(nvl, FMD_MSG_ITEM_IMPACT, "Impact : ");
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1167 print_dict_info_line(nvl, FMD_MSG_ITEM_ACTION, "Action : ");
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1168 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1169
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1170 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1171 print_name(name_list_t *list, char *(func)(char *), char *padding, int *np,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1172 int pct, int full)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1173 {
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1174 char *name, *fru_label = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1175
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1176 name = list->name;
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1177 if (list->label) {
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1178 (void) printf("%s \"%s\" (%s)", padding, list->label, name);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1179 *np += 1;
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1180 } else if (func && (fru_label = func(list->name)) != NULL) {
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1181 (void) printf("%s \"%s\" (%s)", padding, fru_label, name);
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1182 *np += 1;
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1183 free(fru_label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1184 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1185 (void) printf("%s %s", padding, name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1186 *np += 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1187 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1188 if (list->pct && pct > 0 && pct < 100) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1189 if (list->count > 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1190 if (full) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1191 (void) printf(" %d @ %s %d%%\n", list->count,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1192 dgettext("FMD", "max"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1193 list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1194 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1195 (void) printf(" %s %d%%\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1196 dgettext("FMD", "max"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1197 list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1198 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1199 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1200 (void) printf(" %d%%\n", list->pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1201 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1202 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1203 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1204 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1205 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1206
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1207 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1208 print_asru_status(int status, char *label)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1209 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1210 char *msg = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1211
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1212 switch (status) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1213 case 0:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1214 msg = dgettext("FMD", "ok and in service");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1215 break;
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1216 case FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1217 msg = dgettext("FMD", "service degraded, "
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1218 "but associated components no longer faulty");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1219 break;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1220 case FM_SUSPECT_FAULTY | FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1221 msg = dgettext("FMD", "faulted but still "
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1222 "providing degraded service");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1223 break;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1224 case FM_SUSPECT_FAULTY:
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1225 msg = dgettext("FMD", "faulted but still in service");
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1226 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1227 case FM_SUSPECT_UNUSABLE:
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1228 msg = dgettext("FMD", "out of service, "
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1229 "but associated components no longer faulty");
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1230 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1231 case FM_SUSPECT_FAULTY | FM_SUSPECT_UNUSABLE:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1232 msg = dgettext("FMD", "faulted and taken out of service");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1233 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1234 default:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1235 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1236 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1237 if (msg) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1238 (void) printf("%s %s\n", label, msg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1239 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1240 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1241
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1242 static void
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1243 print_fru_status(int status, char *label)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1244 {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1245 char *msg = NULL;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1246
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1247 if (status & FM_SUSPECT_NOT_PRESENT)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1248 msg = dgettext("FMD", "not present");
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1249 else if (status & FM_SUSPECT_FAULTY)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1250 msg = dgettext("FMD", "faulty");
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1251 else if (status & FM_SUSPECT_REPLACED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1252 msg = dgettext("FMD", "replaced");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1253 else if (status & FM_SUSPECT_REPAIRED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1254 msg = dgettext("FMD", "repair attempted");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1255 else if (status & FM_SUSPECT_ACQUITTED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1256 msg = dgettext("FMD", "acquitted");
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1257 else
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1258 msg = dgettext("FMD", "removed");
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1259 (void) printf("%s %s\n", label, msg);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1260 }
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1261
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1262 static void
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1263 print_rsrc_status(int status, char *label)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1264 {
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1265 char *msg = "";
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1266
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1267 if (status & FM_SUSPECT_NOT_PRESENT)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1268 msg = dgettext("FMD", "not present");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1269 else if (status & FM_SUSPECT_FAULTY) {
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1270 if (status & FM_SUSPECT_DEGRADED)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1271 msg = dgettext("FMD",
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1272 "faulted but still providing degraded service");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1273 else if (status & FM_SUSPECT_UNUSABLE)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1274 msg = dgettext("FMD",
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1275 "faulted and taken out of service");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1276 else
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1277 msg = dgettext("FMD", "faulted but still in service");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1278 } else if (status & FM_SUSPECT_REPLACED)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1279 msg = dgettext("FMD", "replaced");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1280 else if (status & FM_SUSPECT_REPAIRED)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1281 msg = dgettext("FMD", "repair attempted");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1282 else if (status & FM_SUSPECT_ACQUITTED)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1283 msg = dgettext("FMD", "acquitted");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1284 else
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1285 msg = dgettext("FMD", "removed");
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1286 (void) printf("%s %s\n", label, msg);
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1287 }
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1288
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1289 static void
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1290 print_name_list(name_list_t *list, char *label, char *(func)(char *),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1291 int limit, int pct, void (func1)(int, char *), int full)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1292 {
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1293 char *name, *fru_label = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1294 char *padding;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1295 int i, j, l, n;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1296 name_list_t *end = list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1297
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1298 l = strlen(label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1299 padding = malloc(l + 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1300 for (i = 0; i < l; i++)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1301 padding[i] = ' ';
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1302 padding[l] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1303 (void) printf("%s", label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1304 name = list->name;
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1305 if (list->label)
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1306 (void) printf(" \"%s\" (%s)", list->label, name);
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1307 else if (func && (fru_label = func(list->name)) != NULL) {
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1308 (void) printf(" \"%s\" (%s)", fru_label, name);
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1309 free(fru_label);
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1310 } else
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1311 (void) printf(" %s", name);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1312 if (list->pct && pct > 0 && pct < 100) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1313 if (list->count > 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1314 if (full) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1315 (void) printf(" %d @ %s %d%%\n", list->count,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1316 dgettext("FMD", "max"), list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1317 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1318 (void) printf(" %s %d%%\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1319 dgettext("FMD", "max"), list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1320 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1321 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1322 (void) printf(" %d%%\n", list->pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1323 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1324 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1325 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1326 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1327 if (func1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1328 func1(list->status, padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1329 n = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1330 j = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1331 while ((list = list->next) != end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1332 if (limit == 0 || n < limit) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1333 print_name(list, func, padding, &n, pct, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1334 if (func1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1335 func1(list->status, padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1336 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1337 j++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1338 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1339 if (j == 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1340 print_name(list->prev, func, padding, &n, pct, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1341 } else if (j > 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1342 (void) printf("%s... %d %s\n", padding, j,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1343 dgettext("FMD", "more entries suppressed,"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1344 " use -v option for full list"));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1345 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1346 free(padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1347 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1348
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1349 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1350 asru_same_status(name_list_t *list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1351 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1352 name_list_t *end = list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1353 int status = list->status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1354
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1355 while ((list = list->next) != end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1356 if (status == -1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1357 status = list->status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1358 continue;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1359 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1360 if (list->status != -1 && status != list->status) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1361 status = -1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1362 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1363 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1364 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1365 return (status);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1366 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1367
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1368 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1369 serial_in_fru(name_list_t *fru, name_list_t *serial)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1370 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1371 name_list_t *sp = serial;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1372 name_list_t *fp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1373 int nserial = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1374 int found = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1375 char buf[128];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1376
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1377 while (sp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1378 fp = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1379 nserial++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1380 (void) snprintf(buf, sizeof (buf), "serial=%s", sp->name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1381 buf[sizeof (buf) - 1] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1382 while (fp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1383 if (strstr(fp->name, buf) != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1384 found++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1385 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1386 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1387 fp = fp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1388 if (fp == fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1389 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1390 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1391 sp = sp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1392 if (sp == serial)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1393 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1394 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1395 return (found == nserial ? 1 : 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1396 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1397
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1398 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1399 print_sup_record(status_record_t *srp, int opt_i, int full)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1400 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1401 char buf[32];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1402 uurec_t *uurp = srp->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1403 int n, j, k, max;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1404 int status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1405 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1406
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1407 n = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1408 max = max_fault;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1409 if (max < 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1410 max = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1411 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1412 j = max / 2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1413 max -= j;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1414 k = srp->nrecs - max;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1415 while ((uurp = uurp->next) != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1416 if (full || n < j || n >= k || max_fault == 0 ||
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1417 srp->nrecs == max_fault+1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1418 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1419 ari_list = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1420 while (ari_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1421 (void) printf("%-15s %s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1422 format_date(buf, sizeof (buf),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1423 uurp->sec), ari_list->ari_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1424 ari_list = ari_list->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1425 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1426 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1427 (void) printf("%-15s %s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1428 format_date(buf, sizeof (buf), uurp->sec),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1429 uurp->uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1430 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1431 } else if (n == j)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1432 (void) printf("... %d %s\n", srp->nrecs - max_fault,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1433 dgettext("FMD", "more entries suppressed"));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1434 n++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1435 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1436 (void) printf("\n");
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1437 (void) printf("%s %s", dgettext("FMD", "Host :"),
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1438 srp->host->server);
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1439 if (srp->host->domain)
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1440 (void) printf("\t%s %s", dgettext("FMD", "Domain :"),
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1441 srp->host->domain);
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1442 (void) printf("\n%s %s", dgettext("FMD", "Platform :"),
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1443 srp->host->platform);
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1444 (void) printf("\t%s %s\n\n", dgettext("FMD", "Chassis_id :"),
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1445 srp->host->chassis ? srp->host->chassis : "");
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1446 if (srp->class)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1447 print_name_list(srp->class,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1448 dgettext("FMD", "Fault class :"), NULL, 0, srp->class->pct,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1449 NULL, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1450 if (srp->asru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1451 status = asru_same_status(srp->asru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1452 if (status != -1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1453 print_name_list(srp->asru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1454 dgettext("FMD", "Affects :"), NULL,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1455 full ? 0 : max_display, 0, NULL, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1456 print_asru_status(status, " ");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1457 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1458 print_name_list(srp->asru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1459 dgettext("FMD", "Affects :"), NULL,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1460 full ? 0 : max_display, 0, print_asru_status, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1461 }
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1462 if (full || srp->fru == NULL || srp->asru == NULL) {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1463 if (srp->resource) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1464 print_name_list(srp->resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1465 dgettext("FMD", "Problem in :"),
9120
fe1f7d8cd967 6533823 need better way of proxying faults across event transport
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 8245
diff changeset
1466 NULL, full ? 0 : max_display, 0, print_rsrc_status,
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1467 full);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1468 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1469 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1470 if (srp->fru) {
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1471 status = asru_same_status(srp->fru);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1472 if (status != -1) {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1473 print_name_list(srp->fru, dgettext("FMD",
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1474 "FRU :"), get_fmri_label, 0,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1475 srp->fru->pct == 100 ? 100 : srp->fru->max_pct,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1476 NULL, full);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1477 print_fru_status(status, " ");
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1478 } else
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1479 print_name_list(srp->fru, dgettext("FMD",
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1480 "FRU :"), get_fmri_label, 0,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1481 srp->fru->pct == 100 ? 100 : srp->fru->max_pct,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1482 print_fru_status, full);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1483 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1484 if (srp->serial && !serial_in_fru(srp->fru, srp->serial) &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1485 !serial_in_fru(srp->asru, srp->serial)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1486 print_name_list(srp->serial, dgettext("FMD", "Serial ID. :"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1487 NULL, 0, 0, NULL, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1488 }
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1489 print_dict_info(srp->uurec->event);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1490 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1491 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1492
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1493 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1494 print_status_record(status_record_t *srp, int summary, int opt_i, int full)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1495 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1496 char buf[32];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1497 uurec_t *uurp = srp->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1498 static int header = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1499 char *head;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1500 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1501
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1502 if (!summary || !header) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1503 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1504 head = "--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1505 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1506 "-------------- ---------\n"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1507 "TIME CACHE-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1508 " MSG-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1509 " SEVERITY\n--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1510 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1511 " -------------- ---------";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1512 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1513 head = "--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1514 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1515 "-------------- ---------\n"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1516 "TIME EVENT-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1517 " MSG-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1518 " SEVERITY\n--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1519 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1520 " -------------- ---------";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1521 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1522 (void) printf("%s\n", dgettext("FMD", head));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1523 header = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1524 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1525 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1526 ari_list = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1527 while (ari_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1528 (void) printf("%-15s %-37s %-14s %-9s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1529 format_date(buf, sizeof (buf), uurp->sec),
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1530 ari_list->ari_uuid, srp->msgid, srp->severity);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1531 ari_list = ari_list->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1532 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1533 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1534 (void) printf("%-15s %-37s %-14s %-9s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1535 format_date(buf, sizeof (buf), uurp->sec),
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1536 uurp->uuid, srp->msgid, srp->severity);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1537 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1538
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1539 if (!summary)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1540 print_sup_record(srp, opt_i, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1541 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1542
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1543 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1544 print_catalog(int summary, int opt_a, int full, int opt_i, int page_feed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1545 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1546 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1547 sr_list_t *slp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1548
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1549 slp = status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1550 if (slp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1551 for (;;) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1552 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1553 if (opt_a || srp->not_suppressed) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1554 if (page_feed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1555 (void) printf("\f\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1556 print_status_record(srp, summary, opt_i, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1557 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1558 if (slp->next == status_rec_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1559 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1560 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1561 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1562 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1563 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1564
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1565 static name_list_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1566 find_fru(status_record_t *srp, char *resource)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1567 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1568 name_list_t *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1569 name_list_t *fru = srp->fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1570
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1571 while (fru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1572 if (strcmp(resource, fru->name) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1573 rt = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1574 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1575 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1576 fru = fru->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1577 if (fru == srp->fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1578 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1579 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1580 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1581 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1582
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1583 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1584 print_fru_line(name_list_t *fru, char *uuid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1585 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1586 if (fru->pct == 100) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1587 (void) printf("%s %d %s %d%%\n", uuid, fru->count,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1588 dgettext("FMD", "suspects in this FRU total certainty"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1589 100);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1590 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1591 (void) printf("%s %d %s %d%%\n", uuid, fru->count,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1592 dgettext("FMD", "suspects in this FRU max certainty"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1593 fru->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1594 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1595 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1596
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1597 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1598 print_fru(int summary, int opt_a, int opt_i, int page_feed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1599 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1600 resource_list_t *tp = status_fru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1601 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1602 sr_list_t *slp, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1603 char *msgid, *fru_label;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1604 uurec_t *uurp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1605 name_list_t *fru;
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1606 int status;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1607 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1608
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1609 while (tp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1610 if (opt_a || tp->not_suppressed) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1611 if (page_feed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1612 (void) printf("\f\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1613 if (!summary)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1614 (void) printf("-----------------------------"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1615 "---------------------------------------"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1616 "----------\n");
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1617 slp = tp->status_rec_list;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1618 end = slp;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1619 do {
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1620 srp = slp->status_record;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1621 fru = find_fru(srp, tp->resource);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1622 if (fru) {
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1623 if (fru->label)
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1624 (void) printf("\"%s\" (%s) ",
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1625 fru->label, fru->name);
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1626 else if ((fru_label = get_fmri_label(
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1627 fru->name)) != NULL) {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1628 (void) printf("\"%s\" (%s) ",
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1629 fru_label, fru->name);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1630 free(fru_label);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1631 } else
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1632 (void) printf("%s ",
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1633 fru->name);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1634 break;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1635 }
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1636 slp = slp->next;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1637 } while (slp != end);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1638
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1639 slp = tp->status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1640 end = slp;
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1641 status = 0;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1642 do {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1643 srp = slp->status_record;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1644 fru = srp->fru;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1645 while (fru) {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1646 if (strcmp(tp->resource,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1647 fru->name) == 0)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1648 status |= fru->status;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1649 fru = fru->next;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1650 if (fru == srp->fru)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1651 break;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1652 }
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1653 slp = slp->next;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1654 } while (slp != end);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1655 if (status & FM_SUSPECT_NOT_PRESENT)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1656 (void) printf(dgettext("FMD", "not present\n"));
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1657 else if (status & FM_SUSPECT_FAULTY)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1658 (void) printf(dgettext("FMD", "faulty\n"));
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1659 else if (status & FM_SUSPECT_REPLACED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1660 (void) printf(dgettext("FMD", "replaced\n"));
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1661 else if (status & FM_SUSPECT_REPAIRED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1662 (void) printf(dgettext("FMD",
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1663 "repair attempted\n"));
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1664 else if (status & FM_SUSPECT_ACQUITTED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1665 (void) printf(dgettext("FMD", "acquitted\n"));
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1666 else
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1667 (void) printf(dgettext("FMD", "removed\n"));
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1668
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1669 slp = tp->status_rec_list;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1670 end = slp;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1671 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1672 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1673 uurp = srp->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1674 fru = find_fru(srp, tp->resource);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1675 if (fru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1676 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1677 ari_list = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1678 while (ari_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1679 print_fru_line(fru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1680 ari_list->ari_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1681 ari_list =
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1682 ari_list->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1683 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1684 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1685 print_fru_line(fru, uurp->uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1686 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1687 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1688 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1689 } while (slp != end);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1690 if (!summary) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1691 slp = tp->status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1692 end = slp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1693 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1694 if (srp->serial &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1695 !serial_in_fru(srp->fru, srp->serial)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1696 print_name_list(srp->serial,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1697 dgettext("FMD", "Serial ID. :"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1698 NULL, 0, 0, NULL, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1699 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1700 msgid = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1701 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1702 if (msgid == NULL ||
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1703 strcmp(msgid, srp->msgid) != 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1704 msgid = srp->msgid;
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1705 print_dict_info(uurp->event);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1706 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1707 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1708 } while (slp != end);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1709 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1710 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1711 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1712 if (tp == status_fru_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1713 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1714 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1715 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1716
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1717 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1718 print_asru(int opt_a)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1719 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1720 resource_list_t *tp = status_asru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1721 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1722 sr_list_t *slp, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1723 char *msg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1724 int status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1725 name_list_t *asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1726
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1727 while (tp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1728 if (opt_a || tp->not_suppressed) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1729 status = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1730 slp = tp->status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1731 end = slp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1732 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1733 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1734 asru = srp->asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1735 while (asru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1736 if (strcmp(tp->resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1737 asru->name) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1738 status |= asru->status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1739 asru = asru->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1740 if (asru == srp->asru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1741 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1742 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1743 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1744 } while (slp != end);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1745 switch (status) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1746 case 0:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1747 msg = dgettext("FMD", "ok");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1748 break;
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1749 case FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1750 msg = dgettext("FMD", "degraded");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1751 break;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1752 case FM_SUSPECT_FAULTY | FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1753 msg = dgettext("FMD", "degraded");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1754 break;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1755 case FM_SUSPECT_FAULTY:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1756 msg = dgettext("FMD", "degraded");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1757 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1758 case FM_SUSPECT_UNUSABLE:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1759 msg = dgettext("FMD", "unknown");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1760 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1761 case FM_SUSPECT_FAULTY | FM_SUSPECT_UNUSABLE:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1762 msg = dgettext("FMD", "faulted");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1763 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1764 default:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1765 msg = "";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1766 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1767 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1768 (void) printf("%-69s %s\n", tp->resource, msg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1769 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1770 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1771 if (tp == status_asru_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1772 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1773 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1774 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1775
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1776 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1777 uuid_in_list(char *uuid, uurec_select_t *uurecp)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1778 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1779 while (uurecp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1780 if (strcmp(uuid, uurecp->uuid) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1781 return (1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1782 uurecp = uurecp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1783 }
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1784 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1785 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1786
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1787 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1788 dfault_rec(const fmd_adm_caseinfo_t *acp, void *arg)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1789 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1790 int64_t *diag_time;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1791 uint_t nelem;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1792 int rt = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1793 char *uuid = "-";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1794 uurec_select_t *uurecp = (uurec_select_t *)arg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1795
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1796 if (nvlist_lookup_int64_array(acp->aci_event, FM_SUSPECT_DIAG_TIME,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1797 &diag_time, &nelem) == 0 && nelem >= 2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1798 (void) nvlist_lookup_string(acp->aci_event, FM_SUSPECT_UUID,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1799 &uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1800 if (uurecp == NULL || uuid_in_list(uuid, uurecp))
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1801 add_fault_record_to_catalog(acp->aci_event, *diag_time,
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1802 uuid);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1803 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1804 rt = -1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1805 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1806 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1807 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1808
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1809 /*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1810 static int
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1811 dstatus_rec(const fmd_adm_rsrcinfo_t *ari, void *unused)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1812 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1813 update_asru_state_in_catalog(ari->ari_case, ari->ari_uuid);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1814 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1815 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1816
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1817 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1818 get_cases_from_fmd(fmd_adm_t *adm, uurec_select_t *uurecp, int opt_i)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1819 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1820 int rt = FMADM_EXIT_SUCCESS;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1821
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1822 /*
10234
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1823 * These calls may fail with Protocol error if message payload is
c4cea2ed5803 6839705 libtopo needs updates in order to cope with ILOM 3
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9501
diff changeset
1824 * too big
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1825 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1826 if (fmd_adm_case_iter(adm, NULL, dfault_rec, uurecp) != 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1827 die("failed to get case list from fmd");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1828 if (opt_i && fmd_adm_rsrc_iter(adm, 1, dstatus_rec, NULL) != 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1829 die("failed to get case status from fmd");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1830 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1831 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1832
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1833 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1834 * fmadm faulty command
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1835 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1836 * -a show hidden fault records
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1837 * -f show faulty fru's
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1838 * -g force grouping of similar faults on the same fru
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1839 * -n number of fault records to display
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1840 * -p pipe output through pager
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1841 * -r show faulty asru's
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1842 * -s print summary of first fault
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1843 * -u print listed uuid's only
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1844 * -v full output
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1845 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1846
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1847 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1848 cmd_faulty(fmd_adm_t *adm, int argc, char *argv[])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1849 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1850 int opt_a = 0, opt_v = 0, opt_p = 0, opt_s = 0, opt_r = 0, opt_f = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1851 int opt_i = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1852 char *pager;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1853 FILE *fp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1854 int rt, c, stat;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1855 uurec_select_t *tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1856 uurec_select_t *uurecp = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1857
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1858 while ((c = getopt(argc, argv, "afgin:prsu:v")) != EOF) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1859 switch (c) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1860 case 'a':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1861 opt_a++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1862 break;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1863 case 'f':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1864 opt_f++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1865 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1866 case 'g':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1867 opt_g++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1868 break;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1869 case 'i':
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1870 opt_i++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1871 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1872 case 'n':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1873 max_fault = atoi(optarg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1874 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1875 case 'p':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1876 opt_p++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1877 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1878 case 'r':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1879 opt_r++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1880 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1881 case 's':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1882 opt_s++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1883 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1884 case 'u':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1885 tp = (uurec_select_t *)malloc(sizeof (uurec_select_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1886 tp->uuid = optarg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1887 tp->next = uurecp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1888 uurecp = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1889 opt_a = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1890 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1891 case 'v':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1892 opt_v++;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1893 break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1894 default:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1895 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1896 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1897 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1898 if (optind < argc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1899 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1900
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1901 if ((fmadm_msghdl = fmd_msg_init(NULL, FMD_MSG_VERSION)) == NULL)
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1902 return (FMADM_EXIT_ERROR);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1903 rt = get_cases_from_fmd(adm, uurecp, opt_i);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1904 if (opt_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1905 if ((pager = getenv("PAGER")) == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1906 pager = "/usr/bin/more";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1907 fp = popen(pager, "w");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1908 if (fp == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1909 rt = FMADM_EXIT_ERROR;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1910 opt_p = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1911 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1912 dup2(fileno(fp), 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1913 setbuf(stdout, NULL);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1914 (void) fclose(fp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1915 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1916 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1917 max_display = max_fault;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1918 if (opt_f)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1919 print_fru(opt_s, opt_a, opt_i, opt_p && !opt_s);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1920 if (opt_r)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1921 print_asru(opt_a);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1922 if (opt_f == 0 && opt_r == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1923 print_catalog(opt_s, opt_a, opt_v, opt_i, opt_p && !opt_s);
9501
f84d3cc28d24 PSARC 2009/265 fmdump -m
Robert Johnston <Robert.Johnston@Sun.COM>
parents: 9120
diff changeset
1924 fmd_msg_fini(fmadm_msghdl);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1925 label_release_topo();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1926 if (opt_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1927 (void) fclose(stdout);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1928 (void) wait(&stat);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1929 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1930 return (rt);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1931 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1932
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1933 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1934 cmd_flush(fmd_adm_t *adm, int argc, char *argv[])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1935 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1936 int i, status = FMADM_EXIT_SUCCESS;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1937
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1938 if (argc < 2 || (i = getopt(argc, argv, "")) != EOF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1939 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1940
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1941 for (i = 1; i < argc; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1942 if (fmd_adm_rsrc_flush(adm, argv[i]) != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1943 warn("failed to flush %s", argv[i]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1944 status = FMADM_EXIT_ERROR;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1945 } else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1946 note("flushed resource history for %s\n", argv[i]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1947 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1948
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1949 return (status);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1950 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1951
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1952 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1953 cmd_repair(fmd_adm_t *adm, int argc, char *argv[])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1954 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1955 int err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1956
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1957 if (getopt(argc, argv, "") != EOF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1958 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1959
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1960 if (argc - optind != 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1961 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1962
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1963 /*
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1964 * argument could be a uuid, an fmri (asru, fru or resource)
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1965 * or a label. Try uuid first, If that fails try the others.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1966 */
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1967 err = fmd_adm_case_repair(adm, argv[optind]);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1968 if (err != 0)
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1969 err = fmd_adm_rsrc_repaired(adm, argv[optind]);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1970
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1971 if (err != 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1972 die("failed to record repair to %s", argv[optind]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1973
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1974 note("recorded repair to %s\n", argv[optind]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1975 return (FMADM_EXIT_SUCCESS);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1976 }
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1977
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1978 int
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1979 cmd_repaired(fmd_adm_t *adm, int argc, char *argv[])
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1980 {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1981 int err;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1982
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1983 if (getopt(argc, argv, "") != EOF)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1984 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1985
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1986 if (argc - optind != 1)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1987 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1988
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1989 /*
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1990 * argument could be an fmri (asru, fru or resource) or a label.
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1991 */
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1992 err = fmd_adm_rsrc_repaired(adm, argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1993 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1994 die("failed to record repair to %s", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1995
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1996 note("recorded repair to of %s\n", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1997 return (FMADM_EXIT_SUCCESS);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1998 }
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1999
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2000 int
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2001 cmd_replaced(fmd_adm_t *adm, int argc, char *argv[])
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2002 {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2003 int err;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2004
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2005 if (getopt(argc, argv, "") != EOF)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2006 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2007
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2008 if (argc - optind != 1)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2009 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2010
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2011 /*
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2012 * argument could be an fmri (asru, fru or resource) or a label.
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2013 */
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2014 err = fmd_adm_rsrc_replaced(adm, argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2015 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2016 die("failed to record replacement of %s", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2017
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2018 note("recorded replacement of %s\n", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2019 return (FMADM_EXIT_SUCCESS);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2020 }
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2021
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2022 int
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2023 cmd_acquit(fmd_adm_t *adm, int argc, char *argv[])
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2024 {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2025 int err;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2026
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2027 if (getopt(argc, argv, "") != EOF)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2028 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2029
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2030 if (argc - optind != 1 && argc - optind != 2)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2031 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2032
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2033 /*
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2034 * argument could be a uuid, an fmri (asru, fru or resource)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2035 * or a label. Or it could be a uuid and an fmri or label.
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2036 */
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2037 if (argc - optind == 2) {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2038 err = fmd_adm_rsrc_acquit(adm, argv[optind], argv[optind + 1]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2039 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2040 err = fmd_adm_rsrc_acquit(adm, argv[optind + 1],
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2041 argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2042 } else {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2043 err = fmd_adm_case_acquit(adm, argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2044 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2045 err = fmd_adm_rsrc_acquit(adm, argv[optind], "");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2046 }
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2047
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2048 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2049 die("failed to record acquital of %s", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2050
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2051 note("recorded acquital of %s\n", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2052 return (FMADM_EXIT_SUCCESS);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2053 }