2 * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3 * Copyright (c) 1991-1998 University of Maryland at College Park
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation, and that the name of U.M. not be used in advertising or
11 * publicity pertaining to distribution of the software without specific,
12 * written prior permission. U.M. makes no representations about the
13 * suitability of this software for any purpose. It is provided "as is"
14 * without express or implied warranty.
16 * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
18 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Author: James da Silva, Systems Design and Analysis Group
24 * Computer Science Department
25 * University of Maryland at College Park
28 * $Id: driverio.h,v 1.35 2006/05/25 01:47:19 johnfranks Exp $
30 * driver-related helper functions
39 #include "server_util.h"
45 /* chunker process structure */
47 typedef struct chunker_s {
48 char *name; /* name of this chunker */
49 pid_t pid; /* its pid */
51 int fd; /* read/write */
53 event_handle_t *ev_read; /* read event handle */
54 struct dumper_s *dumper;
57 /* dumper process structure */
59 typedef struct dumper_s {
60 char *name; /* name of this dumper */
61 pid_t pid; /* its pid */
62 int busy, down; /* state */
63 int fd; /* read/write */
65 int output_port; /* output port */
66 event_handle_t *ev_read; /* read event handle */
67 disk_t *dp; /* disk currently being dumped */
71 /* holding disk reservation structure; this is built as a list parallel
72 * to the configuration's linked list of holding disks. */
74 typedef struct holdalloc_s {
75 struct holdalloc_s *next;
79 int allocated_dumpers;
80 off_t allocated_space;
83 typedef struct assignedhd_s {
90 /* schedule structure */
92 typedef struct sched_s {
96 int level, degr_level;
97 unsigned long est_time, degr_time;
98 off_t est_nsize, est_csize, est_size;
99 off_t degr_nsize, degr_csize, act_size;
100 off_t origsize, dumpsize;
101 time_t dumptime, tapetime;
102 char *dumpdate, *degr_dumpdate;
103 unsigned long est_kps, degr_kps;
104 char *destname; /* file/port name */
106 assignedhd_t **holdp;
113 #define sched(dp) ((sched_t *) (dp)->up)
116 GLOBAL dumper_t dmptable[MAX_DUMPERS];
117 GLOBAL chunker_t chktable[MAX_DUMPERS];
119 /* command/result tokens */
122 TAPER_STATE_DEFAULT = 0,
123 TAPER_STATE_DUMP_TO_TAPE = (1 << 0), // if taper is doing a dump to tape
124 TAPER_STATE_WAIT_FOR_TAPE = (1 << 1), // if taper wait for a tape, after a
126 TAPER_STATE_TAPE_STARTED = (1 << 2) // taper already started to write to
130 GLOBAL int taper, taper_busy;
131 GLOBAL int taper_sendresult;
132 GLOBAL char *taper_input_error;
133 GLOBAL char *taper_tape_error;
134 GLOBAL pid_t taper_pid;
135 GLOBAL int taper_result;
136 GLOBAL dumper_t *taper_dumper;
137 GLOBAL event_handle_t *taper_ev_read;
138 GLOBAL char *taper_first_label;
139 GLOBAL off_t taper_first_fileno;
140 GLOBAL TaperState taper_state;
141 GLOBAL off_t taper_written; // Number of kb already written to tape
144 void init_driverio(void);
145 void startup_tape_process(char *taper_program);
146 void startup_dump_process(dumper_t *dumper, char *dumper_program);
147 void startup_dump_processes(char *dumper_program, int inparallel, char *timestamp);
148 void startup_chunk_process(chunker_t *chunker, char *chunker_program);
150 disk_t *serial2disk(char *str);
151 void free_serial(char *str);
152 void free_serial_dp(disk_t *dp);
153 void check_unfree_serial(void);
154 char *disk2serial(disk_t *dp);
155 void update_info_dumper(disk_t *dp, off_t origsize, off_t dumpsize, time_t dumptime);
156 void update_info_taper(disk_t *dp, char *label, off_t filenum, int level);
157 void free_assignedhd(assignedhd_t **holdp);
158 #endif /* !DRIVERIO_H */