OpenSolaris_b135/lib/libdscfg/common/cfg_cluster.h

Compare this file to the similar file:
Show the results in this format:

/*
 * 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
 * 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 2008 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _CFG_CLUSTER_H
#define	_CFG_CLUSTER_H

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * This file is a combination of interfaces culled from scstat.h,
 * scconf.h and the header files that they include.
 *
 * It exposes a subset of the interfaces defined in PSARC/2001/261
 * for use in NWS software.
 */

#include <sys/errno.h>
#include <sys/types.h>

/*
 * From sc_syslog_msg.h
 */

typedef enum sc_state_code_enum {
	ONLINE = 1,	/* resource is running */
	OFFLINE,	/* resource is stopped due to user action */
	FAULTED,	/* resource is stopped due to a failure */
	DEGRADED,	/* resource is running but has a minor problem */
	WAIT,		/* resource is in transition from a state to another */

	/*
	 * resource is monitored but state of the resource is
	 * not known because either the monitor went down or
	 * the monitor cannot report resource state temporarily.
	 */
	UNKNOWN,

	NOT_MONITORED	/* There is no monitor to check state of the resource */
} sc_state_code_t;

/*
 * End sc_syslog_msg.h
 */


/*
 * From scstat.h
 */

#define	SCSTAT_MAX_STRING_LEN	1024

/* Error codes returned by scstat functions. */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef enum scstat_errno {
	SCSTAT_ENOERR,		/* normal return - no error */
	SCSTAT_EUSAGE,		/* syntax error */
	SCSTAT_ENOMEM,		/* not enough memory */
	SCSTAT_ENOTCLUSTER,	/* not a cluster node */
	SCSTAT_ENOTCONFIGURED,	/* not found in CCR */
	SCSTAT_ESERVICENAME,	/* dcs: invalid service name */
	SCSTAT_EINVAL,		/* scconf: invalid argument */
	SCSTAT_EPERM,		/* not root */
	SCSTAT_ECLUSTERRECONFIG, /* cluster is reconfiguring */
	SCSTAT_ERGRECONFIG,	/* RG is reconfiguring */
	SCSTAT_EOBSOLETE,	/* Resource/RG has been updated */
	SCSTAT_EUNEXPECTED	/* internal or unexpected error */
} scstat_errno_t;

/* States a resource can be in */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef enum scstat_state_code {
	SCSTAT_ONLINE = ONLINE,		/* resource is running */
	SCSTAT_OFFLINE = OFFLINE, /* resource stopped due to user action */
	SCSTAT_FAULTED = FAULTED, /* resource stopped due to a failure */
	SCSTAT_DEGRADED = DEGRADED, /* resource running with a minor problem */
	SCSTAT_WAIT = WAIT,		/* resource is in transition */
	SCSTAT_UNKNOWN = UNKNOWN,	/* resource state is unknown */
	SCSTAT_NOTMONITORED = NOT_MONITORED	/* resource is not monitored */
} scstat_state_code_t;

/* States a replica of a resource can be in */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef enum scstat_node_pref {
	SCSTAT_PRIMARY,		/* replica is a primary */
	SCSTAT_SECONDARY,	/* replica is a secondary */
	SCSTAT_SPARE,		/* replica is a spare */
	SCSTAT_INACTIVE,	/* replica is inactive */
	SCSTAT_TRANSITION,	/* replica is changing state */
	SCSTAT_INVALID		/* replica is in an invalid state */
} scstat_node_pref_t;

/* component name */
typedef char *scstat_name_t;
typedef scstat_name_t scstat_cluster_name_t;	/* cluster name */
typedef scstat_name_t scstat_node_name_t;	/* node name */
typedef scstat_name_t scstat_adapter_name_t;	/* adapter name */
typedef scstat_name_t scstat_path_name_t;	/* path name */
typedef scstat_name_t scstat_ds_name_t;		/* device service name */
typedef scstat_name_t scstat_quorumdev_name_t;	/* quorum device name */
typedef scstat_name_t scstat_rs_name_t;		/* resource name */
typedef scstat_name_t scstat_rg_name_t;		/* rg name */

/* status string */
typedef char *scstat_statstr_t;
typedef scstat_statstr_t scstat_node_statstr_t;		/* node status */
typedef scstat_statstr_t scstat_path_statstr_t;		/* path status */
typedef scstat_statstr_t scstat_ds_statstr_t;		/* DS status */
typedef scstat_statstr_t scstat_node_quorum_statstr_t;	/* node quorum status */
typedef scstat_statstr_t scstat_quorumdev_statstr_t; 	/* quorum device stat */

/* ha device node status list */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef struct scstat_ds_node_state_struct {
	/* node name */
	scstat_node_name_t			scstat_node_name;
	/* node status */
	scstat_node_pref_t			scstat_node_state;
	/* next */
	struct scstat_ds_node_state_struct	*scstat_node_next;
} scstat_ds_node_state_t;

/* Cluster node status */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef struct scstat_node_struct {
	scstat_node_name_t	scstat_node_name;	/* node name */
	scstat_state_code_t	scstat_node_status;	/* cluster membership */
	scstat_node_statstr_t	scstat_node_statstr;	/* node status string */
	void			*pad;			/* Padding for */
							/* PSARC/2001/261. */
	struct scstat_node_struct *scstat_node_next;	/* next */
} scstat_node_t;

/* Cluster ha device status */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef struct scstat_ds_struct {
	/* ha device name */
	scstat_ds_name_t		scstat_ds_name;
	/* ha device status */
	scstat_state_code_t		scstat_ds_status;
	/* ha device statstr */
	scstat_ds_statstr_t		scstat_ds_statstr;
	/* node preference list */
	scstat_ds_node_state_t		*scstat_node_state_list;
	/* next */
	struct scstat_ds_struct		*scstat_ds_next;
} scstat_ds_t;

/*
 * scstat_strerr
 *
 * Map scstat_errno_t to a string.
 *
 * The supplied "errbuffer" should be of at least SCSTAT_MAX_STRING_LEN
 * in length.
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
void scstat_strerr(scstat_errno_t, char *);

/*
 * Upon success, a list of objects of scstat_node_t are returned.
 * The caller is responsible for freeing the space.
 *
 * Possible return values:
 *
 *	SCSTAT_NOERR		- success
 *	SCSTAT_ENOMEM		- not enough memory
 *	SCSTAT_EPERM            - not root
 *      SCSTAT_ENOTCLUSTER      - there is no cluster
 *      SCCONF_EINVAL           - invalid argument
 *	SCSTAT_EUNEXPECTED	- internal or unexpected error
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
scstat_errno_t scstat_get_nodes(scstat_node_t **pplnodes);

/*
 * Free all memory associated with a scstat_node_t structure.
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
void scstat_free_nodes(scstat_node_t *plnodes);

/*
 * If the device service name passed in is NULL, then this function returns
 * the status of all device services, otherwise it returns the status of the
 * device service specified.
 * The caller is responsible for freeing the space.
 *
 * Possible return values:
 *
 *	SCSTAT_ENOERR		- success
 *	SCSTAT_ENOMEM		- not enough memory
 *	SCSTAT_EPERM            - not root
 *      SCSTAT_ENOTCLUSTER      - there is no cluster
 *      SCCONF_EINVAL           - invalid argument
 *	SCSTAT_ESERVICENAME	- invalid device group name
 *	SCSTAT_EUNEXPECTED	- internal or unexpected error
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
scstat_errno_t scstat_get_ds_status(scstat_ds_name_t *dsname,
    scstat_ds_t **dsstatus);

/*
 * Free memory associated with a scstat_ds_t structure.
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
void scstat_free_ds_status(scstat_ds_t *dsstatus);

/*
 * End scstat.h
 */

/*
 * From scconf.h
 */

/* Maximum message string length */
#define	SCCONF_MAXSTRINGLEN	1024

/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef enum scconf_errno {
	SCCONF_NOERR = 0,		/* normal return - no error */
	SCCONF_EPERM = 1,		/* permission denied */
	SCCONF_EEXIST = 2,		/* object already exists */
	SCCONF_ENOEXIST = 3,		/* object does not exist */
	SCCONF_ESTALE = 4,		/* object or handle is stale */
	SCCONF_EUNKNOWN = 5,		/* unkown type */
	SCCONF_ENOCLUSTER = 6,		/* cluster does not exist */
	SCCONF_ENODEID = 7,		/* ID used in place of node name */
	SCCONF_EINVAL = 8,		/* invalid argument */
	SCCONF_EUSAGE = 9,		/* command usage error */
	SCCONF_ETIMEDOUT = 10,		/* call timed out */
	SCCONF_EINUSE = 11,		/* already in use */
	SCCONF_EBUSY = 12,		/* busy, try again later */
	SCCONF_EINSTALLMODE = 13,	/* install mode */
	SCCONF_ENOMEM = 14,		/* not enough memory */
	SCCONF_ESETUP = 15,		/* setup attempt failed */
	SCCONF_EUNEXPECTED = 16,	/* internal or unexpected error */
	SCCONF_EBADVALUE = 17,		/* bad ccr table value */
	SCCONF_EOVERFLOW = 18,		/* message buffer overflow */
	SCCONF_EQUORUM = 19,		/* operation would compromise quorum */
	SCCONF_TM_EBADOPTS = 20,	/* bad transport TM "options" */
	SCCONF_TM_EINVAL = 21,		/* other transport TM error */
	SCCONF_DS_ESUSPENDED = 22,	/* Device service in suspended state */
	SCCONF_DS_ENODEINVAL = 23,	/* Node specified is not in cluster */
	SCCONF_EAUTH = 24,		/* authentication error */
	SCCONF_DS_EINVAL = 25,		/* Device service in an invalid state */
	SCCONF_EIO = 26			/* IO error */
} scconf_errno_t;

/* IDs */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef uint_t scconf_id_t;

/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef scconf_id_t scconf_nodeid_t;		/* node ID */

/* Cluster transport handle */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
typedef void *		scconf_cltr_handle_t;

/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
extern scconf_errno_t scconf_get_nodeid(char *nodename,
    scconf_nodeid_t *nodeidp);

/*
 * Get the name of a node from its "nodeid".  Upon success,
 * a pointer to the nodename is left in "nodenamep".
 *
 * It is the caller's responsibility to free memory allocated
 * for "nodename" using free(3C).
 *
 * Possible return values:
 *
 *	SCCONF_NOERR		- success
 *	SCCONF_EPERM		- not root
 *	SCCONF_ENOCLUSTER	- there is no cluster
 *	SCCONF_ENOMEM		- not enough memory
 *	SCCONF_EINVAL		- invalid argument
 *	SCCONF_EUNEXPECTED	- internal or unexpected error
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
extern scconf_errno_t scconf_get_nodename(scconf_nodeid_t nodeid,
    char **nodenamep);

/*
 * Map scconf_errno_t to a string.
 *
 * The supplied "errbuffer" should be of at least SCCONF_MAXSTRINGLEN
 * in length.
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
extern void scconf_strerr(char *errbuffer, scconf_errno_t err);

/*
 * Given a dev_t value, return the name of device service that contains this
 * device.
 *
 * The caller is responsible for freeing the memory returned in "name".
 *
 * Possible return values:
 *
 *      SCCONF_NOERR            - success
 *      SCCONF_EPERM            - not root
 *      SCCONF_ENOEXIST         - the given device is not configured
 *      SCCONF_ENOMEM           - not enough memory
 *      SCCONF_ENOCLUSTER       - cluster config does not exist
 *      SCCONF_EUNEXPECTED      - internal or unexpected error
 */
/* This definition is covered by PSARC/2001/261.  DO NOT change it. */
extern scconf_errno_t scconf_get_ds_by_devt(major_t maj, minor_t min,
    char **dsname);

/*
 * End scconf.h
 */

#ifdef	__cplusplus
}
#endif

#endif /* _CFG_CLUSTER_H */