1/*
2 * Copyright (c) 1997-2014 Erez Zadok
3 * Copyright (c) 2005 Daniel P. Ottavio
4 * Copyright (c) 1990 Jan-Simon Pendry
5 * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
6 * Copyright (c) 1990 The Regents of the University of California.
7 * All rights reserved.
8 *
9 * This code is derived from software contributed to Berkeley by
10 * Jan-Simon Pendry at Imperial College, London.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 * 3. Neither the name of the University nor the names of its contributors
21 *    may be used to endorse or promote products derived from this software
22 *    without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 *
37 * File: am-utils/amd/sun_map.h
38 *
39 */
40
41#ifndef _SUN_MAP_H
42#define _SUN_MAP_H
43
44/* host */
45struct sun_host {
46  qelem head;     /* link-list header */
47  char *name;     /* hostname */
48  int weight;     /* weight given to the host */
49};
50
51/* location */
52struct sun_location {
53  qelem head;                 /* link-list header */
54  char *path;                 /* server path */
55  struct sun_host *host_list; /* list of hosts */
56};
57
58/* sun mount option */
59struct sun_opt {
60  qelem head;    /* link-list header */
61  char *str;     /* option string */
62};
63
64/* mount point */
65struct sun_mountpt {
66  qelem head;                         /* link-list header */
67  char *path;                         /* optional mount point path */
68  char *fstype;                       /* filesystem type */
69  struct sun_opt      *opt_list;      /* list of option strings */
70  struct sun_location *location_list; /* list of 'struct s2a_location' */
71};
72
73/* automount entry */
74struct sun_entry {
75  qelem head;                         /* link-list header */
76  char *key;                          /* auto map key */
77  char *fstype;                       /* filesystem type */
78  struct sun_opt      *opt_list;      /* list of mount options */
79  struct sun_location *location_list; /* list of mount locations */
80  struct sun_mountpt  *mountpt_list;  /* list of mount points */
81};
82
83/*
84 * automount map file
85 *
86 * XXX: Only a place holder structure, not implemented yet.
87 */
88struct sun_map {
89  qelem head;                     /* link-list header */
90  char *path;                     /* directory path of the map file */
91  char *mount_dir;                /* top level mount point for this map */
92  int  lookup;                    /* lookup type i.e file, yp, program, etc. */
93  int  direct_bool;               /* set true if this map is a direct map */
94  struct sun_opt   *opt_list;     /* list of global map options */
95  struct sun_opt   *include_list; /* list of included map files  */
96  struct sun_entry *entry_list;   /* list of 'struct s2a_entry' */
97};
98
99/*
100 * master map file
101 *
102 * XXX: Only a place holder structure, not implemented yet.
103 */
104struct sun_mmap {
105  qelem head;                   /* link-list header */
106  struct sun_opt *include_list; /* list of included master maps */
107  struct sun_map *amap_list;    /* list of 'struct s2a_amap' */
108};
109
110struct sun_list {
111  qelem *first;
112  qelem *last;
113};
114
115
116/*
117 * EXTERNS
118 */
119extern char *sun_entry2amd(const char *, const char *);
120extern struct sun_entry *sun_map_parse_read(const char *);
121extern void sun_list_add(struct sun_list *, qelem *);
122
123#endif /* not _SUN_MAP_H */
124