/* * 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 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _STAT_DSR_H #define _STAT_DSR_H #pragma ident "%Z%%M% %I% %E% SMI" #ifdef __cplusplus extern "C" { #endif /* * Description of each device identified */ typedef struct list_of_disks { char *dtype; /* device type: sd, ssd, md, st, etc. */ int dnum; /* device number */ char *dsk; /* in form of cNtNdN */ char *dname; /* in form of /dev/dsk/cNtNdN */ char *devidstr; /* in form of "id1,sd@XXXX" */ uint_t flags; /* see SLICES_OK and PARTITIONS_OK above */ int devtype; /* disk, metadevice, tape */ uint_t seen; /* Used for diffing disk lists */ struct list_of_disks *next; /* link to next one */ } disk_list_t; /* * Description of each mount point currently existing on the system. */ typedef struct mnt_info { char *device_name; char *mount_point; char *devinfo; uint_t minor; struct mnt_info *next; } mnt_t; /* * A basic description of each device found * on the system by walking the device tree. * These entries are used to select the * relevent entries from the actual /dev * entries. */ typedef struct ldinfo { char *name; char *dtype; char *devidstr; int dnum; struct ldinfo *next; } ldinfo_t; /* * Optimization for lookup of kstats. * For each kstat prefix (e.g., 'sd') * found in a directory one of these * structures will be created. * * name: prefix of kstat name (e.g., 'ssd') * min: smallest number seen from kstat * name (e.g., 101 from 'sd101') * max: largest number seen from kstat * list_start: beginning of disk_list structures * for this kstat type in the main list for * this directory * list_end: end of entries for this kstat type * in this directory. */ typedef struct dev_name { char *name; uint_t min; uint_t max; disk_list_t *list_start; disk_list_t *list_end; struct dev_name *next; } dev_name_t; /* * Definition of a "type" of disk device. * Tied to the directory containing entries * for that device. Divides the list of * devices into localized chunks and allows * quick determination as to whether an entry * exists or whether we need to look at the * devices upon a state change. */ typedef struct dir_info { char *name; /* directory name */ time_t mtime; /* mod time */ disk_list_t *list; /* master list of devices */ dev_name_t *nf; /* lists per name */ uint_t skip_lookup; /* skip lookup if device */ /* does not have partitions */ char *dtype; /* Type of device */ char *trimstr; /* What do we prune */ char trimchr; /* Char denoting end */ /* of interesting data */ } dir_info_t; /* * The following are used to control treatment of kstat names * which fall beyond the number of disk partitions allowed on * the particular ISA. PARTITIONS_OK is set only on an Intel * system. */ #define SLICES_OK 1 #define PARTITIONS_OK 2 void do_mnttab(void); mnt_t *lookup_mntent_byname(char *); disk_list_t *lookup_ks_name(char *); char *lookup_nfs_name(char *, kstat_ctl_t *); #ifdef __cplusplus } #endif #endif /* _STAT_DSR_H */