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