mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
commands: new method for defining commands
This commit is contained in:
parent
8c71fc1cc2
commit
0c71622c3e
@ -90,7 +90,7 @@ struct cmd_context {
|
||||
const char *cmd_line;
|
||||
struct command *command;
|
||||
char **argv;
|
||||
struct arg_values *arg_values;
|
||||
struct arg_values *opt_arg_values;
|
||||
struct dm_list arg_value_groups;
|
||||
|
||||
/*
|
||||
|
838
scripts/command-lines.in
Normal file
838
scripts/command-lines.in
Normal file
@ -0,0 +1,838 @@
|
||||
#
|
||||
# When this file is changed, tools/command-lines.h
|
||||
# and tools/command-lines-count.h must be regenerated
|
||||
# with:
|
||||
#
|
||||
# scripts/create-commands --output count scripts/command-lines.in > tools/command-lines-count.h
|
||||
# scripts/create-commands --output struct scripts/command-lines.in > tools/command-lines.h
|
||||
#
|
||||
|
||||
#
|
||||
# Syntax
|
||||
#
|
||||
# A new command has a unique combination of:
|
||||
# command name, required option args and required
|
||||
# positional args.
|
||||
#
|
||||
# To define a new command, begin a single line with a
|
||||
# command name, followed by required options/args,
|
||||
# (e.g. --foo, or --foo val), followed by required
|
||||
# positional args, (e.g. VG)
|
||||
#
|
||||
# After the single line of required elements are lines
|
||||
# of optional elements:
|
||||
# . optional options/args are on new line that begins OO:
|
||||
# . optional positional args are on a new line that begins OP:
|
||||
#
|
||||
# command_name required_opt_arg ... required_pos_arg ...
|
||||
# OO: optional_opt_arg, ...
|
||||
# OP: optional_pos_arg ...
|
||||
#
|
||||
# required_opt_arg/optional_opt_arg must begin with the
|
||||
# long form option name, e.g. --foo. If the option name
|
||||
# takes a value, then the type of value is specified,
|
||||
# e.g. --foo String.
|
||||
#
|
||||
# Possible option names are listed in args.h
|
||||
#
|
||||
# Use --foo_long to specify that only the long form of
|
||||
# --foo is accepted by the command. (This is uncommon.)
|
||||
#
|
||||
# Possible option arg types that can follow --opt are:
|
||||
# Bool, Number, String, PV, VG, LV, Tag.
|
||||
#
|
||||
# Option args outside the list of types are treated as literal
|
||||
# (non-variable) strings or numbers.
|
||||
#
|
||||
# required_pos_arg/optional_pos_arg can be one of the following:
|
||||
# PV, VG, LV, Tag, Select.
|
||||
#
|
||||
# required_pos_arg/optional_pos_arg can be multiple types
|
||||
# separated by |, e.g. VG|LV|Tag
|
||||
#
|
||||
# If the required_pos_arg/optional_pos_arg is repeatable,
|
||||
# it is followed by ..., e.g. VG|LV|Tag ...
|
||||
#
|
||||
# LV can have a suffix indicating the LV type, e.g. LV_linear, LV_thinpool.
|
||||
# LV_raid represents any raidN.
|
||||
#
|
||||
# VG, LV can have the suffix _new, indicating the named VG or LV
|
||||
# does not yet exist.
|
||||
#
|
||||
# If Select is included in pos_arg, it means that the pos_arg
|
||||
# may be empty if the --select option is used.
|
||||
#
|
||||
# --size and --extents are interchangable, but only --size is used
|
||||
# in these definitions to keep them simpler. Either --size or
|
||||
# --extents will be recognized when matching a command to one of
|
||||
# these definitions.
|
||||
#
|
||||
# Some options have multiple names, but only one form of the name
|
||||
# is used in these definitions. Synonyms will be recognized when
|
||||
# matching a command to a command definition.
|
||||
#
|
||||
# used in definitions below (equivalent but not used in definitions)
|
||||
# mirrorlog core (corelog)
|
||||
# resizeable (resizable)
|
||||
# allocatable (allocation)
|
||||
# resizeable (allocation)
|
||||
# activate (available)
|
||||
# rebuild (raidrebuild)
|
||||
# syncaction (raidsyncaction)
|
||||
# writemostly (raidwritemostly)
|
||||
# minrecoveryrate (raidminrecoveryrate)
|
||||
# maxrecoveryrate (raidmaxrecoveryrate)
|
||||
# writebehind (raidwritebehind)
|
||||
#
|
||||
|
||||
#
|
||||
# For efficiency, sets of options can be defined and reused
|
||||
# in multiple command definitions.
|
||||
#
|
||||
# To define a common set of options:
|
||||
# OO_NAME: --foo, --bar String
|
||||
#
|
||||
# To use this set of options, include it on the OO: line, e.g.
|
||||
# OO: --example, OO_NAME
|
||||
#
|
||||
# which is expaneded to
|
||||
# OO: --example, --foo, --bar String
|
||||
#
|
||||
# Including OO_NAME after a command name on the required line
|
||||
# means that any one of the options is required and the rest
|
||||
# are optional. The usage syntax for this case is printed as:
|
||||
# command (--foo A, --bar B)
|
||||
#
|
||||
|
||||
#
|
||||
# OO_ALL is included in every command automatically.
|
||||
# FIXME: add --force and --test to OO_ALL so that all commands will
|
||||
# accept them even if they are not used?
|
||||
#
|
||||
OO_ALL: --commandprofile String, --config String, --debug,
|
||||
--driverloaded Bool, --help, --profile String, --quiet,
|
||||
--verbose, --version, --yes
|
||||
|
||||
#
|
||||
# pvs, lvs, vgs, fullreport
|
||||
#
|
||||
OO_REPORT: --aligned, --all, --binary, --configreport String, --foreign,
|
||||
--ignorelockingfailure, --ignoreskippedcluster, --logonly,
|
||||
--nameprefixes, --noheadings, --nolocking, --nosuffix,
|
||||
--options String, --partial, --readonly, --reportformat String, --rows,
|
||||
--select String, --separator String, --shared, --sort String,
|
||||
--trustcache, --unbuffered, --units String, --unquoted
|
||||
|
||||
#
|
||||
# config, dumpconfig, lvmconfig
|
||||
#
|
||||
OO_CONFIG: --atversion String, --typeconfig String, --file String, --ignoreadvanced,
|
||||
--ignoreunsupported, --ignorelocal, --list, --mergedconfig, --metadataprofile String,
|
||||
--sinceversion String, --showdeprecated, --showunsupported, --validate, --withsummary,
|
||||
--withcomments, --withspaces, --unconfigured, --withversions
|
||||
|
||||
|
||||
config
|
||||
OO: OO_CONFIG
|
||||
OP: String ...
|
||||
|
||||
devtypes
|
||||
OO: --aligned, --binary, --nameprefixes, --noheadings,
|
||||
--nosuffix, --options String, --reportformat String, --rows,
|
||||
--select String, --separator String, --sort String, --unbuffered, --unquoted
|
||||
|
||||
dumpconfig
|
||||
OO: OO_CONFIG
|
||||
OP: String ...
|
||||
|
||||
formats
|
||||
|
||||
help
|
||||
|
||||
fullreport
|
||||
OO: OO_REPORT
|
||||
OP: VG ...
|
||||
|
||||
lastlog
|
||||
OO: --reportformat String, --select String
|
||||
|
||||
|
||||
#
|
||||
# None of these can function as a required option for lvchange.
|
||||
#
|
||||
OO_LVCHANGE: --autobackup Bool, --force, --ignorelockingfailure,
|
||||
--ignoremonitoring, --ignoreskippedcluster, --noudevsync,
|
||||
--reportformat String, --sysinit, --test, --select String
|
||||
|
||||
#
|
||||
# Any of these can function as a required option for lvchange.
|
||||
# profile is also part of OO_ALL, but is repeated in OO_LVCHANGE_META
|
||||
# because it can function as a required opt.
|
||||
#
|
||||
OO_LVCHANGE_META: --addtag Tag, --deltag Tag,
|
||||
--alloc String, --contiguous Bool,
|
||||
--detachprofile, --metadataprofile String, --profile String,
|
||||
--permission, --readahead Number|String, --setactivationskip Bool,
|
||||
--errorwhenfull Bool, --discards String, --zero Bool,
|
||||
--cachemode String, --cachepolicy String, --cachesettings String,
|
||||
--minrecoveryrate Number, --maxrecoveryrate Number,
|
||||
--writebehind Number, --writemostly PV
|
||||
|
||||
lvchange OO_LVCHANGE_META VG|LV|Tag|Select ...
|
||||
OO: OO_LVCHANGE
|
||||
|
||||
lvchange --resync VG|LV|Tag|Select ...
|
||||
OO: OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --syncaction String VG|LV|Tag|Select ...
|
||||
OO: OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --rebuild PV VG|LV|Tag|Select ...
|
||||
OO: OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --activate String VG|LV|Tag|Select ...
|
||||
OO: --activationmode String, --partial, --ignoreactivationskip, OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --refresh VG|LV|Tag|Select ...
|
||||
OO: OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --monitor Bool VG|LV|Tag|Select ...
|
||||
OO: --poll Bool, OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --poll Bool VG|LV|Tag|Select ...
|
||||
OO: --monitor Bool, OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
lvchange --persistent Bool VG|LV|Tag|Select ...
|
||||
OO: --minor Number, --major Number, OO_LVCHANGE_META, OO_LVCHANGE
|
||||
|
||||
|
||||
OO_LVCONVERT_RAID: --mirrors Number, --stripes_long Number,
|
||||
--stripesize Number, --regionsize Number
|
||||
|
||||
OO_LVCONVERT_POOL: --poolmetadata LV, --poolmetadatasize Number,
|
||||
--poolmetadataspare Bool, --readahead Number|String, --chunksize Number
|
||||
|
||||
OO_LVCONVERT: --alloc String, --background, --force, --noudevsync,
|
||||
--test, --usepolicies
|
||||
|
||||
# FIXME: use different option names for different operations
|
||||
lvconvert --merge LV_linear|LV_striped|LV_raid|LV_thin|LV_snapshot|VG|Tag ...
|
||||
OO: --background, --interval Number
|
||||
DESC: Merge LV that was previously split from a mirror.
|
||||
DESC: Merge thin LV into its origin LV.
|
||||
DESC: Merge COW snapshot LV into its origin.
|
||||
|
||||
lvconvert --type snapshot LV_linear|LV_striped|LV_raid LV_snapshot
|
||||
OO: --chunksize Number, --zero Bool, OO_LVCONVERT
|
||||
DESC: Combine LV with a previously split snapshot LV.
|
||||
|
||||
lvconvert --type thin --thinpool LV LV_linear|LV_striped|LV_raid
|
||||
OO: --originname LV_new, OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Convert LV to type thin with an external origin.
|
||||
|
||||
# alternate form of lvconvert --type thin
|
||||
lvconvert --thin --thinpool LV LV_linear|LV_striped|LV_raid
|
||||
OO: --type thin, --originname LV_new, OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Convert LV to type thin with an external origin (infers --type thin).
|
||||
|
||||
lvconvert --type cache --cachepool LV LV_linear|LV_striped|LV_raid|LV_thinpool
|
||||
OO: --cachepolicy String, --cachesettings String, OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Convert LV to type cache.
|
||||
|
||||
# alternate form of lvconvert --type cache
|
||||
lvconvert --cache --cachepool LV LV_linear|LV_striped|LV_raid|LV_thinpool
|
||||
OO: --type cache, --cachepolicy String, --cachesettings String, OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Convert LV to type cache (infers --type cache).
|
||||
|
||||
lvconvert --type thin-pool LV_linear|LV_striped|LV_raid|LV_cache
|
||||
OO: --discards String, --zero Bool, OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Convert LV to type thin-pool.
|
||||
|
||||
lvconvert --type cache-pool LV_linear|LV_striped|LV_raid
|
||||
OO: OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Convert LV to type cache-pool.
|
||||
|
||||
lvconvert --type mirror LV_linear|LV_striped|LV_raid
|
||||
OO: OO_LVCONVERT_RAID, OO_LVCONVERT
|
||||
OP: PV ...
|
||||
DESC: Convert LV to type mirror.
|
||||
|
||||
lvconvert --type raid LV_linear|LV_striped|LV_mirror|LV_raid
|
||||
OO: OO_LVCONVERT_RAID, OO_LVCONVERT
|
||||
OP: PV ...
|
||||
DESC: Convert LV to type raid.
|
||||
DESC: Change LV raid type.
|
||||
|
||||
lvconvert --mirrors Number LV_raid|LV_mirror
|
||||
OO: OO_LVCONVERT
|
||||
OP: PV ...
|
||||
DESC: Change the number of mirror images in the LV.
|
||||
|
||||
lvconvert --mirrors Number LV_linear|LV_striped
|
||||
OO: OO_LVCONVERT_RAID, OO_LVCONVERT
|
||||
OP: PV ...
|
||||
DESC: Alternate form to convert LV to type raid1 or mirror (use --type raid1|mirror).
|
||||
|
||||
lvconvert --splitmirrors Number --name LV_new LV_raid|LV_mirror|LV_cache
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Split images from a raid1 or mirror LV and use them to create a new LV.
|
||||
|
||||
lvconvert --splitmirrors Number --trackchanges LV_raid|LV_cache
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Split images from a raid1 LV and use them to create a new LV.
|
||||
|
||||
lvconvert --repair LV_raid|LV_mirror|LV_thinpool
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Replace failed PVs in a mirror or raid LV.
|
||||
DESC: Repair a thin pool.
|
||||
|
||||
lvconvert --replace PV LV_raid
|
||||
OO: OO_LVCONVERT
|
||||
OP: PV ...
|
||||
DESC: Replace specific PV(s) in a raid* LV with another PV.
|
||||
|
||||
lvconvert --type striped LV_raid
|
||||
OO: OO_LVCONVERT_RAID, OO_LVCONVERT
|
||||
OP: PV ...
|
||||
DESC: Convert LV to type striped.
|
||||
|
||||
lvconvert --type linear LV_raid|LV_mirror
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Convert LV to type linear.
|
||||
|
||||
lvconvert --mirrorlog String LV_mirror
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Change the type of log used by LV.
|
||||
|
||||
lvconvert --splitcache LV_cachepool|LV_cache|LV_thinpool
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Separate and preserve a cache pool from a cache LV.
|
||||
|
||||
lvconvert --uncache LV_cache|LV_thinpool
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Separate and remove a cache pool from a cache LV.
|
||||
|
||||
lvconvert --splitsnapshot LV_snapshot
|
||||
OO: OO_LVCONVERT
|
||||
DESC: Separate a COW snapshot from its origin LV.
|
||||
|
||||
# deprecated because of non-standard syntax
|
||||
lvconvert --thinpool LV
|
||||
OO: OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Alternate form to convert LV to type thin-pool (use --type thin-pool).
|
||||
|
||||
# deprecated because of non-standard syntax
|
||||
lvconvert --cachepool LV
|
||||
OO: OO_LVCONVERT_POOL, OO_LVCONVERT
|
||||
DESC: Alternate form to convert LV to type cache-pool (use --type cache-pool).
|
||||
|
||||
# FIXME: add a new option defining this operation, e.g. --poll-mirror
|
||||
# The function of this command is not entirely clear.
|
||||
lvconvert LV_mirror
|
||||
DESC: Poll LV to collapse resync layers.
|
||||
|
||||
# FIXME: add a new option defining this operation, e.g. --swapmetadata
|
||||
lvconvert --poolmetadata LV LV_thinpool|LV_cachepool
|
||||
DESC: Swap metadata LV in a thin pool or cache pool (temporary command).
|
||||
|
||||
|
||||
# --extents or --size are interchangable
|
||||
|
||||
OO_LVCREATE: --addtag Tag, --alloc String, --autobackup Bool, --activate String,
|
||||
--contiguous Bool, --ignoreactivationskip, --ignoremonitoring, --major Number,
|
||||
--metadataprofile String, --minor Number, --monitor Bool, --name String, --nosync,
|
||||
--noudevsync, --permission, --persistent Bool, --readahead Number|String,
|
||||
--reportformat String, --setactivationskip Bool, --test, --wipesignatures Bool,
|
||||
--zero Bool
|
||||
|
||||
OO_LVCREATE_CACHE: --cachemode String, --cachepolicy String, --cachesettings String
|
||||
|
||||
OO_LVCREATE_POOL: --poolmetadatasize Number, --poolmetadataspare Bool, --chunksize Number
|
||||
|
||||
OO_LVCREATE_THIN: --discards String, --errorwhenfull Bool
|
||||
|
||||
OO_LVCREATE_RAID: --mirrors Number, --stripes Number, --stripesize Number,
|
||||
--regionsize Number, --minrecoveryrate Number, --maxrecoveryrate Number
|
||||
|
||||
lvcreate --type error --size Number VG
|
||||
OO: OO_LVCREATE
|
||||
DESC: Create an LV that returns errors when used.
|
||||
|
||||
lvcreate --type zero --size Number VG
|
||||
OO: OO_LVCREATE
|
||||
DESC: Create an LV that returns zeros when read.
|
||||
|
||||
lvcreate --type linear --size Number VG
|
||||
OO: OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a linear LV.
|
||||
|
||||
lvcreate --type striped --size Number VG
|
||||
OO: --stripes Number, --stripesize Number, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a striped LV.
|
||||
|
||||
lvcreate --type mirror --size Number VG
|
||||
OO: --mirrors Number, --mirrorlog String, --corelog, --regionsize Number, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a mirror LV.
|
||||
|
||||
lvcreate --type raid --size Number VG
|
||||
OO: OO_LVCREATE_RAID, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a raid LV (a specific raid level must be used, e.g. raid1).
|
||||
|
||||
lvcreate --type snapshot --size Number LV
|
||||
OO: OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a COW snapshot from an origin LV.
|
||||
|
||||
lvcreate --type snapshot --size Number --virtualsize Number VG
|
||||
OO: --virtualoriginsize Number, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a sparse COW snapshot LV of a virtual origin LV.
|
||||
|
||||
lvcreate --type thin-pool --size Number VG
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin pool.
|
||||
|
||||
lvcreate --type cache-pool --size Number VG
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_CACHE, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a cache pool.
|
||||
|
||||
lvcreate --type thin --virtualsize Number --thinpool LV_thinpool
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
DESC: Create a thin LV in a thin pool.
|
||||
|
||||
lvcreate --type thin --snapshot LV_thin
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
DESC: Create a thin LV that is a snapshot of an existing thin LV.
|
||||
|
||||
lvcreate --type thin --snapshot --thinpool LV_thinpool LV
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
DESC: Create a thin LV that is a snapshot of an external origin LV named in arg pos 1.
|
||||
|
||||
lvcreate --type thin --virtualsize Number --size Number --thinpool LV_new
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin LV, first creating a thin pool for it, where the new thin pool is named by the --thinpool arg.
|
||||
|
||||
lvcreate --type thin --virtualsize Number --size Number LV_new
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin LV, first creating a thin pool for it, where the new thin pool is named in arg pos 1.
|
||||
|
||||
lvcreate --type thin --virtualsize Number --size Number VG
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin LV, first creating a thin pool for it.
|
||||
|
||||
# FIXME: this should be done by lvconvert, and this command deprecated
|
||||
lvcreate --type cache --size Number LV
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_CACHE, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Convert the specified LV to type cache after creating a new cache pool LV to use.
|
||||
|
||||
lvcreate --type cache --size Number --cachepool LV_cachepool
|
||||
OO: OO_LVCREATE_POOL, OO_LVCREATE_CACHE, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a cache LV, first creating a new origin LV, then combining it with the existing cache pool in arg pos 1.
|
||||
|
||||
lvcreate --size Number VG
|
||||
OO: --type linear, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a linear LV. (default --type linear)
|
||||
|
||||
lvcreate --stripes Number --size Number VG
|
||||
OO: --type striped, --stripesize Number, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a striped LV. (infers --type striped)
|
||||
|
||||
lvcreate --mirrors Number --size Number VG
|
||||
OO: --type raid1|mirror, --mirrorlog String, --corelog, OO_LVCREATE_RAID, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a raid1 or mirror LV. (infers --type raid1|mirror)
|
||||
|
||||
lvcreate --snapshot --size Number LV
|
||||
OO: --type snapshot, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a COW snapshot LV of the origin LV in arg pos 1. (infers --type snapshot)
|
||||
|
||||
lvcreate --thin --size Number VG
|
||||
OO: --type thin-pool, OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin pool. (infers --type thin-pool)
|
||||
|
||||
lvcreate --cache --size Number VG
|
||||
OO: --type cache-pool, OO_LVCREATE_POOL, OO_LVCREATE_CACHE, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a cache pool. (infers --type cache-pool)
|
||||
|
||||
lvcreate --snapshot LV_thin
|
||||
OO: --type thin, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
DESC: Create a thin LV that is a snapshot of an existing thin LV. (infers --type thin)
|
||||
|
||||
lvcreate --snapshot --thinpool LV_thinpool LV
|
||||
OO: --type thin, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
DESC: Create a thin LV that is a snapshot of an external origin LV. (infers --type thin)
|
||||
|
||||
lvcreate --virtualsize Number --thinpool LV_thinpool
|
||||
OO: --type thin, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
DESC: Create a thin LV in a thin pool. (infers --type thin)
|
||||
|
||||
lvcreate --size Number --cachepool LV_cachepool
|
||||
OO: --type cache, OO_LVCREATE_CACHE, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a new origin LV, combining it with an existing cache pool to create a new cache LV. (infers --type cache)
|
||||
|
||||
lvcreate --thin --virtualsize Number --size Number --thinpool LV_new
|
||||
OO: --type thin, OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin LV, first creating a thin pool for it, where the new thin pool is named by the --thinpool arg. (infers --type thin)
|
||||
|
||||
lvcreate --thin --virtualsize Number --size Number LV_new
|
||||
OO: --type thin, OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin LV, first creating a thin pool for it, where the new thin pool is named in arg pos 1. (infers --type thin)
|
||||
|
||||
lvcreate --size Number --virtualsize Number VG
|
||||
OO: --type thin, --type snapshot, --thin, --snapshot,
|
||||
--virtualoriginsize Number, OO_LVCREATE_POOL, OO_LVCREATE_THIN, OO_LVCREATE
|
||||
OP: PV ...
|
||||
DESC: Create a thin LV, first creating a thin pool for it. (infers --type thin)
|
||||
DESC: Create a sparse snapshot of a virtual origin LV. (infers --type snapshot)
|
||||
DESC: (infers --type thin or --type snapshot according to sparse_segtype_default)
|
||||
|
||||
lvdisplay
|
||||
OO: --aligned, --all, --binary, --colon, --columns,
|
||||
--configreport String, --foreign, --history, --ignorelockingfailure,
|
||||
--ignoreskippedcluster, --logonly, --maps, --noheadings,
|
||||
--nosuffix, --options String, --sort String, --partial, --readonly,
|
||||
--reportformat String, --segments, --select String, --separator String,
|
||||
--shared, --unbuffered, --units String
|
||||
OP: VG|LV|Tag ...
|
||||
|
||||
# --extents or --size are interchangable
|
||||
lvextend --size Number LV
|
||||
OO: --alloc String, --autobackup Bool, --force, --mirrors Number,
|
||||
--nofsck, --nosync, --noudevsync, --reportformat String, --resizefs,
|
||||
--stripes Number, --stripesize Number, --test, --poolmetadatasize Number
|
||||
OP: PV ...
|
||||
|
||||
lvextend LV PV ...
|
||||
OO: --alloc String, --autobackup Bool, --force, --mirrors Number,
|
||||
--nofsck, --nosync, --noudevsync,
|
||||
--reportformat String, --resizefs, --stripes Number, --stripesize Number,
|
||||
--test
|
||||
|
||||
lvextend --poolmetadatasize Number LV_thinpool
|
||||
OO: --alloc String, --autobackup Bool, --force, --mirrors Number,
|
||||
--nofsck, --nosync, --noudevsync,
|
||||
--reportformat String, --stripes Number, --stripesize Number,
|
||||
--test
|
||||
OP: PV ...
|
||||
|
||||
lvextend --usepolicies LV_thinpool|LV_snapshot
|
||||
OO: --alloc String, --autobackup Bool, --force, --mirrors Number,
|
||||
--nofsck, --nosync, --noudevsync,
|
||||
--reportformat String, --resizefs,
|
||||
--test
|
||||
|
||||
lvmchange
|
||||
|
||||
lvmconfig
|
||||
OO: OO_CONFIG
|
||||
|
||||
lvmdiskscan
|
||||
OO: --lvmpartition, --readonly
|
||||
|
||||
lvmsadc
|
||||
|
||||
lvmsar
|
||||
OO: --full, --stdin
|
||||
|
||||
# --extents or --size are interchangable
|
||||
lvreduce --size Number LV
|
||||
OO: --autobackup Bool, --force, --nofsck, --noudevsync,
|
||||
--reportformat String, --resizefs, --test
|
||||
|
||||
lvremove VG|LV|Tag|Select ...
|
||||
OO: --autobackup Bool, --force, --nohistory, --noudevsync,
|
||||
--reportformat String, --select String, --test
|
||||
|
||||
lvrename VG LV LV_new
|
||||
OO: --autobackup Bool, --noudevsync, --reportformat String, --test
|
||||
|
||||
lvrename LV LV_new
|
||||
OO: --autobackup Bool, --noudevsync, --reportformat String, --test
|
||||
|
||||
# --extents or --size are interchangable
|
||||
lvresize --size Number LV
|
||||
OO: --alloc String, --autobackup Bool, --force,
|
||||
--nofsck, --nosync, --noudevsync, --reportformat String, --resizefs,
|
||||
--stripes Number, --stripesize Number, --test, --poolmetadatasize Number
|
||||
OP: PV ...
|
||||
|
||||
lvresize LV PV ...
|
||||
OO: --alloc String, --autobackup Bool, --force,
|
||||
--nofsck, --nosync, --noudevsync,
|
||||
--reportformat String, --resizefs, --stripes Number, --stripesize Number,
|
||||
--test
|
||||
|
||||
lvresize --poolmetadatasize Number LV_thinpool
|
||||
OO: --alloc String, --autobackup Bool, --force,
|
||||
--nofsck, --nosync, --noudevsync,
|
||||
--reportformat String, --stripes Number, --stripesize Number,
|
||||
--test
|
||||
OP: PV ...
|
||||
|
||||
lvs
|
||||
OO: --history, --segments, OO_REPORT
|
||||
OP: VG|LV|Tag ...
|
||||
|
||||
lvscan
|
||||
OO: --all, --blockdevice, --ignorelockingfailure, --partial,
|
||||
--readonly, --reportformat String, --cache_long
|
||||
|
||||
|
||||
#
|
||||
# None of these can function as a required option for pvchange.
|
||||
#
|
||||
OO_PVCHANGE: --autobackup Bool, --force, --ignoreskippedcluster,
|
||||
--reportformat String, --test, --uuid
|
||||
|
||||
#
|
||||
# Any of these can function as a required option for pvchange.
|
||||
#
|
||||
OO_PVCHANGE_META: --allocatable Bool, --addtag Tag, --deltag Tag,
|
||||
--uuid, --metadataignore Bool
|
||||
|
||||
pvchange OO_PVCHANGE_META --all
|
||||
OO: OO_PVCHANGE
|
||||
|
||||
pvchange OO_PVCHANGE_META PV|Select ...
|
||||
OO: --select String, OO_PVCHANGE
|
||||
|
||||
pvresize PV ...
|
||||
OO: --setphysicalvolumesize Number, --reportformat String, --test
|
||||
|
||||
pvck PV ...
|
||||
OO: --labelsector Number
|
||||
|
||||
#
|
||||
# Use --uuidstr here which will be converted to uuidstr_ARG
|
||||
# which is actually --uuid string on the command line.
|
||||
#
|
||||
pvcreate PV ...
|
||||
OO: --dataalignment Number, --dataalignmentoffset Number, --bootloaderareasize Number,
|
||||
--force, --test, --labelsector Number, --metadatatype String,
|
||||
--pvmetadatacopies Number, --metadatasize Number, --metadataignore Bool,
|
||||
--norestorefile, --setphysicalvolumesize Number,
|
||||
--reportformat String, --restorefile String, --uuidstr String, --zero Bool
|
||||
|
||||
pvdata
|
||||
|
||||
pvdisplay
|
||||
OO: --aligned, --all, --binary, --colon, --columns, --configreport String,
|
||||
--foreign, --ignorelockingfailure, --ignoreskippedcluster,
|
||||
--logonly, --maps, --noheadings, --nosuffix, --options String,
|
||||
--readonly, --reportformat String, --select String, --separator String, --shared,
|
||||
--short, --sort String, --unbuffered, --units String
|
||||
OP: PV|Tag ...
|
||||
|
||||
pvmove PV
|
||||
OO: --abort, --alloc String, --atomic, --autobackup Bool, --background,
|
||||
--interval Number, --name LV, --noudevsync, --reportformat String, --test
|
||||
OP: PV ...
|
||||
|
||||
pvmove
|
||||
OO: --abort, --background, --test
|
||||
|
||||
lvpoll --polloperation String LV ...
|
||||
OO: --abort, --autobackup Bool, --handlemissingpvs, --interval Number, --test
|
||||
|
||||
pvremove PV ...
|
||||
OO: --force, --reportformat String, --test
|
||||
|
||||
pvs
|
||||
OO: --segments, OO_REPORT
|
||||
OP: PV|Tag ...
|
||||
|
||||
pvscan
|
||||
OO: --ignorelockingfailure, --reportformat String, --exported, --novolumegroup,
|
||||
--short, --uuid
|
||||
|
||||
pvscan --cache_long
|
||||
OO: --ignorelockingfailure, --reportformat String, --background,
|
||||
--activate String, --major Number, --minor Number,
|
||||
OP: PV|String ...
|
||||
|
||||
segtypes
|
||||
|
||||
systemid
|
||||
|
||||
tags
|
||||
|
||||
vgcfgbackup
|
||||
OO: --file String, --foreign, --ignorelockingfailure, --partial, --readonly,
|
||||
--reportformat String
|
||||
|
||||
vgcfgrestore VG
|
||||
OO: --file String, --force_long, --list, --metadatatype String, --test
|
||||
|
||||
vgcfgrestore --list --file String
|
||||
|
||||
#
|
||||
# None of these can function as a required option for vgchange.
|
||||
#
|
||||
OO_VGCHANGE: --autobackup Bool, --ignoremonitoring, --ignoreskippedcluster,
|
||||
--noudevsync, --reportformat String, --select String, --test, --force
|
||||
|
||||
#
|
||||
# Any of these can function as a required option for vgchange.
|
||||
# profile is also part of OO_ALL, but is repeated in OO_VGCHANGE_META
|
||||
# because it can function as a required opt.
|
||||
#
|
||||
OO_VGCHANGE_META: --addtag Tag, --deltag Tag,
|
||||
--logicalvolume Number, --maxphysicalvolumes Number, --alloc String, --uuid,
|
||||
--clustered Bool, --metadatacopies Number, --vgmetadatacopies Number|String,
|
||||
--physicalextentsize Number, --resizeable Bool, --systemid String, --locktype String,
|
||||
--profile String, --detachprofile, --metadataprofile String,
|
||||
|
||||
vgchange OO_VGCHANGE_META
|
||||
OO: OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgchange --monitor Bool
|
||||
OO: --sysinit, --ignorelockingfailure, --poll Bool, OO_VGCHANGE_META, OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgchange --poll Bool
|
||||
OO: --ignorelockingfailure, OO_VGCHANGE_META, OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgchange --activate String
|
||||
OO: --activationmode String, --ignoreactivationskip, --partial, --sysinit,
|
||||
--ignorelockingfailure, --monitor Bool, --poll Bool, OO_VGCHANGE_META, OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgchange --refresh
|
||||
OO: --sysinit, --ignorelockingfailure, --monitor Bool, --poll Bool, OO_VGCHANGE_META, OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgchange --lockstart
|
||||
OO: --lockopt String, OO_VGCHANGE_META, OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgchange --lockstop
|
||||
OO: --lockopt String, OO_VGCHANGE_META, OO_VGCHANGE
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgck
|
||||
OO: --reportformat String
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgconvert VG ...
|
||||
OO: --force, --test, --labelsector Number, --bootloaderareasize Number,
|
||||
--metadatatype String, --pvmetadatacopies Number,
|
||||
--metadatasize Number, --reportformat String
|
||||
|
||||
vgcreate VG_new PV ...
|
||||
OO: --addtag Tag, --alloc String, --autobackup Bool, --clustered Bool, --maxlogicalvolumes Number,
|
||||
--maxphysicalvolumes Number, --metadataprofile String, --metadatatype String,
|
||||
--physicalextentsize Number, --test, --force, --zero Bool, --labelsector Number,
|
||||
--metadatasize Number, --pvmetadatacopies Number, --reportformat String, --metadatacopies Number,
|
||||
--vgmetadatacopies Number|String, --dataalignment Number, --dataalignmentoffset Number,
|
||||
--shared, --systemid String, --locktype String, --lockopt String
|
||||
|
||||
vgdisplay
|
||||
OO: --activevolumegroups, --aligned, --binary, --colon, --columns,
|
||||
--configreport String, --foreign, --ignorelockingfailure,
|
||||
--ignoreskippedcluster, --logonly, --noheadings, --nosuffix,
|
||||
--options String, --partial, --readonly, --reportformat String, --select String,
|
||||
--shared, --short, --separator String, --sort String, --unbuffered, --units String
|
||||
OP: VG|Tag ...
|
||||
|
||||
OO_VGEXPORT: --reportformat String, --test
|
||||
|
||||
vgexport VG|Tag|Select ...
|
||||
OO: --select String, OO_VGEXPORT
|
||||
|
||||
vgexport --all
|
||||
OO: OO_VGEXPORT
|
||||
|
||||
vgextend VG PV ...
|
||||
OO: --autobackup Bool, --test,
|
||||
--force, --zero Bool, --labelsector Number, --metadatatype String,
|
||||
--metadatasize Number, --pvmetadatacopies Number,
|
||||
--metadataignore Bool, --dataalignment Number, --dataalignmentoffset Number,
|
||||
--reportformat String, --restoremissing
|
||||
|
||||
OO_VGIMPORT: --force, --reportformat String, --test
|
||||
|
||||
vgimport VG|Tag|Select ...
|
||||
OO: --select String, OO_VGIMPORT
|
||||
|
||||
vgimport --all
|
||||
OO: OO_VGIMPORT
|
||||
|
||||
vgimportclone PV ...
|
||||
OO: --basevgname VG, --test, --import
|
||||
|
||||
vgmerge VG VG
|
||||
OO: --autobackup Bool, --list, --test
|
||||
|
||||
vgmknodes
|
||||
OO: --ignorelockingfailure, --refresh, --reportformat String
|
||||
OP: VG|LV|Tag ...
|
||||
|
||||
OO_VGREDUCE: --autobackup Bool, --force, --reportformat String, --test
|
||||
|
||||
vgreduce VG PV ...
|
||||
OO: OO_VGREDUCE
|
||||
|
||||
vgreduce --all VG
|
||||
OO: OO_VGREDUCE
|
||||
|
||||
vgreduce --removemissing VG
|
||||
OO: --mirrorsonly, OO_VGREDUCE
|
||||
|
||||
vgremove VG|Tag|Select ...
|
||||
OO: --force, --noudevsync, --reportformat String, --select String, --test
|
||||
|
||||
vgrename VG VG_new
|
||||
OO: --autobackup Bool, --force, --reportformat String, --test
|
||||
|
||||
vgrename String VG_new
|
||||
OO: --autobackup Bool, --force, --reportformat String, --test
|
||||
|
||||
vgs
|
||||
OO: OO_REPORT
|
||||
OP: VG|Tag ...
|
||||
|
||||
vgscan
|
||||
OO: --cache_long, --ignorelockingfailure, --mknodes, --notifydbus,
|
||||
--partial, --reportformat String
|
||||
|
||||
OO_VGSPLIT: --autobackup Bool, --test
|
||||
|
||||
OO_VGSPLIT_NEW: --alloc String, --clustered Bool,
|
||||
--maxlogicalvolumes Number, --maxphysicalvolumes Number,
|
||||
--metadatatype String, --vgmetadatacopies Number|String
|
||||
|
||||
vgsplit VG VG PV ...
|
||||
OO: OO_VGSPLIT
|
||||
|
||||
vgsplit --name LV VG VG
|
||||
OO: OO_VGSPLIT
|
||||
|
||||
vgsplit VG VG_new PV ...
|
||||
OO: OO_VGSPLIT, OO_VGSPLIT_NEW
|
||||
|
||||
vgsplit --name LV VG VG_new
|
||||
OO: OO_VGSPLIT, OO_VGSPLIT_NEW
|
||||
|
||||
version
|
||||
|
1614
scripts/create-commands.c
Normal file
1614
scripts/create-commands.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -32,7 +32,7 @@ arg(cachepool_ARG, '\0', "cachepool", string_arg, 0, 0)
|
||||
arg(commandprofile_ARG, '\0', "commandprofile", string_arg, 0, 0)
|
||||
arg(config_ARG, '\0', "config", string_arg, 0, 0)
|
||||
arg(configreport_ARG, '\0', "configreport", string_arg, ARG_GROUPABLE, 1)
|
||||
arg(configtype_ARG, '\0', "type", string_arg, 0, 0)
|
||||
arg(configtype_ARG, '\0', "typeconfig", string_arg, 0, 0)
|
||||
arg(corelog_ARG, '\0', "corelog", NULL, 0, 0)
|
||||
arg(dataalignment_ARG, '\0', "dataalignment", size_kb_arg, 0, 0)
|
||||
arg(dataalignmentoffset_ARG, '\0', "dataalignmentoffset", size_kb_arg, 0, 0)
|
||||
@ -169,7 +169,7 @@ arg(physicalextent_ARG, 'E', "physicalextent", NULL, 0, 0)
|
||||
arg(file_ARG, 'f', "file", string_arg, 0, 0)
|
||||
arg(force_ARG, 'f', "force", NULL, ARG_COUNTABLE, 0)
|
||||
arg(full_ARG, 'f', "full", NULL, 0, 0)
|
||||
arg(help_ARG, 'h', "help", NULL, 0, 0)
|
||||
arg(help_ARG, 'h', "help", NULL, ARG_COUNTABLE, 0)
|
||||
arg(cache_ARG, 'H', "cache", NULL, 0, 0)
|
||||
arg(history_ARG, 'H', "history", NULL, 0, 0)
|
||||
arg(help2_ARG, '?', "", NULL, 0, 0)
|
||||
|
3
tools/command-lines-count.h
Normal file
3
tools/command-lines-count.h
Normal file
@ -0,0 +1,3 @@
|
||||
/* Do not edit. This file is generated by scripts/create-commands */
|
||||
/* using command definitions from scripts/command-lines.in */
|
||||
#define COMMAND_COUNT 144
|
7571
tools/command-lines.h
Normal file
7571
tools/command-lines.h
Normal file
File diff suppressed because it is too large
Load Diff
166
tools/command.h
Normal file
166
tools/command.h
Normal file
@ -0,0 +1,166 @@
|
||||
/*
|
||||
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
||||
* Copyright (C) 2004-2015 Red Hat, Inc. All rights reserved.
|
||||
*
|
||||
* 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
|
||||
* of the GNU Lesser General Public License v.2.1.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _LVM_COMMAND_H
|
||||
#define _LVM_COMMAND_H
|
||||
|
||||
struct cmd_context;
|
||||
|
||||
/* command functions */
|
||||
typedef int (*command_fn) (struct cmd_context * cmd, int argc, char **argv);
|
||||
|
||||
/*
|
||||
* Command defintion
|
||||
*
|
||||
* A command is defined in terms of a command name,
|
||||
* required options (+args), optional options (+args),
|
||||
* required positional args, optional positional args.
|
||||
*
|
||||
* A positional arg always has non-zero pos_arg.def.types.
|
||||
* The first positional arg has pos_arg.pos of 1.
|
||||
*/
|
||||
|
||||
/* Number of string constants accepted after an option. */
|
||||
#define MAX_STR_SET 16
|
||||
|
||||
/* arg_def flags */
|
||||
#define ARG_DEF_FLAG_NEW 1
|
||||
#define ARG_DEF_FLAG_MAY_REPEAT 2
|
||||
|
||||
/* arg_def types, can be multiple */
|
||||
enum {
|
||||
ARG_DEF_TYPE_NONE = 0,
|
||||
ARG_DEF_TYPE_BOOL = 1 << 0,
|
||||
ARG_DEF_TYPE_NUM_ANY = 1 << 1,
|
||||
ARG_DEF_TYPE_STR_ANY = 1 << 2,
|
||||
ARG_DEF_TYPE_NUM_CONST = 1 << 3,
|
||||
ARG_DEF_TYPE_STR_CONST = 1 << 4,
|
||||
ARG_DEF_TYPE_STR_SET = 1 << 5,
|
||||
ARG_DEF_TYPE_NAME_ANY = 1 << 6,
|
||||
ARG_DEF_TYPE_NAME_PV = 1 << 7,
|
||||
ARG_DEF_TYPE_NAME_VG = 1 << 8,
|
||||
ARG_DEF_TYPE_NAME_LV = 1 << 9,
|
||||
ARG_DEF_TYPE_TAG = 1 << 10,
|
||||
ARG_DEF_TYPE_SELECT = 1 << 11,
|
||||
};
|
||||
|
||||
/* arg_def lv_types, can be multiple */
|
||||
enum {
|
||||
ARG_DEF_LV_ANY = 0,
|
||||
ARG_DEF_LV_LINEAR = 1 << 0,
|
||||
ARG_DEF_LV_STRIPED = 1 << 1,
|
||||
ARG_DEF_LV_SNAPSHOT = 1 << 2,
|
||||
ARG_DEF_LV_MIRROR = 1 << 3,
|
||||
ARG_DEF_LV_RAID = 1 << 4,
|
||||
ARG_DEF_LV_RAID0 = 1 << 5,
|
||||
ARG_DEF_LV_RAID1 = 1 << 6,
|
||||
ARG_DEF_LV_RAID4 = 1 << 7,
|
||||
ARG_DEF_LV_RAID5 = 1 << 8,
|
||||
ARG_DEF_LV_RAID6 = 1 << 9,
|
||||
ARG_DEF_LV_RAID10 = 1 << 10,
|
||||
ARG_DEF_LV_THIN = 1 << 11,
|
||||
ARG_DEF_LV_THINPOOL = 1 << 12,
|
||||
ARG_DEF_LV_CACHE = 1 << 13,
|
||||
ARG_DEF_LV_CACHEPOOL = 1 << 14,
|
||||
};
|
||||
|
||||
/* Description a value that follows an option or exists in a position. */
|
||||
|
||||
struct arg_def {
|
||||
uint32_t types; /* ARG_DEF_TYPE_, can be multiple */
|
||||
uint32_t lv_types; /* ARG_DEF_LV_, can be multiple */
|
||||
uint64_t num; /* a literal number for ARG_DEF_TYPE_NUM_CONST */
|
||||
const char *str; /* a literal string for ARG_DEF_TYPE_STR_CONST */
|
||||
const char *str_set[MAX_STR_SET]; /* literal strings for ARG_DEF_TYPE_STR_SET */
|
||||
uint32_t flags; /* ARG_DEF_FLAG_ */
|
||||
};
|
||||
|
||||
/* Description of an option and the value that follows it. */
|
||||
|
||||
struct opt_arg {
|
||||
int opt; /* option, e.g. foo_ARG */
|
||||
struct arg_def def; /* defines accepted values */
|
||||
};
|
||||
|
||||
/* Description of a position and the value that exists there. */
|
||||
|
||||
struct pos_arg {
|
||||
int pos; /* position, e.g. first is 1 */
|
||||
struct arg_def def; /* defines accepted values */
|
||||
};
|
||||
|
||||
/*
|
||||
* CMD_RO_ARGS needs to accomodate a list of options,
|
||||
* of which one is required after which the rest are
|
||||
* optional.
|
||||
*/
|
||||
#define CMD_RO_ARGS 64 /* required opt args */
|
||||
#define CMD_OO_ARGS 150 /* optional opt args */
|
||||
#define CMD_RP_ARGS 8 /* required positional args */
|
||||
#define CMD_OP_ARGS 8 /* optional positional args */
|
||||
|
||||
/*
|
||||
* one or more from required_opt_args is required,
|
||||
* then the rest are optional.
|
||||
*/
|
||||
#define CMD_FLAG_ONE_REQUIRED_OPT 1
|
||||
|
||||
/* a register of the lvm commands */
|
||||
struct command {
|
||||
const char *name;
|
||||
const char *desc; /* specific command description from command-lines.h */
|
||||
const char *usage;
|
||||
|
||||
struct command_name *cname;
|
||||
command_fn fn;
|
||||
|
||||
unsigned int flags; /* copied from command_name.flags from commands.h */
|
||||
|
||||
unsigned int cmd_flags; /* CMD_FLAG_ */
|
||||
|
||||
/* definitions of opt/pos args */
|
||||
|
||||
/* required args following an --opt */
|
||||
struct opt_arg required_opt_args[CMD_RO_ARGS];
|
||||
|
||||
/* optional args following an --opt */
|
||||
struct opt_arg optional_opt_args[CMD_OO_ARGS];
|
||||
|
||||
/* required positional args */
|
||||
struct pos_arg required_pos_args[CMD_RP_ARGS];
|
||||
|
||||
/* optional positional args */
|
||||
struct pos_arg optional_pos_args[CMD_OP_ARGS];
|
||||
|
||||
int ro_count;
|
||||
int oo_count;
|
||||
int rp_count;
|
||||
int op_count;
|
||||
|
||||
/* used for processing current position */
|
||||
int pos_count;
|
||||
};
|
||||
|
||||
struct command_name {
|
||||
const char *name;
|
||||
const char *desc; /* general command description from commands.h */
|
||||
unsigned int flags;
|
||||
|
||||
/* union of {required,optional}_opt_args for all commands with this name */
|
||||
int valid_args[ARG_COUNT];
|
||||
int num_args;
|
||||
};
|
||||
|
||||
#endif
|
1428
tools/commands.h
1428
tools/commands.h
File diff suppressed because it is too large
Load Diff
32
tools/lvm.c
32
tools/lvm.c
@ -45,9 +45,9 @@ static char *_list_cmds(const char *text, int state)
|
||||
len = strlen(text);
|
||||
}
|
||||
|
||||
while (i < _cmdline->num_commands)
|
||||
if (!strncmp(text, _cmdline->commands[i++].name, len))
|
||||
return strdup(_cmdline->commands[i - 1].name);
|
||||
while (i < _cmdline->num_command_names)
|
||||
if (!strncmp(text, _cmdline->command_names[i++].name, len))
|
||||
return strdup(_cmdline->command_names[i - 1].name);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -57,7 +57,7 @@ static char *_list_args(const char *text, int state)
|
||||
{
|
||||
static int match_no = 0;
|
||||
static size_t len = 0;
|
||||
static struct command *com;
|
||||
static struct command_name *cname;
|
||||
|
||||
/* Initialise if this is a new completion attempt */
|
||||
if (!state) {
|
||||
@ -65,40 +65,40 @@ static char *_list_args(const char *text, int state)
|
||||
int j;
|
||||
|
||||
match_no = 0;
|
||||
com = NULL;
|
||||
cname = NULL;
|
||||
len = strlen(text);
|
||||
|
||||
/* Find start of first word in line buffer */
|
||||
while (isspace(*s))
|
||||
s++;
|
||||
|
||||
/* Look for word in list of commands */
|
||||
for (j = 0; j < _cmdline->num_commands; j++) {
|
||||
/* Look for word in list of command names */
|
||||
for (j = 0; j < _cmdline->num_command_names; j++) {
|
||||
const char *p;
|
||||
char *q = s;
|
||||
|
||||
p = _cmdline->commands[j].name;
|
||||
p = _cmdline->command_names[j].name;
|
||||
while (*p == *q) {
|
||||
p++;
|
||||
q++;
|
||||
}
|
||||
if ((!*p) && *q == ' ') {
|
||||
com = _cmdline->commands + j;
|
||||
cname = _cmdline->command_names + j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!com)
|
||||
if (!cname)
|
||||
return NULL;
|
||||
|
||||
/* Short form arguments */
|
||||
if (len < 3) {
|
||||
while (match_no < com->num_args) {
|
||||
while (match_no < cname->num_args) {
|
||||
char s[3];
|
||||
char c;
|
||||
if (!(c = (_cmdline->arg_props +
|
||||
com->valid_args[match_no++])->short_arg))
|
||||
cname->valid_args[match_no++])->short_arg))
|
||||
continue;
|
||||
|
||||
sprintf(s, "-%c", c);
|
||||
@ -108,13 +108,13 @@ static char *_list_args(const char *text, int state)
|
||||
}
|
||||
|
||||
/* Long form arguments */
|
||||
if (match_no < com->num_args)
|
||||
match_no = com->num_args;
|
||||
if (match_no < cname->num_args)
|
||||
match_no = cname->num_args;
|
||||
|
||||
while (match_no - com->num_args < com->num_args) {
|
||||
while (match_no - cname->num_args < cname->num_args) {
|
||||
const char *l;
|
||||
l = (_cmdline->arg_props +
|
||||
com->valid_args[match_no++ - com->num_args])->long_arg;
|
||||
cname->valid_args[match_no++ - cname->num_args])->long_arg;
|
||||
if (*(l + 2) && !strncmp(text, l, len))
|
||||
return strdup(l);
|
||||
}
|
||||
|
@ -19,10 +19,11 @@
|
||||
struct cmd_context;
|
||||
|
||||
struct cmdline_context {
|
||||
struct arg_props *arg_props;
|
||||
struct command *commands;
|
||||
int num_commands;
|
||||
int commands_size;
|
||||
struct arg_props *arg_props;
|
||||
struct command *commands;
|
||||
int num_commands;
|
||||
struct command_name *command_names;
|
||||
int num_command_names;
|
||||
};
|
||||
|
||||
int lvm2_main(int argc, char **argv);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -50,13 +50,6 @@
|
||||
#define CMD_LEN 256
|
||||
#define MAX_ARGS 64
|
||||
|
||||
/* command functions */
|
||||
typedef int (*command_fn) (struct cmd_context * cmd, int argc, char **argv);
|
||||
|
||||
#define xx(a, b...) int a(struct cmd_context *cmd, int argc, char **argv);
|
||||
#include "commands.h"
|
||||
#undef xx
|
||||
|
||||
/* define the enums for the command line switches */
|
||||
enum {
|
||||
#define arg(a, b, c, d, e, f) a ,
|
||||
@ -64,6 +57,13 @@ enum {
|
||||
#undef arg
|
||||
};
|
||||
|
||||
/* command functions */
|
||||
#define xx(a, b...) int a(struct cmd_context *cmd, int argc, char **argv);
|
||||
#include "commands.h"
|
||||
#undef xx
|
||||
|
||||
#include "command.h"
|
||||
|
||||
#define ARG_COUNTABLE 0x00000001 /* E.g. -vvvv */
|
||||
#define ARG_GROUPABLE 0x00000002 /* E.g. --addtag */
|
||||
|
||||
@ -81,6 +81,7 @@ struct arg_values {
|
||||
|
||||
/* a global table of possible arguments */
|
||||
struct arg_props {
|
||||
int enum_val;
|
||||
const char short_arg;
|
||||
char _padding[7];
|
||||
const char *long_arg;
|
||||
@ -118,19 +119,6 @@ struct arg_value_group_list {
|
||||
#define ENABLE_DUPLICATE_DEVS 0x00000400
|
||||
/* Command does not accept tags as args. */
|
||||
#define DISALLOW_TAG_ARGS 0x00000800
|
||||
|
||||
/* a register of the lvm commands */
|
||||
struct command {
|
||||
const char *name;
|
||||
const char *desc;
|
||||
const char *usage;
|
||||
command_fn fn;
|
||||
|
||||
unsigned flags;
|
||||
|
||||
int num_args;
|
||||
int *valid_args;
|
||||
};
|
||||
|
||||
void usage(const char *name);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user