Home | History | Annotate | Download | only in common
      1     0    stevel /*
      2     0    stevel  * CDDL HEADER START
      3     0    stevel  *
      4     0    stevel  * The contents of this file are subject to the terms of the
      5  3247  gjelinek  * Common Development and Distribution License (the "License").
      6  3247  gjelinek  * You may not use this file except in compliance with the License.
      7     0    stevel  *
      8     0    stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9     0    stevel  * or http://www.opensolaris.org/os/licensing.
     10     0    stevel  * See the License for the specific language governing permissions
     11     0    stevel  * and limitations under the License.
     12     0    stevel  *
     13     0    stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14     0    stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15     0    stevel  * If applicable, add the following below this CDDL HEADER, with the
     16     0    stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17     0    stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18     0    stevel  *
     19     0    stevel  * CDDL HEADER END
     20     0    stevel  */
     21     0    stevel /*
     22  3247  gjelinek  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
     23     0    stevel  * Use is subject to license terms.
     24     0    stevel  */
     25     0    stevel 
     26     0    stevel /*
     27     0    stevel  *  NOTE
     28     0    stevel  *
     29     0    stevel  *  The following contents of this file are private to the
     30     0    stevel  *  implementation of the Solaris system and are subject to change at
     31     0    stevel  *  any time without notice.  Applications using these interfaces may
     32     0    stevel  *  fail to run on future releases.
     33     0    stevel  */
     34     0    stevel 
     35     0    stevel #ifndef	_POOL_H
     36     0    stevel #define	_POOL_H
     37     0    stevel 
     38     0    stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     39     0    stevel 
     40     0    stevel #include <sys/procset.h>
     41     0    stevel #include <sys/types.h>
     42     0    stevel #include <sys/pool.h>
     43     0    stevel 
     44     0    stevel #ifdef	__cplusplus
     45     0    stevel extern "C" {
     46     0    stevel #endif
     47     0    stevel 
     48     0    stevel /*
     49     0    stevel  * Library versioning support (c.f. elf_version(3e)).
     50     0    stevel  *
     51     0    stevel  * You can enquire about the version number of the library
     52     0    stevel  * by passing POOL_VER_NONE.  POOL_VER_CURRENT is the current
     53     0    stevel  * (most capable) version.
     54     0    stevel  *
     55     0    stevel  * You can set the version used by the library by passing the
     56     0    stevel  * required version number.  If this is not possible, the version
     57     0    stevel  * returned will be POOL_VER_NONE.
     58     0    stevel  */
     59     0    stevel #define	POOL_VER_CURRENT	1
     60     0    stevel #define	POOL_VER_NONE		0
     61     0    stevel 
     62     0    stevel extern uint_t pool_version(uint_t ver);
     63     0    stevel 
     64     0    stevel #ifndef PO_TRUE
     65     0    stevel #define	PO_TRUE	1
     66     0    stevel #endif
     67     0    stevel 
     68     0    stevel #ifndef PO_FALSE
     69     0    stevel #define	PO_FALSE	0
     70     0    stevel #endif
     71     0    stevel 
     72     0    stevel #ifndef PO_SUCCESS
     73     0    stevel #define	PO_SUCCESS	0
     74     0    stevel #endif
     75     0    stevel 
     76     0    stevel #ifndef PO_FAIL
     77     0    stevel #define	PO_FAIL	-1
     78     0    stevel #endif
     79     0    stevel 
     80     0    stevel /* Error codes */
     81     0    stevel #define	POE_OK			0
     82     0    stevel #define	POE_BAD_PROP_TYPE	1
     83     0    stevel #define	POE_INVALID_CONF	2
     84     0    stevel #define	POE_NOTSUP		3
     85     0    stevel #define	POE_INVALID_SEARCH    	4
     86     0    stevel #define	POE_BADPARAM    	5
     87     0    stevel #define	POE_PUTPROP    		6
     88     0    stevel #define	POE_DATASTORE		7
     89     0    stevel #define	POE_SYSTEM		8
     90     0    stevel #define	POE_ACCESS		9
     91     0    stevel 
     92     0    stevel /* Open Flags */
     93     0    stevel #define	PO_RDONLY		0x0
     94     0    stevel #define	PO_RDWR			0x1
     95     0    stevel #define	PO_CREAT		0x2
     96     0    stevel #define	PO_DISCO		0x4
     97     0    stevel #define	PO_UPDATE		0x8
     98  3247  gjelinek #define	PO_TEMP			0x10
     99     0    stevel 
    100     0    stevel /* Allocation policy */
    101     0    stevel #define	POA_IMPORTANCE		"importance based"
    102     0    stevel #define	POA_SURPLUS_TO_DEFAULT	"surplus to default"
    103     0    stevel 
    104     0    stevel /* Pools updates */
    105     0    stevel #define	POU_SYSTEM		0x1
    106     0    stevel #define	POU_POOL		0x2
    107     0    stevel #define	POU_PSET		0x4
    108     0    stevel #define	POU_CPU			0x8
    109     0    stevel 
    110     0    stevel /* Data Export Formats */
    111     0    stevel typedef enum pool_export_format {
    112     0    stevel 	POX_NATIVE,		/* Native data representation format */
    113     0    stevel 	POX_TEXT		/* Text */
    114     0    stevel } pool_export_format_t;
    115     0    stevel 
    116     0    stevel /* Property data types */
    117     0    stevel typedef enum pool_value_class {
    118     0    stevel 	POC_INVAL = -1,
    119     0    stevel 	POC_UINT,
    120     0    stevel 	POC_INT,
    121     0    stevel 	POC_DOUBLE,
    122     0    stevel 	POC_BOOL,
    123     0    stevel 	POC_STRING
    124     0    stevel } pool_value_class_t;
    125     0    stevel 
    126     0    stevel /* Validation levels */
    127     0    stevel typedef enum pool_valid_level {
    128     0    stevel 	POV_NONE = 0,		/* No validation */
    129     0    stevel 	POV_LOOSE,		/* Loose validation */
    130     0    stevel 	POV_STRICT,		/* Strict validation */
    131     0    stevel 	POV_RUNTIME		/* Validate instantiation on current machine */
    132     0    stevel } pool_valid_level_t;
    133     0    stevel 
    134     0    stevel /* conf states */
    135     0    stevel typedef enum pool_conf_state {
    136     0    stevel 	POF_INVALID = -1,
    137     0    stevel 	POF_VALID,
    138     0    stevel 	POF_DESTROY
    139     0    stevel } pool_conf_state_t;
    140     0    stevel 
    141     0    stevel /* Element data values */
    142     0    stevel typedef struct pool_value pool_value_t;
    143     0    stevel 
    144     0    stevel /* Elements */
    145     0    stevel typedef struct pool_elem pool_elem_t;
    146     0    stevel typedef struct pool pool_t;
    147     0    stevel typedef struct pool_resource pool_resource_t;
    148     0    stevel typedef struct pool_component pool_component_t;
    149     0    stevel 
    150     0    stevel /*
    151     0    stevel  * Resource management configuration
    152     0    stevel  */
    153     0    stevel typedef struct pool_conf pool_conf_t;
    154     0    stevel 
    155     0    stevel extern int		pool_error(void);
    156     0    stevel extern const char	*pool_strerror(int);
    157     0    stevel extern int		pool_resource_type_list(const char **, uint_t *);
    158     0    stevel extern int		pool_get_status(int *);
    159     0    stevel extern int		pool_set_status(int);
    160     0    stevel 
    161     0    stevel /* Configuration manipulation */
    162     0    stevel extern pool_conf_t *pool_conf_alloc(void);
    163     0    stevel extern void pool_conf_free(pool_conf_t *);
    164     0    stevel extern pool_conf_state_t pool_conf_status(const pool_conf_t *);
    165     0    stevel 
    166     0    stevel extern int pool_conf_close(pool_conf_t *);
    167     0    stevel extern int pool_conf_remove(pool_conf_t *);
    168     0    stevel extern int pool_conf_open(pool_conf_t *, const char *, int);
    169     0    stevel extern int pool_conf_rollback(pool_conf_t *);
    170     0    stevel extern int pool_conf_commit(pool_conf_t *, int);
    171     0    stevel extern int pool_conf_export(const pool_conf_t *, const char *,
    172     0    stevel     pool_export_format_t);
    173     0    stevel extern int pool_conf_validate(const pool_conf_t *, pool_valid_level_t);
    174     0    stevel extern int pool_conf_update(const pool_conf_t *, int *);
    175     0    stevel extern pool_t *pool_get_pool(const pool_conf_t *, const char *);
    176     0    stevel extern pool_t **pool_query_pools(const pool_conf_t *, uint_t *,
    177     0    stevel     pool_value_t **);
    178     0    stevel extern pool_resource_t *pool_get_resource(const pool_conf_t *, const char *,
    179     0    stevel     const char *);
    180     0    stevel extern pool_resource_t **pool_query_resources(const pool_conf_t *, uint_t *,
    181     0    stevel     pool_value_t **);
    182     0    stevel extern pool_component_t **pool_query_components(const pool_conf_t *, uint_t *,
    183     0    stevel     pool_value_t **);
    184     0    stevel extern const char *pool_conf_location(const pool_conf_t *);
    185     0    stevel extern char *pool_conf_info(const pool_conf_t *, int);
    186     0    stevel 
    187     0    stevel /* Resource manipulation */
    188     0    stevel extern pool_resource_t *pool_resource_create(pool_conf_t *, const char *,
    189     0    stevel     const char *);
    190     0    stevel extern int pool_resource_destroy(pool_conf_t *, pool_resource_t *);
    191     0    stevel extern int pool_resource_transfer(pool_conf_t *, pool_resource_t *,
    192     0    stevel     pool_resource_t *, uint64_t);
    193     0    stevel extern int pool_resource_xtransfer(pool_conf_t *, pool_resource_t *,
    194     0    stevel     pool_resource_t *, pool_component_t **);
    195     0    stevel extern pool_component_t **pool_query_resource_components(const pool_conf_t *,
    196     0    stevel     const pool_resource_t *, uint_t *, pool_value_t **);
    197     0    stevel extern char *pool_resource_info(const pool_conf_t *, const pool_resource_t *,
    198     0    stevel     int);
    199     0    stevel 
    200     0    stevel /* Pool manipulation */
    201     0    stevel extern pool_t *pool_create(pool_conf_t *, const char *);
    202     0    stevel extern int pool_destroy(pool_conf_t *, pool_t *);
    203     0    stevel extern int pool_associate(pool_conf_t *, pool_t *, const pool_resource_t *);
    204     0    stevel extern int pool_dissociate(pool_conf_t *, pool_t *, const pool_resource_t *);
    205     0    stevel extern char *pool_info(const pool_conf_t *, const pool_t *, int);
    206     0    stevel extern pool_resource_t **pool_query_pool_resources(const pool_conf_t *,
    207     0    stevel     const pool_t *, uint_t *, pool_value_t **);
    208     0    stevel 
    209     0    stevel /* Resource Component Manipulation */
    210     0    stevel extern pool_resource_t *pool_get_owning_resource(const pool_conf_t *,
    211     0    stevel     const pool_component_t *);
    212     0    stevel extern char *pool_component_info(const pool_conf_t *, const pool_component_t *,
    213     0    stevel     int);
    214     0    stevel 
    215     0    stevel /* Property manipulation */
    216     0    stevel extern pool_value_class_t pool_get_property(const pool_conf_t *,
    217     0    stevel     const pool_elem_t *, const char *, pool_value_t *);
    218     0    stevel extern int pool_put_property(pool_conf_t *, pool_elem_t *, const char *,
    219     0    stevel     const pool_value_t *);
    220     0    stevel extern int pool_rm_property(pool_conf_t *, pool_elem_t *, const char *);
    221  3247  gjelinek 
    222     0    stevel /*
    223     0    stevel  * Walk the associated properties of the supplied element calling the supplied
    224     0    stevel  * function for each property in turn. There is no implied order in the walk.
    225     0    stevel  * The arg parameter allows caller-specific data to be passed to the call.
    226     0    stevel  */
    227     0    stevel extern int pool_walk_properties(pool_conf_t *, pool_elem_t *, void *,
    228     0    stevel     int (*)(pool_conf_t *, pool_elem_t *, const char *, pool_value_t *,
    229     0    stevel 	    void *));
    230     0    stevel 
    231     0    stevel /* Get the underlying element */
    232     0    stevel extern pool_elem_t *pool_conf_to_elem(const pool_conf_t *);
    233     0    stevel extern pool_elem_t *pool_to_elem(const pool_conf_t *, const pool_t *);
    234     0    stevel extern pool_elem_t *pool_resource_to_elem(const pool_conf_t *,
    235     0    stevel     const pool_resource_t *);
    236     0    stevel extern pool_elem_t *pool_component_to_elem(const pool_conf_t *,
    237     0    stevel     const pool_component_t *);
    238     0    stevel 
    239     0    stevel /* Pool Property Value Manipulation */
    240     0    stevel /* Get/Set Pool Property Values and Type */
    241     0    stevel extern int pool_value_get_uint64(const pool_value_t *, uint64_t *);
    242     0    stevel extern int pool_value_get_int64(const pool_value_t *, int64_t *);
    243     0    stevel extern int pool_value_get_double(const pool_value_t *, double *);
    244     0    stevel extern int pool_value_get_bool(const pool_value_t *, uchar_t *);
    245     0    stevel extern int pool_value_get_string(const pool_value_t *, const char **);
    246     0    stevel extern pool_value_class_t pool_value_get_type(const pool_value_t *);
    247     0    stevel extern void pool_value_set_uint64(pool_value_t *, uint64_t);
    248     0    stevel extern void pool_value_set_int64(pool_value_t *, int64_t);
    249     0    stevel extern void pool_value_set_double(pool_value_t *, double);
    250     0    stevel extern void pool_value_set_bool(pool_value_t *, uchar_t);
    251     0    stevel extern int pool_value_set_string(pool_value_t *, const char *);
    252     0    stevel extern const char *pool_value_get_name(const pool_value_t *);
    253     0    stevel extern int pool_value_set_name(pool_value_t *, const char *);
    254     0    stevel 
    255     0    stevel /* Pool Property Value Creation/Destruction */
    256     0    stevel extern pool_value_t *pool_value_alloc(void);
    257     0    stevel extern void pool_value_free(pool_value_t *);
    258     0    stevel 
    259     0    stevel /* Default pool data store locations */
    260     0    stevel extern const char *pool_static_location(void);
    261     0    stevel extern const char *pool_dynamic_location(void);
    262     0    stevel 
    263     0    stevel /* Binding */
    264     0    stevel extern int pool_set_binding(const char *, idtype_t, id_t);
    265     0    stevel extern char *pool_get_binding(pid_t);
    266     0    stevel extern char *pool_get_resource_binding(const char *, pid_t);
    267     0    stevel 
    268     0    stevel /* Walking */
    269     0    stevel extern int pool_walk_pools(pool_conf_t *, void *,
    270     0    stevel     int (*)(pool_conf_t *, pool_t *, void *));
    271     0    stevel extern int pool_walk_resources(pool_conf_t *, pool_t *, void *,
    272     0    stevel     int (*)(pool_conf_t *, pool_resource_t *, void *));
    273     0    stevel extern int pool_walk_components(pool_conf_t *, pool_resource_t *, void *,
    274     0    stevel     int (*)(pool_conf_t *, pool_component_t *, void *));
    275     0    stevel 
    276     0    stevel #ifdef	__cplusplus
    277     0    stevel }
    278     0    stevel #endif
    279     0    stevel 
    280     0    stevel #endif	/* _POOL_H */
    281