1 /*	$NetBSD: toolcontext.h,v 1.1.1.3 2009/12/02 00:26:26 haad Exp $	*/
2 
3 /*
4  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
5  * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
6  *
7  * This file is part of LVM2.
8  *
9  * This copyrighted material is made available to anyone wishing to use,
10  * modify, copy, or redistribute it subject to the terms and conditions
11  * of the GNU Lesser General Public License v.2.1.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program; if not, write to the Free Software Foundation,
15  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16  */
17 
18 #ifndef _LVM_TOOLCONTEXT_H
19 #define _LVM_TOOLCONTEXT_H
20 
21 #include "dev-cache.h"
22 
23 #include <stdio.h>
24 #include <limits.h>
25 
26 /*
27  * Config options that can be changed while commands are processed
28  */
29 struct config_info {
30 	int debug;
31 	int verbose;
32 	int test;
33 	int syslog;
34 	int activation;
35 	int suffix;
36 	int archive;		/* should we archive ? */
37 	int backup;		/* should we backup ? */
38 	int read_ahead;		/* DM_READ_AHEAD_NONE or _AUTO */
39 	int udev_sync;
40 	int cache_vgmetadata;
41 	const char *msg_prefix;
42 	struct format_type *fmt;
43 	uint64_t unit_factor;
44 	int cmd_name;		/* Show command name? */
45 	mode_t umask;
46 	char unit_type;
47 	char _padding[1];
48 };
49 
50 struct config_tree;
51 struct archive_params;
52 struct backup_params;
53 
54 /* FIXME Split into tool & library contexts */
55 /* command-instance-related variables needed by library */
56 struct cmd_context {
57 	struct dm_pool *libmem;	/* For permanent config data */
58 	struct dm_pool *mem;	/* Transient: Cleared between each command */
59 
60 	const struct format_type *fmt;	/* Current format to use by default */
61 	struct format_type *fmt_backup;	/* Format to use for backups */
62 
63 	struct dm_list formats;	/* Available formats */
64 	struct dm_list segtypes;	/* Available segment types */
65 	const char *hostname;
66 	const char *kernel_vsn;
67 
68 	unsigned rand_seed;
69 	const char *cmd_line;
70 	struct command *command;
71 	char **argv;
72 	unsigned is_long_lived:1;	/* Optimises persistent_filter handling */
73 	unsigned handles_missing_pvs:1;
74 	unsigned handles_unknown_segments:1;
75 	unsigned partial_activation:1;
76 	unsigned si_unit_consistency:1;
77 
78 	struct dev_filter *filter;
79 	int dump_filter;	/* Dump filter when exiting? */
80 
81 	struct dm_list config_files;
82 	int config_valid;
83 	struct config_tree *cft;
84 	struct config_tree *cft_override;
85 	struct config_info default_settings;
86 	struct config_info current_settings;
87 
88 	struct archive_params *archive_params;
89 	struct backup_params *backup_params;
90 	const char *stripe_filler;
91 
92 	/* List of defined tags */
93 	struct dm_list tags;
94 	int hosttags;
95 
96 	char system_dir[PATH_MAX];
97 	char dev_dir[PATH_MAX];
98 	char proc_dir[PATH_MAX];
99 	char sysfs_dir[PATH_MAX];
100 };
101 
102 /*
103  * system_dir may be NULL to use the default value.
104  * The environment variable LVM_SYSTEM_DIR always takes precedence.
105  */
106 struct cmd_context *create_toolcontext(unsigned is_long_lived,
107 				       const char *system_dir);
108 void destroy_toolcontext(struct cmd_context *cmd);
109 int refresh_toolcontext(struct cmd_context *cmd);
110 int refresh_filters(struct cmd_context *cmd);
111 int config_files_changed(struct cmd_context *cmd);
112 int init_lvmcache_orphans(struct cmd_context *cmd);
113 
114 #endif
115