xref: /titanic_53/usr/src/lib/libvolmgt/common/volmgt.c (revision 18c2aff776a775d34a4c9893a4c72e0434d68e36)
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