8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libdscfg / common / cfg_cluster.h
blob56f07219f7f0df71fd3bcb0a98952371522d0941
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _CFG_CLUSTER_H
27 #define _CFG_CLUSTER_H
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
34 * This file is a combination of interfaces culled from scstat.h,
35 * scconf.h and the header files that they include.
37 * It exposes a subset of the interfaces defined in PSARC/2001/261
38 * for use in NWS software.
41 #include <sys/errno.h>
42 #include <sys/types.h>
45 * From sc_syslog_msg.h
48 typedef enum sc_state_code_enum {
49 ONLINE = 1, /* resource is running */
50 OFFLINE, /* resource is stopped due to user action */
51 FAULTED, /* resource is stopped due to a failure */
52 DEGRADED, /* resource is running but has a minor problem */
53 WAIT, /* resource is in transition from a state to another */
56 * resource is monitored but state of the resource is
57 * not known because either the monitor went down or
58 * the monitor cannot report resource state temporarily.
60 UNKNOWN,
62 NOT_MONITORED /* There is no monitor to check state of the resource */
63 } sc_state_code_t;
66 * End sc_syslog_msg.h
71 * From scstat.h
74 #define SCSTAT_MAX_STRING_LEN 1024
76 /* Error codes returned by scstat functions. */
77 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
78 typedef enum scstat_errno {
79 SCSTAT_ENOERR, /* normal return - no error */
80 SCSTAT_EUSAGE, /* syntax error */
81 SCSTAT_ENOMEM, /* not enough memory */
82 SCSTAT_ENOTCLUSTER, /* not a cluster node */
83 SCSTAT_ENOTCONFIGURED, /* not found in CCR */
84 SCSTAT_ESERVICENAME, /* dcs: invalid service name */
85 SCSTAT_EINVAL, /* scconf: invalid argument */
86 SCSTAT_EPERM, /* not root */
87 SCSTAT_ECLUSTERRECONFIG, /* cluster is reconfiguring */
88 SCSTAT_ERGRECONFIG, /* RG is reconfiguring */
89 SCSTAT_EOBSOLETE, /* Resource/RG has been updated */
90 SCSTAT_EUNEXPECTED /* internal or unexpected error */
91 } scstat_errno_t;
93 /* States a resource can be in */
94 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
95 typedef enum scstat_state_code {
96 SCSTAT_ONLINE = ONLINE, /* resource is running */
97 SCSTAT_OFFLINE = OFFLINE, /* resource stopped due to user action */
98 SCSTAT_FAULTED = FAULTED, /* resource stopped due to a failure */
99 SCSTAT_DEGRADED = DEGRADED, /* resource running with a minor problem */
100 SCSTAT_WAIT = WAIT, /* resource is in transition */
101 SCSTAT_UNKNOWN = UNKNOWN, /* resource state is unknown */
102 SCSTAT_NOTMONITORED = NOT_MONITORED /* resource is not monitored */
103 } scstat_state_code_t;
105 /* States a replica of a resource can be in */
106 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
107 typedef enum scstat_node_pref {
108 SCSTAT_PRIMARY, /* replica is a primary */
109 SCSTAT_SECONDARY, /* replica is a secondary */
110 SCSTAT_SPARE, /* replica is a spare */
111 SCSTAT_INACTIVE, /* replica is inactive */
112 SCSTAT_TRANSITION, /* replica is changing state */
113 SCSTAT_INVALID /* replica is in an invalid state */
114 } scstat_node_pref_t;
116 /* component name */
117 typedef char *scstat_name_t;
118 typedef scstat_name_t scstat_cluster_name_t; /* cluster name */
119 typedef scstat_name_t scstat_node_name_t; /* node name */
120 typedef scstat_name_t scstat_adapter_name_t; /* adapter name */
121 typedef scstat_name_t scstat_path_name_t; /* path name */
122 typedef scstat_name_t scstat_ds_name_t; /* device service name */
123 typedef scstat_name_t scstat_quorumdev_name_t; /* quorum device name */
124 typedef scstat_name_t scstat_rs_name_t; /* resource name */
125 typedef scstat_name_t scstat_rg_name_t; /* rg name */
127 /* status string */
128 typedef char *scstat_statstr_t;
129 typedef scstat_statstr_t scstat_node_statstr_t; /* node status */
130 typedef scstat_statstr_t scstat_path_statstr_t; /* path status */
131 typedef scstat_statstr_t scstat_ds_statstr_t; /* DS status */
132 typedef scstat_statstr_t scstat_node_quorum_statstr_t; /* node quorum status */
133 typedef scstat_statstr_t scstat_quorumdev_statstr_t; /* quorum device stat */
135 /* ha device node status list */
136 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
137 typedef struct scstat_ds_node_state_struct {
138 /* node name */
139 scstat_node_name_t scstat_node_name;
140 /* node status */
141 scstat_node_pref_t scstat_node_state;
142 /* next */
143 struct scstat_ds_node_state_struct *scstat_node_next;
144 } scstat_ds_node_state_t;
146 /* Cluster node status */
147 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
148 typedef struct scstat_node_struct {
149 scstat_node_name_t scstat_node_name; /* node name */
150 scstat_state_code_t scstat_node_status; /* cluster membership */
151 scstat_node_statstr_t scstat_node_statstr; /* node status string */
152 void *pad; /* Padding for */
153 /* PSARC/2001/261. */
154 struct scstat_node_struct *scstat_node_next; /* next */
155 } scstat_node_t;
157 /* Cluster ha device status */
158 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
159 typedef struct scstat_ds_struct {
160 /* ha device name */
161 scstat_ds_name_t scstat_ds_name;
162 /* ha device status */
163 scstat_state_code_t scstat_ds_status;
164 /* ha device statstr */
165 scstat_ds_statstr_t scstat_ds_statstr;
166 /* node preference list */
167 scstat_ds_node_state_t *scstat_node_state_list;
168 /* next */
169 struct scstat_ds_struct *scstat_ds_next;
170 } scstat_ds_t;
173 * scstat_strerr
175 * Map scstat_errno_t to a string.
177 * The supplied "errbuffer" should be of at least SCSTAT_MAX_STRING_LEN
178 * in length.
180 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
181 void scstat_strerr(scstat_errno_t, char *);
184 * Upon success, a list of objects of scstat_node_t are returned.
185 * The caller is responsible for freeing the space.
187 * Possible return values:
189 * SCSTAT_NOERR - success
190 * SCSTAT_ENOMEM - not enough memory
191 * SCSTAT_EPERM - not root
192 * SCSTAT_ENOTCLUSTER - there is no cluster
193 * SCCONF_EINVAL - invalid argument
194 * SCSTAT_EUNEXPECTED - internal or unexpected error
196 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
197 scstat_errno_t scstat_get_nodes(scstat_node_t **pplnodes);
200 * Free all memory associated with a scstat_node_t structure.
202 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
203 void scstat_free_nodes(scstat_node_t *plnodes);
206 * If the device service name passed in is NULL, then this function returns
207 * the status of all device services, otherwise it returns the status of the
208 * device service specified.
209 * The caller is responsible for freeing the space.
211 * Possible return values:
213 * SCSTAT_ENOERR - success
214 * SCSTAT_ENOMEM - not enough memory
215 * SCSTAT_EPERM - not root
216 * SCSTAT_ENOTCLUSTER - there is no cluster
217 * SCCONF_EINVAL - invalid argument
218 * SCSTAT_ESERVICENAME - invalid device group name
219 * SCSTAT_EUNEXPECTED - internal or unexpected error
221 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
222 scstat_errno_t scstat_get_ds_status(scstat_ds_name_t *dsname,
223 scstat_ds_t **dsstatus);
226 * Free memory associated with a scstat_ds_t structure.
228 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
229 void scstat_free_ds_status(scstat_ds_t *dsstatus);
232 * End scstat.h
236 * From scconf.h
239 /* Maximum message string length */
240 #define SCCONF_MAXSTRINGLEN 1024
242 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
243 typedef enum scconf_errno {
244 SCCONF_NOERR = 0, /* normal return - no error */
245 SCCONF_EPERM = 1, /* permission denied */
246 SCCONF_EEXIST = 2, /* object already exists */
247 SCCONF_ENOEXIST = 3, /* object does not exist */
248 SCCONF_ESTALE = 4, /* object or handle is stale */
249 SCCONF_EUNKNOWN = 5, /* unkown type */
250 SCCONF_ENOCLUSTER = 6, /* cluster does not exist */
251 SCCONF_ENODEID = 7, /* ID used in place of node name */
252 SCCONF_EINVAL = 8, /* invalid argument */
253 SCCONF_EUSAGE = 9, /* command usage error */
254 SCCONF_ETIMEDOUT = 10, /* call timed out */
255 SCCONF_EINUSE = 11, /* already in use */
256 SCCONF_EBUSY = 12, /* busy, try again later */
257 SCCONF_EINSTALLMODE = 13, /* install mode */
258 SCCONF_ENOMEM = 14, /* not enough memory */
259 SCCONF_ESETUP = 15, /* setup attempt failed */
260 SCCONF_EUNEXPECTED = 16, /* internal or unexpected error */
261 SCCONF_EBADVALUE = 17, /* bad ccr table value */
262 SCCONF_EOVERFLOW = 18, /* message buffer overflow */
263 SCCONF_EQUORUM = 19, /* operation would compromise quorum */
264 SCCONF_TM_EBADOPTS = 20, /* bad transport TM "options" */
265 SCCONF_TM_EINVAL = 21, /* other transport TM error */
266 SCCONF_DS_ESUSPENDED = 22, /* Device service in suspended state */
267 SCCONF_DS_ENODEINVAL = 23, /* Node specified is not in cluster */
268 SCCONF_EAUTH = 24, /* authentication error */
269 SCCONF_DS_EINVAL = 25, /* Device service in an invalid state */
270 SCCONF_EIO = 26 /* IO error */
271 } scconf_errno_t;
273 /* IDs */
274 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
275 typedef uint_t scconf_id_t;
277 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
278 typedef scconf_id_t scconf_nodeid_t; /* node ID */
280 /* Cluster transport handle */
281 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
282 typedef void * scconf_cltr_handle_t;
284 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
285 extern scconf_errno_t scconf_get_nodeid(char *nodename,
286 scconf_nodeid_t *nodeidp);
289 * Get the name of a node from its "nodeid". Upon success,
290 * a pointer to the nodename is left in "nodenamep".
292 * It is the caller's responsibility to free memory allocated
293 * for "nodename" using free(3C).
295 * Possible return values:
297 * SCCONF_NOERR - success
298 * SCCONF_EPERM - not root
299 * SCCONF_ENOCLUSTER - there is no cluster
300 * SCCONF_ENOMEM - not enough memory
301 * SCCONF_EINVAL - invalid argument
302 * SCCONF_EUNEXPECTED - internal or unexpected error
304 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
305 extern scconf_errno_t scconf_get_nodename(scconf_nodeid_t nodeid,
306 char **nodenamep);
309 * Map scconf_errno_t to a string.
311 * The supplied "errbuffer" should be of at least SCCONF_MAXSTRINGLEN
312 * in length.
314 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
315 extern void scconf_strerr(char *errbuffer, scconf_errno_t err);
318 * Given a dev_t value, return the name of device service that contains this
319 * device.
321 * The caller is responsible for freeing the memory returned in "name".
323 * Possible return values:
325 * SCCONF_NOERR - success
326 * SCCONF_EPERM - not root
327 * SCCONF_ENOEXIST - the given device is not configured
328 * SCCONF_ENOMEM - not enough memory
329 * SCCONF_ENOCLUSTER - cluster config does not exist
330 * SCCONF_EUNEXPECTED - internal or unexpected error
332 /* This definition is covered by PSARC/2001/261. DO NOT change it. */
333 extern scconf_errno_t scconf_get_ds_by_devt(major_t maj, minor_t min,
334 char **dsname);
337 * End scconf.h
340 #ifdef __cplusplus
342 #endif
344 #endif /* _CFG_CLUSTER_H */