fmd_adm.c revision 2
2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. 2N/A return;
/* permit NULL to simply caller code */ 2N/A return (
"unable to perform request due to allocation failure");
2N/A return (
"operation requires additional privilege");
2N/A return (
"specified module is not loaded in fault manager");
2N/A return (
"module is in use and cannot be unloaded");
2N/A return (
"module failed and can no longer export statistics");
2N/A return (
"file missing or cannot be accessed by fault manager");
2N/A return (
"module using same name is already loaded");
2N/A return (
"module failed to initialize (consult fmd(1M) log)");
2N/A return (
"module failed to load (consult fmd(1M) log)");
2N/A return (
"specified resource is not cached by fault manager");
2N/A return (
"specified resource is not known to be faulty");
2N/A return (
"specified serd engine not present in module");
2N/A return (
"specified serd engine has already fired");
2N/A return (
"invalid log file name");
2N/A return (
"failed to rotate log file (consult fmd(1M) log)");
2N/A return (
"log file is too busy to rotate (try again later)");
2N/A return (
"specified UUID is invalid or has been repaired");
2N/A return (
"specified UUID is still being diagnosed");
2N/A return (
"specified transport ID is invalid or has been closed");
2N/A return (
"specified UUID is owned by a different fault manager");
2N/A return (
"specified resource has not been replaced");
2N/A return (
"unknown fault manager error");
2N/A return (
"client requires newer libfmd_adm version");
2N/A * If the server (fmd) is restarted, this will cause all future door calls to 2N/A * fail. Unfortunately, once the server comes back up, we have no way of 2N/A * reestablishing the connection. To get around this, if the error indicates 2N/A * that the RPC call failed, we reopen the client handle and try again. For 2N/A * simplicity we only deal with the door case, as it's unclear whether the 2N/A * remote case suffers from the same pathology. 2N/A *
rmp++ =
rmi;
/* store copy of pointer in array for sorting */ 2N/A * The fmd_adm_rsrclist_1 request returns an opaque XDR buffer that is 2N/A * a string table of FMRIs (e.g. "fmriA\0fmriB\0...") where rrl_cnt is 2N/A * the number of strings in the table and rrl_buf_val is its address. 2N/A * We construct an array of pointers into the string table and sort it. 2N/A fmris[i] = p;
/* store fmri pointer in array for sorting */ 2N/A * For each FMRI in the resource cache snapshot, use fmd_adm_rsrcinfo_1 2N/A * to get more information and the invoke the callback function. If 2N/A * FMD_ADM_ERR_RSRCSRCH is returned, the FMRI has been purged from the 2N/A * cache since our snapshot: this error is therefore silently ignored. 2N/A * If we're given a token to use in looking up the URL, try 2N/A * to use it. Otherwise, or if we don't find it that way, 2N/A * We didn't find a translation in the 2N/A * dictionary for the current language. Fall 2N/A * back to C and try again. 2N/A * Our approach to cases is the same as for resources: we first obtain a 2N/A * list of UUIDs, sort them, then obtain the case information for each. 2N/A * Custom XDR routine for our API structure fmd_stat_t. This function must 2N/A * match the definition of fmd_stat_t in <fm/fmd_api.h> and must also match