4 * Copyright (c) 1997-2009 Erez Zadok
5 * Copyright (c) 1989 Jan-Simon Pendry
6 * Copyright (c) 1989 Imperial College of Science, Technology & Medicine
7 * Copyright (c) 1989 The Regents of the University of California.
10 * This code is derived from software contributed to Berkeley by
11 * Jan-Simon Pendry at Imperial College, London.
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 * 3. All advertising materials mentioning features or use of this software
22 * must display the following acknowledgment:
23 * This product includes software developed by the University of
24 * California, Berkeley and its contributors.
25 * 4. Neither the name of the University nor the names of its contributors
26 * may be used to endorse or promote products derived from this software
27 * without specific prior written permission.
29 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
42 * File: am-utils/fsinfo/fsi_gram.y
49 #endif /* HAVE_CONFIG_H */
54 extern qelem
*list_of_hosts
, *list_of_automounts
;
100 %type
<q
> automount_tree
102 %type
<m
> dir_tree_info
103 %type
<d
> filesystem fs_info_list
104 %type
<h
> host host_attr host_attr_list
105 %type
<q
> list_of_hosts list_of_filesystems list_of_mounts dir_tree
106 %type
<f
> localinfo_list
107 %type
<s
> opt_auto_opts
116 { if
($2) ins_que
((qelem
*) $2, list_of_hosts
->q_back
);
119 | list_of_hosts automount
120 { if
($2) ins_que
((qelem
*) $2, list_of_automounts
->q_back
);
130 tHOST host_attr list_of_filesystems list_of_mounts
131 { $$
= $2; $$
->h_disk_fs
= $3; $$
->h_mount
= $4; }
133 |
error tHOST host_attr list_of_filesystems list_of_mounts
134 { $$
= $3; $$
->h_disk_fs
= $4; $$
->h_mount
= $5; }
140 { $$
= new_host
(); set_host
($$
, HF_HOST
, $1); }
142 |
'{' host_attr_list
'}' tSTR
143 { $$
= $2; set_host
($$
, HF_HOST
, $4); }
151 | host_attr_list tNETIF tSTR
'{' ether_attr
'}'
154 $$
= $1; set_host
($$
, HF_ETHER
, (char *) $5); }
157 | host_attr_list tCONFIG tSTR
158 { $$
= $1; set_host
($$
, HF_CONFIG
, $3); }
160 | host_attr_list tARCH
'=' tSTR
161 { $$
= $1; set_host
($$
, HF_ARCH
, $4); }
163 | host_attr_list tOS
'=' tSTR
164 { $$
= $1; set_host
($$
, HF_OS
, $4); }
166 | host_attr_list tCLUSTER
'=' tSTR
167 { $$
= $1; set_host
($$
, HF_CLUSTER
, $4); }
169 | host_attr_list
error '=' tSTR
170 { yyerror("unknown host attribute"); }
175 { $$
= new_ether_if
(); }
177 | ether_attr tINADDR
'=' tSTR
178 { $$
= $1; set_ether_if
($$
, EF_INADDR
, $4); }
179 | ether_attr tNETMASK
'=' tSTR
180 { $$
= $1; set_ether_if
($$
, EF_NETMASK
, $4); }
181 | ether_attr tHWADDR
'=' tSTR
182 { $$
= $1; set_ether_if
($$
, EF_HWADDR
, $4); }
186 * A new automount tree:
188 * automount /mountpoint { ... }
191 tAUTOMOUNT opt_auto_opts automount_tree
193 $$
= new_auto_tree
($2, $3);
211 list_of_filesystems
:
215 | list_of_filesystems filesystem
221 ins_que
(&$2->d_q
, $$
->q_back
);
231 * fs /dev/whatever { ... }
234 tFS tSTR
'{' fs_info_list
'}'
235 { $4->d_dev
= $2; $$
= $4; }
238 { $$
= (disk_fs
*) NULL
; }
242 * Per-filesystem information:
244 * fstype - the type of the filesystem (4.2, nfs, swap, export)
245 * opts - the mount options ("rw,grpid")
246 * passno - fsck pass number
247 * freq - dump frequency
248 * dumpset - tape set for filesystem dumps
249 * mount - where to mount this filesystem
254 { $$
= new_disk_fs
(); }
256 | fs_info_list tFSTYPE
'=' tSTR
257 { $$
= $1; set_disk_fs
($$
, DF_FSTYPE
, $4); }
259 | fs_info_list tOPTS
'=' tSTR
260 { $$
= $1; set_disk_fs
($$
, DF_OPTS
, $4); }
262 | fs_info_list tPASSNO
'=' tSTR
263 { $$
= $1; set_disk_fs
($$
, DF_PASSNO
, $4); }
265 | fs_info_list tFREQ
'=' tSTR
266 { $$
= $1; set_disk_fs
($$
, DF_FREQ
, $4); }
268 | fs_info_list tMOUNT dir_tree
269 { $$
= $1; set_disk_fs
($$
, DF_MOUNT
, (char *) $3); }
271 | fs_info_list tDUMPSET
'=' tSTR
272 { $$
= $1; set_disk_fs
($$
, DF_DUMPSET
, $4); }
274 | fs_info_list tLOG
'=' tSTR
275 { $$
= $1; set_disk_fs
($$
, DF_LOG
, $4); }
277 | fs_info_list
error '=' tSTR
278 { yyerror("unknown filesystem attribute"); }
284 * name = "volname" name is a reference to volname
285 * name -> "string" name is a link to "string"
286 * name nfsalias "string" name is a link to "string", string parsed as NFS
288 * name { ... } name is an automount tree
294 | automount_tree tSTR opt_auto_opts
'=' tSTR
295 { automount
*a
= new_automount
($2);
302 ins_que
(&a
->a_q
, $$
->q_back
);
304 | automount_tree tSTR opt_auto_opts tNFSEQ tSTR
305 { automount
*a
= new_automount
($2);
306 a
->a_hardwiredfs
= $5;
312 ins_que
(&a
->a_q
, $$
->q_back
);
315 | automount_tree tSTR tEQ tSTR
316 { automount
*a
= new_automount
($2);
322 ins_que
(&a
->a_q
, $$
->q_back
);
325 | automount_tree tSTR opt_auto_opts
'{' automount_tree
'}'
326 { automount
*a
= new_automount
($2);
333 ins_que
(&a
->a_q
, $$
->q_back
);
341 | dir_tree tSTR
'{' dir_tree_info dir_tree
'}'
344 if
($2[0] != '/' && $2[1] && strchr
($2+1, '/'))
345 yyerror("not allowed '/' in a directory name");
350 ins_que
(&$4->m_q
, $$
->q_back
);
356 { $$
= new_mount
(); }
358 | dir_tree_info tEXPORTFS tSTR
359 { $$
= $1; set_mount
($$
, DM_EXPORTFS
, $3); }
361 | dir_tree_info tVOLNAME tSTR
362 { $$
= $1; set_mount
($$
, DM_VOLNAME
, $3); }
364 | dir_tree_info tSEL tSTR
365 { $$
= $1; set_mount
($$
, DM_SEL
, $3); }
367 | dir_tree_info
error '=' tSTR
368 { yyerror("unknown directory attribute"); }
372 * Additional mounts on a host
374 * mount "volname" ...
380 | list_of_mounts tMOUNT tSTR localinfo_list
381 { set_fsmount
($4, FM_VOLNAME
, $3);
386 ins_que
(&$4->f_q
, $$
->q_back
);
393 * from "hostname" - obtain the object from the named host
394 * as "string" - where to mount, if different from the volname
395 * opts "string" - mount options
396 * fstype "type" - type of filesystem mount, if not nfs
397 * direct - mount entry, no need to create ad-hoc hosts file
401 { $$
= new_fsmount
(); }
403 | localinfo_list tDIRECT
404 { $$
= $1; set_fsmount
($$
, FM_DIRECT
, ""); }
406 | localinfo_list tAS tSTR
407 { $$
= $1; set_fsmount
($$
, FM_LOCALNAME
, $3); }
409 | localinfo_list tFROM tSTR
410 { $$
= $1; set_fsmount
($$
, FM_FROM
, $3); }
412 | localinfo_list tFSTYPE tSTR
413 { $$
= $1; set_fsmount
($$
, FM_FSTYPE
, $3); }
415 | localinfo_list tOPTS tSTR
416 { $$
= $1; set_fsmount
($$
, FM_OPTS
, $3); }
418 | localinfo_list
error '=' tSTR
419 { yyerror("unknown mount attribute"); }