diff options
Diffstat (limited to 'usr/src/lib/libdscfg/common/cfg.h')
-rw-r--r-- | usr/src/lib/libdscfg/common/cfg.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/usr/src/lib/libdscfg/common/cfg.h b/usr/src/lib/libdscfg/common/cfg.h new file mode 100644 index 0000000000..84e64b8ebe --- /dev/null +++ b/usr/src/lib/libdscfg/common/cfg.h @@ -0,0 +1,180 @@ +/* + * 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_H +#define _CFG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <sys/nsctl/nsctl.h> + +#define CFG_MAX_BUF 1024 /* maximum buffer size for cfg_get_?string() */ +#define CFG_MAX_KEY 256 /* maximum key size for cfg_get_?string() */ + +#ifndef _CFG_IMPL_H +/* + * These are really declared in cfg_impl.h, declare as dummy's here to + * allow clients to compile without including cfg_impl.h. + */ +typedef struct cfgfile CFGFILE; +typedef struct cfp cfp_t; + +#endif /* _CFG_IMPL_H */ + +int cfg_get_cstring(CFGFILE *cfg, const char *key, void *value, int value_len); +int cfg_put_cstring(CFGFILE *cfg, const char *key, void *value, int value_len); +int cfg_find_cstring(CFGFILE *cfg, const char *target, const char *section, + int numflds, ...); +int cfg_get_options(CFGFILE *cfg, int section, const char *basekey, + char *tag, int tag_len, char *val, int val_len); +int cfg_put_options(CFGFILE *cfg, int section, const char *basekey, + char *tag, char *val); +int cfg_get_single_option(CFGFILE *, int, const char *, char *, char *, int); +int cfg_del_option(CFGFILE *, int, const char *, char *); + +int cfg_get_num_entries(CFGFILE *cfg, char *section); + +int cfg_get_tags(CFGFILE *cfg, char ***taglist); + +int cfg_cfg_isempty(CFGFILE *cfg); +int cfg_get_section(CFGFILE *cfg, char ***buf, const char *section); +CFGFILE *cfg_open(char *filename); +void cfg_rewind(CFGFILE *cfg, int section); +int cfg_is_cfg(CFGFILE *cfg); +int cfg_shldskip_vtoc(int fd, const char *loc); +int cfg_get_srtdsec(CFGFILE *cfg, char ***list, + const char *sec, const char *field); +void cfg_free_section(char ***, int); + + +/* + * Handle cluster configuration + */ +#define FP_SUN_CLUSTER(x) \ + (((x->cf_node) && (x->cf[1].cf_fd)) ? &x->cf[1] : &x->cf[0]) + +/* + * rewind sections + */ +#define CFG_SEC_CONF 0 /* configuration section */ +#define CFG_SEC_PERS 1 /* persistent section */ +#define CFG_SEC_ALL 2 /* rewind both sections */ + +int cfg_update_parser_config(CFGFILE *, const char *key, int section); +/* + * parser sections + */ +#define CFG_PARSE_CONF 0 /* config section key */ +#define CFG_PARSE_PERS 1 /* persistent section key */ + +char *cfg_error(int *severity); +/* + * error codes + */ +#define CFG_ENONFATAL 0 /* non fatal error */ +#define CFG_EFATAL 1 /* fatal error exit */ + +/* + * some error strings + */ +#define CFG_NOTLOCKED "Configuration not locked" +#define CFG_RDFAILED "Unable to read configuration" +#define CFG_EINVAL "Invalid Argument" +#define CFG_EGENERIC "Generic cfg failure" + + +char *cfg_location(char *location, int mode, char *altroot); + +/* + * location modes + */ +#define CFG_LOC_SET_LOCAL 0 +#define CFG_LOC_GET_LOCAL 1 +#define CFG_LOC_SET_CLUSTER 2 +#define CFG_LOC_GET_CLUSTER 3 + +/* + * location strings + */ +#define CFG_LOCAL_LOCATION "/etc/dscfg_local" +#define CFG_CLUSTER_LOCATION "/etc/dscfg_cluster" + +void cfg_close(CFGFILE *); + +/* + * lock mode + */ +typedef enum { + CFG_RDLOCK, + CFG_WRLOCK, + CFG_UPGRADE +} CFGLOCK; + +int cfg_lock(CFGFILE *, CFGLOCK); /* lock the configuration */ +void cfp_unlock(cfp_t *); /* unlock the configuration */ +void cfg_unlock(CFGFILE *); +int cfg_get_lock(CFGFILE *, CFGLOCK *, pid_t *); /* get config lock */ + +int cfg_commit(CFGFILE *); +void cfg_resource(CFGFILE *, const char *); /* Set/clear cluster node */ +char *cfg_get_resource(CFGFILE *); /* get current cluster node */ +char *cfg_dgname(const char *, char *, size_t); /* parse dg from pathname */ +char *cfg_l_dgname(const char *, char *, size_t); /* parse dg from pathname */ +int cfg_dgname_islocal(char *, char **); /* find locality of dg */ +int cfg_iscluster(void); /* running in a cluster? */ +int cfg_issuncluster(void); /* running in a Sun Cluster? */ +void cfg_invalidate_sizes(int); + +/* + * add/rem result codes + */ +#define CFG_USER_ERR 1 +#define CFG_USER_OK 2 +#define CFG_USER_FIRST 3 +#define CFG_USER_LAST 4 +#define CFG_USER_GONE 5 +#define CFG_USER_REPEAT 6 + +int cfg_add_user(CFGFILE *, char *, char *, char *); /* add volume user */ +int cfg_rem_user(CFGFILE *, char *, char *, char *); /* remove vol user */ +int cfg_vol_enable(CFGFILE *, char *, char *, char *); /* enable volume */ +int cfg_vol_disable(CFGFILE *, char *, char *, char *); /* disable volume */ + +int cfg_load_dsvols(CFGFILE *); /* load dsvol: section */ +void cfg_unload_dsvols(); /* unload dsvol: section */ +int cfg_load_svols(CFGFILE *); /* load sv: section */ +void cfg_unload_svols(); /* unload sv: section */ +int cfg_load_shadows(CFGFILE *); /* load shadows & bitmaps from ii: */ +void cfg_unload_shadows(); /* unload ii: */ + +int cfg_get_canonical_name(CFGFILE *, const char *, char **); + +#ifdef __cplusplus +} +#endif + +#endif /* _CFG_H */ |