%/* % * Copyright 2006 Sun Microsystems, Inc. All rights reserved. % * Use is subject to license terms. % * % * 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 % */ % %#pragma ident "%Z%%M% %I% %E% SMI" % %#include %#include %#include #ifdef RPC_SVC % %int md_in_daemon = 1; %#include #endif /* RPC_SVC */ #ifdef RPC_CLNT %int _md_in_daemon = 0; %#pragma weak md_in_daemon = _md_in_daemon #endif /* RPC_CLNT */ #ifdef RPC_HDR % %extern int md_in_daemon; %/* % * There are too many external factors that affect the timing of the % * operations, so we set the timeout to a very large value, in this % * case 1 day, which should handle HW timeouts, large configurations, % * and other potential delays. % */ %#define CL_LONG_TMO 86400L #endif /* RPC_HDR */ #ifdef RPC_XDR % %/* Start - Avoid duplicate definitions, but get the xdr calls right */ %#if 0 #include "../uts/common/sys/lvm/meta_arr.x" %#endif /* 0 */ %/* End - Avoid duplicate definitions, but get the xdr calls right */ % #endif /* RPC_XDR */ % %/* % * Structure Revisions % */ enum mdrpc_metad_args_rev { MD_METAD_ARGS_REV_1 = 1 /* Revision 1 */ }; % %/* % * device id % */ struct mdrpc_devid_res { string enc_devid<>; /* encoded device id */ md_error_t status; /* status of RPC call */ }; % %/* % * svm rpc version 2 device id arguments % * (member union in mdrpc_devid_2_args) % */ struct mdrpc_devid_args { md_setkey_t *cl_sk; mdsetname_t *sp; mddrivename_t *drivenamep; }; % %/* % * svm rpc version 2 device id arguments % * (union of all version 2 revisions) % */ union mdrpc_devid_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_devid_args rev1; default: void; }; % %/* % * For getting the devinfo based upon devid % */ struct mdrpc_devidstr_args { mdsetname_t *sp; string enc_devid<>; /* encoded device id */ md_error_t status; /* status of RPC call */ }; % %/* % * For getting the devinfo based upon devid/devname % */ struct mdrpc_devid_name_args { mdsetname_t *sp; string orig_devname<>; /* devname on orig node */ string enc_devid<>; /* encoded device id */ }; % %/* % * svm rpc version 2 devinfo based upon devid/devname % * (union of all version 2 revisions) % */ union mdrpc_devid_name_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_devid_name_args rev1; default: void; }; % %/* % * version 1 device info % */ struct mdrpc_devinfo_res { dev_t dev; /* major.minor */ int vtime; /* vtoc timestamp */ md_error_t status; /* status of RPC call */ }; % %/* % * version 2 device info. dev_t is always 64-bit % */ struct mdrpc_devinfo_2_res { md_dev64_t dev; /* major.minor */ int vtime; /* vtoc timestamp */ string enc_devid<>; /* encoded device id */ string devname<>; /* name of the device */ string drivername<>; /* name of the driver */ md_error_t status; /* status of RPC call */ }; % %/* % * svm rpc version 1 device info arguments % */ struct mdrpc_devinfo_args { md_setkey_t *cl_sk; mdsetname_t *sp; o_mddrivename_t *drivenamep; }; % %/* % * svm rpc version 2 (revision 1) device info arguments % * (member of union in mdrpc_devinfo_2_args) % */ struct mdrpc_devinfo_2_args_r1 { md_setkey_t *cl_sk; mdsetname_t *sp; mddrivename_t *drivenamep; string enc_devid<>; /* encoded device id */ }; % %/* % * svm rpc version 2 device info arguments % * (union of all version 2 revisions) % */ union mdrpc_devinfo_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_devinfo_2_args_r1 rev1; default: void; }; struct mdrpc_hostname_res { string hostname<>; md_error_t status; }; % %/* % * svm rpc version 1 and version 2 (revision 1) getset arguments % */ struct mdrpc_getset_args { string setname<>; set_t setno; }; % %/* % * svm rpc version 2 getset arguments % * (union of all version 2 revisions) % */ union mdrpc_getset_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_getset_args rev1; default: void; }; % %/* NOTE: if you add to this struct, then fix the clnt_getset() */ %/* to prevent memory leaks */ struct mdrpc_getset_res { md_set_record *sr; md_error_t status; }; % %/* NOTE: if you add to this struct, then fix the clnt_mngetset() */ %/* to prevent memory leaks */ struct mdrpc_mngetset_res { md_mnset_record *mnsr; md_error_t status; }; % %/* NOTE: if you add to this struct, then fix the clnt_getdrivedesc() */ %/* to prevent memory leaks */ struct mdrpc_getdrivedesc_res { md_drive_desc *dd; md_error_t status; }; #ifdef RPC_HDR %#ifndef STRINGARRAY #endif typedef string stringarray<>; #ifdef RPC_HDR %#define STRINGARRAY %#endif #endif % %/* % * svm rpc version 1 and version 2 (revision 1) createset arguments % */ struct mdrpc_createset_args { md_setkey_t *cl_sk; mdsetname_t *sp; md_node_nm_arr_t nodes; md_timeval32_t timestamp; u_long genid; }; % %/* % * svm rpc version 2 createset arguments % * (union of all version 2 revisions) % */ union mdrpc_createset_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_createset_args rev1; default: void; }; struct mdrpc_mncreateset_args { md_setkey_t *cl_sk; mdsetname_t *sp; md_mnnode_desc *nodelist; md_timeval32_t timestamp; u_long genid; md_node_nm_t master_nodenm; int master_nodeid; }; % %/* % * svm rpc version 2 mncreateset arguments % * (union of all version 2 revisions) % */ union mdrpc_mncreateset_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_mncreateset_args rev1; default: void; }; struct mdrpc_bool_res { int value; md_error_t status; }; % %/* % * svm rpc version 1 drive arguments % */ struct mdrpc_drives_args { md_setkey_t *cl_sk; mdsetname_t *sp; o_md_drive_desc *drivedescs; md_timeval32_t timestamp; u_long genid; }; % %/* % * svm rpc version 2 (revision 1) drive arguments % * (member of union in mrpc_drives_2_args) % */ struct mdrpc_drives_2_args_r1 { md_setkey_t *cl_sk; mdsetname_t *sp; md_drive_desc *drivedescs; md_timeval32_t timestamp; u_long genid; }; % %/* % * svm rpc version 2 drive arguments % * (union of all version 2 revisions) % */ union mdrpc_drives_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_drives_2_args_r1 rev1; default: void; }; % %/* % * svm rpc version 1 sidename arguments % */ struct mdrpc_drv_sidenm_args { md_setkey_t *cl_sk; string hostname<>; mdsetname_t *sp; o_md_set_desc *sd; stringarray node_v<>; }; % %/* % * svm rpc version 2 (revision 1) sidename arguments % * (member of union in mdrpc_drv_sidenm_2_args) % */ struct mdrpc_drv_sidenm_2_args_r1 { md_setkey_t *cl_sk; string hostname<>; mdsetname_t *sp; md_set_desc *sd; stringarray node_v<>; }; % %/* % * svm rpc version 2 sidename arguments % * (union of all version 2 revisions) % */ union mdrpc_drv_sidenm_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_drv_sidenm_2_args_r1 rev1; default: void; }; % %/* % * svm rpc version 1 drvused arguments % */ struct mdrpc_drvused_args { md_setkey_t *cl_sk; mdsetname_t *sp; o_mddrivename_t *drivenamep; }; % %/* % * svm rpc version 2 (revision 1) drvused arguments % * (member of union in mdrpc_drvused_2_args) % */ struct mdrpc_drvused_2_args_r1 { md_setkey_t *cl_sk; mdsetname_t *sp; mddrivename_t *drivenamep; }; % %/* % * svm rpc version 2 drvused arguments % * (union of all version 2 revisions) % */ union mdrpc_drvused_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_drvused_2_args_r1 rev1; default: void; }; % %/* % * svm rpc version 1 and version 2 (revision 1) host arguments % */ struct mdrpc_host_args { md_setkey_t *cl_sk; mdsetname_t *sp; stringarray hosts<>; }; % %/* % * svm rpc version 2 host arguments % * (union of all version 2 revisions) % */ union mdrpc_host_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_host_args rev1; default: void; }; struct mdrpc_gtimeout_res { md_error_t status; mhd_mhiargs_t *mhiargsp; }; % %/* % * svm rpc version 1 and version 2 (revision 1) set timeout arguments % */ struct mdrpc_stimeout_args { md_setkey_t *cl_sk; mdsetname_t *sp; mhd_mhiargs_t *mhiargsp; }; % %/* % * svm rpc version 2 set timeout arguments % * (union of all version 2 revisions) % */ union mdrpc_stimeout_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_stimeout_args rev1; default: void; }; % %/* % * svm rpc version 1 arguments % */ struct mdrpc_upd_dr_flags_args { md_setkey_t *cl_sk; mdsetname_t *sp; o_md_drive_desc *drivedescs; u_int new_flags; }; % %/* % * svm rpc version 2 (revision 1) arguments % * (member of union in mdrpc_upd_dr_flags_2_args) % */ struct mdrpc_upd_dr_flags_2_args_r1 { md_setkey_t *cl_sk; mdsetname_t *sp; md_drive_desc *drivedescs; u_int new_flags; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_upd_dr_flags_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_upd_dr_flags_2_args_r1 rev1; default: void; }; % %/* % * svm rpc version 1 and version 2 (revision 1) arguments % */ struct mdrpc_upd_sr_flags_args { md_setkey_t *cl_sk; mdsetname_t *sp; u_int new_flags; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_upd_sr_flags_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_upd_sr_flags_args rev1; default: void; }; % %/* % * svm rpc version 2 (revision 1) arguments % */ struct mdrpc_upd_nr_flags_args { md_setkey_t *cl_sk; mdsetname_t *sp; md_mnnode_desc *nodedescs; u_int flag_action; u_int flags; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_upd_nr_flags_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_upd_nr_flags_args rev1; default: void; }; struct mdrpc_setlock_res { md_setkey_t *cl_sk; md_error_t status; }; struct mdrpc_generic_res { md_error_t status; }; % %/* % * svm rpc version 1 and version 2 (revision 1) set arguments % */ struct mdrpc_setno_args { md_setkey_t *cl_sk; set_t setno; }; % %/* % * svm rpc version 2 set arguments % * (union of all version 2 revisions) % */ union mdrpc_setno_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_setno_args rev1; default: void; }; struct mdrpc_null_args { md_setkey_t *cl_sk; }; % %/* % * svm rpc version 1 and version 2 (revision 1) arguments % */ struct mdrpc_sp_args { md_setkey_t *cl_sk; mdsetname_t *sp; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_sp_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_sp_args rev1; default: void; }; % %/* % * svm rpc version 2 (revision 1) arguments % */ struct mdrpc_sp_flags_args { md_setkey_t *cl_sk; mdsetname_t *sp; int flags; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_sp_flags_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_sp_flags_args rev1; default: void; }; % %/* % * svm rpc version 1 and version 2 (revision 1) arguments % */ struct mdrpc_updmeds_args { md_setkey_t *cl_sk; mdsetname_t *sp; md_h_arr_t meds; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_updmeds_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_updmeds_args rev1; default: void; }; struct mdrpc_mnsetmaster_args { md_setkey_t *cl_sk; mdsetname_t *sp; md_node_nm_t master_nodenm; int master_nodeid; }; % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_mnsetmaster_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_mnsetmaster_args rev1; default: void; }; /* * Defines and structures to support rpc.mdcommd. * RPC routines in rpc.metad will be used to suspend, resume * and reinitialize the rpc.mdcommd running on that node. * These actions are needed when the nodelist is changing. */ %#define COMMDCTL_SUSPEND 1 %#define COMMDCTL_RESUME 2 %#define COMMDCTL_REINIT 3 struct mdrpc_mdcommdctl_args { int flag_action; set_t setno; md_mn_msgclass_t class; int flags; }; % % %/* % * svm rpc version 2 arguments % * (union of all version 2 revisions) % */ union mdrpc_mdcommdctl_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_mdcommdctl_args rev1; default: void; }; % %/* % * svm rpc version 2 (revision 1) nodeid arguments % */ struct mdrpc_nodeid_args { md_setkey_t *cl_sk; mdsetname_t *sp; int nodeid<>; }; % %/* % * svm rpc version 2 nodeid arguments % * (union of all version 2 revisions) % */ union mdrpc_nodeid_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_nodeid_args rev1; default: void; }; % %/* % * Defines and structures to support suspend and resume I/O % * driven by a remote node. % */ %#define MN_SUSP_IO 1 %#define MN_RES_IO 2 % %/* % * svm rpc version 2 (revision 1) mn_susp_res_io arguments % * setno of 0 represents all disksets. % */ struct mdrpc_mn_susp_res_io_args { md_setkey_t *susp_res_l_sk; set_t susp_res_setno; int susp_res_cmd; }; % %/* % * svm rpc version 2 nodeid arguments % * (union of all version 2 revisions) % */ union mdrpc_mn_susp_res_io_2_args switch (mdrpc_metad_args_rev rev) { case MD_METAD_ARGS_REV_1: mdrpc_mn_susp_res_io_args rev1; default: void; }; #ifdef RPC_HDR % %/* % * authorization info % */ const METAD_GID = 14; /* magic sysadmin group */ #endif /* RPC_HDR */ % %/* % * services available % */ program METAD { version METAD_VERSION { md_error_t mdrpc_nullproc(void) = 0; mdrpc_hostname_res mdrpc_hostname(mdrpc_null_args) = 1; mdrpc_generic_res mdrpc_addhosts(mdrpc_host_args) = 2; mdrpc_generic_res mdrpc_delhosts(mdrpc_host_args) = 3; mdrpc_generic_res mdrpc_createset(mdrpc_createset_args) = 4; mdrpc_generic_res mdrpc_delset(mdrpc_sp_args) = 5; mdrpc_getset_res mdrpc_getset(mdrpc_getset_args) = 6; mdrpc_bool_res mdrpc_setnumbusy(mdrpc_setno_args) = 7; mdrpc_bool_res mdrpc_setnameok(mdrpc_sp_args) = 8; mdrpc_bool_res mdrpc_ownset(mdrpc_sp_args) = 9; mdrpc_generic_res mdrpc_adddrvs(mdrpc_drives_args) = 10; mdrpc_generic_res mdrpc_deldrvs(mdrpc_drives_args) = 11; mdrpc_generic_res mdrpc_upd_dr_dbinfo(mdrpc_drives_args) = 12; mdrpc_devinfo_res mdrpc_devinfo(mdrpc_devinfo_args) = 13; mdrpc_generic_res mdrpc_drvused(mdrpc_drvused_args) = 14; mdrpc_generic_res mdrpc_add_drv_sidenms(mdrpc_drv_sidenm_args) = 15; mdrpc_generic_res mdrpc_del_drv_sidenms(mdrpc_sp_args) = 16; mdrpc_gtimeout_res mdrpc_gtimeout(mdrpc_sp_args) = 17; mdrpc_generic_res mdrpc_stimeout(mdrpc_stimeout_args) = 18; mdrpc_generic_res mdrpc_upd_dr_flags(mdrpc_upd_dr_flags_args) = 19; mdrpc_generic_res mdrpc_upd_sr_flags(mdrpc_upd_sr_flags_args) = 20; mdrpc_setlock_res mdrpc_unlock_set(mdrpc_null_args) = 21; mdrpc_setlock_res mdrpc_lock_set(mdrpc_null_args) = 22; mdrpc_generic_res mdrpc_updmeds(mdrpc_updmeds_args) = 23; mdrpc_generic_res mdrpc_flush_internal(mdrpc_null_args) = 24; } = 1; version METAD_VERSION_DEVID { md_error_t mdrpc_nullproc(void) = 0; mdrpc_hostname_res mdrpc_hostname(mdrpc_null_args) = 1; mdrpc_generic_res mdrpc_addhosts(mdrpc_host_2_args) = 2; mdrpc_generic_res mdrpc_delhosts(mdrpc_host_2_args) = 3; mdrpc_generic_res mdrpc_createset(mdrpc_createset_2_args) = 4; mdrpc_generic_res mdrpc_delset(mdrpc_sp_2_args) = 5; mdrpc_getset_res mdrpc_getset(mdrpc_getset_2_args) = 6; mdrpc_bool_res mdrpc_setnumbusy(mdrpc_setno_2_args) = 7; mdrpc_bool_res mdrpc_setnameok(mdrpc_sp_2_args) = 8; mdrpc_bool_res mdrpc_ownset(mdrpc_sp_2_args) = 9; mdrpc_generic_res mdrpc_adddrvs(mdrpc_drives_2_args) = 10; mdrpc_generic_res mdrpc_deldrvs(mdrpc_drives_2_args) = 11; mdrpc_generic_res mdrpc_upd_dr_dbinfo(mdrpc_drives_2_args) = 12; mdrpc_devinfo_2_res mdrpc_devinfo(mdrpc_devinfo_2_args) = 13; mdrpc_generic_res mdrpc_drvused(mdrpc_drvused_2_args) = 14; mdrpc_generic_res mdrpc_add_drv_sidenms(mdrpc_drv_sidenm_2_args) = 15; mdrpc_generic_res mdrpc_del_drv_sidenms(mdrpc_sp_2_args) = 16; mdrpc_gtimeout_res mdrpc_gtimeout(mdrpc_sp_2_args) = 17; mdrpc_generic_res mdrpc_stimeout(mdrpc_stimeout_2_args) = 18; mdrpc_generic_res mdrpc_upd_dr_flags(mdrpc_upd_dr_flags_2_args) = 19; mdrpc_generic_res mdrpc_upd_sr_flags(mdrpc_upd_sr_flags_2_args) = 20; mdrpc_setlock_res mdrpc_unlock_set(mdrpc_null_args) = 21; mdrpc_setlock_res mdrpc_lock_set(mdrpc_null_args) = 22; mdrpc_generic_res mdrpc_updmeds(mdrpc_updmeds_2_args) = 23; mdrpc_generic_res mdrpc_flush_internal(mdrpc_null_args) = 24; mdrpc_devid_res mdrpc_devid(mdrpc_devid_2_args) = 25; mdrpc_devinfo_2_res mdrpc_devinfo_by_devid(mdrpc_devidstr_args) = 26; mdrpc_generic_res mdrpc_resnarf_set(mdrpc_setno_2_args) = 27; mdrpc_generic_res mdrpc_mncreateset(mdrpc_mncreateset_2_args) = 28; mdrpc_mngetset_res mdrpc_mngetset(mdrpc_getset_2_args) = 29; mdrpc_generic_res mdrpc_mnsetmaster(mdrpc_mnsetmaster_2_args) = 30; mdrpc_generic_res mdrpc_joinset(mdrpc_sp_flags_2_args) = 31; mdrpc_generic_res mdrpc_withdrawset(mdrpc_sp_2_args) = 32; mdrpc_generic_res mdrpc_upd_nr_flags(mdrpc_upd_nr_flags_2_args) = 33; mdrpc_bool_res mdrpc_mn_is_stale(mdrpc_setno_2_args) = 34; mdrpc_generic_res mdrpc_mdcommdctl(mdrpc_mdcommdctl_2_args) = 35; mdrpc_generic_res mdrpc_clr_mnsetlock(mdrpc_null_args) = 36; mdrpc_getdrivedesc_res mdrpc_getdrivedesc(mdrpc_sp_2_args) = 37; mdrpc_generic_res mdrpc_upd_dr_reconfig(mdrpc_upd_dr_flags_2_args) = 38; mdrpc_generic_res mdrpc_reset_mirror_owner(mdrpc_nodeid_2_args) = 39; mdrpc_generic_res mdrpc_mn_susp_res_io(mdrpc_mn_susp_res_io_2_args) = 40; mdrpc_generic_res mdrpc_mn_mirror_resync_all(mdrpc_setno_2_args) = 41; mdrpc_devinfo_2_res mdrpc_devinfo_by_devid_name(mdrpc_devid_name_2_args) = 42; mdrpc_generic_res mdrpc_mn_sp_update_abr(mdrpc_setno_2_args) = 43; mdrpc_generic_res mdrpc_imp_adddrvs(mdrpc_drives_2_args) = 44; } = 2; } = 100229; #ifdef RPC_HDR % %extern void short_circuit_getset(mdrpc_getset_args *args, % mdrpc_getset_res *res); %extern void short_circuit_mngetset(mdrpc_getset_args *args, % mdrpc_mngetset_res *res); #endif /* RPC_HDR */