1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2003 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _POOL_XML_IMPL_H 28 #define _POOL_XML_IMPL_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 /* 35 * This file contains the definitions of types and supporting 36 * functions to implement the libpool XML specific data manipulation 37 * facility. 38 * 39 * For more information on the libpool generic data manipulation 40 * facility, look at pool_impl.h. 41 * 42 * The central types for the generic data representation/storage 43 * facility are here enhanced to provide additional XML specific 44 * information. 45 */ 46 47 /* 48 * pool_xml_elem_t is the XML (to be precise, libxml - although this 49 * could be easily ported to an alternative C-API xml library) 50 * specific representation of the pool_elem_t structure. 51 * 52 * The pxe_node pointer is a pointer to an XML element which 53 * represents the element in the XML document 54 */ 55 typedef struct pool_xml_elem { 56 /* 57 * Common to pool_elem_t 58 */ 59 pool_elem_t pxe_elem; 60 void *pxe_pad1; 61 void *pxe_pad2; 62 /* 63 * Common to pool_xml_elem_t 64 */ 65 xmlNodePtr pxe_node; /* XML Element */ 66 } pool_xml_elem_t; 67 68 typedef pool_xml_elem_t pool_xml_system_t; 69 70 typedef struct pool_xml_resource { 71 /* 72 * Common to pool_elem_t 73 */ 74 pool_elem_t pxe_elem; 75 /* 76 * Specific to pool_resource_t 77 */ 78 int (*pr_is_system)(const pool_resource_t *); 79 int (*pr_can_associate)(const pool_resource_t *); 80 /* 81 * Common to pool_xml_elem_t 82 */ 83 xmlNodePtr pxe_node; /* XML Element */ 84 } pool_xml_resource_t; 85 86 typedef struct pool_xml_pool { 87 /* 88 * Common to pool_elem_t 89 */ 90 pool_elem_t pxe_elem; 91 /* 92 * Specific to pool_t 93 */ 94 int (*pp_associate)(pool_t *, const pool_resource_t *); 95 int (*pp_dissociate)(pool_t *, const pool_resource_t *); 96 /* 97 * Common to pool_xml_elem_t 98 */ 99 xmlNodePtr pxe_node; /* XML Element */ 100 } pool_xml_pool_t; 101 102 typedef pool_xml_elem_t pool_xml_component_t; 103 104 /* 105 * pool_xml_result_set_t is the XML (to be precise, libxml - although 106 * this could be easily ported to an alternative C-API xml library) 107 * specific representation of the pool_result_set_t structure. 108 * 109 * The pxr_ctx member is a pointer to an XML XPath Context which 110 * represents the context in which this result set is valid. AN 111 * alternative way of thinking about this is to envisage the context 112 * as the root of the search which is used to build the result set. 113 * 114 * The pxr_path member is a pointer to the compiled XPath statement 115 * used to generate this result set. 116 * 117 * The prs_index member is a cursor into the result set and is used by 118 * the various result set functions to determine which result set 119 * member to access. 120 * 121 */ 122 typedef struct pool_xml_result_set { 123 const pool_conf_t *prs_conf; /* Configuration */ 124 int prs_active; /* Query active? */ 125 int prs_index; /* Result Index */ 126 pool_elem_t *(*prs_next)(pool_result_set_t *); 127 pool_elem_t *(*prs_prev)(pool_result_set_t *); 128 pool_elem_t *(*prs_first)(pool_result_set_t *); 129 pool_elem_t *(*prs_last)(pool_result_set_t *); 130 int (*prs_set_index)(pool_result_set_t *, int); 131 int (*prs_get_index)(pool_result_set_t *); 132 int (*prs_close)(pool_result_set_t *); 133 int (*prs_count)(pool_result_set_t *); 134 /* 135 * End of common part 136 */ 137 xmlXPathContextPtr pxr_ctx; /* Result Context */ 138 xmlXPathObjectPtr pxr_path; /* Result Path Object */ 139 } pool_xml_result_set_t; 140 141 /* 142 * pool_xml_connection_t is the XML (to be precise, libxml - although 143 * this could be easily ported to an alternative C-API xml library) 144 * specific representation of the pool_result_set_t structure. 145 * 146 * The pxc_doc member is a pointer to an XML document structure which 147 * contains information about the XML document which acts as the data 148 * store for this connection. 149 * 150 * The pxc_file member is a FILE pointer to the data file used to 151 * store the XML document. 152 * 153 * The pxc_oflags member is the OR'd list of options specified when 154 * opening this connection. 155 * 156 * The pxc_cleanup member is a boolean flag indicating whether a 157 * configuration has a backup which needs to be cleaned up. This is 158 * used as a means of providing resilient configuration changes in the 159 * face of potential failure. 160 * 161 */ 162 typedef struct pool_xml_connection { 163 const char *pc_name; /* Provider name */ 164 int pc_store_type; /* Datastore type */ 165 int pc_oflags; /* Open flags */ 166 int (*pc_close)(pool_conf_t *); 167 int (*pc_validate)(const pool_conf_t *, pool_valid_level_t); 168 int (*pc_commit)(pool_conf_t *); 169 int (*pc_export)(const pool_conf_t *, const char *, 170 pool_export_format_t); 171 int (*pc_rollback)(pool_conf_t *); 172 pool_result_set_t *(*pc_exec_query)(const pool_conf_t *, 173 const pool_elem_t *, const char *, 174 pool_elem_class_t, pool_value_t **); 175 pool_elem_t *(*pc_elem_create)(pool_conf_t *, pool_elem_class_t, 176 pool_resource_elem_class_t, pool_component_elem_class_t); 177 int (*pc_remove)(pool_conf_t *); 178 int (*pc_res_xfer)(pool_resource_t *, pool_resource_t *, uint64_t); 179 int (*pc_res_xxfer)(pool_resource_t *, pool_resource_t *, 180 pool_component_t **); 181 char *(*pc_get_binding)(pool_conf_t *, pid_t); 182 int (*pc_set_binding)(pool_conf_t *, const char *, idtype_t, id_t); 183 char *(*pc_get_resource_binding)(pool_conf_t *, 184 pool_resource_elem_class_t, pid_t); 185 /* 186 * End of common part 187 */ 188 xmlDocPtr pxc_doc; /* XML document */ 189 FILE *pxc_file; /* XML File */ 190 } pool_xml_connection_t; 191 192 #ifdef __cplusplus 193 } 194 #endif 195 196 #endif /* _POOL_XML_IMPL_H */ 197