1/*
2 * Copyright (c) 1997-2006 Erez Zadok
3 * Copyright (c) 1989 Jan-Simon Pendry
4 * Copyright (c) 1989 Imperial College of Science, Technology & Medicine
5 * Copyright (c) 1989 The Regents of the University of California.
6 * All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * Jan-Simon Pendry at Imperial College, London.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in the
18 *    documentation and/or other materials provided with the distribution.
19 * 3. All advertising materials mentioning features or use of this software
20 *    must display the following acknowledgment:
21 *      This product includes software developed by the University of
22 *      California, Berkeley and its contributors.
23 * 4. Neither the name of the University nor the names of its contributors
24 *    may be used to endorse or promote products derived from this software
25 *    without specific prior written permission.
26 *
27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 * SUCH DAMAGE.
38 *
39 *
40 * File: am-utils/fsinfo/fsi_data.h
41 *
42 */
43
44#ifndef _FSI_DATA_H
45#define _FSI_DATA_H
46
47typedef struct auto_tree auto_tree;
48typedef struct automount automount;
49typedef struct dict dict;
50typedef struct dict_data dict_data;
51typedef struct dict_ent dict_ent;
52typedef struct disk_fs disk_fs;
53typedef struct ether_if ether_if;
54typedef struct fsmount fsmount;
55typedef struct host host;
56typedef struct ioloc ioloc;
57typedef struct fsi_mount fsi_mount;
58
59
60/*
61 * Automount tree
62 */
63struct automount {
64  qelem a_q;
65  ioloc *a_ioloc;
66  char *a_name;			/* Automount key */
67  char *a_volname;		/* Equivalent volume to be referenced */
68  char *a_symlink;		/* Symlink representation */
69  char *a_opts;			/* opts for mounting */
70  char *a_hardwiredfs;		/* hack to bypass bogus fs definitions */
71  qelem *a_mount;		/* Tree representation */
72  dict_ent *a_mounted;
73};
74
75/*
76 * List of automount trees
77 */
78struct auto_tree {
79  qelem t_q;
80  ioloc *t_ioloc;
81  char *t_defaults;
82  qelem *t_mount;
83};
84
85/*
86 * A host
87 */
88struct host {
89  qelem q;
90  int h_mask;
91  ioloc *h_ioloc;
92  fsmount *h_netroot, *h_netswap;
93#define HF_HOST	0
94  char *h_hostname;	/* The full name of the host */
95  char *h_lochost;	/* The name of the host with local domains stripped */
96  char *h_hostpath;	/* The filesystem path to the host (cf
97			   compute_hostpath) */
98#define	HF_ETHER 1
99  qelem *h_ether;
100#define	HF_CONFIG 2
101  qelem *h_config;
102#define	HF_ARCH 3
103  char *h_arch;
104#define	HF_CLUSTER 4
105  char *h_cluster;
106#define	HF_OS 5
107  char *h_os;
108  qelem *h_disk_fs;
109  qelem *h_mount;
110};
111
112/*
113 * An ethernet interface
114 */
115struct ether_if {
116  qelem e_q;
117  int e_mask;
118  ioloc *e_ioloc;
119  char *e_if;
120#define	EF_INADDR 0
121  struct in_addr e_inaddr;
122#define	EF_NETMASK 1
123  u_long e_netmask;
124#define	EF_HWADDR 2
125  char *e_hwaddr;
126};
127
128/*
129 * Disk filesystem structure.
130 *
131 * If the DF_* numbers are changed
132 * disk_fs_strings in analyze.c will
133 * need updating.
134 */
135struct disk_fs {
136  qelem d_q;
137  int d_mask;
138  ioloc *d_ioloc;
139  host *d_host;
140  char *d_mountpt;
141  char *d_dev;
142#define	DF_FSTYPE	0
143  char *d_fstype;
144#define	DF_OPTS		1
145  char *d_opts;
146#define	DF_DUMPSET	2
147  char *d_dumpset;
148#define	DF_PASSNO	3
149  int d_passno;
150#define	DF_FREQ		4
151  int d_freq;
152#define	DF_MOUNT	5
153  qelem *d_mount;
154#define	DF_LOG		6
155  char *d_log;
156};
157
158#define	DF_REQUIRED	((1<<DF_FSTYPE)|(1<<DF_OPTS)|(1<<DF_PASSNO)|(1<<DF_MOUNT))
159
160/*
161 * A mount tree
162 */
163struct fsi_mount {
164  qelem m_q;
165  ioloc *m_ioloc;
166  int m_mask;
167#define	DM_VOLNAME	0
168  char *m_volname;
169#define	DM_EXPORTFS	1
170  char *m_exportfs;
171#define	DM_SEL		2
172  char *m_sel;
173  char *m_name;
174  int m_name_len;
175  fsi_mount *m_parent;
176  disk_fs *m_dk;
177  fsi_mount *m_exported;
178  qelem *m_mount;
179};
180
181/*
182 * Additional filesystem mounts
183 *
184 * If the FM_* numbers are changed
185 * disk_fs_strings in analyze.c will
186 * need updating.
187 */
188struct fsmount {
189  qelem f_q;
190  fsi_mount *f_ref;
191  ioloc *f_ioloc;
192  int f_mask;
193#define	FM_LOCALNAME	0
194  char *f_localname;
195#define	FM_VOLNAME	1
196  char *f_volname;
197#define	FM_FSTYPE	2
198  char *f_fstype;
199#define	FM_OPTS		3
200  char *f_opts;
201#define	FM_FROM		4
202  char *f_from;
203#define FM_DIRECT	5
204};
205
206#define	FM_REQUIRED	((1<<FM_VOLNAME)|(1<<FM_FSTYPE)|(1<<FM_OPTS)|(1<<FM_FROM)|(1<<FM_LOCALNAME))
207#define	FM_NETROOT	0x01
208#define	FM_NETSWAP	0x02
209#define	FM_NETBOOT	(FM_NETROOT|FM_NETSWAP)
210
211#define	DICTHASH	5
212struct dict_ent {
213  dict_ent *de_next;
214  char *de_key;
215  int de_count;
216  qelem de_q;
217};
218
219/*
220 * Dictionaries ...
221 */
222struct dict_data {
223  qelem dd_q;
224  char *dd_data;
225};
226
227struct dict {
228  dict_ent *de[DICTHASH];
229};
230
231/*
232 * Source text location for error reports
233 */
234struct ioloc {
235  int i_line;
236  char *i_file;
237};
238#endif /* not _FSI_DATA_H */
239