2001-09-25 16:49:28 +04:00
/*
2004-03-30 23:35:44 +04:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2007-08-21 00:55:30 +04:00
* Copyright ( C ) 2004 - 2007 Red Hat , Inc . All rights reserved .
2001-09-25 16:49:28 +04:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2004-03-30 23:35:44 +04:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 23:35:44 +04:00
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
2001-09-25 16:49:28 +04:00
*/
2002-04-24 22:20:51 +04:00
# ifndef _LVM_TOOLS_H
# define _LVM_TOOLS_H
2001-09-25 16:49:28 +04:00
2002-11-18 17:04:08 +03:00
# define _GNU_SOURCE
2004-04-16 22:43:29 +04:00
# define _FILE_OFFSET_BITS 64
2002-11-18 17:04:08 +03:00
2010-06-15 15:00:44 +04:00
# include "configure.h"
2002-12-20 02:25:55 +03:00
# include <assert.h>
2010-06-15 15:00:44 +04:00
# include "libdevmapper.h"
2002-12-20 02:25:55 +03:00
2005-10-17 03:03:59 +04:00
# include "lvm-types.h"
2008-10-30 20:27:28 +03:00
# include "lvm-logging.h"
2002-11-18 17:04:08 +03:00
# include "activate.h"
2004-03-26 15:25:15 +03:00
# include "archiver.h"
2003-07-05 02:34:56 +04:00
# include "lvmcache.h"
2012-02-23 17:11:07 +04:00
# include "lvmetad.h"
2013-03-05 20:48:29 +04:00
# include "lvm-version.h"
2001-10-01 19:14:39 +04:00
# include "config.h"
2002-12-20 02:25:55 +03:00
# include "defaults.h"
2001-10-01 19:14:39 +04:00
# include "dev-cache.h"
# include "device.h"
# include "display.h"
2001-09-25 16:49:28 +04:00
# include "errors.h"
2001-10-01 23:36:06 +04:00
# include "filter.h"
2001-10-23 15:50:49 +04:00
# include "filter-composite.h"
2002-11-18 17:04:08 +03:00
# include "filter-persistent.h"
2001-10-23 15:50:49 +04:00
# include "filter-regex.h"
2007-07-18 19:38:58 +04:00
# include "metadata-exported.h"
2002-02-11 18:42:34 +03:00
# include "locking.h"
2005-10-17 21:56:27 +04:00
# include "lvm-exec.h"
2002-11-18 17:04:08 +03:00
# include "lvm-file.h"
# include "lvm-string.h"
2004-09-16 22:40:56 +04:00
# include "segtype.h"
2004-03-08 20:19:15 +03:00
# include "str_list.h"
2002-02-11 23:50:53 +03:00
# include "toolcontext.h"
2002-11-18 17:04:08 +03:00
# include "toollib.h"
2002-01-07 14:12:11 +03:00
2002-12-20 02:25:55 +03:00
# include <stdlib.h>
# include <unistd.h>
2002-11-18 17:04:08 +03:00
# include <ctype.h>
# include <limits.h>
2002-01-07 14:12:11 +03:00
# include <stdarg.h>
# include <sys/types.h>
2001-09-25 16:49:28 +04:00
# define CMD_LEN 256
# define MAX_ARGS 64
/* command functions */
2002-02-12 00:00:35 +03:00
typedef int ( * command_fn ) ( struct cmd_context * cmd , int argc , char * * argv ) ;
2001-09-25 16:49:28 +04:00
2002-02-11 23:50:53 +03:00
# define xx(a, b...) int a(struct cmd_context *cmd, int argc, char **argv);
2001-09-25 16:49:28 +04:00
# include "commands.h"
# undef xx
/* define the enums for the command line switches */
enum {
2007-08-21 23:46:36 +04:00
# define arg(a, b, c, d, e) a ,
2001-09-25 16:49:28 +04:00
# include "args.h"
2001-12-17 19:58:17 +03:00
# undef arg
2001-09-25 16:49:28 +04:00
} ;
2001-11-10 01:01:04 +03:00
typedef enum {
SIGN_NONE = 0 ,
SIGN_PLUS = 1 ,
SIGN_MINUS = 2
} sign_t ;
2001-12-17 19:58:17 +03:00
2006-09-26 13:35:43 +04:00
typedef enum {
PERCENT_NONE = 0 ,
PERCENT_VG ,
PERCENT_FREE ,
2007-09-21 01:39:08 +04:00
PERCENT_LV ,
2010-02-03 06:58:08 +03:00
PERCENT_PVS ,
PERCENT_ORIGIN
2010-11-30 14:53:31 +03:00
} percent_type_t ;
2006-09-26 13:35:43 +04:00
2010-11-11 20:29:05 +03:00
# define ARG_COUNTABLE 0x00000001 /* E.g. -vvvv */
# define ARG_GROUPABLE 0x00000002 /* E.g. --addtag */
2002-01-10 19:47:04 +03:00
2010-11-11 20:29:05 +03:00
struct arg_values {
2006-05-10 01:23:51 +04:00
unsigned count ;
2001-09-25 16:49:28 +04:00
char * value ;
2002-12-20 02:25:55 +03:00
int32_t i_value ;
uint32_t ui_value ;
2002-12-12 23:55:49 +03:00
int64_t i64_value ;
uint64_t ui64_value ;
2001-11-10 01:01:04 +03:00
sign_t sign ;
2010-11-30 14:53:31 +03:00
percent_type_t percent ;
2010-04-29 05:38:12 +04:00
/* void *ptr; // Currently not used. */
2001-09-25 16:49:28 +04:00
} ;
2010-11-11 20:29:05 +03:00
/* a global table of possible arguments */
struct arg_props {
const char short_arg ;
char _padding [ 7 ] ;
const char * long_arg ;
int ( * fn ) ( struct cmd_context * cmd , struct arg_values * av ) ;
uint32_t flags ;
} ;
struct arg_value_group_list {
struct dm_list list ;
struct arg_values arg_values [ 0 ] ;
} ;
2010-10-25 15:20:54 +04:00
# define CACHE_VGMETADATA 0x00000001
# define PERMITTED_READ_ONLY 0x00000002
2008-04-03 01:23:39 +04:00
2001-11-13 17:17:50 +03:00
/* a register of the lvm commands */
struct command {
2002-02-12 00:00:35 +03:00
const char * name ;
const char * desc ;
const char * usage ;
command_fn fn ;
2001-11-13 17:17:50 +03:00
2008-04-03 01:23:39 +04:00
unsigned flags ;
2002-02-12 00:00:35 +03:00
int num_args ;
int * valid_args ;
2001-11-13 17:17:50 +03:00
} ;
2001-09-25 16:49:28 +04:00
void usage ( const char * name ) ;
/* the argument verify/normalise functions */
2010-11-11 20:29:05 +03:00
int yes_no_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
2012-06-27 15:48:31 +04:00
int activation_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
2012-08-08 00:24:41 +04:00
int discards_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
2010-11-11 20:29:05 +03:00
int size_kb_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int size_mb_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int int_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int int_arg_with_sign ( struct cmd_context * cmd , struct arg_values * av ) ;
int int_arg_with_sign_and_percent ( struct cmd_context * cmd , struct arg_values * av ) ;
int major_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int minor_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int string_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int tag_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int permission_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int metadatatype_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int units_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int segtype_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int alloc_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int readahead_arg ( struct cmd_context * cmd , struct arg_values * av ) ;
int metadatacopies_arg ( struct cmd_context * cmd __attribute__ ( ( unused ) ) , struct arg_values * av ) ;
2012-08-06 20:01:01 +04:00
int major_minor_valid ( const struct cmd_context * cmd , const struct format_type * fmt ,
int32_t major , int32_t minor ) ;
2001-09-25 16:49:28 +04:00
/* we use the enums to access the switches */
2009-11-03 18:50:42 +03:00
unsigned arg_count ( const struct cmd_context * cmd , int a ) ;
unsigned arg_is_set ( const struct cmd_context * cmd , int a ) ;
2013-03-22 23:20:33 +04:00
const char * arg_long_option_name ( int a ) ;
2006-04-19 19:33:07 +04:00
const char * arg_value ( struct cmd_context * cmd , int a ) ;
const char * arg_str_value ( struct cmd_context * cmd , int a , const char * def ) ;
int32_t arg_int_value ( struct cmd_context * cmd , int a , const int32_t def ) ;
2012-03-16 14:43:52 +04:00
int32_t first_grouped_arg_int_value ( struct cmd_context * cmd , int a , const int32_t def ) ;
2006-04-19 19:33:07 +04:00
uint32_t arg_uint_value ( struct cmd_context * cmd , int a , const uint32_t def ) ;
2006-05-10 01:23:51 +04:00
int64_t arg_int64_value ( struct cmd_context * cmd , int a , const int64_t def ) ;
2006-04-19 19:33:07 +04:00
uint64_t arg_uint64_value ( struct cmd_context * cmd , int a , const uint64_t def ) ;
const void * arg_ptr_value ( struct cmd_context * cmd , int a , const void * def ) ;
sign_t arg_sign_value ( struct cmd_context * cmd , int a , const sign_t def ) ;
2010-11-30 14:53:31 +03:00
percent_type_t arg_percent_value ( struct cmd_context * cmd , int a , const percent_type_t def ) ;
2006-04-19 19:33:07 +04:00
int arg_count_increment ( struct cmd_context * cmd , int a ) ;
2010-11-11 20:29:05 +03:00
unsigned grouped_arg_count ( const struct arg_values * av , int a ) ;
unsigned grouped_arg_is_set ( const struct arg_values * av , int a ) ;
const char * grouped_arg_str_value ( const struct arg_values * av , int a , const char * def ) ;
2012-03-06 06:30:49 +04:00
int32_t grouped_arg_int_value ( const struct arg_values * av , int a , const int32_t def ) ;
2010-11-11 20:29:05 +03:00
2006-04-19 19:33:07 +04:00
const char * command_name ( struct cmd_context * cmd ) ;
2001-10-08 22:44:22 +04:00
2003-05-06 16:20:11 +04:00
int pvmove_poll ( struct cmd_context * cmd , const char * pv , unsigned background ) ;
2009-06-01 18:43:27 +04:00
int lvconvert_poll ( struct cmd_context * cmd , struct logical_volume * lv , unsigned background ) ;
2003-05-06 16:20:11 +04:00
2011-07-08 23:42:11 +04:00
int mirror_remove_missing ( struct cmd_context * cmd ,
struct logical_volume * lv , int force ) ;
2012-01-05 19:38:18 +04:00
uint32_t percent_of_extents ( uint32_t percents , uint32_t count , int roundup ) ;
2012-06-27 16:59:34 +04:00
int vgchange_activate ( struct cmd_context * cmd , struct volume_group * vg ,
activation_change_t activate ) ;
2001-10-06 01:39:30 +04:00
# endif