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 (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 #ifndef _MMS_MGMT_H_ 26 #define _MMS_MGMT_H_ 27 28 29 #include <sys/types.h> 30 #include <sys/param.h> 31 #include <netdb.h> 32 #include <pwd.h> 33 #include <libnvpair.h> 34 35 #include "mms_list.h" /* temporary, change over to nvlists */ 36 37 /* MMS Options and Default Values */ 38 39 /* All MMS configurable options for all objects */ 40 41 #define O_MMHOST "mmhost" 42 #define O_MMPORT "port" 43 #define O_MMPASS "password" 44 #define O_OBJTYPE "objtype" 45 #define O_SECURECOMM "secure-comm" 46 #define O_SSLENABLED "sslenabled" 47 #define O_SSLPASSFILE "sslpassfile" 48 #define O_CERTFILE "certfile" 49 #define O_CRLFILE "crlfile" 50 #define O_PEERFILE "peerfile" 51 #define O_WELCOME "welcomefile" 52 #define O_DHFILE "dhfile" 53 #define O_VERIFY "verify" 54 #define O_LOGLEVEL "log-level" 55 #define O_LOGFILE "log-file" 56 #define O_DBDIR "db-dir" 57 #define O_DBPORT "db-port" 58 #define O_DBLOG "db-log" 59 #define O_DBNAME "dbname" 60 #define O_DBHOST "dbhost" 61 #define O_NUMRESTART "num-restarts" 62 #define O_ATTENDED "attended" 63 #define O_NUMSOCKET "num-socket" 64 #define O_DKTIMEOUT "disk-timeout" 65 #define O_SERIALNO "serialno" 66 #define O_ACSHOST "acsls" 67 #define O_ACSPORT "acsport" 68 #define O_OBJSTATE "state" 69 #define O_MSGLEVEL "msg-level" 70 #define O_TRACELEVEL "trace-level" 71 #define O_TRACESZ "trace-file-size" 72 #define O_MMSLIB "library" 73 #define O_DEVCONN "connection" 74 #define O_LIBCONN "libconntype" 75 #define O_APPS "apps" 76 #define O_UNLOADTM "unload-time" 77 #define O_RESERVE "reserve" 78 #define O_RETENTION "retain" 79 #define O_VALIDATEEXP "validate-expiration" 80 #define O_VALIDATEVOL "validate-volid" 81 #define O_VALIDATEFN "validate-filename" 82 #define O_OVERWRITEEXT "overwrite-existing" 83 #define O_RESPTXT "responsetxt" 84 #define O_FORCE "force" 85 #define O_MPOOL "mpool" 86 #define O_DPOOL "dpool" 87 #define O_HOST "host" 88 #define O_UNCFG "uncfg" 89 #define O_NAME "name" 90 #define O_ACSNUM "acs" 91 #define O_LSMNUM "lsm" 92 #define O_LMNAME "lmname" 93 #define O_DMNAME "dmname" 94 #define O_MMSDRV "drive" 95 #define O_TYPE "hwtype" 96 #define O_ONLINE "online" 97 #define O_DISABLED "disabled" 98 #define O_VOLUMES "volumes" 99 #define O_DEVPATH "devpath" 100 #define O_SIZE "size" 101 #define O_MTYPE "mediatype" 102 #define O_VOLTYPE "voltype" 103 #define O_ACSLSDIR "acslsdir" 104 #define O_DENSITY "density" 105 #define O_NOWAIT "nowait" 106 #define O_NOREWIND "norewind" 107 #define O_NOMOUNT O_NOREWIND /* used in mmsadm label */ 108 #define O_DFLTPATH "dkpath" 109 /* helpers for MMS services */ 110 #define MM 0x00000001 111 #define WCR 0x00000002 112 #define DB 0x00000004 113 114 #if 0 115 #define MMSVC "svc:/application/management/mms:mm" 116 #define WCRSVC "svc:/application/management/mms:wcr" 117 #define DBSVC "svc:/application/management/mms:db" 118 #endif 119 #define MMSVC MMS_CFG_MM_INST 120 #define WCRSVC MMS_CFG_WCR_INST 121 #define DBSVC MMS_CFG_DB_INST 122 123 /* defaults */ 124 #define MMSSBINDIR "/usr/bin" 125 #define MMSVARDIR "/var/mms" 126 #define MMSETCDIR "/etc/mms" 127 #define MMSSSLDIR "/var/mms/ssl/pub" 128 #define MMSLOGDIR MMSVARDIR"/logs" 129 #define MMS_DEF_DBDIR MMSVARDIR"/db" 130 #define MMS_DEF_MMPORT "7151" 131 #define MMS_DEF_DBPORT "7656" 132 #define MMS_DEF_LOGLVL "error" 133 134 /* 135 * mms_mgmt_init_host() 136 * 137 * DESCRIPTION: 138 * Sets all required MMS options, and starts required services. 139 * 140 * On an MMS client system, 141 * sets MM host, port and administrative password 142 * sets SSL options, if desired 143 * starts the Watcher daemon 144 * 145 * On on MMS server system, 146 * creates MMS database admin user 147 * initializes MMS database and starts database server 148 * sets MM options [TBD: list these with explanation] 149 * starts MM daemon and Watcher daemon 150 * 151 * ARGUMENTS: 152 * nvlist_t *opts key/value pairs for requested options 153 * nvlist_t **errs optional - used to return detailed errors 154 * about invalid/missing options, and other 155 * operational failures during initialization. 156 * If 'errs' is non-NULL, a new nvlist will be 157 * allocated. The caller should free this list 158 * with nvlist_free(). 159 * 160 * RETURN VALUES: 161 * 162 * 0 Success 163 * MMS_MGMT_NOARG 'opts' argument missing 164 * EINVAL One or more requested options is invalid 165 * EALREADY Host has already been initialized for MMS 166 * ENOMEM Out of memory 167 * [others TBD] 168 */ 169 170 int 171 mms_mgmt_init_host(nvlist_t *opts, nvlist_t **errs); 172 173 /* 174 * Required opts that are not in inopts, and options with invalid values 175 * are added to the argument nvlist "errlist". 176 */ 177 int mms_mgmt_set_opts(nvlist_t *optlist, nvlist_t *errlist); 178 179 /* 180 * mms_mgmt_get_opts(char* type, nvlist_t **opts) 181 */ 182 int 183 mms_mgmt_get_opts(char *type, nvlist_t **opts); 184 185 186 int mms_mgmt_uninitialize(void); 187 188 /* MMS Database Functions */ 189 int 190 mgmt_set_db_opts(nvlist_t *opts, nvlist_t *errlist); 191 192 int 193 mgmt_db_init(void); 194 195 int 196 mgmt_db_create(int initialize, int populate, nvlist_t *optlist); 197 198 int 199 mgmt_db_drop(void); 200 201 int 202 mgmt_db_ready(void); 203 204 int 205 mgmt_db_check(void); 206 207 int 208 mgmt_db_dump(char *dumpdir, char *dumpfile, int len); 209 210 int 211 mgmt_db_restore(char *dumpfile); 212 213 /* Library and Drive functions */ 214 /* 215 * mms_mgmt_discover_libraries() 216 * 217 * Finds ACSLS libraries, and optionally associated drives. 218 * Those already configured for use with MMS are filtered out unless 219 * 'showall' is TRUE. 220 */ 221 int 222 mms_mgmt_discover_libraries( 223 char *acshost, boolean_t getdrives, mms_list_t *liblist); 224 225 void free_drive_list(void *arg); 226 void free_acslib_list(void *arg); 227 228 /* Online/Offline functions */ 229 int 230 mms_mgmt_set_state(void *session, nvlist_t *nvl, nvlist_t *errs); 231 232 int 233 mms_mgmt_add_application(void *session, nvlist_t *nvl, nvlist_t *errs); 234 235 int 236 mms_mgmt_remove_application(void *session, nvlist_t *nvl, nvlist_t *errs); 237 238 int 239 mms_mgmt_modify_application(void *session, nvlist_t *nvl, nvlist_t *errs); 240 241 int 242 mms_mgmt_discover_media( 243 void *session, boolean_t showall, nvlist_t *opts, mms_list_t *vol_list, 244 nvlist_t *errs); 245 246 int 247 mms_mgmt_add_mpool(void *session, nvlist_t *nvl, nvlist_t *errs); 248 249 int 250 mms_mgmt_add_dpool(void *session, nvlist_t *nvl, nvlist_t *errs); 251 252 int 253 mms_mgmt_modify_mpool(void *session, nvlist_t *nvl, nvlist_t *errs); 254 255 int 256 mms_mgmt_modify_dpool(void *session, nvlist_t *nvl, nvlist_t *errs); 257 258 int 259 mms_mgmt_remove_mpool(void *session, char *mpool, boolean_t force, 260 nvlist_t *errs); 261 262 int 263 mms_mgmt_remove_dpool(void *session, char *dpool, boolean_t force, 264 nvlist_t *errs); 265 266 int 267 mms_mgmt_add_cartridges(void *session, nvlist_t *nvl, nvlist_t *errs); 268 269 int 270 mms_mgmt_remove_cartridges(void *session, nvlist_t *nvl, nvlist_t *errs); 271 272 int 273 mms_mgmt_set_pass(void *session, nvlist_t *nvl, nvlist_t *errs); 274 275 int 276 mms_mgmt_list_vols(void *session, nvlist_t *nvl, nvlist_t **vol_list); 277 278 int 279 mms_mgmt_list_drives(void *session, nvlist_t *nvl, nvlist_t *errs, 280 nvlist_t **drvs); 281 282 int 283 mms_mgmt_list_supported_types(void *session, nvlist_t **supported); 284 285 int 286 mms_mgmt_show_cartridge_type(void *session, char *voltype, nvlist_t **nvl); 287 288 int 289 mms_mgmt_add_voltype(void *session, nvlist_t *nvl, nvlist_t *errs); 290 291 int 292 mms_mgmt_create_voltype(void *session, nvlist_t *nvl, nvlist_t *errs); 293 294 int 295 mms_mgmt_remove_voltype(void *session, char *voltype); 296 297 int 298 mms_mgmt_modify_voltype(void *session, nvlist_t *nvl, nvlist_t *errs); 299 300 int 301 mms_mgmt_list_libraries(void *session, nvlist_t *nvl, nvlist_t *errs, 302 nvlist_t **libs); 303 304 int 305 mms_mgmt_show_requests(void *session, nvlist_t *nvl, nvlist_t **reqs); 306 307 int 308 mms_mgmt_accept_request(void *session, char *reqID, char *text); 309 310 int 311 mms_mgmt_reject_request(void *session, char *reqID, char *text); 312 313 int 314 mms_mgmt_create_dklib(void *session, nvlist_t *lib, nvlist_t *errs); 315 316 int 317 mms_mgmt_add_dkvol(void *session, nvlist_t *nvl, nvlist_t *errs); 318 319 void 320 mms_mgmt_add_vol_cleanup(void *session, char *pcl, char *lib); 321 322 int 323 mms_mgmt_create_dkdrive(void *session, nvlist_t *nvl, nvlist_t *errs); 324 325 int 326 mms_mgmt_show_apps(void *session, nvlist_t *nvl, nvlist_t **apps); 327 328 int 329 mms_mgmt_show_mpool(void *session, nvlist_t *nvl, nvlist_t **pools); 330 331 int 332 mms_mgmt_show_dpool(void *session, nvlist_t *nvl, nvlist_t **pools); 333 334 int 335 mms_mgmt_set_vol_mode(void *session, nvlist_t *nvl, nvlist_t *errs); 336 337 int 338 mgmt_delete_dkvol(char *volpath, nvlist_t *errs); 339 340 int 341 mms_mgmt_create_partition(void *session, char *pcl, int64_t size, char *lib, 342 char *rwmode, nvlist_t *errs); 343 344 int 345 mms_mgmt_remove_partition(void *session, nvlist_t *nvl, nvlist_t *errs); 346 347 int 348 mms_mgmt_label_multi(void *session, nvlist_t *nvl, nvlist_t *errs); 349 350 int 351 mms_mgmt_label_vol(void *session, nvlist_t *nvl, nvlist_t *errs); 352 353 354 /* mount processing door info */ 355 #define MMS_MGMT_MOUNT 1 356 #define MMS_MGMT_UNMOUNT 2 357 358 typedef struct { 359 int op; 360 int st; 361 char cartridge[1024]; 362 char library[1024]; 363 char volname[1024]; 364 char devname[1024]; 365 char app[1024]; 366 char inst[1024]; 367 char pass[1024]; 368 char cmd[8192]; 369 } mmsmnt_arg_t; 370 371 int 372 mms_mgmt_mount_vol(void *session, nvlist_t *nvl, nvlist_t *errs); 373 374 int 375 mms_mgmt_unmount_vol(nvlist_t *nvl, nvlist_t *errs); 376 377 int 378 mgmt_set_db_pass(char *dbpass, nvlist_t *errs); 379 380 int 381 mgmt_get_drvgrp(void *session, char *grpname, nvlist_t **drvgrp); 382 383 int 384 mgmt_get_dgname(void *session, char *dgname, nvlist_t **dg); 385 386 int 387 mgmt_get_cgname(void *session, char *dgname, nvlist_t **cg); 388 389 390 391 #endif /* _MMS_MGMT_H_ */ 392