Home | History | Annotate | Download | only in common
      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