itree.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (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
* or http://www.opensolaris.org/os/licensing.
* 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 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* itree.h -- public definitions for itree module
*
*/
#ifndef _EFT_ITREE_H
#define _EFT_ITREE_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/* the "fault" field in the event struct requires the definition of nvlist_t */
#include <sys/fm/protocol.h>
/* Numerical representation of propagation N value (A), short for All */
#define N_IS_ALL -1
struct event {
enum nametype t; /* defined in tree.h */
struct event *suspects;
struct event *psuspects;
struct event *observations; /* for lists like suspect list */
nvlist_t *nvp; /* payload nvp for ereports */
int is_suspect; /* true if on suspect list */
struct node *enode; /* event node in parse tree */
const struct ipath *ipp; /* instanced version of event */
struct lut *props; /* instanced version of nvpairs */
int count; /* for reports, number seen */
struct bubble {
struct bubble *next;
int gen; /* generation # */
enum bubbletype {
B_FROM = 4000,
B_TO,
B_INHIBIT
} t;
struct event *myevent;
int nork;
int mark;
struct arrowlist {
struct arrowlist *next;
struct arrow {
struct bubble *head;
struct bubble *tail;
/* prop node in parse tree */
struct node *pnode;
struct constraintlist {
struct constraintlist *next;
/* deferred constraints */
struct node *cnode;
} *constraints;
int causes_tested;
unsigned long long mindelay;
unsigned long long maxdelay;
} *arrowp;
} *arrows;
} *bubbles;
nvlist_t *fault;
};
/*
* struct iterinfo is the stuff we store in the dictionary of iterators
* when we assign a value to an iterator. it not only contains the value
* we assigned to the iterator, it contains a node pointer which we use to
* determine if we're the one that defined the value when popping [vh]match()
* recursion.
*/
struct iterinfo {
int num;
struct node *np;
};
struct lut *itree_create(struct config *croot);
void itree_free(struct lut *itp);
struct event *itree_lookup(struct lut *itp,
const char *ename, const struct ipath *ipp);
struct arrowlist *itree_next_arrow(struct bubble *bubblep,
struct arrowlist *last);
struct bubble *itree_next_bubble(struct event *eventp, struct bubble *last);
struct constraintlist *itree_next_constraint(struct arrow *arrowp,
struct constraintlist *last);
void itree_pevent_brief(int flags, struct event *eventp);
void itree_ptree(int flags, struct lut *itp);
const char *itree_bubbletype2str(enum bubbletype t);
void itree_fini(void);
#ifdef __cplusplus
}
#endif
#endif /* _EFT_ITREE_H */