root/usr/src/head/devmgmt.h
/*
 * 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
 */
/*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/*        All Rights Reserved   */


#ifndef _DEVMGMT_H
#define _DEVMGMT_H

#ifdef  __cplusplus
extern "C" {
#endif

/*
 * devmgmt.h
 *
 * Contents:
 *    - Device Management definitions,
 *    - getvol() definitions
 */

/*
 * Device management definitions
 *      - Default pathnames (relative to installation point)
 *      - Environment variable namess
 *      - Standard field names in the device table
 *      - Flags
 *      - Miscellaneous definitions
 */


/*
 * Default pathnames (relative to the package installation
 * point) to the files used by Device Management:
 *
 *      DTAB_PATH       Device table
 *      DGRP_PATH       Device group table
 *      DVLK_PATH       Device reservation table
 */

#define DTAB_PATH                       "/etc/device.tab"
#define DGRP_PATH                       "/etc/dgroup.tab"
#define DVLK_PATH                       "/etc/devlkfile"


/*
 * Names of environment variables
 *
 *      OAM_DEVTAB      Name of variable that defines the pathname to
 *                      the device-table file
 *      OAM_DGROUP      Name of variable that defines the pathname to
 *                      the device-group table file
 *      OAM_DEVLKTAB    Name of variable that defines the pathname to
 *                      the device-reservation table file
 */

#define OAM_DEVTAB                      "OAM_DEVTAB"
#define OAM_DGROUP                      "OAM_DGROUP"
#define OAM_DEVLKTAB                    "OAM_DEVLKTAB"


/*
 * Standard field names in the device table
 */

#define DTAB_ALIAS                      "alias"
#define DTAB_CDEVICE                    "cdevice"
#define DTAB_BDEVICE                    "bdevice"
#define DTAB_PATHNAME                   "pathname"


/*
 * Flags:
 *      For getdev() and getdgrp():
 *              DTAB_ANDCRITERIA        Devices must meet all criteria
 *                                      instead of any of the criteria
 *              DTAB_EXCLUDEFLAG        The list of devices or device groups
 *                                      is the list that is to be excluded,
 *                                      not those to select from.
 *              DTAB_LISTALL            List all device groups, even those that
 *                                      have no valid members (getdgrp() only).
 */

#define DTAB_ANDCRITERIA                0x01
#define DTAB_EXCLUDEFLAG                0x02
#define DTAB_LISTALL                    0x04


/*
 * Miscellaneous Definitions
 *
 *      DTAB_MXALIASLN  Maximum alias length
 */

#define DTAB_MXALIASLN                  14

/*
 * Device Management Structure definitions
 *      reservdev       Reserved device description
 */

/*
 * struct reservdev
 *
 *      Structure describes a reserved device.
 *
 *  Elements:
 *      char   *devname         Alias of the reserved device
 *      pid_t   key             Key used to reserve the device
 */

struct reservdev {
        char   *devname;
        pid_t   key;
};

/*
 * Device Management Functions:
 *
 *      devattr()       Returns a device's attribute
 *      devreserv()     Reserves a device
 *      devfree()       Frees a reserved device
 *      reservdev()     Return list of reserved devices
 *      getdev()        Get devices that match criteria
 *      getdgrp()       Get device-groups containing devices
 *                      that match criteria
 *      listdev()       List attributes defined for a device
 *      listdgrp()      List members of a device-group
 */

        char                    *devattr(char *, char *);
        int                     devfree(int, char *);
        char                    **devreserv(int, char ***);
        char                    **getdev(char **, char **, int);
        char                    **getdgrp(char **, char **, int);
        char                    **listdev(char *);
        char                    **listdgrp(char *);
        struct reservdev        **reservdev(void);

/*
 * getvol() definitions
 */

#define DM_BATCH        0x0001
#define DM_ELABEL       0x0002
#define DM_FORMAT       0x0004
#define DM_FORMFS       0x0008
#define DM_WLABEL       0x0010
#define DM_OLABEL       0x0020

        int                     getvol(char *, char *, int, char *);

#ifdef  __cplusplus
}
#endif

#endif  /* _DEVMGMT_H */