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 */
29struct 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
50struct config_tree;
51struct archive_params;
52struct backup_params;
53
54/* FIXME Split into tool & library contexts */
55/* command-instance-related variables needed by library */
56struct 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 */
106struct cmd_context *create_toolcontext(unsigned is_long_lived,
107				       const char *system_dir);
108void destroy_toolcontext(struct cmd_context *cmd);
109int refresh_toolcontext(struct cmd_context *cmd);
110int refresh_filters(struct cmd_context *cmd);
111int config_files_changed(struct cmd_context *cmd);
112int init_lvmcache_orphans(struct cmd_context *cmd);
113
114#endif
115