/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _REMOTE_CFG_H
#define _REMOTE_CFG_H
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* WARNING: The contents of this file are shared by all projects
* that wish to perform remote Dynamic Reconfiguration (DR)
* operations. Copies of this file can be found in the following
* locations:
*
* Project Location
* ------- --------
* Solaris usr/src/cmd/dcs/sparc/sun4u/%M%
* SMS src/sms/lib/librdr/%M%
*
* In order for proper communication to occur, the files in the
* above locations must match exactly. Any changes that are made
* to this file should be made to all of the files in the list.
*/
/*
* This file contains definitions for a transport layer interface socket
* interface between a domain configuration server (DCS) and a domain
* configuration agent (DCA). The domain configuration server resides
* within Solaris on a domain. The domain configuration agent resides on
* the system controller.
*/
#ifdef __cplusplus
extern "C" {
#endif
/*
* The data_type field indicates whether the message is REQUEST
* or REPLY.
*/
typedef enum {
RDR_REQUEST = 1,
RDR_REPLY
} rdr_msg_data_type_t;
/*
* The error_msg_ctl field indicates whether error messages
* should be generated or not. See the errstring argument in
* the config_admin(3CFGADM) man page.
*/
typedef enum {
RDR_GENERATE_ERR_MSGS = 1,
RDR_DONT_GENERATE_ERR_MSGS
} rdr_error_msg_ctl_t;
/*
* The list_msg_ctl field indicates whether a list should
* be generated for all attachment points in the device tree or
* only those attachment points specified in the message. See
* the comment on the first two arguments for config_list_ext
* in the config_admin(3CFGADM) man page.
*/
typedef enum {
RDR_LIST_ONLY_PARAM_APS = 1,
RDR_LIST_ALL_APS
} rdr_list_msg_control_t;
/*
* The permissions field indicates if the list_ext command should
* filter out attachment points that the remote user doesn't have
* sufficient access permissions to view.
*/
typedef enum {
RDR_NOT_PRIVILEGED = 0,
RDR_PRIVILEGED
} rdr_list_permission_control_t;
/*
* The message_opcode value of the message indicates the purpose
* of the request. The defined values for message_opcode are:
*/
typedef enum {
RDR_SES_REQ = 1, /* Session open. */
RDR_SES_ESTBL, /* Session Establishment. */
RDR_SES_END, /* Session end. */
RDR_CONF_CHANGE_STATE, /* Change state of an attachment point. */
RDR_CONF_PRIVATE_FUNC, /* Invoke h/w specific func. */
RDR_CONF_TEST, /* Test the system board. */
RDR_CONF_LIST_EXT, /* Listing interface. */
RDR_CONF_HELP, /* Request output of localized help msg */
RDR_CONF_AP_ID_CMP, /* Compare two attachment point ids. */
RDR_CONF_ABORT_CMD, /* Abort the current config command. */
RDR_CONF_CONFIRM_CALLBACK, /* Confirm call-back. */
RDR_CONF_MSG_CALLBACK, /* Message call-back. */
RDR_RSRC_INFO, /* System board resource info. */
RDR_NUM_OPS
} rdr_msg_opcode_t;
/*
* The status is valid only if the data_type is REPLY. The possible
* values for status are, FAILED or SUCCESS.
*/
typedef enum {
RDR_SUCCESS = 0,
RDR_FAILED
} dr_msg_status_t;
/*
* The following typedefs define message formats for use in the
* rdr_msg_type_t union. The rdr_msg_type_t union contains the
* majority of the information in the messages sent between the
* DCS and DCA.
*
* Some types require variable length data to follow the fixed
* length information in the struct. If this is required, a
* comment is placed at the end of the struct that shows the
* contents of that information along with the required number
* of bytes.
*
* All *_size fields are the length of the string + 1 to account
* for NULL termination.
*/
typedef struct {
unsigned int locale_size;
/* locale string (locale_size bytes) */
} rdr_ses_req_t;
typedef struct {
unsigned long session_id;
} rdr_ses_req_reply_t;
typedef struct {
unsigned int num_ap_ids;
unsigned int ap_id_char_size;
unsigned int options_size;
unsigned long confirm_callback_id;
unsigned long confirm_appdata_ptr;
unsigned long msg_callback_id;
unsigned long msg_appdata_ptr;
unsigned long flags;
unsigned long timeval;
unsigned short state_change_cmd;
unsigned short error_msg_ctl;
char retries;
char pad_byte1;
/* ap id strings (ap_id_char_size bytes) */
/* option string (options_size bytes) */
} rdr_change_state_t;
typedef struct {
unsigned int errstring_size;
/* error string (errstring_size bytes) */
} rdr_change_state_reply_t;
typedef struct {
unsigned int num_ap_ids;
unsigned int ap_id_char_size;
unsigned int options_size;
unsigned int function_size;
unsigned long confirm_callback_id;
unsigned long confirm_appdata_ptr;
unsigned long msg_callback_id;
unsigned long msg_appdata_ptr;
unsigned long flags;
unsigned short error_msg_ctl;
char pad_byte1;
char pad_byte2;
/* ap id strings (ap_id_char_size bytes) */
/* option string (options_size bytes) */
/* function string (function_size bytes) */
} rdr_private_func_t;
typedef struct {
unsigned int errstring_size;
/* error string (errstring_size bytes) */
} rdr_private_func_reply_t;
typedef struct {
unsigned int num_ap_ids;
unsigned int ap_id_char_size;
unsigned int options_size;
unsigned long msg_callback_id;
unsigned long msg_appdata_ptr;
unsigned long flags;
unsigned short error_msg_ctl;
char pad_byte1;
char pad_byte2;
/* ap id strings (ap_id_char_size bytes) */
/* option string (options_size bytes) */
} rdr_test_t;
typedef struct {
unsigned int errstring_size;
/* error string (errstring_size bytes) */
} rdr_test_reply_t;
typedef struct {
unsigned int num_ap_ids;
unsigned int ap_id_char_size;
unsigned int options_size;
unsigned int listopts_size;
unsigned short error_msg_ctl;
unsigned short list_msg_ctl;
unsigned long flags;
unsigned int permissions;
/* ap id strings (ap_id_char_size bytes) */
/* option string (options_size bytes) */
/* list opt string (listopts_size bytes) */
} rdr_list_ext_t;
/*
* The num_ap_ids is the total number of ap_ids in the sequence of
* messages for the list_ext reply. The list data array is an
* array of cfga_list_data_t (see config_admin (3CFGA)) structs
* that has num_ap_ids elements.
*/
typedef struct {
unsigned int num_ap_ids;
unsigned int errstring_size;
/* list data array (num_ap_ids elements) */
/* error string (errstring_size bytes) */
} rdr_list_ext_reply_t;
typedef struct {
unsigned int num_ap_ids;
unsigned int ap_id_char_size;
unsigned long msg_callback_id;
unsigned long msg_appdata_ptr;
unsigned int options_size;
unsigned long flags;
/* ap id strings (ap_id_char_size bytes) */
/* option string (options_size bytes) */
} rdr_help_t;
typedef struct {
unsigned int ap_id1_size;
unsigned int ap_id2_size;
/* ap id 1 string (ap_id1_size bytes) */
/* ap id 2 string (ap_id1_size bytes) */
} rdr_ap_id_cmp_t;
typedef struct {
unsigned long session_id;
} rdr_abort_cmd_t;
typedef struct {
unsigned long confirm_callback_id;
unsigned long appdata_ptr;
unsigned int message_size;
/* prompt message (message_size bytes) */
} rdr_confirm_callback_t;
typedef struct {
unsigned long confirm_callback_id;
unsigned long appdata_ptr;
int response;
} rdr_confirm_callback_reply_t;
typedef struct {
unsigned long msg_callback_id;
unsigned long appdata_ptr;
unsigned int message_size;
/* user message (message_size bytes) */
} rdr_msg_callback_t;
typedef struct {
unsigned int num_ap_ids;
unsigned int ap_id_char_size;
int flags;
/* ap id strings (ap_id_char_size bytes) */
} rdr_rsrc_info_t;
typedef struct {
unsigned long packed_hdl_size;
/* rsrc info buf (packed_hdl_size bytes) */
} rdr_rsrc_info_reply_t;
typedef union {
rdr_ses_req_t ses_req;
rdr_ses_req_reply_t ses_req_reply;
rdr_change_state_t change_state;
rdr_change_state_reply_t change_state_reply;
rdr_private_func_t private_func;
rdr_private_func_reply_t private_func_reply;
rdr_test_t test;
rdr_test_reply_t test_reply;
rdr_list_ext_t list_ext;
rdr_list_ext_reply_t list_ext_reply;
rdr_help_t help;
rdr_ap_id_cmp_t ap_id_cmp;
rdr_abort_cmd_t abort;
rdr_confirm_callback_t confirm_callback;
rdr_confirm_callback_reply_t confirm_callback_reply;
rdr_msg_callback_t msg_callback;
rdr_rsrc_info_t rsrc_info;
rdr_rsrc_info_reply_t rsrc_info_reply;
} rdr_msg_type_t;
/*
* The RDR message will contain the following members:
*/
typedef struct {
unsigned long data_length;
/* Message Op, Type, and Status */
unsigned char message_opcode; /* rdr_msg_opcode_t */
unsigned char data_type; /* rdr_msg_data_type_t */
char pad_byte1;
char pad_byte2;
unsigned long status; /* rdr_msg_status_t */
/* These are for security and version */
unsigned long random_req;
unsigned long random_resp;
unsigned short major_version;
unsigned short minor_version;
} rdr_msg_hdr_t;
/*
* The RDR message body:
*/
typedef struct {
rdr_msg_hdr_t app;
rdr_msg_type_t conf;
} rdr_msg_t;
#ifdef __cplusplus
}
#endif
#endif /* _REMOTE_CFG_H */