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 2014 Garrett D'Amore <garrett@damore.org> 24 * 25 * Copyright 1998-2002 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 #ifndef _SYS_CONFIG_ADMIN_H 30 #define _SYS_CONFIG_ADMIN_H 31 32 /* 33 * config_admin.h 34 * 35 * this file supports usage of the interfaces defined in 36 * config_admin.3x. which are contained in /usr/lib/libcfgadm.so.1 37 */ 38 39 #include <sys/param.h> 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 46 /* 47 * Defined constants 48 */ 49 #define CFGA_AP_LOG_ID_LEN 20 50 #define CFGA_AP_PHYS_ID_LEN MAXPATHLEN 51 #define CFGA_INFO_LEN 4096 52 #define CFGA_TYPE_LEN 12 53 54 #define CFGA_CLASS_LEN 12 55 #define CFGA_LOG_EXT_LEN 30 56 57 #define CFGA_DYN_SEP "::" 58 #define CFGA_PHYS_EXT_LEN (CFGA_AP_PHYS_ID_LEN + CFGA_LOG_EXT_LEN) 59 60 61 /* 62 * Configuration change state commands 63 */ 64 typedef enum { 65 CFGA_CMD_NONE = 0, 66 CFGA_CMD_LOAD, 67 CFGA_CMD_UNLOAD, 68 CFGA_CMD_CONNECT, 69 CFGA_CMD_DISCONNECT, 70 CFGA_CMD_CONFIGURE, 71 CFGA_CMD_UNCONFIGURE 72 } cfga_cmd_t; 73 74 /* 75 * Configuration states 76 */ 77 typedef enum { 78 CFGA_STAT_NONE = 0, 79 CFGA_STAT_EMPTY, 80 CFGA_STAT_DISCONNECTED, 81 CFGA_STAT_CONNECTED, 82 CFGA_STAT_UNCONFIGURED, 83 CFGA_STAT_CONFIGURED 84 } cfga_stat_t; 85 86 /* 87 * Configuration conditions 88 */ 89 typedef enum { 90 CFGA_COND_UNKNOWN = 0, 91 CFGA_COND_OK, 92 CFGA_COND_FAILING, 93 CFGA_COND_FAILED, 94 CFGA_COND_UNUSABLE 95 } cfga_cond_t; 96 97 /* 98 * Flags 99 */ 100 #define CFGA_FLAG_FORCE 1 101 #define CFGA_FLAG_VERBOSE 2 102 #define CFGA_FLAG_LIST_ALL 4 103 104 typedef char cfga_ap_log_id_t[CFGA_AP_LOG_ID_LEN]; 105 typedef char cfga_ap_phys_id_t[CFGA_AP_PHYS_ID_LEN]; 106 typedef char cfga_info_t[CFGA_INFO_LEN]; 107 typedef char cfga_type_t[CFGA_TYPE_LEN]; 108 typedef int cfga_flags_t; 109 typedef int cfga_busy_t; 110 111 112 typedef char cfga_log_ext_t[CFGA_LOG_EXT_LEN]; 113 typedef char cfga_phys_ext_t[CFGA_PHYS_EXT_LEN]; 114 typedef char cfga_class_t[CFGA_CLASS_LEN]; 115 116 typedef struct cfga_list_data { 117 cfga_log_ext_t ap_log_id; /* Attachment point logical id */ 118 cfga_phys_ext_t ap_phys_id; /* Attachment point physical id */ 119 cfga_class_t ap_class; /* Attachment point class */ 120 cfga_stat_t ap_r_state; /* Receptacle state */ 121 cfga_stat_t ap_o_state; /* Occupant state */ 122 cfga_cond_t ap_cond; /* Attachment point condition */ 123 cfga_busy_t ap_busy; /* Busy indicators */ 124 time_t ap_status_time; /* Attachment point last change */ 125 cfga_info_t ap_info; /* Miscellaneous information */ 126 cfga_type_t ap_type; /* Occupant type */ 127 } cfga_list_data_t; 128 129 /* 130 * The following structure is retained for backward compatibility 131 */ 132 typedef struct cfga_stat_data { 133 cfga_ap_log_id_t ap_log_id; /* Attachment point logical id */ 134 cfga_ap_phys_id_t ap_phys_id; /* Attachment point physical id */ 135 cfga_stat_t ap_r_state; /* Receptacle state */ 136 cfga_stat_t ap_o_state; /* Occupant state */ 137 cfga_cond_t ap_cond; /* Attachment point condition */ 138 cfga_busy_t ap_busy; /* Busy indicators */ 139 time_t ap_status_time; /* Attachment point last change */ 140 cfga_info_t ap_info; /* Miscellaneous information */ 141 cfga_type_t ap_type; /* Occupant type */ 142 } cfga_stat_data_t; 143 144 145 struct cfga_confirm { 146 int (*confirm)(void *appdata_ptr, const char *message); 147 void *appdata_ptr; 148 }; 149 150 struct cfga_msg { 151 int (*message_routine)(void *appdata_ptr, const char *message); 152 void *appdata_ptr; 153 }; 154 155 /* 156 * Library function error codes returned by all functions below 157 * except config_strerror which is used to decode the error 158 * codes. 159 */ 160 typedef enum { 161 CFGA_OK = 0, 162 CFGA_NACK, 163 CFGA_NOTSUPP, 164 CFGA_OPNOTSUPP, 165 CFGA_PRIV, 166 CFGA_BUSY, 167 CFGA_SYSTEM_BUSY, 168 CFGA_DATA_ERROR, 169 CFGA_LIB_ERROR, 170 CFGA_NO_LIB, 171 CFGA_INSUFFICENT_CONDITION, 172 CFGA_INVAL, 173 CFGA_ERROR, 174 CFGA_APID_NOEXIST, 175 CFGA_ATTR_INVAL 176 } cfga_err_t; 177 178 179 /* 180 * config_admin.3x library interfaces 181 */ 182 183 cfga_err_t config_change_state(cfga_cmd_t state_change_cmd, int num_ap_ids, 184 char *const *ap_ids, const char *options, struct cfga_confirm *confp, 185 struct cfga_msg *msgp, char **errstring, cfga_flags_t flags); 186 187 cfga_err_t config_private_func(const char *function, int num_ap_ids, 188 char *const *ap_ids, const char *options, struct cfga_confirm *confp, 189 struct cfga_msg *msgp, char **errstring, cfga_flags_t flags); 190 191 cfga_err_t config_test(int num_ap_ids, char *const *ap_ids, 192 const char *options, struct cfga_msg *msgp, char **errstring, 193 cfga_flags_t flags); 194 195 cfga_err_t config_list_ext(int num_ap_ids, char *const *ap_ids, 196 struct cfga_list_data **ap_id_list, int *nlist, const char *options, 197 const char *listopts, char **errstring, cfga_flags_t flags); 198 199 cfga_err_t config_help(int num_ap_ids, char *const *ap_ids, 200 struct cfga_msg *msgp, const char *options, cfga_flags_t flags); 201 202 const char *config_strerror(cfga_err_t cfgerrnum); 203 204 int config_ap_id_cmp(const cfga_ap_log_id_t ap_id1, 205 const cfga_ap_log_id_t ap_id2); 206 207 void config_unload_libs(); 208 209 /* 210 * The following two routines are retained only for backward compatibility 211 */ 212 cfga_err_t config_stat(int num_ap_ids, char *const *ap_ids, 213 struct cfga_stat_data *buf, const char *options, char **errstring); 214 215 cfga_err_t config_list(struct cfga_stat_data **ap_di_list, int *nlist, 216 const char *options, char **errstring); 217 218 219 #ifdef CFGA_PLUGIN_LIB 220 /* 221 * Plugin library routine hooks - only to be used by the generic 222 * library and plugin libraries (who must define CFGA_PLUGIN_LIB 223 * prior to the inclusion of this header). 224 */ 225 226 cfga_err_t cfga_change_state(cfga_cmd_t, const char *, const char *, 227 struct cfga_confirm *, struct cfga_msg *, char **, cfga_flags_t); 228 cfga_err_t cfga_private_func(const char *, const char *, const char *, 229 struct cfga_confirm *, struct cfga_msg *, char **, cfga_flags_t); 230 cfga_err_t cfga_test(const char *, const char *, struct cfga_msg *, 231 char **, cfga_flags_t); 232 cfga_err_t cfga_list_ext(const char *, struct cfga_list_data **, int *, 233 const char *, const char *, char **, cfga_flags_t); 234 cfga_err_t cfga_help(struct cfga_msg *, const char *, cfga_flags_t); 235 int cfga_ap_id_cmp(const cfga_ap_log_id_t, 236 const cfga_ap_log_id_t); 237 238 239 /* 240 * Plugin version information. 241 */ 242 #define CFGA_HSL_V1 1 243 #define CFGA_HSL_V2 2 244 #define CFGA_HSL_VERS CFGA_HSL_V2 245 246 /* 247 * The following two routines are retained only for backward compatibility. 248 */ 249 cfga_err_t cfga_stat(const char *, struct cfga_stat_data *, 250 const char *, char **); 251 cfga_err_t cfga_list(const char *, struct cfga_stat_data **, int *, 252 const char *, char **); 253 254 255 #endif /* CFGA_PLUGIN_LIB */ 256 257 #ifdef __cplusplus 258 } 259 #endif 260 261 #endif /* _SYS_CONFIG_ADMIN_H */