devtab.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* 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 1997 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
#ifndef _DEVTAB_H
#define _DEVTAB_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* devtab.h
*
* This header file is local to the liboam component
* and should not contain any data that may need to
* be reference anywhere. The definitions here are used
* to reference the device tables and the device-group
* tables.
*/
/*
* Constant definitions
* NULL Manifest constant NULL (null-address)
* TRUE Boolean TRUE value
* FALSE Boolean FALSE value
* DTAB_BUFSIZ Initial buffersize for reading device table records
* DTAB_BUFINC Amount to increase device table record buffer
* DGRP_BUFSIZ Initial buffersize for reading devgrp table records
* DGRP_BUFINC Amount to increase device-group table record buffer
* XTND_MAXCNT Maximum extend count (may have insane tables)
* DTAB_ESCS Characters that are escaped in fields in the devtab
*/
#ifndef NULL
#define NULL (0)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#define DTAB_BUFSIZ 512
#define DTAB_BUFINC 512
#define DGRP_BUFSIZ 512
#define DGRP_BUFINC 512
#define XTND_MAXCNT 16
#define DTAB_ESCS ":\\\"\n"
/*
* oam_devtab File descriptor of the open device table
*/
extern FILE *oam_devtab;
extern FILE *oam_dgroup;
/*
* Structure definitions for device table records:
* devtabent Describes an entry in the device table
* dgrpent Describes an entry in the device-group table
* attrval Describes an attribute/value pair
*/
/*
* struct devtabent
*
* Describes an entry in the device table.
*
* entryno This record's entry number in the device table
* comment Comment flag, TRUE if record is a comment
* alias The device's alias
* cdevice A pathname to the inode describing the device as
* a character-special device
* bdevice A pathname to the inode describing the device as
* a block-special device
* pathname A pathname to the device (not char or blk special)
* attrstr The character-string containing the attributes
* attrlist The address of the first attribute description
*/
struct devtabent {
int entryno; /* Entry number of this record */
int comment; /* Comment flag */
char *alias; /* Alias of the device */
char *cdevice; /* Character device pathname */
char *bdevice; /* Block device pathname */
char *pathname; /* Vanilla pathname */
char *attrstr; /* String containing attributes */
struct attrval *attrlist; /* Addr of 1st attribute description */
};
/*
* struct attrval
*
* Describes an attribute-value pair
*
* char *attr Pointer to the name of the attribute
* char *val Pointer to the name of the value of the attr
* struct attrval *next Pointer to the next item in the list
*/
struct attrval {
char *attr; /* Attribute name */
char *val; /* Value of the attribute */
struct attrval *next; /* Next attrval in list */
};
/*
* Structure definitions for device-group records:
* struct dgrptabent Describes a record in the device-group table
* struct member Describes a member of a device group
*/
/*
* struct dgrptabent
* entryno The entry number of this record
* comment Comment flag, TRUE if record is a comment
* name The name of the device group
* memberspace The buffer containing the members of the
* device group
* membership Pointer to the head of the list of
* members in the group.
*/
struct dgrptabent {
int entryno; /* Entry number of this record */
int comment; /* TRUE if a comment record */
char *name; /* Device group name */
char *dataspace; /* Buffer containing membership */
struct member *membership; /* Ptr to top of membership list */
};
/*
* struct member
* name Member name (a device alias or pathname)
* next Ptr to next item in the list
*/
struct member {
char *name; /* Member name */
struct member *next; /* Next member in the list */
};
/*
* Global function and data definitions:
* _setdevtab() Rewinds the open device table
* _enddevtab() Closes the open device table
* _getdevtabent() Gets the next device table entry
* _freedevtabent() Frees space allocated to a device-table entry
* _getdevrec() Gets a specific device table entry
* _opendevtab() Open the device table
* _devtabpath() Get the pathname of the device table file
*
* _setdgrptab() Rewind the open device-group table
* _enddgrptab() Close the open device table
* _getdgrptabent() Get the next device-group table entry
* _freedgrptabent() Frees space alloced to a dev-grp table entry
* _getdgrprec() Gets a specific device-group table entry
* _opendgrptab() Open the device group table
* _dgrptabpath() Get the pathname of the device group table file
*
* _openlkfile() Open device lock file
* rsvtabpath() Get device lock file pathname
* _closelkfile() Close device lock file
*
* _validalias() Determine if a character-string is a valid alias
* unreserv() Remove a device reservation
*/
void _setdevtab(void);
void _enddevtab(void);
struct devtabent *_getdevtabent(void);
void _freedevtabent(struct devtabent *);
struct devtabent *_getdevrec(char *);
int _opendevtab(char *);
char *_devtabpath(void);
void _setdgrptab(void);
void _enddgrptab(void);
struct dgrptabent *_getdgrptabent(void);
void _freedgrptabent(struct dgrptabent *);
struct dgrptabent *_getdgrprec(char *);
int _opendgrptab(char *);
char *_dgrptabpath(void);
int _openlkfile(void);
char *_rsvtabpath(void);
int _closelkfile(void);
int _validalias(char *);
int unreserv(int, char *);
extern int _adddevtabrec(char *, char **);
extern int _moddevtabrec(char *, char **);
extern int _putdevtabrec(FILE *stream, struct devtabent *rec);
extern int _rmdevtabattrs(char *, char **, char ***);
extern int _rmdevtabrec(char *);
extern int _adddgrptabrec(char *dgrp, char **members);
extern int _putdgrptabrec(FILE *stream, struct dgrptabent *rec);
extern int _rmdgrpmems(char *dgrp, char **mems, char ***notfounds);
extern int _rmdgrptabrec(char *dgrp);
#ifdef __cplusplus
}
#endif
#endif /* _DEVTAB_H */