1*18c2aff7Sartem /* 2*18c2aff7Sartem * CDDL HEADER START 3*18c2aff7Sartem * 4*18c2aff7Sartem * The contents of this file are subject to the terms of the 5*18c2aff7Sartem * Common Development and Distribution License (the "License"). 6*18c2aff7Sartem * You may not use this file except in compliance with the License. 7*18c2aff7Sartem * 8*18c2aff7Sartem * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*18c2aff7Sartem * or http://www.opensolaris.org/os/licensing. 10*18c2aff7Sartem * See the License for the specific language governing permissions 11*18c2aff7Sartem * and limitations under the License. 12*18c2aff7Sartem * 13*18c2aff7Sartem * When distributing Covered Code, include this CDDL HEADER in each 14*18c2aff7Sartem * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*18c2aff7Sartem * If applicable, add the following below this CDDL HEADER, with the 16*18c2aff7Sartem * fields enclosed by brackets "[]" replaced with your own identifying 17*18c2aff7Sartem * information: Portions Copyright [yyyy] [name of copyright owner] 18*18c2aff7Sartem * 19*18c2aff7Sartem * CDDL HEADER END 20*18c2aff7Sartem */ 21*18c2aff7Sartem /* 22*18c2aff7Sartem * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23*18c2aff7Sartem * Use is subject to license terms. 24*18c2aff7Sartem */ 25*18c2aff7Sartem 26*18c2aff7Sartem #pragma ident "%Z%%M% %I% %E% SMI" 27*18c2aff7Sartem 28*18c2aff7Sartem #include <stdio.h> 29*18c2aff7Sartem #include <string.h> 30*18c2aff7Sartem #include <dirent.h> 31*18c2aff7Sartem #include <fcntl.h> 32*18c2aff7Sartem #include <string.h> 33*18c2aff7Sartem #include <errno.h> 34*18c2aff7Sartem #include <limits.h> 35*18c2aff7Sartem #include <unistd.h> 36*18c2aff7Sartem #include <sys/mkdev.h> 37*18c2aff7Sartem #include <volmgt.h> 38*18c2aff7Sartem #include <ctype.h> 39*18c2aff7Sartem #include <sys/types.h> 40*18c2aff7Sartem #include <sys/stat.h> 41*18c2aff7Sartem #include <sys/param.h> 42*18c2aff7Sartem #include "volmgt_private.h" 43*18c2aff7Sartem 44*18c2aff7Sartem /* 45*18c2aff7Sartem * arc approved interface 46*18c2aff7Sartem * - can not be modified without approval from an arc 47*18c2aff7Sartem * 48*18c2aff7Sartem * committment level: 49*18c2aff7Sartem * public 50*18c2aff7Sartem * 51*18c2aff7Sartem * description: 52*18c2aff7Sartem * volmgt_running: check to see if volume management is running. 53*18c2aff7Sartem * 54*18c2aff7Sartem * arguments: 55*18c2aff7Sartem * none. 56*18c2aff7Sartem * 57*18c2aff7Sartem * return value(s): 58*18c2aff7Sartem * TRUE if volume management is running, FALSE if not. 59*18c2aff7Sartem * 60*18c2aff7Sartem * preconditions: 61*18c2aff7Sartem * none. 62*18c2aff7Sartem */ 63*18c2aff7Sartem int 64*18c2aff7Sartem volmgt_running(void) 65*18c2aff7Sartem { 66*18c2aff7Sartem /* vold is dead */ 67*18c2aff7Sartem return (FALSE); 68*18c2aff7Sartem } 69*18c2aff7Sartem 70*18c2aff7Sartem 71*18c2aff7Sartem /* 72*18c2aff7Sartem * arc approved interface 73*18c2aff7Sartem * - can not be modified without approval from an arc 74*18c2aff7Sartem * 75*18c2aff7Sartem * committment level: 76*18c2aff7Sartem * public 77*18c2aff7Sartem * 78*18c2aff7Sartem * description: 79*18c2aff7Sartem * volmgt_inuse: check to see if volume management is currently 80*18c2aff7Sartem * managing a particular device. 81*18c2aff7Sartem * 82*18c2aff7Sartem * arguments: 83*18c2aff7Sartem * path - the name of the device in /dev. For example, 84*18c2aff7Sartem * "/dev/rdiskette". 85*18c2aff7Sartem * 86*18c2aff7Sartem * return value(s): 87*18c2aff7Sartem * TRUE if volume management is managing the device, FALSE if not. 88*18c2aff7Sartem * 89*18c2aff7Sartem * preconditions: 90*18c2aff7Sartem * none. 91*18c2aff7Sartem */ 92*18c2aff7Sartem /* ARGSUSED */ 93*18c2aff7Sartem int 94*18c2aff7Sartem volmgt_inuse(char *path) 95*18c2aff7Sartem { 96*18c2aff7Sartem return (FALSE); 97*18c2aff7Sartem } 98*18c2aff7Sartem 99*18c2aff7Sartem 100*18c2aff7Sartem /* 101*18c2aff7Sartem * arc approved interface 102*18c2aff7Sartem * - can not be modified without approval from an arc 103*18c2aff7Sartem * 104*18c2aff7Sartem * committment level: 105*18c2aff7Sartem * public 106*18c2aff7Sartem * 107*18c2aff7Sartem * description: 108*18c2aff7Sartem * volmgt_check: have volume management look at its devices to check 109*18c2aff7Sartem * for media having arrived. Since volume management can't 110*18c2aff7Sartem * automatically check all types of devices, this function is provided 111*18c2aff7Sartem * to allow applications to cause the check to happen automatically. 112*18c2aff7Sartem * 113*18c2aff7Sartem * arguments: 114*18c2aff7Sartem * path - the name of the device in /dev. For example, 115*18c2aff7Sartem * /dev/rdiskette. If path is NULL, all "checkable" devices are 116*18c2aff7Sartem * checked. 117*18c2aff7Sartem * 118*18c2aff7Sartem * return value(s): 119*18c2aff7Sartem * TRUE if media was found in the device, FALSE if not. 120*18c2aff7Sartem * 121*18c2aff7Sartem * preconditions: 122*18c2aff7Sartem * volume management must be running. 123*18c2aff7Sartem */ 124*18c2aff7Sartem /* ARGSUSED */ 125*18c2aff7Sartem int 126*18c2aff7Sartem volmgt_check(char *path) 127*18c2aff7Sartem { 128*18c2aff7Sartem return (FALSE); 129*18c2aff7Sartem } 130*18c2aff7Sartem 131*18c2aff7Sartem 132*18c2aff7Sartem /* 133*18c2aff7Sartem * arc approved interface 134*18c2aff7Sartem * - can not be modified without approval from an arc 135*18c2aff7Sartem * 136*18c2aff7Sartem * committment level: 137*18c2aff7Sartem * public 138*18c2aff7Sartem * 139*18c2aff7Sartem * description: 140*18c2aff7Sartem * volmgt_ownspath: check to see if the given path is contained in 141*18c2aff7Sartem * the volume management name space. 142*18c2aff7Sartem * 143*18c2aff7Sartem * arguments: 144*18c2aff7Sartem * path - string containing the path. 145*18c2aff7Sartem * 146*18c2aff7Sartem * return value(s): 147*18c2aff7Sartem * TRUE if the path is owned by volume management, FALSE if not. 148*18c2aff7Sartem * Will return FALSE if volume management isn't running. 149*18c2aff7Sartem * 150*18c2aff7Sartem * preconditions: 151*18c2aff7Sartem * none. 152*18c2aff7Sartem */ 153*18c2aff7Sartem /* ARGSUSED */ 154*18c2aff7Sartem int 155*18c2aff7Sartem volmgt_ownspath(char *path) 156*18c2aff7Sartem { 157*18c2aff7Sartem return (FALSE); 158*18c2aff7Sartem } 159*18c2aff7Sartem 160*18c2aff7Sartem 161*18c2aff7Sartem /* 162*18c2aff7Sartem * arc approved interface 163*18c2aff7Sartem * - can not be modified without approval from an arc 164*18c2aff7Sartem * 165*18c2aff7Sartem * committment level: 166*18c2aff7Sartem * public 167*18c2aff7Sartem * 168*18c2aff7Sartem * description: 169*18c2aff7Sartem * volmgt_root: return the root of where the volume management 170*18c2aff7Sartem * name space is mounted. 171*18c2aff7Sartem * 172*18c2aff7Sartem * arguments: 173*18c2aff7Sartem * none. 174*18c2aff7Sartem * 175*18c2aff7Sartem * return value(s): 176*18c2aff7Sartem * Returns a pointer to a static string containing the path to the 177*18c2aff7Sartem * volume management root (e.g. "/vol"). 178*18c2aff7Sartem * Will return NULL if volume management isn't running. 179*18c2aff7Sartem * 180*18c2aff7Sartem * preconditions: 181*18c2aff7Sartem * none. 182*18c2aff7Sartem */ 183*18c2aff7Sartem const char * 184*18c2aff7Sartem volmgt_root(void) 185*18c2aff7Sartem { 186*18c2aff7Sartem static const char *vold_root = "/dev"; 187*18c2aff7Sartem 188*18c2aff7Sartem return (vold_root); 189*18c2aff7Sartem } 190*18c2aff7Sartem 191*18c2aff7Sartem 192*18c2aff7Sartem /* 193*18c2aff7Sartem * arc approved interface 194*18c2aff7Sartem * - can not be modified without approval from an arc 195*18c2aff7Sartem * 196*18c2aff7Sartem * committment level: 197*18c2aff7Sartem * public 198*18c2aff7Sartem * 199*18c2aff7Sartem * description: 200*18c2aff7Sartem * volmgt_symname: Returns the volume management symbolic name 201*18c2aff7Sartem * for a given device. If an application wants to determine 202*18c2aff7Sartem * what the symbolic name (e.g. "floppy0") for the /dev/rdiskette 203*18c2aff7Sartem * device would be, this is the function to use. 204*18c2aff7Sartem * 205*18c2aff7Sartem * arguments: 206*18c2aff7Sartem * path - a string containing the /dev device name. For example, 207*18c2aff7Sartem * "/dev/diskette" or "/dev/rdiskette". 208*18c2aff7Sartem * 209*18c2aff7Sartem * Note: must be a block- or char-spcl device, and have a non-zero 210*18c2aff7Sartem * st_rdev (real device) stat() value. 211*18c2aff7Sartem * 212*18c2aff7Sartem * return value(s): 213*18c2aff7Sartem * pointer to a string containing the symbolic name. 214*18c2aff7Sartem * 215*18c2aff7Sartem * NULL indicates that volume management isn't managing that device. 216*18c2aff7Sartem * 217*18c2aff7Sartem * The string must be free(3)'d. 218*18c2aff7Sartem * 219*18c2aff7Sartem * preconditions: 220*18c2aff7Sartem * none. 221*18c2aff7Sartem */ 222*18c2aff7Sartem /* ARGSUSED */ 223*18c2aff7Sartem char * 224*18c2aff7Sartem volmgt_symname(char *path) 225*18c2aff7Sartem { 226*18c2aff7Sartem return (NULL); 227*18c2aff7Sartem } 228*18c2aff7Sartem 229*18c2aff7Sartem 230*18c2aff7Sartem /* 231*18c2aff7Sartem * arc approved interface 232*18c2aff7Sartem * - can not be modified without approval from an arc 233*18c2aff7Sartem * 234*18c2aff7Sartem * committment level: 235*18c2aff7Sartem * public 236*18c2aff7Sartem * 237*18c2aff7Sartem * description: 238*18c2aff7Sartem * volmgt_symdev: Returns the device given the volume management 239*18c2aff7Sartem * symbolic name. If an application wants to determine 240*18c2aff7Sartem * what the device associated with a particular symbolic name 241*18c2aff7Sartem * might be, this is the function to use. 242*18c2aff7Sartem * 243*18c2aff7Sartem * arguments: 244*18c2aff7Sartem * path - a string containing the symbolic device name. For example, 245*18c2aff7Sartem * "cdrom0" or "floppy0". 246*18c2aff7Sartem * 247*18c2aff7Sartem * return value(s): 248*18c2aff7Sartem * pointer to a string containing the /dev name. 249*18c2aff7Sartem * 250*18c2aff7Sartem * NULL indicates that volume management isn't managing that device. 251*18c2aff7Sartem * 252*18c2aff7Sartem * The string must be free(3)'d. 253*18c2aff7Sartem * 254*18c2aff7Sartem * preconditions: 255*18c2aff7Sartem * none. 256*18c2aff7Sartem */ 257*18c2aff7Sartem /* ARGSUSED */ 258*18c2aff7Sartem char * 259*18c2aff7Sartem volmgt_symdev(char *symname) 260*18c2aff7Sartem { 261*18c2aff7Sartem return (NULL); 262*18c2aff7Sartem } 263*18c2aff7Sartem 264*18c2aff7Sartem 265*18c2aff7Sartem /* 266*18c2aff7Sartem * arc approved interface 267*18c2aff7Sartem * - can not be modified without approval from an arc 268*18c2aff7Sartem * 269*18c2aff7Sartem * committment level: 270*18c2aff7Sartem * public 271*18c2aff7Sartem * 272*18c2aff7Sartem * description: 273*18c2aff7Sartem * volmgt_feat_enabled: check to see if a volume management feature 274*18c2aff7Sartem * is available 275*18c2aff7Sartem * 276*18c2aff7Sartem * arguments: 277*18c2aff7Sartem * feat_str - a string containing the feature to be checked for 278*18c2aff7Sartem * 279*18c2aff7Sartem * return value(s): 280*18c2aff7Sartem * return non-zero if the specified feature is available in 281*18c2aff7Sartem * volume management, else return zero 282*18c2aff7Sartem * 283*18c2aff7Sartem * preconditions: 284*18c2aff7Sartem * none. 285*18c2aff7Sartem */ 286*18c2aff7Sartem 287*18c2aff7Sartem 288*18c2aff7Sartem /* 289*18c2aff7Sartem * the following is a lit of the "feature" available in volmgt 290*18c2aff7Sartem * 291*18c2aff7Sartem * this list is meant to be updated when new features (that users may 292*18c2aff7Sartem * want to use) are added to volmgt 293*18c2aff7Sartem * 294*18c2aff7Sartem * note: feature strings added should be all lower case, and spaces are 295*18c2aff7Sartem * discouraged 296*18c2aff7Sartem * 297*18c2aff7Sartem * (see psarc/1995/138 for more info) 298*18c2aff7Sartem */ 299*18c2aff7Sartem static char *volmgt_feat_list[] = { 300*18c2aff7Sartem #ifdef DIRECT_DEV_ACCESS_WORKING 301*18c2aff7Sartem "direct-dev-access", /* access through /dev co-exists */ 302*18c2aff7Sartem #endif 303*18c2aff7Sartem "floppy-summit-interfaces", /* volmgt_{acquire,release} */ 304*18c2aff7Sartem NULL 305*18c2aff7Sartem }; 306*18c2aff7Sartem 307*18c2aff7Sartem 308*18c2aff7Sartem int 309*18c2aff7Sartem volmgt_feature_enabled(char *feat_str) 310*18c2aff7Sartem { 311*18c2aff7Sartem return (0); 312*18c2aff7Sartem } 313*18c2aff7Sartem /* 314*18c2aff7Sartem * arc approved interface 315*18c2aff7Sartem * - can not be modified without approval from an arc 316*18c2aff7Sartem * 317*18c2aff7Sartem * committment level: 318*18c2aff7Sartem * uncommitted 319*18c2aff7Sartem * 320*18c2aff7Sartem * description: 321*18c2aff7Sartem * volmgt_acquire: try to acquire the volmgt advisory device reservation 322*18c2aff7Sartem * for a specific device. 323*18c2aff7Sartem * 324*18c2aff7Sartem * arguments: 325*18c2aff7Sartem * dev - a device name to attempt reserving. This string can be: 326*18c2aff7Sartem * - a full path name to a device 327*18c2aff7Sartem * - a symbolic device name (e.g. floppy0) 328*18c2aff7Sartem * 329*18c2aff7Sartem * id - a reservation string that hopefully describes the application 330*18c2aff7Sartem * making this reservation. 331*18c2aff7Sartem * 332*18c2aff7Sartem * pid - a pointer to a pid_t type. If this argument is not NULL 333*18c2aff7Sartem * and the requested device is already reserved, the process 334*18c2aff7Sartem * id of the reservation owner will be returned in this 335*18c2aff7Sartem * location. 336*18c2aff7Sartem * 337*18c2aff7Sartem * ovr - an override indicator. If set to non-zero, the caller requests 338*18c2aff7Sartem * that this reservation be made unconditionally. 339*18c2aff7Sartem * 340*18c2aff7Sartem * err - the address of a pointer to a string which is to receive the 341*18c2aff7Sartem * id argument used when the current device was reserved. This 342*18c2aff7Sartem * is only used when the current reservation attempt fails due 343*18c2aff7Sartem * to an already existing reservation for this device. 344*18c2aff7Sartem * 345*18c2aff7Sartem * return value(s): 346*18c2aff7Sartem * A non-zero indicator if successful. 347*18c2aff7Sartem * 348*18c2aff7Sartem * A zero indicator if unsuccessful. If errno is EBUSY, then the err 349*18c2aff7Sartem * argument will be set to point to the string that the process currently 350*18c2aff7Sartem * holding the reservation supplied when reserving the device. It is up 351*18c2aff7Sartem * to the caller to release the storage occupied by the string via 352*18c2aff7Sartem * free(3C) when no longer needed. 353*18c2aff7Sartem * 354*18c2aff7Sartem * preconditions: 355*18c2aff7Sartem * none 356*18c2aff7Sartem */ 357*18c2aff7Sartem /* ARGSUSED */ 358*18c2aff7Sartem int 359*18c2aff7Sartem volmgt_acquire(char *dev, char *id, int ovr, char **err, pid_t *pidp) 360*18c2aff7Sartem { 361*18c2aff7Sartem return (0); 362*18c2aff7Sartem } 363*18c2aff7Sartem 364*18c2aff7Sartem 365*18c2aff7Sartem /* 366*18c2aff7Sartem * arc approved interface 367*18c2aff7Sartem * - can not be modified without approval from an arc 368*18c2aff7Sartem * 369*18c2aff7Sartem * committment level: 370*18c2aff7Sartem * uncommitted 371*18c2aff7Sartem * 372*18c2aff7Sartem * description: 373*18c2aff7Sartem * volmgt_release: try to release the volmgt advisory device reservation 374*18c2aff7Sartem * for a specific device. 375*18c2aff7Sartem * 376*18c2aff7Sartem * arguments: 377*18c2aff7Sartem * dev - a device name to attempt reserving. This string can be: 378*18c2aff7Sartem * - a full path name to a device 379*18c2aff7Sartem * - a symbolic device name (e.g. floppy0) 380*18c2aff7Sartem * 381*18c2aff7Sartem * return value(s): 382*18c2aff7Sartem * A non-zero indicator if successful 383*18c2aff7Sartem * A zero indicator if unsuccessful 384*18c2aff7Sartem * 385*18c2aff7Sartem * preconditions: 386*18c2aff7Sartem * none 387*18c2aff7Sartem */ 388*18c2aff7Sartem int 389*18c2aff7Sartem volmgt_release(char *dev) 390*18c2aff7Sartem { 391*18c2aff7Sartem return (0); 392*18c2aff7Sartem } 393*18c2aff7Sartem 394*18c2aff7Sartem 395*18c2aff7Sartem /* 396*18c2aff7Sartem * returns the "value" of the attribute. 397*18c2aff7Sartem * If the attribute is boolean and is TRUE, 398*18c2aff7Sartem * "true" is returned. If the boolean is 399*18c2aff7Sartem * FALSE, NULL is returned. If the attribute 400*18c2aff7Sartem * doesn't exist, NULL is returned. The pointer 401*18c2aff7Sartem * returned by media_getattr has been malloc'd and 402*18c2aff7Sartem * it is the callers responsibility to free it. 403*18c2aff7Sartem */ 404*18c2aff7Sartem /* 405*18c2aff7Sartem * arc approved interface 406*18c2aff7Sartem * - can not be modified without approval from an arc 407*18c2aff7Sartem * 408*18c2aff7Sartem * committment level: 409*18c2aff7Sartem * public 410*18c2aff7Sartem * 411*18c2aff7Sartem * description: 412*18c2aff7Sartem * media_getattr: returns the value for an attribute for a piece of 413*18c2aff7Sartem * removable media. 414*18c2aff7Sartem * 415*18c2aff7Sartem * arguments: 416*18c2aff7Sartem * path - Path to the media in /vol. Can be the block or character 417*18c2aff7Sartem * device. 418*18c2aff7Sartem * 419*18c2aff7Sartem * attr - name of the attribute. 420*18c2aff7Sartem * 421*18c2aff7Sartem * return value(s): 422*18c2aff7Sartem * returns NULL or a pointer to a string that contains the value for 423*18c2aff7Sartem * the requested attribute. 424*18c2aff7Sartem * 425*18c2aff7Sartem * NULL can mean: 426*18c2aff7Sartem * - the media doesn't exist 427*18c2aff7Sartem * - there is no more space for malloc(3) 428*18c2aff7Sartem * - the attribute doesn't exist for the named media 429*18c2aff7Sartem * - the attribute is a boolean and is FALSE 430*18c2aff7Sartem * 431*18c2aff7Sartem * the pointer to the string must be free'd with free(3). 432*18c2aff7Sartem * 433*18c2aff7Sartem * preconditions: 434*18c2aff7Sartem * volume management (vold) must be running. 435*18c2aff7Sartem */ 436*18c2aff7Sartem /* ARGSUSED */ 437*18c2aff7Sartem char * 438*18c2aff7Sartem media_getattr(char *vol_path, char *attr) 439*18c2aff7Sartem { 440*18c2aff7Sartem return (NULL); 441*18c2aff7Sartem } 442*18c2aff7Sartem 443*18c2aff7Sartem 444*18c2aff7Sartem /* 445*18c2aff7Sartem * sets the attribute "attr" to value "value". 446*18c2aff7Sartem * 447*18c2aff7Sartem * If value == "" the flag is 448*18c2aff7Sartem * considered to be a TRUE boolean. 449*18c2aff7Sartem * 450*18c2aff7Sartem * If value == 0, it is considered to be a FALSE boolean. 451*18c2aff7Sartem * returns TRUE on success, FALSE on failure. 452*18c2aff7Sartem * 453*18c2aff7Sartem * Can fail for reasons of permission, or if you 454*18c2aff7Sartem * write a read-only attribute. 455*18c2aff7Sartem */ 456*18c2aff7Sartem 457*18c2aff7Sartem /* 458*18c2aff7Sartem * arc approved interface 459*18c2aff7Sartem * - can not be modified without approval from an arc 460*18c2aff7Sartem * 461*18c2aff7Sartem * committment level: 462*18c2aff7Sartem * public 463*18c2aff7Sartem * 464*18c2aff7Sartem * description: 465*18c2aff7Sartem * media_setattr: set an attribute for a piece of media to a 466*18c2aff7Sartem * particular value. 467*18c2aff7Sartem * 468*18c2aff7Sartem * arguments: 469*18c2aff7Sartem * path - Path to the media in /vol. Can be the block or character 470*18c2aff7Sartem * device. 471*18c2aff7Sartem * 472*18c2aff7Sartem * attr - name of the attribute. 473*18c2aff7Sartem * 474*18c2aff7Sartem * value - value of the attribute. If value == "", the flag is 475*18c2aff7Sartem * considered to be a boolean that is TRUE. If value == 0, it 476*18c2aff7Sartem * is considered to be a FALSE boolean. 477*18c2aff7Sartem * 478*18c2aff7Sartem * return value(s): 479*18c2aff7Sartem * TRUE on success, FALSE for failure. 480*18c2aff7Sartem * 481*18c2aff7Sartem * Can fail because: 482*18c2aff7Sartem * - don't have permission to set the attribute because caller 483*18c2aff7Sartem * is not the owner of the media and attribute is a "system" 484*18c2aff7Sartem * attribute. 485*18c2aff7Sartem * 486*18c2aff7Sartem * - don't have permission to set the attribute because the 487*18c2aff7Sartem * attribute is a "system" attribute and is read-only. 488*18c2aff7Sartem * 489*18c2aff7Sartem * preconditions: 490*18c2aff7Sartem * volume management must be running. 491*18c2aff7Sartem */ 492*18c2aff7Sartem /* ARGSUSED */ 493*18c2aff7Sartem int 494*18c2aff7Sartem media_setattr(char *vol_path, char *attr, char *value) 495*18c2aff7Sartem { 496*18c2aff7Sartem return (FALSE); 497*18c2aff7Sartem } 498*18c2aff7Sartem 499*18c2aff7Sartem 500*18c2aff7Sartem /* 501*18c2aff7Sartem * Returns the "id" of a volume. If the returned value 502*18c2aff7Sartem * & VOLID_TMP, the volume is temporary and this value 503*18c2aff7Sartem * cannot be relied upon across reboots. 504*18c2aff7Sartem */ 505*18c2aff7Sartem /* 506*18c2aff7Sartem * arc approved interface 507*18c2aff7Sartem * - can not be modified without approval from an arc 508*18c2aff7Sartem * 509*18c2aff7Sartem * committment level: 510*18c2aff7Sartem * public 511*18c2aff7Sartem * 512*18c2aff7Sartem * description: 513*18c2aff7Sartem * media_getid: return the "id" of a piece of media. 514*18c2aff7Sartem * 515*18c2aff7Sartem * arguments: 516*18c2aff7Sartem * path - Path to the media in /vol. Can be the block or character 517*18c2aff7Sartem * device. 518*18c2aff7Sartem * return value(s): 519*18c2aff7Sartem * returns a u_longlong_t that is the "id" of the volume. 520*18c2aff7Sartem * 521*18c2aff7Sartem * preconditions: 522*18c2aff7Sartem * volume management must be running. 523*18c2aff7Sartem */ 524*18c2aff7Sartem u_longlong_t 525*18c2aff7Sartem media_getid(char *vol_path) 526*18c2aff7Sartem { 527*18c2aff7Sartem return (0); 528*18c2aff7Sartem } 529*18c2aff7Sartem /* 530*18c2aff7Sartem * arc approved interface (pending) 531*18c2aff7Sartem * - can not be modified without approval from an arc 532*18c2aff7Sartem * 533*18c2aff7Sartem * committment level: 534*18c2aff7Sartem * public 535*18c2aff7Sartem * 536*18c2aff7Sartem * description: 537*18c2aff7Sartem * media_findname: try to come up with the character device when 538*18c2aff7Sartem * provided with a starting point. This interface provides the 539*18c2aff7Sartem * application programmer to provide "user friendly" names and 540*18c2aff7Sartem * easily determine the "/vol" name. 541*18c2aff7Sartem * 542*18c2aff7Sartem * arguments: 543*18c2aff7Sartem * start - a string describing a device. This string can be: 544*18c2aff7Sartem * - a full path name to a device (insures it's a 545*18c2aff7Sartem * character device by using getfullrawname()). 546*18c2aff7Sartem * - a full path name to a volume management media name 547*18c2aff7Sartem * with partitions (will return the lowest numbered 548*18c2aff7Sartem * raw partition. 549*18c2aff7Sartem * - the name of a piece of media (e.g. "fred"). 550*18c2aff7Sartem * - a symbolic device name (e.g. floppy0, cdrom0, etc) 551*18c2aff7Sartem * - a name like "floppy" or "cdrom". Will pick the lowest 552*18c2aff7Sartem * numbered device with media in it. 553*18c2aff7Sartem * 554*18c2aff7Sartem * return value(s): 555*18c2aff7Sartem * A pointer to a string that contains the character device 556*18c2aff7Sartem * most appropriate to the "start" argument. 557*18c2aff7Sartem * 558*18c2aff7Sartem * NULL indicates that we were unable to find media based on "start". 559*18c2aff7Sartem * 560*18c2aff7Sartem * The string must be free(3)'d. 561*18c2aff7Sartem * 562*18c2aff7Sartem * preconditions: 563*18c2aff7Sartem * none. 564*18c2aff7Sartem */ 565*18c2aff7Sartem /* ARGSUSED */ 566*18c2aff7Sartem char * 567*18c2aff7Sartem media_findname(char *start) 568*18c2aff7Sartem { 569*18c2aff7Sartem /* XXX can use HAL nicknames here */ 570*18c2aff7Sartem return (NULL); 571*18c2aff7Sartem } 572*18c2aff7Sartem 573*18c2aff7Sartem struct alias { 574*18c2aff7Sartem char *alias; 575*18c2aff7Sartem char *name; 576*18c2aff7Sartem }; 577*18c2aff7Sartem 578*18c2aff7Sartem /* 579*18c2aff7Sartem * "old" aliases -- used to be used when vold wasn't running 580*18c2aff7Sartem */ 581*18c2aff7Sartem static struct alias device_aliases[] = { 582*18c2aff7Sartem { "fd", "/dev/rdiskette" }, 583*18c2aff7Sartem { "fd0", "/dev/rdiskette" }, 584*18c2aff7Sartem { "fd1", "/dev/rdiskette1" }, 585*18c2aff7Sartem { "diskette", "/dev/rdiskette" }, 586*18c2aff7Sartem { "diskette0", "/dev/rdiskette0" }, 587*18c2aff7Sartem { "diskette1", "/dev/rdiskette1" }, 588*18c2aff7Sartem { "rdiskette", "/dev/rdiskette" }, 589*18c2aff7Sartem { "rdiskette0", "/dev/rdiskette0" }, 590*18c2aff7Sartem { "rdiskette1", "/dev/rdiskette1" }, 591*18c2aff7Sartem { "floppy", "/dev/rdiskette" }, 592*18c2aff7Sartem { "floppy0", "/dev/rdiskette0" }, 593*18c2aff7Sartem { "floppy1", "/dev/rdiskette1" }, 594*18c2aff7Sartem { "cd", "cdrom0" }, 595*18c2aff7Sartem { "cd0", "cdrom0" }, 596*18c2aff7Sartem { "cd1", "cdrom1" }, 597*18c2aff7Sartem { NULL, NULL } 598*18c2aff7Sartem }; 599*18c2aff7Sartem 600*18c2aff7Sartem /* 601*18c2aff7Sartem * This is an ON Consolidation Private interface. 602*18c2aff7Sartem */ 603*18c2aff7Sartem /* ARGSUSED */ 604*18c2aff7Sartem char * 605*18c2aff7Sartem _media_oldaliases(char *start) 606*18c2aff7Sartem { 607*18c2aff7Sartem struct alias *s; 608*18c2aff7Sartem char *p; 609*18c2aff7Sartem char *res = NULL; 610*18c2aff7Sartem 611*18c2aff7Sartem for (s = device_aliases; s->alias != NULL; s++) { 612*18c2aff7Sartem if (strcmp(start, s->alias) == 0) { 613*18c2aff7Sartem res = strdup(s->name); 614*18c2aff7Sartem break; 615*18c2aff7Sartem } 616*18c2aff7Sartem } 617*18c2aff7Sartem 618*18c2aff7Sartem return (res); 619*18c2aff7Sartem } 620*18c2aff7Sartem 621*18c2aff7Sartem 622*18c2aff7Sartem /* 623*18c2aff7Sartem * This is an ON Consolidation Private interface. 624*18c2aff7Sartem * 625*18c2aff7Sartem * Print out the aliases available to the program user. Changes 626*18c2aff7Sartem * depending in whether volume management is running. 627*18c2aff7Sartem */ 628*18c2aff7Sartem void 629*18c2aff7Sartem _media_printaliases(void) 630*18c2aff7Sartem { 631*18c2aff7Sartem } 632