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 */