annotate usr/src/cmd/fm/fmadm/common/faulty.c @ 8245:7dbd13b3b276

6763249 eft is disabled on fmadm repair when serdsuffix feature is used 6765307 fmdo_send() thread and the thread running fmd_xprt_close() could deadlock 6767850 repair case will deadlock if the case has two ASRUs that one "contains" the other 6769508 shouldn't add label to defect events 6772752 fmadm faulty should display location label even if event has no FRU 6774080 calls to fmd_fmri_service_state not expecting new ISOLATE_PENDING return value 6774124 has_fault feature is working incorrectly 6237897 eversholt: defects need defect rates as well
author Stephen Hanson <Stephen.Hanson@Sun.COM>
date Tue, 02 Dec 2008 03:15:06 -0800
parents 1157db66a604
children fe1f7d8cd967
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 /*
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
22 * Copyright 2008 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>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
40 #include <dlfcn.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
41 #include <sys/systeminfo.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
42 #include <sys/utsname.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
43 #include <libintl.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
44 #include <locale.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
45 #include <sys/smbios.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
46 #include <libdevinfo.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
47 #include <stdlib.h>
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
48
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
49 #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
50
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 * catalog_setup() must be called to setup support functions.
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;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
185 } uurec_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
186
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
187 typedef struct uurec_select {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
188 struct uurec_select *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
189 char *uuid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
190 } uurec_select_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
191
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
192 typedef struct host_id {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
193 char *chassis;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
194 char *server;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
195 char *platform;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
196 } hostid_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
197
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
198 typedef struct host_id_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
199 hostid_t hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
200 struct host_id_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
201 } host_id_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
202
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
203 typedef struct status_record {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
204 hostid_t *host;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
205 int nrecs;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
206 uurec_t *uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
207 char *severity; /* in C locale */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
208 char *msgid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
209 name_list_t *class;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
210 name_list_t *resource;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
211 name_list_t *asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
212 name_list_t *fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
213 name_list_t *serial;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
214 char *url;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
215 uint8_t not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
216 } status_record_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
217
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
218 typedef struct sr_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
219 struct sr_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
220 struct sr_list *prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
221 struct status_record *status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
222 } sr_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
223
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
224 typedef struct resource_list {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
225 struct resource_list *next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
226 struct resource_list *prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
227 sr_list_t *status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
228 char *resource;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
229 uint8_t not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
230 uint8_t max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
231 } resource_list_t;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
232
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
233 typedef struct tgetlabel_data {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
234 char *label;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
235 char *fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
236 } tgetlabel_data_t;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
237
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
238 sr_list_t *status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
239 resource_list_t *status_fru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
240 resource_list_t *status_asru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
241
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
242 static char *locale;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
243 static char *nlspath;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
244 static int max_display;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
245 static int max_fault = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
246 static topo_hdl_t *topo_handle;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
247 static char *topo_handle_uuid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
248 static host_id_list_t *host_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
249 static int n_server;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
250 static int opt_g;
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 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
268 find_hostid_in_list(char *platform, char *chassis, char *server)
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 ||
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
284 strcmp(chassis, hostp->hostid.chassis) == 0)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
285 rt = &hostp->hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
286 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
287 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
288 hostp = hostp->next;
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 if (rt == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
291 hostp = malloc(sizeof (host_id_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
292 hostp->hostid.platform = strdup(platform);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
293 hostp->hostid.server = strdup(server);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
294 hostp->hostid.chassis = chassis ? strdup(chassis) : NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
295 hostp->next = host_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
296 host_list = hostp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
297 rt = &hostp->hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
298 n_server++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
299 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
300 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
301 }
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 static hostid_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
304 find_hostid(nvlist_t *nvl)
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 char *platform = NULL, *chassis = NULL, *server = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
307 nvlist_t *auth, *fmri;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
308 hostid_t *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
309
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
310 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
311 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
312 (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
313 &platform);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
314 (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
315 (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
316 &chassis);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
317 rt = find_hostid_in_list(platform, chassis, server);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
318 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
319 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
320 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
321
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
322 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
323 catalog_setup(void)
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 char *tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
326 int pl;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
327
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
328 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
329 * All FMA event dictionaries use msgfmt(1) message objects to produce
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
330 * messages, even for the C locale. We therefore want to use dgettext
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
331 * for all message lookups, but its defined behavior in the C locale is
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
332 * to return the input string. Since our input strings are event codes
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
333 * and not format strings, this doesn't help us. We resolve this nit
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
334 * by setting NLSPATH to a non-existent file: the presence of NLSPATH
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
335 * is defined to force dgettext(3C) to do a full lookup even for C.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
336 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
337 nlspath = getenv("NLSPATH");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
338 if (nlspath == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
339 putenv("NLSPATH=/usr/lib/fm/fmd/fmd.cat");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
340 else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
341 pl = strlen(nlspath) + sizeof ("NLSPATH=") + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
342 tp = malloc(pl);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
343 (void) snprintf(tp, pl, "NLSPATH=%s", nlspath);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
344 nlspath = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
345 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
346
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
347 locale = setlocale(LC_MESSAGES, "");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
348 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
349
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
350 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
351 get_dict_url(char *id)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
352 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
353 char *url = "http://sun.com/msg/";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
354 int msz = sizeof (url) + strlen(id) + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
355 char *cp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
356
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
357 cp = malloc(msz);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
358 (void) snprintf(cp, msz, "%s%s", url, id);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
359 return (cp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
360 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
361
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
362 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
363 get_dict_msg(char *id, char *idx, int unknown, int translate)
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 char mbuf[128];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
366 char *msg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
367 char dbuf[32];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
368 char *p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
369 int restore_env = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
370 int restore_locale = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
371
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
372 p = strchr(id, '-');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
373 if (p == NULL || p == id || (p - id) >= 32) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
374 msg = mbuf;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
375 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
376 strncpy(dbuf, id, (size_t)(p - id));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
377 dbuf[(size_t)(p - id)] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
378
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
379 (void) snprintf(mbuf, sizeof (mbuf), "%s.%s", id, idx);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
380 if (translate == 0 || nlspath == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
381 (void) setlocale(LC_MESSAGES, "C");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
382 restore_locale = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
383 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
384 bindtextdomain("FMD", "/usr/lib/locale");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
385 msg = dgettext(dbuf, mbuf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
386 if (msg == mbuf) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
387 (void) setlocale(LC_MESSAGES, "C");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
388 restore_locale = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
389 msg = dgettext(dbuf, mbuf);
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 if (msg == mbuf) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
392 putenv("NLSPATH=/usr/lib/fm/fmd/fmd.cat");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
393 restore_env = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
394 (void) setlocale(LC_MESSAGES, "C");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
395 msg = dgettext(dbuf, mbuf);
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 if (restore_locale)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
398 (void) setlocale(LC_MESSAGES, locale);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
399 if (restore_env && nlspath)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
400 putenv(nlspath);
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 if (msg == mbuf) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
403 if (unknown)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
404 msg = "unknown";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
405 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
406 msg = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
407 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
408 return (msg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
409 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
410
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 * 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
413 * 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
414 * substring is null in one.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
415 */
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 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
418 frucmp(char *f1, char *f2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
419 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
420 char c1, c2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
421 int i = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
422
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
423 for (;;) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
424 c1 = *f1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
425 c2 = *f2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
426 if (c1 == c2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
427 i = (c1 == '/') ? 0 : i + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
428 } else if (i == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
429 if (c1 == '/') {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
430 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
431 f2++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
432 } while ((c2 = *f2) != 0 && c2 != '/');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
433 if (c2 == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
434 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
435 } else if (c2 == '/') {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
436 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
437 f1++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
438 } while ((c1 = *f1) != 0 && c1 != '/');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
439 if (c1 == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
440 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
441 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
442 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
443 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
444 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
445 if (c1 == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
446 return (0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
447 f1++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
448 f2++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
449 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
450 return (1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
451 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
452
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
453 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
454 tgetlabel(topo_hdl_t *thp, tnode_t *node, void *arg)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
455 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
456 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
457 char *fru_name, *lname;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
458 nvlist_t *fru = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
459 int rt = TOPO_WALK_NEXT;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
460 tgetlabel_data_t *tdp = (tgetlabel_data_t *)arg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
461
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
462 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
463 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
464 if (frucmp(tdp->fru, fru_name) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
465 topo_node_label(node, &lname, &err) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
466 tdp->label = strdup(lname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
467 topo_hdl_strfree(thp, lname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
468 rt = TOPO_WALK_TERMINATE;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
469 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
470 topo_hdl_strfree(thp, fru_name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
471 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
472 nvlist_free(fru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
473 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
474 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
475 }
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 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
478 label_get_topo(void)
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 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
481
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
482 topo_handle = topo_open(TOPO_VERSION, 0, &err);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
483 if (topo_handle) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
484 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
485 }
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
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
488 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
489 label_release_topo(void)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
490 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
491 if (topo_handle_uuid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
492 topo_hdl_strfree(topo_handle, topo_handle_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
493 if (topo_handle) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
494 topo_snap_release(topo_handle);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
495 topo_close(topo_handle);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
496 }
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
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
499 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
500 get_fmri_label(char *fru)
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 topo_walk_t *twp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
503 tgetlabel_data_t td;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
504 int err;
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 td.label = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
507 td.fru = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
508 if (topo_handle == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
509 label_get_topo();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
510 if (topo_handle_uuid) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
511 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
512 tgetlabel, &td, &err);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
513 if (twp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
514 topo_walk_step(twp, TOPO_WALK_CHILD);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
515 topo_walk_fini(twp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
516 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
517 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
518 return (td.label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
519 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
520
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
521 static char *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
522 get_nvl2str_topo(nvlist_t *nvl)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
523 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
524 char *name = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
525 char *tname;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
526 int err;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
527 char *scheme = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
528 char *mod_name = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
529 char buf[128];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
530
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
531 if (topo_handle == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
532 label_get_topo();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
533 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
534 name = strdup(tname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
535 topo_hdl_strfree(topo_handle, tname);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
536 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
537 (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
538 (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
539 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
540 mod_name) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
541 (void) snprintf(buf, sizeof (buf), "%s:///module/%s",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
542 scheme, mod_name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
543 name = strdup(buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
544 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
545 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
546 return (name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
547 }
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 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
550 set_priority(char *s)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
551 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
552 int rt = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
553
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
554 if (s) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
555 if (strcmp(s, "Minor") == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
556 rt = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
557 else if (strcmp(s, "Major") == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
558 rt = 10;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
559 else if (strcmp(s, "Critical") == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
560 rt = 100;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
561 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
562 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
563 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
564
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
565 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
566 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
567 uint8_t p2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
568 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
569 int r1, r2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
570 int rt;
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 r1 = set_priority(s1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
573 r2 = set_priority(s2);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
574 rt = r1 - r2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
575 if (rt == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
576 if (t1 > t2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
577 rt = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
578 else if (t1 < t2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
579 rt = -1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
580 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
581 rt = p1 - p2;
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 return (rt);
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
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
586 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
587 * 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
588 * 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
589 * 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
590 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
591 static name_list_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
592 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
593 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
594 name_list_t *lp, *np, *sp, *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
595 int max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
596
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
597 rt = *list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
598 np = new;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
599 while (np) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
600 lp = *list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
601 while (lp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
602 if (strcmp(lp->name, np->name) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
603 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
604 lp = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
605 if (lp == *list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
606 lp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
607 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
608 if (np->next == new)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
609 sp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
610 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
611 sp = np->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
612 if (lp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
613 lp->status |= (np->status & FM_SUSPECT_FAULTY);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
614 if (add_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
615 lp->pct += np->pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
616 lp->count += np->count;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
617 } else if (np->pct > lp->pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
618 lp->pct = np->pct;
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 max_pct = np->max_pct;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
621 if (np->label)
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
622 free(np->label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
623 free(np->name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
624 free(np);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
625 np = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
626 if (max_pct > lp->max_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
627 lp->max_pct = max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
628 if (lp->max_pct > lp->prev->max_pct &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
629 lp != *list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
630 lp->prev->next = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
631 lp->next->prev = lp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
632 np = lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
633 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
634 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
635 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
636 if (np) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
637 lp = *list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
638 if (lp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
639 if (np->max_pct > lp->max_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
640 np->next = lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
641 np->prev = lp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
642 lp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
643 lp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
644 *list = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
645 rt = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
646 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
647 lp = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
648 while (lp != *list &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
649 np->max_pct < lp->max_pct) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
650 lp = lp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
651 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
652 np->next = lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
653 np->prev = lp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
654 lp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
655 lp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
656 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
657 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
658 *list = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
659 np->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
660 np->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
661 rt = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
662 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
663 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
664 np = sp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
665 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
666 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
667 }
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 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
670 * 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
671 * 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
672 * 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
673 * the other.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
674 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
675 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
676 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
677 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
678 name_list_t *lp1, *lp2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
679 int l1 = 0, l2 = 0, common = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
680
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
681 lp2 = lxp2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
682 while (lp2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
683 l2++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
684 lp2 = lp2->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
685 if (lp2 == lxp2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
686 break;
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 lp1 = lxp1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
689 while (lp1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
690 l1++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
691 lp2 = lxp2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
692 while (lp2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
693 if (strcmp(lp2->name, lp1->name) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
694 common++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
695 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
696 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
697 lp2 = lp2->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
698 if (lp2 == lxp2)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
699 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
700 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
701 lp1 = lp1->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
702 if (lp1 == lxp1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
703 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
704 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
705 if (l1 == l2 && l2 == common)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
706 return (0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
707 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
708 return (1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
709 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
710
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
711 static name_list_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
712 alloc_name_list(char *name, uint8_t pct)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
713 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
714 name_list_t *nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
715
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
716 nlp = malloc(sizeof (*nlp));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
717 nlp->name = strdup(name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
718 nlp->pct = pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
719 nlp->max_pct = pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
720 nlp->count = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
721 nlp->next = nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
722 nlp->prev = nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
723 nlp->status = 0;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
724 nlp->label = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
725 return (nlp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
726 }
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 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
729 free_name_list(name_list_t *list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
730 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
731 name_list_t *next = list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
732 name_list_t *lp;
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 if (list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
735 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
736 lp = next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
737 next = lp->next;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
738 if (lp->label)
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
739 free(lp->label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
740 free(lp->name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
741 free(lp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
742 } while (next != list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
743 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
744 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
745
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
746 static status_record_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
747 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
748 name_list_t *fru, name_list_t *asru, name_list_t *resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
749 name_list_t *serial, const char *url, boolean_t not_suppressed,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
750 hostid_t *hostid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
751 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
752 status_record_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
753
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
754 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
755 status_rec_p->nrecs = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
756 status_rec_p->host = hostid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
757 status_rec_p->uurec = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
758 uurec_p->next = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
759 uurec_p->prev = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
760 uurec_p->asru = asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
761 status_rec_p->severity = get_dict_msg(msgid, "severity", 1, 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
762 status_rec_p->class = class;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
763 status_rec_p->fru = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
764 status_rec_p->asru = asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
765 status_rec_p->resource = resource;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
766 status_rec_p->serial = serial;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
767 status_rec_p->url = url ? strdup(url) : NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
768 status_rec_p->msgid = strdup(msgid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
769 status_rec_p->not_suppressed = not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
770 return (status_rec_p);
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
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
773 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
774 * 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
775 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
776 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
777 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
778 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
779 sr_list_t *tp, *np, *sp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
780 int order;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
781 uint64_t sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
782
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
783 np = malloc(sizeof (sr_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
784 np->status_record = status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
785 sec = status_rec_p->uurec->sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
786 if ((sp = *list_pp) == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
787 *list_pp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
788 np->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
789 np->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
790 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
791 /* insert new record in front of lower priority */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
792 tp = sp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
793 order = cmp_priority(status_rec_p->severity,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
794 sp->status_record->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
795 tp->status_record->uurec->sec, 0, 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
796 if (order > 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
797 *list_pp = 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 tp = sp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
800 while (tp != sp &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
801 cmp_priority(status_rec_p->severity,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
802 tp->status_record->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
803 tp->status_record->uurec->sec, 0, 0)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
804 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
805 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
806 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
807 np->next = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
808 np->prev = tp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
809 tp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
810 tp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
811 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
812 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
813
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
814 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
815 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
816 resource_list_t *np)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
817 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
818 int order;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
819 uint64_t sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
820 resource_list_t *sp, *tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
821 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
822 char *severity = status_rec_p->severity;
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 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
825 if ((sp = *rp) == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
826 np->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
827 np->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
828 *rp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
829 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
830 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
831 * insert new record in front of lower priority
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
832 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
833 tp = sp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
834 srp = sp->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
835 sec = status_rec_p->uurec->sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
836 order = cmp_priority(severity, srp->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
837 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
838 if (order > 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
839 *rp = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
840 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
841 srp = tp->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
842 while (tp != sp &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
843 cmp_priority(severity, srp->severity, sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
844 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
845 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
846 srp = tp->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
847 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
848 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
849 np->next = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
850 np->prev = tp->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
851 tp->prev->next = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
852 tp->prev = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
853 }
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 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
857 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
858 resource_list_t **rpp)
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 int order;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
861 resource_list_t *np, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
862 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
863
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
864 np = *rpp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
865 end = np;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
866 while (np) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
867 if (strcmp(fp->name, np->resource) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
868 np->not_suppressed |= status_rec_p->not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
869 srp = np->status_rec_list->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
870 order = cmp_priority(status_rec_p->severity,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
871 srp->severity, status_rec_p->uurec->sec,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
872 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
873 if (order > 0 && np != end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
874 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
875 * remove from list and add again using
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
876 * new priority
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
877 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
878 np->prev->next = np->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
879 np->next->prev = np->prev;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
880 add_resource(status_rec_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
881 rpp, np);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
882 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
883 add_rec_list(status_rec_p,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
884 &np->status_rec_list);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
885 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
886 break;
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 np = np->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
889 if (np == end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
890 np = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
891 break;
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 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
894 if (np == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
895 np = malloc(sizeof (resource_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
896 np->resource = fp->name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
897 np->not_suppressed = status_rec_p->not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
898 np->status_rec_list = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
899 np->max_pct = fp->max_pct;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
900 add_resource(status_rec_p, rpp, np);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
901 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
902 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
903
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
904 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
905 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
906 resource_list_t **glistp)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
907 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
908 name_list_t *fp, *end;
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 fp = listp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
911 end = fp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
912 while (fp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
913 add_resource_list(status_rec_p, fp, glistp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
914 fp = fp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
915 if (fp == end)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
916 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
917 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
918 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
919
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
920 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
921 * add record to rec, fru and asru lists.
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
922 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
923 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
924 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
925 name_list_t *fru, name_list_t *asru, name_list_t *resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
926 name_list_t *serial, const char *url, boolean_t not_suppressed,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
927 hostid_t *hostid)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
928 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
929 status_record_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
930
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
931 status_rec_p = new_record_init(uurec_p, msgid, class, fru, asru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
932 resource, serial, url, not_suppressed, hostid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
933 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
934 if (status_rec_p->fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
935 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
936 if (status_rec_p->asru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
937 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
938 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
939
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
940 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
941 * 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
942 * same fru
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 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
945 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
946 name_list_t *asru, name_list_t *resource, name_list_t *serial,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
947 const char *url, boolean_t not_suppressed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
948 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
949 uurec_t *uurec1_p;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
950
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
951 status_rec_p->nrecs++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
952 /* add uurec in time order */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
953 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
954 uurec_p->next = status_rec_p->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
955 uurec_p->prev = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
956 status_rec_p->uurec = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
957 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
958 uurec1_p = status_rec_p->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
959 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
960 uurec1_p = uurec1_p->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
961 if (uurec1_p->next)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
962 uurec1_p->next->prev = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
963 uurec_p->next = uurec1_p->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
964 uurec_p->prev = uurec1_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
965 uurec1_p->next = uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
966 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
967 if (status_rec_p->url == NULL && url != NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
968 status_rec_p->url = strdup(url);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
969 status_rec_p->not_suppressed |= not_suppressed;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
970 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
971 (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
972 (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
973 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
974
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
975 static status_record_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
976 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
977 char *msgid, hostid_t *host)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
978 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
979 sr_list_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
980 status_record_t *srp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
981
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
982 status_rec_p = status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
983 while (status_rec_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
984 srp = status_rec_p->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
985 if (host == srp->host &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
986 cmp_name_list(class, srp->class) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
987 cmp_name_list(fru, srp->fru) == 0 &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
988 strcmp(msgid, srp->msgid) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
989 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
990 if (status_rec_p->next == status_rec_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
991 srp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
992 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
993 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
994 status_rec_p = status_rec_p->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
995 }
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 return (srp);
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
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1000 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1001 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
1002 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1003 char *name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1004 char *serial = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1005 char **lserial = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1006 uint64_t serint;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1007 name_list_t *nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1008 int j;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1009 uint_t nelem;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1010 char buf[64];
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1011
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1012 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
1013 if (strcmp(name, FM_FMRI_SCHEME_CPU) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1014 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
1015 &serint) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1016 (void) snprintf(buf, sizeof (buf), "%llX",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1017 serint);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1018 nlp = alloc_name_list(buf, pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1019 (void) merge_name_list(serial_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1020 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1021 } 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
1022 if (nvlist_lookup_string_array(nvl,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1023 FM_FMRI_MEM_SERIAL_ID, &lserial, &nelem) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1024 nlp = alloc_name_list(lserial[0], pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1025 for (j = 1; j < nelem; j++) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1026 name_list_t *n1lp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1027 n1lp = alloc_name_list(lserial[j], pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1028 (void) merge_name_list(&nlp, n1lp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1029 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1030 (void) merge_name_list(serial_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1031 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1032 } 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
1033 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
1034 &serial) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1035 nlp = alloc_name_list(serial, pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1036 (void) merge_name_list(serial_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1037 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1038 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1039 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1040 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1041
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1042 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1043 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
1044 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
1045 name_list_t **resource_p, name_list_t **asru_p, uint8_t status)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1046 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1047 nvlist_t *lfru, *lasru, *rsrc;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1048 name_list_t *nlp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1049 char *name;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1050 uint8_t lpct = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1051 char *lclass = NULL;
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1052 char *label;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1053
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1054 (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
1055 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
1056 nlp = alloc_name_list(lclass, lpct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1057 (void) merge_name_list(class_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1058 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1059 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
1060 name = get_nvl2str_topo(lfru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1061 if (name != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1062 nlp = alloc_name_list(name, lpct);
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1063 nlp->status = status & ~(FM_SUSPECT_UNUSABLE |
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1064 FM_SUSPECT_DEGRADED);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1065 free(name);
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1066 if (nvlist_lookup_string(nvl, FM_FAULT_LOCATION,
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1067 &label) == 0)
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1068 nlp->label = strdup(label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1069 (void) merge_name_list(fru_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1070 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1071 get_serial_no(lfru, serial_p, lpct);
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 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
1074 name = get_nvl2str_topo(lasru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1075 if (name != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1076 nlp = alloc_name_list(name, lpct);
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1077 nlp->status = status & ~(FM_SUSPECT_NOT_PRESENT |
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1078 FM_SUSPECT_REPAIRED | FM_SUSPECT_REPLACED |
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1079 FM_SUSPECT_ACQUITTED);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1080 free(name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1081 (void) merge_name_list(asru_p, nlp, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1082 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1083 get_serial_no(lasru, serial_p, lpct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1084 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1085 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
1086 name = get_nvl2str_topo(rsrc);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1087 if (name != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1088 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
1089 nlp->status = status;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1090 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
1091 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
1092 &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
1093 nlp->label = strdup(label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1094 (void) merge_name_list(resource_p, nlp, 1);
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 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1097 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1098
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1099 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1100 add_fault_record_to_catalog(nvlist_t *nvl, uint64_t sec, char *uuid,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1101 const char *url)
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 char *msgid = "-";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1104 uint_t i, size = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1105 name_list_t *class = NULL, *resource = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1106 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
1107 nvlist_t **nva;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1108 uint8_t *ba;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1109 status_record_t *status_rec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1110 uurec_t *uurec_p;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1111 hostid_t *host;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1112 boolean_t not_suppressed = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1113 boolean_t any_present = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1114
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1115 (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
1116 (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
1117 (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
1118 &not_suppressed);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1119
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1120 if (size != 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1121 (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
1122 &nva, &size);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1123 (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
1124 &ba, &size);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1125 for (i = 0; i < size; i++) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1126 extract_record_info(nva[i], &class, &fru, &serial,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1127 &resource, &asru, ba[i]);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1128 if (!(ba[i] & FM_SUSPECT_NOT_PRESENT) &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1129 (ba[i] & FM_SUSPECT_FAULTY))
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1130 any_present = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1131 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1132 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1133 * also suppress if no resources present
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 if (any_present == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1136 not_suppressed = 0;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1137 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1138
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1139 uurec_p = (uurec_t *)malloc(sizeof (uurec_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1140 uurec_p->uuid = strdup(uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1141 uurec_p->sec = sec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1142 uurec_p->ari_uuid_list = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1143 host = find_hostid(nvl);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1144 if (not_suppressed && !opt_g)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1145 status_rec_p = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1146 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1147 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
1148 if (status_rec_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1149 catalog_merge_record(status_rec_p, uurec_p, asru, resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1150 serial, url, not_suppressed);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1151 free_name_list(class);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1152 free_name_list(fru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1153 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1154 catalog_new_record(uurec_p, msgid, class, fru, asru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1155 resource, serial, url, not_suppressed, host);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1156 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1157 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1158
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1159 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1160 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
1161 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1162 sr_list_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1163 uurec_t *uurp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1164 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1165
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1166 srp = status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1167 if (srp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1168 for (;;) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1169 uurp = srp->status_record->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1170 while (uurp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1171 if (strcmp(uuid, uurp->uuid) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1172 ari_list = (ari_list_t *)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1173 malloc(sizeof (ari_list_t));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1174 ari_list->ari_uuid = strdup(ari_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1175 ari_list->next = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1176 uurp->ari_uuid_list = ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1177 return;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1178 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1179 uurp = uurp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1180 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1181 if (srp->next == status_rec_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1182 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1183 srp = srp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1184 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1185 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1186 }
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 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1189 print_line(char *label, char *buf)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1190 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1191 char *cp, *ep, *wp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1192 char c;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1193 int i;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1194 int lsz;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1195 char *padding;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1196
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1197 lsz = strlen(label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1198 padding = malloc(lsz + 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1199 for (i = 0; i < lsz; i++)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1200 padding[i] = ' ';
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1201 padding[i] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1202 cp = buf;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1203 ep = buf;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1204 c = *ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1205 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1206 while (c) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1207 i = lsz;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1208 wp = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1209 while ((c = *ep) != NULL && (wp == NULL || i < 80)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1210 if (c == ' ')
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1211 wp = ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1212 else if (c == '\n') {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1213 i = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1214 *ep = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1215 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1216 ep++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1217 } while ((c = *ep) != NULL && c == ' ');
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1218 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1219 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1220 ep++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1221 i++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1222 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1223 if (i >= 80 && wp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1224 *wp = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1225 ep = wp + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1226 c = *ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1227 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1228 (void) printf("%s%s\n", label, cp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1229 cp = ep;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1230 label = padding;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1231 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1232 free(padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1233 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1234
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1235 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1236 print_dict_info(char *msgid, char *url)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1237 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1238 const char *cp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1239 char *l_url;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1240 char *buf;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1241 int bufsz;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1242
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1243 cp = get_dict_msg(msgid, "description", 0, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1244 if (cp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1245 if (url)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1246 l_url = url;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1247 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1248 l_url = get_dict_url(msgid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1249 bufsz = strlen(cp) + strlen(l_url) + 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1250 buf = malloc(bufsz);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1251 (void) snprintf(buf, bufsz, cp, l_url);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1252 print_line(dgettext("FMD", "Description : "), buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1253 free(buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1254 if (!url)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1255 free(l_url);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1256 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1257 cp = get_dict_msg(msgid, "response", 0, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1258 if (cp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1259 buf = strdup(cp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1260 print_line(dgettext("FMD", "Response : "), buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1261 free(buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1262 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1263 cp = get_dict_msg(msgid, "impact", 0, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1264 if (cp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1265 buf = strdup(cp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1266 print_line(dgettext("FMD", "Impact : "), buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1267 free(buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1268 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1269 cp = get_dict_msg(msgid, "action", 0, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1270 if (cp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1271 buf = strdup(cp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1272 print_line(dgettext("FMD", "Action : "), buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1273 free(buf);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1274 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1275 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1276
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1277 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1278 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
1279 int pct, int full)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1280 {
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1281 char *name, *fru_label = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1282
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1283 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
1284 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
1285 (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
1286 *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
1287 } 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
1288 (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
1289 *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
1290 free(fru_label);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1291 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1292 (void) printf("%s %s", padding, name);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1293 *np += 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1294 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1295 if (list->pct && pct > 0 && pct < 100) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1296 if (list->count > 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1297 if (full) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1298 (void) printf(" %d @ %s %d%%\n", list->count,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1299 dgettext("FMD", "max"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1300 list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1301 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1302 (void) printf(" %s %d%%\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1303 dgettext("FMD", "max"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1304 list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1305 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1306 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1307 (void) printf(" %d%%\n", list->pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1308 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1309 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1310 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1311 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1312 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1313
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1314 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1315 print_asru_status(int status, char *label)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1316 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1317 char *msg = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1318
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1319 switch (status) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1320 case 0:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1321 msg = dgettext("FMD", "ok and in service");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1322 break;
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1323 case FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1324 msg = dgettext("FMD", "service degraded, "
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1325 "but associated components no longer faulty");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1326 break;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1327 case FM_SUSPECT_FAULTY | FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1328 msg = dgettext("FMD", "faulted but still "
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1329 "providing degraded service");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1330 break;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1331 case FM_SUSPECT_FAULTY:
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1332 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
1333 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1334 case FM_SUSPECT_UNUSABLE:
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1335 msg = dgettext("FMD", "out of service, "
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1336 "but associated components no longer faulty");
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1337 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1338 case FM_SUSPECT_FAULTY | FM_SUSPECT_UNUSABLE:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1339 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
1340 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1341 default:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1342 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1343 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1344 if (msg) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1345 (void) printf("%s %s\n", label, msg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1346 }
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 void
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1350 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
1351 {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1352 char *msg = NULL;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1353
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1354 if (status & FM_SUSPECT_NOT_PRESENT)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1355 msg = dgettext("FMD", "not present");
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1356 else if (status & FM_SUSPECT_FAULTY)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1357 msg = dgettext("FMD", "faulty");
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1358 else if (status & FM_SUSPECT_REPLACED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1359 msg = dgettext("FMD", "replaced");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1360 else if (status & FM_SUSPECT_REPAIRED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1361 msg = dgettext("FMD", "repair attempted");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1362 else if (status & FM_SUSPECT_ACQUITTED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1363 msg = dgettext("FMD", "acquitted");
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1364 else
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1365 msg = dgettext("FMD", "removed");
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1366 (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
1367 }
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1368
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1369 static void
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1370 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
1371 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
1372 {
8245
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1373 char *name, *fru_label = NULL;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1374 char *padding;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1375 int i, j, l, n;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1376 name_list_t *end = list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1377
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1378 l = strlen(label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1379 padding = malloc(l + 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1380 for (i = 0; i < l; i++)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1381 padding[i] = ' ';
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1382 padding[l] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1383 (void) printf("%s", label);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1384 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
1385 if (list->label)
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1386 (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
1387 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
1388 (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
1389 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
1390 } else
7dbd13b3b276 6763249 eft is disabled on fmadm repair when serdsuffix feature is used
Stephen Hanson <Stephen.Hanson@Sun.COM>
parents: 7275
diff changeset
1391 (void) printf(" %s", name);
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1392 if (list->pct && pct > 0 && pct < 100) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1393 if (list->count > 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1394 if (full) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1395 (void) printf(" %d @ %s %d%%\n", list->count,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1396 dgettext("FMD", "max"), list->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1397 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1398 (void) printf(" %s %d%%\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1399 dgettext("FMD", "max"), list->max_pct);
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 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1402 (void) printf(" %d%%\n", list->pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1403 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1404 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1405 (void) printf("\n");
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 if (func1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1408 func1(list->status, padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1409 n = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1410 j = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1411 while ((list = list->next) != end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1412 if (limit == 0 || n < limit) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1413 print_name(list, func, padding, &n, pct, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1414 if (func1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1415 func1(list->status, padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1416 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1417 j++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1418 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1419 if (j == 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1420 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
1421 } else if (j > 1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1422 (void) printf("%s... %d %s\n", padding, j,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1423 dgettext("FMD", "more entries suppressed,"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1424 " use -v option for full list"));
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 free(padding);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1427 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1428
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1429 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1430 asru_same_status(name_list_t *list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1431 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1432 name_list_t *end = list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1433 int status = list->status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1434
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1435 while ((list = list->next) != end) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1436 if (status == -1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1437 status = list->status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1438 continue;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1439 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1440 if (list->status != -1 && status != list->status) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1441 status = -1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1442 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1443 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1444 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1445 return (status);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1446 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1447
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1448 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1449 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
1450 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1451 name_list_t *sp = serial;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1452 name_list_t *fp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1453 int nserial = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1454 int found = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1455 char buf[128];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1456
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1457 while (sp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1458 fp = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1459 nserial++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1460 (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
1461 buf[sizeof (buf) - 1] = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1462 while (fp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1463 if (strstr(fp->name, buf) != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1464 found++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1465 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1466 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1467 fp = fp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1468 if (fp == fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1469 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1470 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1471 sp = sp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1472 if (sp == serial)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1473 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1474 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1475 return (found == nserial ? 1 : 0);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1476 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1477
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1478 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1479 print_server_name(hostid_t *host, char *label)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1480 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1481 (void) printf("%s %s %s %s\n", label, host->server, host->platform,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1482 host->chassis ? host->chassis : "");
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
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1485 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1486 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
1487 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1488 char buf[32];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1489 uurec_t *uurp = srp->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1490 int n, j, k, max;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1491 int status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1492 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1493
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1494 n = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1495 max = max_fault;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1496 if (max < 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1497 max = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1498 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1499 j = max / 2;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1500 max -= j;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1501 k = srp->nrecs - max;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1502 while ((uurp = uurp->next) != NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1503 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
1504 srp->nrecs == max_fault+1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1505 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1506 ari_list = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1507 while (ari_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1508 (void) printf("%-15s %s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1509 format_date(buf, sizeof (buf),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1510 uurp->sec), ari_list->ari_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1511 ari_list = ari_list->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1512 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1513 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1514 (void) printf("%-15s %s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1515 format_date(buf, sizeof (buf), uurp->sec),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1516 uurp->uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1517 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1518 } else if (n == j)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1519 (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
1520 dgettext("FMD", "more entries suppressed"));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1521 n++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1522 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1523 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1524 if (n_server > 1)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1525 print_server_name(srp->host, dgettext("FMD", "Host :"));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1526 if (srp->class)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1527 print_name_list(srp->class,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1528 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
1529 NULL, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1530 if (srp->asru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1531 status = asru_same_status(srp->asru);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1532 if (status != -1) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1533 print_name_list(srp->asru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1534 dgettext("FMD", "Affects :"), NULL,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1535 full ? 0 : max_display, 0, NULL, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1536 print_asru_status(status, " ");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1537 } else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1538 print_name_list(srp->asru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1539 dgettext("FMD", "Affects :"), NULL,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1540 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
1541 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1542 if (full || srp->fru == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1543 if (srp->resource) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1544 print_name_list(srp->resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1545 dgettext("FMD", "Problem in :"),
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1546 NULL, full ? 0 : max_display, 0, print_fru_status,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1547 full);
5255
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 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1550 if (srp->fru) {
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1551 status = asru_same_status(srp->fru);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1552 if (status != -1) {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1553 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
1554 "FRU :"), get_fmri_label, 0,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1555 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
1556 NULL, full);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1557 print_fru_status(status, " ");
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1558 } else
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1559 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
1560 "FRU :"), get_fmri_label, 0,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1561 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
1562 print_fru_status, full);
5255
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 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
1565 !serial_in_fru(srp->asru, srp->serial)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1566 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
1567 NULL, 0, 0, NULL, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1568 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1569 print_dict_info(srp->msgid, srp->url);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1570 (void) printf("\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1571 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1572
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1573 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1574 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
1575 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1576 char buf[32];
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1577 uurec_t *uurp = srp->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1578 char *severity;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1579 static int header = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1580 char *head;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1581 ari_list_t *ari_list;
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 if (nlspath)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1584 severity = get_dict_msg(srp->msgid, "severity", 1, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1585 else
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1586 severity = srp->severity;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1587
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1588 if (!summary || !header) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1589 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1590 head = "--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1591 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1592 "-------------- ---------\n"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1593 "TIME CACHE-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1594 " MSG-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1595 " SEVERITY\n--------------- "
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 " -------------- ---------";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1598 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1599 head = "--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1600 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1601 "-------------- ---------\n"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1602 "TIME EVENT-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1603 " MSG-ID"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1604 " SEVERITY\n--------------- "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1605 "------------------------------------ "
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1606 " -------------- ---------";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1607 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1608 (void) printf("%s\n", dgettext("FMD", head));
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1609 header = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1610 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1611 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1612 ari_list = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1613 while (ari_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1614 (void) printf("%-15s %-37s %-14s %-9s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1615 format_date(buf, sizeof (buf), uurp->sec),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1616 ari_list->ari_uuid, srp->msgid, severity);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1617 ari_list = ari_list->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1618 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1619 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1620 (void) printf("%-15s %-37s %-14s %-9s\n",
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1621 format_date(buf, sizeof (buf), uurp->sec),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1622 uurp->uuid, srp->msgid, severity);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1623 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1624
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1625 if (!summary)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1626 print_sup_record(srp, opt_i, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1627 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1628
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1629 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1630 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
1631 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1632 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1633 sr_list_t *slp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1634
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1635 slp = status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1636 if (slp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1637 for (;;) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1638 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1639 if (opt_a || srp->not_suppressed) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1640 if (page_feed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1641 (void) printf("\f\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1642 print_status_record(srp, summary, opt_i, full);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1643 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1644 if (slp->next == status_rec_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1645 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1646 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1647 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1648 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1649 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1650
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1651 static name_list_t *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1652 find_fru(status_record_t *srp, char *resource)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1653 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1654 name_list_t *rt = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1655 name_list_t *fru = srp->fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1656
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1657 while (fru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1658 if (strcmp(resource, fru->name) == 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1659 rt = fru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1660 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1661 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1662 fru = fru->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1663 if (fru == srp->fru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1664 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1665 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1666 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1667 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1668
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1669 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1670 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
1671 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1672 if (fru->pct == 100) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1673 (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
1674 dgettext("FMD", "suspects in this FRU total certainty"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1675 100);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1676 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1677 (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
1678 dgettext("FMD", "suspects in this FRU max certainty"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1679 fru->max_pct);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1680 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1681 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1682
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1683 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1684 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
1685 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1686 resource_list_t *tp = status_fru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1687 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1688 sr_list_t *slp, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1689 char *msgid, *fru_label;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1690 uurec_t *uurp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1691 name_list_t *fru;
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1692 int status;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1693 ari_list_t *ari_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1694
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1695 while (tp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1696 if (opt_a || tp->not_suppressed) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1697 if (page_feed)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1698 (void) printf("\f\n");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1699 if (!summary)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1700 (void) printf("-----------------------------"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1701 "---------------------------------------"
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1702 "----------\n");
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1703 slp = tp->status_rec_list;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1704 end = slp;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1705 do {
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1706 srp = slp->status_record;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1707 fru = find_fru(srp, tp->resource);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1708 if (fru) {
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1709 if (fru->label)
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1710 (void) printf("\"%s\" (%s) ",
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1711 fru->label, fru->name);
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1712 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
1713 fru->name)) != NULL) {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1714 (void) printf("\"%s\" (%s) ",
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1715 fru_label, fru->name);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1716 free(fru_label);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1717 } else
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1718 (void) printf("%s ",
6002
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1719 fru->name);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1720 break;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1721 }
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1722 slp = slp->next;
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1723 } while (slp != end);
470eddf7e261 6660427 Inconsistant labels on pciexbus faults
stephh
parents: 5255
diff changeset
1724
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1725 slp = tp->status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1726 end = slp;
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1727 status = 0;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1728 do {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1729 srp = slp->status_record;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1730 fru = srp->fru;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1731 while (fru) {
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1732 if (strcmp(tp->resource,
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1733 fru->name) == 0)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1734 status |= fru->status;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1735 fru = fru->next;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1736 if (fru == srp->fru)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1737 break;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1738 }
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1739 slp = slp->next;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1740 } while (slp != end);
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1741 if (status & FM_SUSPECT_NOT_PRESENT)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1742 (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
1743 else if (status & FM_SUSPECT_FAULTY)
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1744 (void) printf(dgettext("FMD", "faulty\n"));
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1745 else if (status & FM_SUSPECT_REPLACED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1746 (void) printf(dgettext("FMD", "replaced\n"));
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1747 else if (status & FM_SUSPECT_REPAIRED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1748 (void) printf(dgettext("FMD",
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1749 "repair attempted\n"));
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1750 else if (status & FM_SUSPECT_ACQUITTED)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1751 (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
1752 else
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1753 (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
1754
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1755 slp = tp->status_rec_list;
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
1756 end = slp;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1757 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1758 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1759 uurp = srp->uurec;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1760 fru = find_fru(srp, tp->resource);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1761 if (fru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1762 if (opt_i) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1763 ari_list = uurp->ari_uuid_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1764 while (ari_list) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1765 print_fru_line(fru,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1766 ari_list->ari_uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1767 ari_list =
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1768 ari_list->next;
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 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1771 print_fru_line(fru, uurp->uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1772 }
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 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1775 } while (slp != end);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1776 if (!summary) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1777 slp = tp->status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1778 end = slp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1779 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1780 if (srp->serial &&
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1781 !serial_in_fru(srp->fru, srp->serial)) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1782 print_name_list(srp->serial,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1783 dgettext("FMD", "Serial ID. :"),
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1784 NULL, 0, 0, NULL, 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1785 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1786 msgid = NULL;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1787 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1788 if (msgid == NULL ||
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1789 strcmp(msgid, srp->msgid) != 0) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1790 msgid = srp->msgid;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1791 print_dict_info(srp->msgid,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1792 srp->url);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1793 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1794 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1795 } while (slp != end);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1796 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1797 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1798 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1799 if (tp == status_fru_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1800 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1801 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1802 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1803
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1804 static void
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1805 print_asru(int opt_a)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1806 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1807 resource_list_t *tp = status_asru_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1808 status_record_t *srp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1809 sr_list_t *slp, *end;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1810 char *msg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1811 int status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1812 name_list_t *asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1813
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1814 while (tp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1815 if (opt_a || tp->not_suppressed) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1816 status = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1817 slp = tp->status_rec_list;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1818 end = slp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1819 do {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1820 srp = slp->status_record;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1821 asru = srp->asru;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1822 while (asru) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1823 if (strcmp(tp->resource,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1824 asru->name) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1825 status |= asru->status;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1826 asru = asru->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1827 if (asru == srp->asru)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1828 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1829 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1830 slp = slp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1831 } while (slp != end);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1832 switch (status) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1833 case 0:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1834 msg = dgettext("FMD", "ok");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1835 break;
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1836 case FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1837 msg = dgettext("FMD", "degraded");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1838 break;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1839 case FM_SUSPECT_FAULTY | FM_SUSPECT_DEGRADED:
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1840 msg = dgettext("FMD", "degraded");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
1841 break;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1842 case FM_SUSPECT_FAULTY:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1843 msg = dgettext("FMD", "degraded");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1844 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1845 case FM_SUSPECT_UNUSABLE:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1846 msg = dgettext("FMD", "unknown");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1847 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1848 case FM_SUSPECT_FAULTY | FM_SUSPECT_UNUSABLE:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1849 msg = dgettext("FMD", "faulted");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1850 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1851 default:
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1852 msg = "";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1853 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1854 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1855 (void) printf("%-69s %s\n", tp->resource, msg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1856 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1857 tp = tp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1858 if (tp == status_asru_list)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1859 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1860 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1861 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1862
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1863 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1864 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
1865 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1866 while (uurecp) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1867 if (strcmp(uuid, uurecp->uuid) == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1868 return (1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1869 uurecp = uurecp->next;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1870 }
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1871 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1872 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1873
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1874 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1875 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
1876 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1877 int64_t *diag_time;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1878 uint_t nelem;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1879 int rt = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1880 char *uuid = "-";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1881 uurec_select_t *uurecp = (uurec_select_t *)arg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1882
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1883 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
1884 &diag_time, &nelem) == 0 && nelem >= 2) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1885 (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
1886 &uuid);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1887 if (uurecp == NULL || uuid_in_list(uuid, uurecp))
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1888 add_fault_record_to_catalog(acp->aci_event, *diag_time,
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1889 uuid, acp->aci_url);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1890 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1891 rt = -1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1892 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1893 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1894 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1895
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1896 /*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1897 static int
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1898 dstatus_rec(const fmd_adm_rsrcinfo_t *ari, void *unused)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1899 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1900 update_asru_state_in_catalog(ari->ari_case, ari->ari_uuid);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1901 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1902 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1903
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1904 static int
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1905 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
1906 {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1907 int rt = FMADM_EXIT_SUCCESS;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1908
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1909 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1910 * These calls may fail with Protocol error if message payload is to big
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1911 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1912 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
1913 die("failed to get case list from fmd");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1914 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
1915 die("failed to get case status from fmd");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1916 return (rt);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1917 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1918
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1919 /*
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1920 * fmadm faulty command
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1921 *
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1922 * -a show hidden fault records
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1923 * -f show faulty fru's
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1924 * -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
1925 * -n number of fault records to display
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1926 * -p pipe output through pager
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1927 * -r show faulty asru's
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1928 * -s print summary of first fault
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1929 * -u print listed uuid's only
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1930 * -v full output
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1931 */
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1932
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1933 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1934 cmd_faulty(fmd_adm_t *adm, int argc, char *argv[])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1935 {
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1936 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
1937 int opt_i = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1938 char *pager;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1939 FILE *fp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1940 int rt, c, stat;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1941 uurec_select_t *tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1942 uurec_select_t *uurecp = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1943
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1944 catalog_setup();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1945 while ((c = getopt(argc, argv, "afgin:prsu:v")) != EOF) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1946 switch (c) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1947 case 'a':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1948 opt_a++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1949 break;
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1950 case 'f':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1951 opt_f++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1952 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1953 case 'g':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1954 opt_g++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1955 break;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1956 case 'i':
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1957 opt_i++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1958 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1959 case 'n':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1960 max_fault = atoi(optarg);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1961 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1962 case 'p':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1963 opt_p++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1964 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1965 case 'r':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1966 opt_r++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1967 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1968 case 's':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1969 opt_s++;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1970 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1971 case 'u':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1972 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
1973 tp->uuid = optarg;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1974 tp->next = uurecp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1975 uurecp = tp;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1976 opt_a = 1;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1977 break;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1978 case 'v':
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1979 opt_v++;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1980 break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1981 default:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1982 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1983 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1984 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1985 if (optind < argc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1986 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1987
5255
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1988 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
1989 if (opt_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1990 if ((pager = getenv("PAGER")) == NULL)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1991 pager = "/usr/bin/more";
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1992 fp = popen(pager, "w");
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1993 if (fp == NULL) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1994 rt = FMADM_EXIT_ERROR;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1995 opt_p = 0;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1996 } else {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1997 dup2(fileno(fp), 1);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1998 setbuf(stdout, NULL);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
1999 (void) fclose(fp);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2000 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2001 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2002 max_display = max_fault;
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2003 if (opt_f)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2004 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
2005 if (opt_r)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2006 print_asru(opt_a);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2007 if (opt_f == 0 && opt_r == 0)
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2008 print_catalog(opt_s, opt_a, opt_v, opt_i, opt_p && !opt_s);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2009 label_release_topo();
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2010 if (opt_p) {
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2011 (void) fclose(stdout);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2012 (void) wait(&stat);
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2013 }
8dc347a9bd70 PSARC 2007/460 fmadm faulty command new output and arguments
stephh
parents: 0
diff changeset
2014 return (rt);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2015 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2016
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2017 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2018 cmd_flush(fmd_adm_t *adm, int argc, char *argv[])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2019 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2020 int i, status = FMADM_EXIT_SUCCESS;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2021
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2022 if (argc < 2 || (i = getopt(argc, argv, "")) != EOF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2023 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2024
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2025 for (i = 1; i < argc; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2026 if (fmd_adm_rsrc_flush(adm, argv[i]) != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2027 warn("failed to flush %s", argv[i]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2028 status = FMADM_EXIT_ERROR;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2029 } else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2030 note("flushed resource history for %s\n", argv[i]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2031 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2032
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2033 return (status);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2034 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2035
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2036 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2037 cmd_repair(fmd_adm_t *adm, int argc, char *argv[])
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2038 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2039 int err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2040
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2041 if (getopt(argc, argv, "") != EOF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2042 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2043
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2044 if (argc - optind != 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2045 return (FMADM_EXIT_USAGE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2046
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2047 /*
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2048 * 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
2049 * or a label. Try uuid first, If that fails try the others.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2050 */
6228
b8f7c3bfc29b 6372069 fmadm repair command should accept the FRU label as an argument
stephh
parents: 6002
diff changeset
2051 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
2052 if (err != 0)
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2053 err = fmd_adm_rsrc_repaired(adm, argv[optind]);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2054
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2055 if (err != 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2056 die("failed to record repair to %s", argv[optind]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2057
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2058 note("recorded repair to %s\n", argv[optind]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2059 return (FMADM_EXIT_SUCCESS);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2060 }
7275
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2061
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2062 int
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2063 cmd_repaired(fmd_adm_t *adm, int argc, char *argv[])
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2064 {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2065 int err;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2066
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2067 if (getopt(argc, argv, "") != EOF)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2068 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2069
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2070 if (argc - optind != 1)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2071 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2072
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2073 /*
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2074 * argument could be an fmri (asru, fru or resource) or a label.
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2075 */
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2076 err = fmd_adm_rsrc_repaired(adm, argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2077 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2078 die("failed to record repair to %s", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2079
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2080 note("recorded repair to of %s\n", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2081 return (FMADM_EXIT_SUCCESS);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2082 }
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2083
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2084 int
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2085 cmd_replaced(fmd_adm_t *adm, int argc, char *argv[])
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2086 {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2087 int err;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2088
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2089 if (getopt(argc, argv, "") != EOF)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2090 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2091
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2092 if (argc - optind != 1)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2093 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2094
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2095 /*
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2096 * argument could be an fmri (asru, fru or resource) or a label.
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2097 */
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2098 err = fmd_adm_rsrc_replaced(adm, argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2099 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2100 die("failed to record replacement of %s", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2101
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2102 note("recorded replacement of %s\n", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2103 return (FMADM_EXIT_SUCCESS);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2104 }
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2105
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2106 int
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2107 cmd_acquit(fmd_adm_t *adm, int argc, char *argv[])
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2108 {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2109 int err;
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2110
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2111 if (getopt(argc, argv, "") != EOF)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2112 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2113
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2114 if (argc - optind != 1 && argc - optind != 2)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2115 return (FMADM_EXIT_USAGE);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2116
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2117 /*
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2118 * argument could be a uuid, an fmri (asru, fru or resource)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2119 * 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
2120 */
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2121 if (argc - optind == 2) {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2122 err = fmd_adm_rsrc_acquit(adm, argv[optind], argv[optind + 1]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2123 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2124 err = fmd_adm_rsrc_acquit(adm, argv[optind + 1],
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2125 argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2126 } else {
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2127 err = fmd_adm_case_acquit(adm, argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2128 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2129 err = fmd_adm_rsrc_acquit(adm, argv[optind], "");
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2130 }
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2131
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2132 if (err != 0)
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2133 die("failed to record acquital of %s", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2134
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2135 note("recorded acquital of %s\n", argv[optind]);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2136 return (FMADM_EXIT_SUCCESS);
1157db66a604 PSARC/2008/487 Repair Observability changes
stephh
parents: 6228
diff changeset
2137 }