/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include <strings.h>
#include <libdevinfo.h>
static int global_disable;
struct except_list {
char *el_fault;
};
static void
{
char *p;
char *next;
p = estr;
for (;;) {
/* Remove leading ':' */
while (*p == ':')
p++;
if (*p == '\0')
break;
if (next)
*next = '\0';
sizeof (struct except_list), FMD_SLEEP);
except_list = elem;
if (next) {
*next = ':';
p = next + 1;
} else {
break;
}
}
}
}
/*
* Returns
* 1 if fault on exception list
* 0 otherwise
*/
static int
{
return (1);
}
}
return (0);
}
static void
{
while (except_list) {
elem = except_list;
}
}
/*ARGSUSED*/
static void
{
int f;
char *path;
char *uuid;
char *scheme;
int retire;
int rval = 0;
int valid_suspect = 0;
int error;
/*
* If disabled, we don't do retire. We still do unretires though
*/
return;
}
retire = 1;
retire = 0;
retire = 0;
return;
retire = 1;
nfaults = 1;
} else {
return;
}
return;
}
for (f = 0; f < nfaults; f++) {
continue;
}
&asru) != 0) {
continue;
}
continue;
}
continue;
continue;
}
valid_suspect = 1;
if (retire) {
if (error != 0) {
" di_retire_device failed:"
rval = -1;
}
}
} else {
FMD_HAS_FAULT_ASRU, NULL) == 0) {
if (error != 0) {
" di_unretire_device failed:"
rval = -1;
}
}
}
}
/*
* Run through again to handle new faults in a list.updated.
*/
for (f = 0; f < nfaults; f++) {
continue;
}
&asru) != 0) {
continue;
}
continue;
}
continue;
continue;
}
if (error != 0) {
" di_retire_device failed:"
}
}
}
}
/*
* Don't send uuclose or uuresolved unless at least one suspect
*/
if (valid_suspect == 0)
return;
/*
* The fmd framework takes care of moving a case to the repaired
* state. To move the case to the closed state however, we (the
* retire agent) need to call fmd_case_uuclose()
*/
}
}
/*
* Similarly to move the case to the resolved state, we (the
* retire agent) need to call fmd_case_uuresolved()
*/
}
rio_recv, /* fmdo_recv */
NULL, /* fmdo_timeout */
NULL, /* fmdo_close */
NULL, /* fmdo_stats */
NULL, /* fmdo_gc */
};
};
};
void
{
char *estr;
char *estrdup;
return;
}
}
}
void
{
}