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