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 (c) 2000 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _REMOTE_CFG_H 28 #define _REMOTE_CFG_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 /* 33 * WARNING: The contents of this file are shared by all projects 34 * that wish to perform remote Dynamic Reconfiguration (DR) 35 * operations. Copies of this file can be found in the following 36 * locations: 37 * 38 * Project Location 39 * ------- -------- 40 * Solaris usr/src/cmd/dcs/sparc/sun4u/%M% 41 * SMS src/sms/lib/librdr/%M% 42 * 43 * In order for proper communication to occur, the files in the 44 * above locations must match exactly. Any changes that are made 45 * to this file should be made to all of the files in the list. 46 */ 47 48 /* 49 * This file contains definitions for a transport layer interface socket 50 * interface between a domain configuration server (DCS) and a domain 51 * configuration agent (DCA). The domain configuration server resides 52 * within Solaris on a domain. The domain configuration agent resides on 53 * the system controller. 54 */ 55 56 #ifdef __cplusplus 57 extern "C" { 58 #endif 59 60 61 /* 62 * The data_type field indicates whether the message is REQUEST 63 * or REPLY. 64 */ 65 typedef enum { 66 RDR_REQUEST = 1, 67 RDR_REPLY 68 } rdr_msg_data_type_t; 69 70 71 /* 72 * The error_msg_ctl field indicates whether error messages 73 * should be generated or not. See the errstring argument in 74 * the config_admin(3CFGADM) man page. 75 */ 76 typedef enum { 77 RDR_GENERATE_ERR_MSGS = 1, 78 RDR_DONT_GENERATE_ERR_MSGS 79 } rdr_error_msg_ctl_t; 80 81 82 /* 83 * The list_msg_ctl field indicates whether a list should 84 * be generated for all attachment points in the device tree or 85 * only those attachment points specified in the message. See 86 * the comment on the first two arguments for config_list_ext 87 * in the config_admin(3CFGADM) man page. 88 */ 89 typedef enum { 90 RDR_LIST_ONLY_PARAM_APS = 1, 91 RDR_LIST_ALL_APS 92 } rdr_list_msg_control_t; 93 94 95 /* 96 * The permissions field indicates if the list_ext command should 97 * filter out attachment points that the remote user doesn't have 98 * sufficient access permissions to view. 99 */ 100 typedef enum { 101 RDR_NOT_PRIVILEGED = 0, 102 RDR_PRIVILEGED 103 } rdr_list_permission_control_t; 104 105 106 /* 107 * The message_opcode value of the message indicates the purpose 108 * of the request. The defined values for message_opcode are: 109 */ 110 typedef enum { 111 RDR_SES_REQ = 1, /* Session open. */ 112 RDR_SES_ESTBL, /* Session Establishment. */ 113 RDR_SES_END, /* Session end. */ 114 RDR_CONF_CHANGE_STATE, /* Change state of an attachment point. */ 115 RDR_CONF_PRIVATE_FUNC, /* Invoke h/w specific func. */ 116 RDR_CONF_TEST, /* Test the system board. */ 117 RDR_CONF_LIST_EXT, /* Listing interface. */ 118 RDR_CONF_HELP, /* Request output of localized help msg */ 119 RDR_CONF_AP_ID_CMP, /* Compare two attachment point ids. */ 120 RDR_CONF_ABORT_CMD, /* Abort the current config command. */ 121 RDR_CONF_CONFIRM_CALLBACK, /* Confirm call-back. */ 122 RDR_CONF_MSG_CALLBACK, /* Message call-back. */ 123 RDR_RSRC_INFO, /* System board resource info. */ 124 RDR_NUM_OPS 125 } rdr_msg_opcode_t; 126 127 128 /* 129 * The status is valid only if the data_type is REPLY. The possible 130 * values for status are, FAILED or SUCCESS. 131 */ 132 typedef enum { 133 RDR_SUCCESS = 0, 134 RDR_FAILED 135 } dr_msg_status_t; 136 137 138 /* 139 * The following typedefs define message formats for use in the 140 * rdr_msg_type_t union. The rdr_msg_type_t union contains the 141 * majority of the information in the messages sent between the 142 * DCS and DCA. 143 * 144 * Some types require variable length data to follow the fixed 145 * length information in the struct. If this is required, a 146 * comment is placed at the end of the struct that shows the 147 * contents of that information along with the required number 148 * of bytes. 149 * 150 * All *_size fields are the length of the string + 1 to account 151 * for NULL termination. 152 */ 153 154 155 typedef struct { 156 unsigned int locale_size; 157 /* locale string (locale_size bytes) */ 158 } rdr_ses_req_t; 159 160 161 typedef struct { 162 unsigned long session_id; 163 } rdr_ses_req_reply_t; 164 165 166 typedef struct { 167 unsigned int num_ap_ids; 168 unsigned int ap_id_char_size; 169 unsigned int options_size; 170 unsigned long confirm_callback_id; 171 unsigned long confirm_appdata_ptr; 172 unsigned long msg_callback_id; 173 unsigned long msg_appdata_ptr; 174 unsigned long flags; 175 unsigned long timeval; 176 unsigned short state_change_cmd; 177 unsigned short error_msg_ctl; 178 char retries; 179 char pad_byte1; 180 /* ap id strings (ap_id_char_size bytes) */ 181 /* option string (options_size bytes) */ 182 } rdr_change_state_t; 183 184 185 typedef struct { 186 unsigned int errstring_size; 187 /* error string (errstring_size bytes) */ 188 } rdr_change_state_reply_t; 189 190 191 typedef struct { 192 unsigned int num_ap_ids; 193 unsigned int ap_id_char_size; 194 unsigned int options_size; 195 unsigned int function_size; 196 unsigned long confirm_callback_id; 197 unsigned long confirm_appdata_ptr; 198 unsigned long msg_callback_id; 199 unsigned long msg_appdata_ptr; 200 unsigned long flags; 201 unsigned short error_msg_ctl; 202 char pad_byte1; 203 char pad_byte2; 204 /* ap id strings (ap_id_char_size bytes) */ 205 /* option string (options_size bytes) */ 206 /* function string (function_size bytes) */ 207 } rdr_private_func_t; 208 209 210 typedef struct { 211 unsigned int errstring_size; 212 /* error string (errstring_size bytes) */ 213 } rdr_private_func_reply_t; 214 215 216 typedef struct { 217 unsigned int num_ap_ids; 218 unsigned int ap_id_char_size; 219 unsigned int options_size; 220 unsigned long msg_callback_id; 221 unsigned long msg_appdata_ptr; 222 unsigned long flags; 223 unsigned short error_msg_ctl; 224 char pad_byte1; 225 char pad_byte2; 226 /* ap id strings (ap_id_char_size bytes) */ 227 /* option string (options_size bytes) */ 228 } rdr_test_t; 229 230 231 typedef struct { 232 unsigned int errstring_size; 233 /* error string (errstring_size bytes) */ 234 } rdr_test_reply_t; 235 236 237 typedef struct { 238 unsigned int num_ap_ids; 239 unsigned int ap_id_char_size; 240 unsigned int options_size; 241 unsigned int listopts_size; 242 unsigned short error_msg_ctl; 243 unsigned short list_msg_ctl; 244 unsigned long flags; 245 unsigned int permissions; 246 /* ap id strings (ap_id_char_size bytes) */ 247 /* option string (options_size bytes) */ 248 /* list opt string (listopts_size bytes) */ 249 } rdr_list_ext_t; 250 251 252 /* 253 * The num_ap_ids is the total number of ap_ids in the sequence of 254 * messages for the list_ext reply. The list data array is an 255 * array of cfga_list_data_t (see config_admin (3CFGA)) structs 256 * that has num_ap_ids elements. 257 */ 258 typedef struct { 259 unsigned int num_ap_ids; 260 unsigned int errstring_size; 261 /* list data array (num_ap_ids elements) */ 262 /* error string (errstring_size bytes) */ 263 } rdr_list_ext_reply_t; 264 265 266 typedef struct { 267 unsigned int num_ap_ids; 268 unsigned int ap_id_char_size; 269 unsigned long msg_callback_id; 270 unsigned long msg_appdata_ptr; 271 unsigned int options_size; 272 unsigned long flags; 273 /* ap id strings (ap_id_char_size bytes) */ 274 /* option string (options_size bytes) */ 275 } rdr_help_t; 276 277 278 typedef struct { 279 unsigned int ap_id1_size; 280 unsigned int ap_id2_size; 281 /* ap id 1 string (ap_id1_size bytes) */ 282 /* ap id 2 string (ap_id1_size bytes) */ 283 } rdr_ap_id_cmp_t; 284 285 286 typedef struct { 287 unsigned long session_id; 288 } rdr_abort_cmd_t; 289 290 291 typedef struct { 292 unsigned long confirm_callback_id; 293 unsigned long appdata_ptr; 294 unsigned int message_size; 295 /* prompt message (message_size bytes) */ 296 } rdr_confirm_callback_t; 297 298 299 typedef struct { 300 unsigned long confirm_callback_id; 301 unsigned long appdata_ptr; 302 int response; 303 } rdr_confirm_callback_reply_t; 304 305 306 typedef struct { 307 unsigned long msg_callback_id; 308 unsigned long appdata_ptr; 309 unsigned int message_size; 310 /* user message (message_size bytes) */ 311 } rdr_msg_callback_t; 312 313 314 typedef struct { 315 unsigned int num_ap_ids; 316 unsigned int ap_id_char_size; 317 int flags; 318 /* ap id strings (ap_id_char_size bytes) */ 319 } rdr_rsrc_info_t; 320 321 322 typedef struct { 323 unsigned long packed_hdl_size; 324 /* rsrc info buf (packed_hdl_size bytes) */ 325 } rdr_rsrc_info_reply_t; 326 327 328 typedef union { 329 rdr_ses_req_t ses_req; 330 rdr_ses_req_reply_t ses_req_reply; 331 rdr_change_state_t change_state; 332 rdr_change_state_reply_t change_state_reply; 333 rdr_private_func_t private_func; 334 rdr_private_func_reply_t private_func_reply; 335 rdr_test_t test; 336 rdr_test_reply_t test_reply; 337 rdr_list_ext_t list_ext; 338 rdr_list_ext_reply_t list_ext_reply; 339 rdr_help_t help; 340 rdr_ap_id_cmp_t ap_id_cmp; 341 rdr_abort_cmd_t abort; 342 rdr_confirm_callback_t confirm_callback; 343 rdr_confirm_callback_reply_t confirm_callback_reply; 344 rdr_msg_callback_t msg_callback; 345 rdr_rsrc_info_t rsrc_info; 346 rdr_rsrc_info_reply_t rsrc_info_reply; 347 } rdr_msg_type_t; 348 349 350 /* 351 * The RDR message will contain the following members: 352 */ 353 typedef struct { 354 unsigned long data_length; 355 356 /* Message Op, Type, and Status */ 357 unsigned char message_opcode; /* rdr_msg_opcode_t */ 358 unsigned char data_type; /* rdr_msg_data_type_t */ 359 char pad_byte1; 360 char pad_byte2; 361 unsigned long status; /* rdr_msg_status_t */ 362 363 /* These are for security and version */ 364 unsigned long random_req; 365 unsigned long random_resp; 366 367 unsigned short major_version; 368 unsigned short minor_version; 369 } rdr_msg_hdr_t; 370 371 372 /* 373 * The RDR message body: 374 */ 375 typedef struct { 376 rdr_msg_hdr_t app; 377 rdr_msg_type_t conf; 378 } rdr_msg_t; 379 380 381 #ifdef __cplusplus 382 } 383 #endif 384 385 #endif /* _REMOTE_CFG_H */ 386