]> granicus.if.org Git - sysstat/blob - ioconf.h
First use of git system. Based on a complete sysstat 9.1.5 version.
[sysstat] / ioconf.h
1 /*
2  * ioconf: ioconf configuration file handling code
3  * Original code (C) 2004 by Red Hat (Charlie Bennett <ccb@redhat.com>)
4  *
5  * Modified and maintained by Sebastien GODARD (sysstat <at> orange.fr)
6  */
7
8 #ifndef _IOCONF_H
9 #define _IOCONF_H
10
11 #include "sysconfig.h"
12
13 #define IOC_NAMELEN     31
14 #define IOC_DESCLEN     63
15 #define IOC_DEVLEN      47
16 #define IOC_MAXMINOR    2047
17 #define IOC_LINESIZ     255
18 #define IOC_PARTLEN     7
19 #define IOC_FMTLEN      15
20
21 #ifndef MAX_BLKDEV
22 #define MAX_BLKDEV      255
23 #endif
24
25 #define K_NODEV "nodev"
26
27 #define IS_WHOLE(maj,min)       ((min % ioconf[maj]->blkp->pcount) == 0)
28
29 /*
30  * When is C going to get templates?
31  */
32 #define IOC_ALLOC(P,TYPE,SIZE)                  \
33      do {                                       \
34          if (P == NULL) {                       \
35               P = (TYPE *) malloc(SIZE);        \
36               if (P == NULL) {                  \
37                    perror("malloc");            \
38                    ioc_free();                  \
39                    return 0;                    \
40               }                                 \
41          }                                      \
42      }                                          \
43      while (0)
44 /* That dummy while allows ';' on the line that invokes the macro... */
45
46
47 struct blk_config {
48         char name[IOC_NAMELEN + 1];     /* device basename */
49         char cfmt[IOC_FMTLEN + 1];      /* controller format string */
50         char dfmt[IOC_FMTLEN + 1];      /* disk format string */
51         char pfmt[IOC_FMTLEN + 1];      /* partition format string */
52         /* ctrlno is in the ioc_entry */
53         unsigned int ctrl_explicit;     /* use "cN" in name */
54         unsigned int dcount;            /* number of devices handled by this major */
55         unsigned int pcount;            /* partitions per device */
56         char desc[IOC_DESCLEN + 1];
57         /* disk info unit # conversion function */
58         char *(*cconv)(unsigned int);
59
60         /* extension properties (all this for initrd?) */
61         char ext_name[IOC_NAMELEN + 1];
62         unsigned int ext;               /* flag - this is an extension record */
63         unsigned int ext_minor;         /* which minor does this apply to */
64 };
65
66 #define BLK_CONFIG_SIZE (sizeof(struct blk_config))
67
68
69 struct ioc_entry {
70         int live;                       /* is this a Direct entry? */
71         unsigned int ctrlno;            /* controller number */
72         unsigned int basemajor;         /* Major number of the template */
73         char *desc;                     /* (dynamic) per-controller description */
74         struct blk_config *blkp;        /* the real info, may be a shared ref */
75 };
76
77 #define IOC_ENTRY_SIZE  (sizeof(struct ioc_entry))
78
79
80 extern int   ioc_iswhole(unsigned int, unsigned int);
81 extern char *ioc_name(unsigned int, unsigned int);
82 extern char *transform_devmapname(unsigned int, unsigned int);
83
84 #endif