- Remove gc_argname field. It was introduced for gpart(8), but if I

understand everything correctly, we don't really need it.
- Provide default numeric value as strings. This allows to simplify
  a lot of code.
- Bump version number.
This commit is contained in:
Pawel Jakub Dawidek 2010-09-13 13:48:18 +00:00
parent 480f6157fb
commit 946e2f3595
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=212554
18 changed files with 244 additions and 273 deletions

View File

@ -42,10 +42,8 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_CACHE_VERSION; uint32_t version = G_CACHE_VERSION;
static intmax_t blocksize_label = 65536; #define GCACHE_BLOCKSIZE "65536"
static intmax_t size_label = 100; #define GCACHE_SIZE "100"
static intmax_t blocksize_configure = 0;
static intmax_t size_configure = 0;
static void cache_main(struct gctl_req *req, unsigned flags); static void cache_main(struct gctl_req *req, unsigned flags);
static void cache_clear(struct gctl_req *req); static void cache_clear(struct gctl_req *req);
@ -53,44 +51,44 @@ static void cache_dump(struct gctl_req *req);
static void cache_label(struct gctl_req *req); static void cache_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "clear", G_FLAG_VERBOSE, cache_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, cache_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "configure", G_FLAG_VERBOSE, NULL, { "configure", G_FLAG_VERBOSE, NULL,
{ {
{ 'b', "blocksize", &blocksize_configure, G_TYPE_NUMBER }, { 'b', "blocksize", "0", G_TYPE_NUMBER },
{ 's', "size", &size_configure, G_TYPE_NUMBER }, { 's', "size", "0", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] [-b blocksize] [-s size] name" "[-v] [-b blocksize] [-s size] name"
}, },
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{ {
{ 'b', "blocksize", &blocksize_label, G_TYPE_NUMBER }, { 'b', "blocksize", GCACHE_BLOCKSIZE, G_TYPE_NUMBER },
{ 's', "size", &size_label, G_TYPE_NUMBER }, { 's', "size", GCACHE_SIZE, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] [-b blocksize] [-s size] name prov" "[-v] [-b blocksize] [-s size] name prov"
}, },
{ "destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
{ "dump", 0, cache_main, G_NULL_OPTS, NULL, { "dump", 0, cache_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, cache_main, { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, cache_main,
{ {
{ 'b', "blocksize", &blocksize_label, G_TYPE_NUMBER }, { 'b', "blocksize", GCACHE_BLOCKSIZE, G_TYPE_NUMBER },
{ 's', "size", &size_label, G_TYPE_NUMBER }, { 's', "size", GCACHE_SIZE, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] [-b blocksize] [-s size] name prov" "[-v] [-b blocksize] [-s size] name prov"
}, },
{ "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name ..." "[-v] name ..."
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
@ -98,7 +96,7 @@ struct g_command class_commands[] = {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -51,20 +51,20 @@ static void concat_dump(struct gctl_req *req);
static void concat_label(struct gctl_req *req); static void concat_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "clear", G_FLAG_VERBOSE, concat_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, concat_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS, { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS,
NULL, "[-v] name prov ..." "[-v] name prov ..."
}, },
{ "destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
{ "dump", 0, concat_main, G_NULL_OPTS, NULL, { "dump", 0, concat_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, concat_main, { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, concat_main,
@ -72,14 +72,14 @@ struct g_command class_commands[] = {
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hv] name prov ..." "[-hv] name prov ..."
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -57,11 +57,6 @@ uint32_t version = G_ELI_VERSION;
#define GELI_BACKUP_DIR "/var/backups/" #define GELI_BACKUP_DIR "/var/backups/"
#define GELI_ENC_ALGO "aes" #define GELI_ENC_ALGO "aes"
static intmax_t keylen = 0;
static intmax_t keyno = -1;
static intmax_t iterations = -1;
static intmax_t sectorsize = 0;
static void eli_main(struct gctl_req *req, unsigned flags); static void eli_main(struct gctl_req *req, unsigned flags);
static void eli_init(struct gctl_req *req); static void eli_init(struct gctl_req *req);
static void eli_attach(struct gctl_req *req); static void eli_attach(struct gctl_req *req);
@ -102,14 +97,14 @@ struct g_command class_commands[] = {
{ 'b', "boot", NULL, G_TYPE_BOOL }, { 'b', "boot", NULL, G_TYPE_BOOL },
{ 'B', "backupfile", "", G_TYPE_STRING }, { 'B', "backupfile", "", G_TYPE_STRING },
{ 'e', "ealgo", GELI_ENC_ALGO, G_TYPE_STRING }, { 'e', "ealgo", GELI_ENC_ALGO, G_TYPE_STRING },
{ 'i', "iterations", &iterations, G_TYPE_NUMBER }, { 'i', "iterations", "-1", G_TYPE_NUMBER },
{ 'K', "newkeyfile", "", G_TYPE_STRING }, { 'K', "newkeyfile", "", G_TYPE_STRING },
{ 'l', "keylen", &keylen, G_TYPE_NUMBER }, { 'l', "keylen", "0", G_TYPE_NUMBER },
{ 'P', "nonewpassphrase", NULL, G_TYPE_BOOL }, { 'P', "nonewpassphrase", NULL, G_TYPE_BOOL },
{ 's', "sectorsize", &sectorsize, G_TYPE_NUMBER }, { 's', "sectorsize", "0", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-bPv] [-a aalgo] [-B backupfile] [-e ealgo] [-i iterations] [-l keylen] [-K newkeyfile] [-s sectorsize] prov" "[-bPv] [-a aalgo] [-B backupfile] [-e ealgo] [-i iterations] [-l keylen] [-K newkeyfile] [-s sectorsize] prov"
}, },
{ "label", G_FLAG_VERBOSE, eli_main, { "label", G_FLAG_VERBOSE, eli_main,
{ {
@ -117,14 +112,14 @@ struct g_command class_commands[] = {
{ 'b', "boot", NULL, G_TYPE_BOOL }, { 'b', "boot", NULL, G_TYPE_BOOL },
{ 'B', "backupfile", "", G_TYPE_STRING }, { 'B', "backupfile", "", G_TYPE_STRING },
{ 'e', "ealgo", GELI_ENC_ALGO, G_TYPE_STRING }, { 'e', "ealgo", GELI_ENC_ALGO, G_TYPE_STRING },
{ 'i', "iterations", &iterations, G_TYPE_NUMBER }, { 'i', "iterations", "-1", G_TYPE_NUMBER },
{ 'K', "newkeyfile", "", G_TYPE_STRING }, { 'K', "newkeyfile", "", G_TYPE_STRING },
{ 'l', "keylen", &keylen, G_TYPE_NUMBER }, { 'l', "keylen", "0", G_TYPE_NUMBER },
{ 'P', "nonewpassphrase", NULL, G_TYPE_BOOL }, { 'P', "nonewpassphrase", NULL, G_TYPE_BOOL },
{ 's', "sectorsize", &sectorsize, G_TYPE_NUMBER }, { 's', "sectorsize", "0", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "- an alias for 'init'" "- an alias for 'init'"
}, },
{ "attach", G_FLAG_VERBOSE | G_FLAG_LOADKLD, eli_main, { "attach", G_FLAG_VERBOSE | G_FLAG_LOADKLD, eli_main,
{ {
@ -134,7 +129,7 @@ struct g_command class_commands[] = {
{ 'r', "readonly", NULL, G_TYPE_BOOL }, { 'r', "readonly", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-dprv] [-k keyfile] prov" "[-dprv] [-k keyfile] prov"
}, },
{ "detach", 0, NULL, { "detach", 0, NULL,
{ {
@ -142,7 +137,7 @@ struct g_command class_commands[] = {
{ 'l', "last", NULL, G_TYPE_BOOL }, { 'l', "last", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fl] prov ..." "[-fl] prov ..."
}, },
{ "stop", 0, NULL, { "stop", 0, NULL,
{ {
@ -150,18 +145,18 @@ struct g_command class_commands[] = {
{ 'l', "last", NULL, G_TYPE_BOOL }, { 'l', "last", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "- an alias for 'detach'" "- an alias for 'detach'"
}, },
{ "onetime", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, { "onetime", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{ {
{ 'a', "aalgo", "", G_TYPE_STRING }, { 'a', "aalgo", "", G_TYPE_STRING },
{ 'd', "detach", NULL, G_TYPE_BOOL }, { 'd', "detach", NULL, G_TYPE_BOOL },
{ 'e', "ealgo", GELI_ENC_ALGO, G_TYPE_STRING }, { 'e', "ealgo", GELI_ENC_ALGO, G_TYPE_STRING },
{ 'l', "keylen", &keylen, G_TYPE_NUMBER }, { 'l', "keylen", "0", G_TYPE_NUMBER },
{ 's', "sectorsize", &sectorsize, G_TYPE_NUMBER }, { 's', "sectorsize", "0", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-d] [-a aalgo] [-e ealgo] [-l keylen] [-s sectorsize] prov" "[-d] [-a aalgo] [-e ealgo] [-l keylen] [-s sectorsize] prov"
}, },
{ "configure", G_FLAG_VERBOSE, eli_main, { "configure", G_FLAG_VERBOSE, eli_main,
{ {
@ -169,46 +164,46 @@ struct g_command class_commands[] = {
{ 'B', "noboot", NULL, G_TYPE_BOOL }, { 'B', "noboot", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-bB] prov ..." "[-bB] prov ..."
}, },
{ "setkey", G_FLAG_VERBOSE, eli_main, { "setkey", G_FLAG_VERBOSE, eli_main,
{ {
{ 'i', "iterations", &iterations, G_TYPE_NUMBER }, { 'i', "iterations", "-1", G_TYPE_NUMBER },
{ 'k', "keyfile", "", G_TYPE_STRING }, { 'k', "keyfile", "", G_TYPE_STRING },
{ 'K', "newkeyfile", "", G_TYPE_STRING }, { 'K', "newkeyfile", "", G_TYPE_STRING },
{ 'n', "keyno", &keyno, G_TYPE_NUMBER }, { 'n', "keyno", "-1", G_TYPE_NUMBER },
{ 'p', "nopassphrase", NULL, G_TYPE_BOOL }, { 'p', "nopassphrase", NULL, G_TYPE_BOOL },
{ 'P', "nonewpassphrase", NULL, G_TYPE_BOOL }, { 'P', "nonewpassphrase", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-pPv] [-n keyno] [-i iterations] [-k keyfile] [-K newkeyfile] prov" "[-pPv] [-n keyno] [-i iterations] [-k keyfile] [-K newkeyfile] prov"
}, },
{ "delkey", G_FLAG_VERBOSE, eli_main, { "delkey", G_FLAG_VERBOSE, eli_main,
{ {
{ 'a', "all", NULL, G_TYPE_BOOL }, { 'a', "all", NULL, G_TYPE_BOOL },
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
{ 'n', "keyno", &keyno, G_TYPE_NUMBER }, { 'n', "keyno", "-1", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-afv] [-n keyno] prov" "[-afv] [-n keyno] prov"
}, },
{ "kill", G_FLAG_VERBOSE, eli_main, { "kill", G_FLAG_VERBOSE, eli_main,
{ {
{ 'a', "all", NULL, G_TYPE_BOOL }, { 'a', "all", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-av] [prov ...]" "[-av] [prov ...]"
}, },
{ "backup", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL, { "backup", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
"[-v] prov file" "[-v] prov file"
}, },
{ "restore", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL, { "restore", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
"[-v] file prov" "[-v] file prov"
}, },
{ "clear", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "dump", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL, { "dump", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL

View File

@ -47,18 +47,16 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_JOURNAL_VERSION; uint32_t version = G_JOURNAL_VERSION;
static intmax_t default_jsize = -1;
static void journal_main(struct gctl_req *req, unsigned flags); static void journal_main(struct gctl_req *req, unsigned flags);
static void journal_clear(struct gctl_req *req); static void journal_clear(struct gctl_req *req);
static void journal_dump(struct gctl_req *req); static void journal_dump(struct gctl_req *req);
static void journal_label(struct gctl_req *req); static void journal_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "clear", G_FLAG_VERBOSE, journal_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, journal_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "dump", 0, journal_main, G_NULL_OPTS, NULL, { "dump", 0, journal_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "label", G_FLAG_VERBOSE, journal_main, { "label", G_FLAG_VERBOSE, journal_main,
@ -66,19 +64,19 @@ struct g_command class_commands[] = {
{ 'c', "checksum", NULL, G_TYPE_BOOL }, { 'c', "checksum", NULL, G_TYPE_BOOL },
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
{ 's', "jsize", &default_jsize, G_TYPE_NUMBER }, { 's', "jsize", "-1", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-cfhv] [-s jsize] dataprov [jprov]" "[-cfhv] [-s jsize] dataprov [jprov]"
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
{ "sync", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "sync", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v]" "[-v]"
}, },
G_CMD_SENTINEL G_CMD_SENTINEL

View File

@ -55,31 +55,31 @@ static void label_dump(struct gctl_req *req);
static void label_label(struct gctl_req *req); static void label_label(struct gctl_req *req);
struct g_command PUBSYM(class_commands)[] = { struct g_command PUBSYM(class_commands)[] = {
{ "clear", G_FLAG_VERBOSE, label_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, label_main, G_NULL_OPTS,
"[-v] dev ..." "[-v] dev ..."
}, },
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS, { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS,
NULL, "[-v] name dev" "[-v] name dev"
}, },
{ "destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
{ "dump", 0, label_main, G_NULL_OPTS, NULL, { "dump", 0, label_main, G_NULL_OPTS,
"dev ..." "dev ..."
}, },
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, label_main, G_NULL_OPTS, { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, label_main, G_NULL_OPTS,
NULL, "[-v] name dev" "[-v] name dev"
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -44,10 +44,9 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_MIRROR_VERSION; uint32_t version = G_MIRROR_VERSION;
#define GMIRROR_BALANCE "load" #define GMIRROR_BALANCE "load"
#define GMIRROR_SLICE "4096"
static intmax_t label_slice = 4096, configure_slice = -1; #define GMIRROR_PRIORITY "0"
static intmax_t insert_priority = 0, configure_priority = -1;
static void mirror_main(struct gctl_req *req, unsigned flags); static void mirror_main(struct gctl_req *req, unsigned flags);
static void mirror_activate(struct gctl_req *req); static void mirror_activate(struct gctl_req *req);
@ -56,10 +55,10 @@ static void mirror_dump(struct gctl_req *req);
static void mirror_label(struct gctl_req *req); static void mirror_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "activate", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS, NULL, { "activate", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS,
"[-v] name prov ..." "[-v] name prov ..."
}, },
{ "clear", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "configure", G_FLAG_VERBOSE, NULL, { "configure", G_FLAG_VERBOSE, NULL,
@ -71,20 +70,20 @@ struct g_command class_commands[] = {
{ 'F', "nofailsync", NULL, G_TYPE_BOOL }, { 'F', "nofailsync", NULL, G_TYPE_BOOL },
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
{ 'n', "noautosync", NULL, G_TYPE_BOOL }, { 'n', "noautosync", NULL, G_TYPE_BOOL },
{ 'p', "priority", &configure_priority, G_TYPE_NUMBER }, { 'p', "priority", "-1", G_TYPE_NUMBER },
{ 's', "slice", &configure_slice, G_TYPE_NUMBER }, { 's', "slice", "-1", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-adfFhnv] [-b balance] [-s slice] name\n" "[-adfFhnv] [-b balance] [-s slice] name\n"
"[-v] -p priority name prov" "[-v] -p priority name prov"
}, },
{ "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name prov ..." "[-v] name prov ..."
}, },
{ "dump", 0, mirror_main, G_NULL_OPTS, NULL, { "dump", 0, mirror_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"name ..." "name ..."
}, },
{ "label", G_FLAG_VERBOSE, mirror_main, { "label", G_FLAG_VERBOSE, mirror_main,
@ -93,24 +92,24 @@ struct g_command class_commands[] = {
{ 'F', "nofailsync", NULL, G_TYPE_BOOL }, { 'F', "nofailsync", NULL, G_TYPE_BOOL },
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
{ 'n', "noautosync", NULL, G_TYPE_BOOL }, { 'n', "noautosync", NULL, G_TYPE_BOOL },
{ 's', "slice", &label_slice, G_TYPE_NUMBER }, { 's', "slice", GMIRROR_SLICE, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-Fhnv] [-b balance] [-s slice] name prov ..." "[-Fhnv] [-b balance] [-s slice] name prov ..."
}, },
{ "insert", G_FLAG_VERBOSE, NULL, { "insert", G_FLAG_VERBOSE, NULL,
{ {
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
{ 'i', "inactive", NULL, G_TYPE_BOOL }, { 'i', "inactive", NULL, G_TYPE_BOOL },
{ 'p', "priority", &insert_priority, G_TYPE_NUMBER }, { 'p', "priority", GMIRROR_PRIORITY, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hiv] [-p priority] name prov ..." "[-hiv] [-p priority] name prov ..."
}, },
{ "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name prov ..." "[-v] name prov ..."
}, },
{ "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name prov ..." "[-v] name prov ..."
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
@ -118,7 +117,7 @@ struct g_command class_commands[] = {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -43,14 +43,14 @@ struct g_command class_commands[] = {
{ {
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] dev ..." "[-v] dev ..."
}, },
{ "destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] prov ..." "[-fv] prov ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -53,27 +53,27 @@ static void mp_add(struct gctl_req *);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ {
"label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, mp_main, G_NULL_OPTS, "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, mp_main, G_NULL_OPTS,
NULL, "[-v] name prov ..." "[-v] name prov ..."
}, },
{ {
"add", G_FLAG_VERBOSE | G_FLAG_LOADKLD, mp_main, G_NULL_OPTS, "add", G_FLAG_VERBOSE | G_FLAG_LOADKLD, mp_main, G_NULL_OPTS,
NULL, "[-v] name prov ..." "[-v] name prov ..."
}, },
{ {
"destroy", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, "destroy", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
NULL, "[-v] prov ..." "[-v] prov ..."
}, },
{ {
"clear", G_FLAG_VERBOSE, mp_main, G_NULL_OPTS, "clear", G_FLAG_VERBOSE, mp_main, G_NULL_OPTS,
NULL, "[-v] prov ..." "[-v] prov ..."
}, },
{ {
"rotate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, "rotate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
NULL, "[-v] prov ..." "[-v] prov ..."
}, },
{ {
"getactive", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, "getactive", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
NULL, "[-v] prov ..." "[-v] prov ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -38,44 +38,37 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_NOP_VERSION; uint32_t version = G_NOP_VERSION;
static intmax_t error = -1;
static intmax_t rfailprob = -1;
static intmax_t wfailprob = -1;
static intmax_t offset = 0;
static intmax_t secsize = 0;
static intmax_t size = 0;
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{ {
{ 'e', "error", &error, G_TYPE_NUMBER }, { 'e', "error", "-1", G_TYPE_NUMBER },
{ 'o', "offset", &offset, G_TYPE_NUMBER }, { 'o', "offset", "0", G_TYPE_NUMBER },
{ 'r', "rfailprob", &rfailprob, G_TYPE_NUMBER }, { 'r', "rfailprob", "-1", G_TYPE_NUMBER },
{ 's', "size", &size, G_TYPE_NUMBER }, { 's', "size", "0", G_TYPE_NUMBER },
{ 'S', "secsize", &secsize, G_TYPE_NUMBER }, { 'S', "secsize", "0", G_TYPE_NUMBER },
{ 'w', "wfailprob", &wfailprob, G_TYPE_NUMBER }, { 'w', "wfailprob", "-1", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] [-e error] [-o offset] [-r rfailprob] [-s size] " "[-v] [-e error] [-o offset] [-r rfailprob] [-s size] "
"[-S secsize] [-w wfailprob] dev ..." "[-S secsize] [-w wfailprob] dev ..."
}, },
{ "configure", G_FLAG_VERBOSE, NULL, { "configure", G_FLAG_VERBOSE, NULL,
{ {
{ 'e', "error", &error, G_TYPE_NUMBER }, { 'e', "error", "-1", G_TYPE_NUMBER },
{ 'r', "rfailprob", &rfailprob, G_TYPE_NUMBER }, { 'r', "rfailprob", "-1", G_TYPE_NUMBER },
{ 'w', "wfailprob", &wfailprob, G_TYPE_NUMBER }, { 'w', "wfailprob", "-1", G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] [-e error] [-r rfailprob] [-w wfailprob] prov ..." "[-v] [-e error] [-r rfailprob] [-w wfailprob] prov ..."
}, },
{ "destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] prov ..." "[-fv] prov ..."
}, },
{ "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL

View File

@ -58,15 +58,15 @@ __FBSDID("$FreeBSD$");
uint32_t PUBSYM(lib_version) = G_LIB_VERSION; uint32_t PUBSYM(lib_version) = G_LIB_VERSION;
uint32_t PUBSYM(version) = 0; uint32_t PUBSYM(version) = 0;
static char autofill[] = "*";
static char flags[] = "C";
static char sstart[32]; static char sstart[32];
static char ssize[32]; static char ssize[32];
static const char const bootcode_param[] = "bootcode"; #define GPART_AUTOFILL "*"
static const char const index_param[] = "index"; #define GPART_FLAGS "C"
static const char const partcode_param[] = "partcode";
#define GPART_PARAM_BOOTCODE "bootcode"
#define GPART_PARAM_INDEX "index"
#define GPART_PARAM_PARTCODE "partcode"
static struct gclass *find_class(struct gmesh *, const char *); static struct gclass *find_class(struct gmesh *, const char *);
static struct ggeom * find_geom(struct gclass *, const char *); static struct ggeom * find_geom(struct gclass *, const char *);
@ -87,76 +87,81 @@ static void gpart_write_partcode_vtoc8(struct ggeom *, int, void *);
struct g_command PUBSYM(class_commands)[] = { struct g_command PUBSYM(class_commands)[] = {
{ "add", 0, gpart_issue, { { "add", 0, gpart_issue, {
{ 'b', "start", autofill, G_TYPE_STRING }, { 'b', "start", GPART_AUTOFILL, G_TYPE_STRING },
{ 's', "size", autofill, G_TYPE_STRING }, { 's', "size", GPART_AUTOFILL, G_TYPE_STRING },
{ 't', "type", NULL, G_TYPE_STRING }, { 't', "type", NULL, G_TYPE_STRING },
{ 'i', index_param, "", G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, "", G_TYPE_ASCNUM },
{ 'l', "label", "", G_TYPE_STRING }, { 'l', "label", "", G_TYPE_STRING },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "[-b start] [-s size] -t type [-i index] [-l label] [-f flags] geom"
}, },
{ "bootcode", 0, gpart_bootcode, { { "bootcode", 0, gpart_bootcode, {
{ 'b', bootcode_param, "", G_TYPE_STRING }, { 'b', GPART_PARAM_BOOTCODE, "", G_TYPE_STRING },
{ 'p', partcode_param, "", G_TYPE_STRING }, { 'p', GPART_PARAM_PARTCODE, "", G_TYPE_STRING },
{ 'i', index_param, "", G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, "", G_TYPE_ASCNUM },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "bootcode [-b bootcode] [-p partcode] [-i index] [-f flags] geom"
},
{ "commit", 0, gpart_issue, G_NULL_OPTS,
"geom"
}, },
{ "commit", 0, gpart_issue, G_NULL_OPTS, "geom", NULL },
{ "create", 0, gpart_issue, { { "create", 0, gpart_issue, {
{ 's', "scheme", NULL, G_TYPE_STRING }, { 's', "scheme", NULL, G_TYPE_STRING },
{ 'n', "entries", "", G_TYPE_ASCNUM }, { 'n', "entries", "", G_TYPE_ASCNUM },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"provider", NULL "-s scheme [-n entries] [-f flags] provider"
}, },
{ "delete", 0, gpart_issue, { { "delete", 0, gpart_issue, {
{ 'i', index_param, NULL, G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, NULL, G_TYPE_ASCNUM },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "-i index [-f flags] geom"
}, },
{ "destroy", 0, gpart_issue, { { "destroy", 0, gpart_issue, {
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL }, "[-f flags] geom"
},
{ "modify", 0, gpart_issue, { { "modify", 0, gpart_issue, {
{ 'i', index_param, NULL, G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, NULL, G_TYPE_ASCNUM },
{ 'l', "label", "", G_TYPE_STRING }, { 'l', "label", "", G_TYPE_STRING },
{ 't', "type", "", G_TYPE_STRING }, { 't', "type", "", G_TYPE_STRING },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "-i index [-l label] [-t type] [-f flags] geom"
}, },
{ "set", 0, gpart_issue, { { "set", 0, gpart_issue, {
{ 'a', "attrib", NULL, G_TYPE_STRING }, { 'a', "attrib", NULL, G_TYPE_STRING },
{ 'i', index_param, NULL, G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, NULL, G_TYPE_ASCNUM },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "-a attrib -i index [-f flags] geom"
}, },
{ "show", 0, gpart_show, { { "show", 0, gpart_show, {
{ 'l', "show_label", NULL, G_TYPE_BOOL }, { 'l', "show_label", NULL, G_TYPE_BOOL },
{ 'r', "show_rawtype", NULL, G_TYPE_BOOL }, { 'r', "show_rawtype", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
NULL, "[-lr] [geom ...]" "[-lr] [geom ...]"
},
{ "undo", 0, gpart_issue, G_NULL_OPTS,
"geom"
}, },
{ "undo", 0, gpart_issue, G_NULL_OPTS, "geom", NULL },
{ "unset", 0, gpart_issue, { { "unset", 0, gpart_issue, {
{ 'a', "attrib", NULL, G_TYPE_STRING }, { 'a', "attrib", NULL, G_TYPE_STRING },
{ 'i', index_param, NULL, G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, NULL, G_TYPE_ASCNUM },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "-a attrib -i index [-f flags] geom"
}, },
{ "resize", 0, gpart_issue, { { "resize", 0, gpart_issue, {
{ 's', "size", autofill, G_TYPE_STRING }, { 's', "size", GPART_AUTOFILL, G_TYPE_STRING },
{ 'i', index_param, NULL, G_TYPE_ASCNUM }, { 'i', GPART_PARAM_INDEX, NULL, G_TYPE_ASCNUM },
{ 'f', "flags", flags, G_TYPE_STRING }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING },
G_OPT_SENTINEL }, G_OPT_SENTINEL },
"geom", NULL "[-s size] -i index [-f flags] geom"
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };
@ -281,7 +286,7 @@ gpart_autofill_resize(struct gctl_req *req)
char *val; char *val;
int error, idx; int error, idx;
s = gctl_get_ascii(req, index_param); s = gctl_get_ascii(req, GPART_PARAM_INDEX);
idx = strtol(s, &val, 10); idx = strtol(s, &val, 10);
if (idx < 1 || *s == '\0' || *val != '\0') if (idx < 1 || *s == '\0' || *val != '\0')
errx(EXIT_FAILURE, "invalid partition index"); errx(EXIT_FAILURE, "invalid partition index");
@ -773,11 +778,11 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
size_t bootsize, partsize; size_t bootsize, partsize;
int error, idx, vtoc8; int error, idx, vtoc8;
if (gctl_has_param(req, bootcode_param)) { if (gctl_has_param(req, GPART_PARAM_BOOTCODE)) {
s = gctl_get_ascii(req, bootcode_param); s = gctl_get_ascii(req, GPART_PARAM_BOOTCODE);
bootsize = 800 * 1024; /* Arbitrary limit. */ bootsize = 800 * 1024; /* Arbitrary limit. */
bootcode = gpart_bootfile_read(s, &bootsize); bootcode = gpart_bootfile_read(s, &bootsize);
error = gctl_change_param(req, bootcode_param, bootsize, error = gctl_change_param(req, GPART_PARAM_BOOTCODE, bootsize,
bootcode); bootcode);
if (error) if (error)
errc(EXIT_FAILURE, error, "internal error"); errc(EXIT_FAILURE, error, "internal error");
@ -797,7 +802,7 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
geom_deletetree(&mesh); geom_deletetree(&mesh);
errx(EXIT_FAILURE, "Class %s not found.", s); errx(EXIT_FAILURE, "Class %s not found.", s);
} }
s = gctl_get_ascii(req, "geom"); s = gctl_get_ascii(req, "arg0");
if (s == NULL) if (s == NULL)
abort(); abort();
gp = find_geom(classp, s); gp = find_geom(classp, s);
@ -808,11 +813,11 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
if (strcmp(s, "VTOC8") == 0) if (strcmp(s, "VTOC8") == 0)
vtoc8 = 1; vtoc8 = 1;
if (gctl_has_param(req, partcode_param)) { if (gctl_has_param(req, GPART_PARAM_PARTCODE)) {
s = gctl_get_ascii(req, partcode_param); s = gctl_get_ascii(req, GPART_PARAM_PARTCODE);
partsize = vtoc8 != 0 ? VTOC_BOOTSIZE : bootsize * 1024; partsize = vtoc8 != 0 ? VTOC_BOOTSIZE : bootsize * 1024;
partcode = gpart_bootfile_read(s, &partsize); partcode = gpart_bootfile_read(s, &partsize);
error = gctl_delete_param(req, partcode_param); error = gctl_delete_param(req, GPART_PARAM_PARTCODE);
if (error) if (error)
errc(EXIT_FAILURE, error, "internal error"); errc(EXIT_FAILURE, error, "internal error");
} else { } else {
@ -820,14 +825,14 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
partsize = 0; partsize = 0;
} }
if (gctl_has_param(req, index_param)) { if (gctl_has_param(req, GPART_PARAM_INDEX)) {
if (partcode == NULL) if (partcode == NULL)
errx(EXIT_FAILURE, "-i is only valid with -p"); errx(EXIT_FAILURE, "-i is only valid with -p");
s = gctl_get_ascii(req, index_param); s = gctl_get_ascii(req, GPART_PARAM_INDEX);
idx = strtol(s, &sp, 10); idx = strtol(s, &sp, 10);
if (idx < 1 || *s == '\0' || *sp != '\0') if (idx < 1 || *s == '\0' || *sp != '\0')
errx(EXIT_FAILURE, "invalid partition index"); errx(EXIT_FAILURE, "invalid partition index");
error = gctl_delete_param(req, index_param); error = gctl_delete_param(req, GPART_PARAM_INDEX);
if (error) if (error)
errc(EXIT_FAILURE, error, "internal error"); errc(EXIT_FAILURE, error, "internal error");
} else } else
@ -858,6 +863,10 @@ gpart_issue(struct gctl_req *req, unsigned int fl __unused)
const char *errstr; const char *errstr;
int error, status; int error, status;
if (gctl_get_int(req, "nargs") != 1)
errx(EXIT_FAILURE, "Invalid number of arguments.");
(void)gctl_delete_param(req, "nargs");
/* autofill parameters (if applicable). */ /* autofill parameters (if applicable). */
error = gpart_autofill(req); error = gpart_autofill(req);
if (error) { if (error) {

View File

@ -45,15 +45,13 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_RAID3_VERSION; uint32_t version = G_RAID3_VERSION;
static intmax_t default_blocksize = 0;
static void raid3_main(struct gctl_req *req, unsigned f); static void raid3_main(struct gctl_req *req, unsigned f);
static void raid3_clear(struct gctl_req *req); static void raid3_clear(struct gctl_req *req);
static void raid3_dump(struct gctl_req *req); static void raid3_dump(struct gctl_req *req);
static void raid3_label(struct gctl_req *req); static void raid3_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "clear", G_FLAG_VERBOSE, raid3_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, raid3_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "configure", G_FLAG_VERBOSE, NULL, { "configure", G_FLAG_VERBOSE, NULL,
@ -70,9 +68,9 @@ struct g_command class_commands[] = {
{ 'W', "noverify", NULL, G_TYPE_BOOL }, { 'W', "noverify", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-adfFhnrRvwW] name" "[-adfFhnrRvwW] name"
}, },
{ "dump", 0, raid3_main, G_NULL_OPTS, NULL, { "dump", 0, raid3_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "insert", G_FLAG_VERBOSE, NULL, { "insert", G_FLAG_VERBOSE, NULL,
@ -81,7 +79,7 @@ struct g_command class_commands[] = {
{ 'n', "number", NULL, G_TYPE_NUMBER }, { 'n', "number", NULL, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hv] <-n number> name prov" "[-hv] <-n number> name prov"
}, },
{ "label", G_FLAG_VERBOSE, raid3_main, { "label", G_FLAG_VERBOSE, raid3_main,
{ {
@ -89,13 +87,13 @@ struct g_command class_commands[] = {
{ 'F', "nofailsync", NULL, G_TYPE_BOOL }, { 'F', "nofailsync", NULL, G_TYPE_BOOL },
{ 'n', "noautosync", NULL, G_TYPE_BOOL }, { 'n', "noautosync", NULL, G_TYPE_BOOL },
{ 'r', "round_robin", NULL, G_TYPE_BOOL }, { 'r', "round_robin", NULL, G_TYPE_BOOL },
{ 's', "blocksize", &default_blocksize, G_TYPE_NUMBER }, { 's', "sectorsize", "0", G_TYPE_NUMBER },
{ 'w', "verify", NULL, G_TYPE_BOOL }, { 'w', "verify", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hFnrvw] [-s blocksize] name prov prov prov ..." "[-hFnrvw] [-s blocksize] name prov prov prov ..."
}, },
{ "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name prov" "[-v] name prov"
}, },
{ "remove", G_FLAG_VERBOSE, NULL, { "remove", G_FLAG_VERBOSE, NULL,
@ -103,14 +101,14 @@ struct g_command class_commands[] = {
{ 'n', "number", NULL, G_TYPE_NUMBER }, { 'n', "number", NULL, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-v] <-n number> name" "[-v] <-n number> name"
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };
@ -193,7 +191,7 @@ raid3_label(struct gctl_req *req)
* sectorsizes of every disk and find the smallest mediasize. * sectorsizes of every disk and find the smallest mediasize.
*/ */
mediasize = 0; mediasize = 0;
sectorsize = gctl_get_intmax(req, "blocksize"); sectorsize = gctl_get_intmax(req, "sectorsize");
for (i = 1; i < nargs; i++) { for (i = 1; i < nargs; i++) {
str = gctl_get_ascii(req, "arg%d", i); str = gctl_get_ascii(req, "arg%d", i);
msize = g_get_mediasize(str); msize = g_get_mediasize(str);

View File

@ -60,11 +60,13 @@ uint32_t version = G_SCHED_VERSION;
* Adapt to differences in geom library. * Adapt to differences in geom library.
* in V1 struct g_command misses gc_argname, eld, and G_BOOL is undefined * in V1 struct g_command misses gc_argname, eld, and G_BOOL is undefined
*/ */
#if G_LIB_VERSION == 1 #if G_LIB_VERSION <= 1
#define G_ARGNAME
#define G_TYPE_BOOL G_TYPE_NUMBER #define G_TYPE_BOOL G_TYPE_NUMBER
#else #endif
#if G_LIB_VERSION >= 3 && G_LIB_VERSION <= 4
#define G_ARGNAME NULL, #define G_ARGNAME NULL,
#else
#define G_ARGNAME
#endif #endif
static void static void

View File

@ -52,10 +52,10 @@ static void shsec_dump(struct gctl_req *req);
static void shsec_label(struct gctl_req *req); static void shsec_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "clear", G_FLAG_VERBOSE, shsec_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, shsec_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "dump", 0, shsec_main, G_NULL_OPTS, NULL, { "dump", 0, shsec_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, shsec_main, { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, shsec_main,
@ -63,14 +63,14 @@ struct g_command class_commands[] = {
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hv] name prov prov ..." "[-hv] name prov prov ..."
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_STRIPE_VERSION; uint32_t version = G_STRIPE_VERSION;
static intmax_t default_stripesize = 65536; #define GSTRIPE_STRIPESIZE "65536"
static void stripe_main(struct gctl_req *req, unsigned flags); static void stripe_main(struct gctl_req *req, unsigned flags);
static void stripe_clear(struct gctl_req *req); static void stripe_clear(struct gctl_req *req);
@ -54,40 +54,40 @@ static void stripe_dump(struct gctl_req *req);
static void stripe_label(struct gctl_req *req); static void stripe_label(struct gctl_req *req);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{ "clear", G_FLAG_VERBOSE, stripe_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, stripe_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{ {
{ 's', "stripesize", &default_stripesize, G_TYPE_NUMBER }, { 's', "stripesize", GSTRIPE_STRIPESIZE, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hv] [-s stripesize] name prov prov ..." "[-hv] [-s stripesize] name prov prov ..."
}, },
{ "destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
{ "dump", 0, stripe_main, G_NULL_OPTS, NULL, { "dump", 0, stripe_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, stripe_main, { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, stripe_main,
{ {
{ 'h', "hardcode", NULL, G_TYPE_BOOL }, { 'h', "hardcode", NULL, G_TYPE_BOOL },
{ 's', "stripesize", &default_stripesize, G_TYPE_NUMBER }, { 's', "stripesize", GSTRIPE_STRIPESIZE, G_TYPE_NUMBER },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-hv] [-s stripesize] name prov prov ..." "[-hv] [-s stripesize] name prov prov ..."
}, },
{ "stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{ 'f', "force", NULL, G_TYPE_BOOL }, { 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -48,8 +48,9 @@ __FBSDID("$FreeBSD$");
uint32_t lib_version = G_LIB_VERSION; uint32_t lib_version = G_LIB_VERSION;
uint32_t version = G_VIRSTOR_VERSION; uint32_t version = G_VIRSTOR_VERSION;
static intmax_t chunk_size = 4 * 1024 * 1024; /* in kB (default: 4 MB) */
static intmax_t vir_size = 2ULL << 40; /* in MB (default: 2 TB) */ #define GVIRSTOR_CHUNK_SIZE "4M"
#define GVIRSTOR_VIR_SIZE "2T"
#if G_LIB_VERSION == 1 #if G_LIB_VERSION == 1
/* Support RELENG_6 */ /* Support RELENG_6 */
@ -62,44 +63,44 @@ static intmax_t vir_size = 2ULL << 40; /* in MB (default: 2 TB) */
static void virstor_main(struct gctl_req *req, unsigned flags); static void virstor_main(struct gctl_req *req, unsigned flags);
struct g_command class_commands[] = { struct g_command class_commands[] = {
{"clear", G_FLAG_VERBOSE, virstor_main, G_NULL_OPTS, NULL, { "clear", G_FLAG_VERBOSE, virstor_main, G_NULL_OPTS,
"[-v] prov ..." "[-v] prov ..."
}, },
{"dump", 0, virstor_main, G_NULL_OPTS, NULL, { "dump", 0, virstor_main, G_NULL_OPTS,
"prov ..." "prov ..."
}, },
{"label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, virstor_main, { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, virstor_main,
{ {
{'h', "hardcode", NULL, G_TYPE_BOOL}, { 'h', "hardcode", NULL, G_TYPE_BOOL},
{'m', "chunk_size", &chunk_size, G_TYPE_NUMBER}, { 'm', "chunk_size", GVIRSTOR_CHUNK_SIZE, G_TYPE_NUMBER},
{'s', "vir_size", &vir_size, G_TYPE_NUMBER}, { 's', "vir_size", GVIRSTOR_VIR_SIZE, G_TYPE_NUMBER},
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-h] [-v] [-m chunk_size] [-s vir_size] name provider0 [provider1 ...]" "[-h] [-v] [-m chunk_size] [-s vir_size] name provider0 [provider1 ...]"
}, },
{"destroy", G_FLAG_VERBOSE, NULL, { "destroy", G_FLAG_VERBOSE, NULL,
{ {
{'f', "force", NULL, G_TYPE_BOOL}, { 'f', "force", NULL, G_TYPE_BOOL},
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ..." "[-fv] name ..."
}, },
{"stop", G_FLAG_VERBOSE, NULL, { "stop", G_FLAG_VERBOSE, NULL,
{ {
{'f', "force", NULL, G_TYPE_BOOL}, { 'f', "force", NULL, G_TYPE_BOOL},
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-fv] name ... (alias for \"destroy\")" "[-fv] name ... (alias for \"destroy\")"
}, },
{"add", G_FLAG_VERBOSE, NULL, { "add", G_FLAG_VERBOSE, NULL,
{ {
{'h', "hardcode", NULL, G_TYPE_BOOL}, { 'h', "hardcode", NULL, G_TYPE_BOOL},
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-vh] name prov [prov ...]" "[-vh] name prov [prov ...]"
}, },
{"remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name ..." "[-v] name ..."
}, },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };

View File

@ -75,8 +75,8 @@ static void std_load(struct gctl_req *req, unsigned flags);
static void std_unload(struct gctl_req *req, unsigned flags); static void std_unload(struct gctl_req *req, unsigned flags);
struct g_command std_commands[] = { struct g_command std_commands[] = {
{ "help", 0, std_help, G_NULL_OPTS, NULL, NULL }, { "help", 0, std_help, G_NULL_OPTS, NULL },
{ "list", 0, std_list, G_NULL_OPTS, NULL, { "list", 0, std_list, G_NULL_OPTS,
"[name ...]" "[name ...]"
}, },
{ "status", 0, std_status, { "status", 0, std_status,
@ -84,11 +84,11 @@ struct g_command std_commands[] = {
{ 's', "script", NULL, G_TYPE_BOOL }, { 's', "script", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL G_OPT_SENTINEL
}, },
NULL, "[-s] [name ...]" "[-s] [name ...]"
}, },
{ "load", G_FLAG_VERBOSE | G_FLAG_LOADKLD, std_load, G_NULL_OPTS, { "load", G_FLAG_VERBOSE | G_FLAG_LOADKLD, std_load, G_NULL_OPTS,
NULL, NULL }, NULL },
{ "unload", G_FLAG_VERBOSE, std_unload, G_NULL_OPTS, NULL, NULL }, { "unload", G_FLAG_VERBOSE, std_unload, G_NULL_OPTS, NULL },
G_CMD_SENTINEL G_CMD_SENTINEL
}; };
@ -129,8 +129,6 @@ usage_command(struct g_command *cmd, const char *prefix)
if (opt->go_val != NULL || G_OPT_TYPE(opt) == G_TYPE_BOOL) if (opt->go_val != NULL || G_OPT_TYPE(opt) == G_TYPE_BOOL)
fprintf(stderr, "]"); fprintf(stderr, "]");
} }
if (cmd->gc_argname)
fprintf(stderr, " %s", cmd->gc_argname);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
@ -348,39 +346,24 @@ parse_arguments(struct g_command *cmd, struct gctl_req *req, int *argc,
warnx("Option '%c' not specified.", warnx("Option '%c' not specified.",
opt->go_char); opt->go_char);
usage(); usage();
} else if (G_OPT_TYPE(opt) == G_TYPE_ASCNUM &&
*(const char *)opt->go_val == '\0') {
; /* add nothing. */
} else { } else {
if (G_OPT_TYPE(opt) == G_TYPE_NUMBER) { set_option(req, opt, opt->go_val);
gctl_ro_param(req, opt->go_name,
sizeof(intmax_t), opt->go_val);
} else if (G_OPT_TYPE(opt) == G_TYPE_STRING ||
G_OPT_TYPE(opt) == G_TYPE_ASCNUM) {
if (cmd->gc_argname == NULL ||
opt->go_val == NULL ||
*(const char *)opt->go_val != '\0')
gctl_ro_param(req, opt->go_name,
-1, opt->go_val);
} else {
assert(!"Invalid type");
}
} }
} }
} }
if (cmd->gc_argname == NULL) { /*
/* * Add rest of given arguments.
* Add rest of given arguments. */
*/ gctl_ro_param(req, "nargs", sizeof(int), argc);
gctl_ro_param(req, "nargs", sizeof(int), argc); for (i = 0; i < (unsigned)*argc; i++) {
for (i = 0; i < (unsigned)*argc; i++) { char argname[16];
char argname[16];
snprintf(argname, sizeof(argname), "arg%u", i); snprintf(argname, sizeof(argname), "arg%u", i);
gctl_ro_param(req, argname, -1, (*argv)[i]); gctl_ro_param(req, argname, -1, (*argv)[i]);
}
} else {
if (*argc != 1)
usage();
gctl_ro_param(req, cmd->gc_argname, -1, (*argv)[0]);
} }
} }

View File

@ -28,7 +28,7 @@
#ifndef _GEOM_H_ #ifndef _GEOM_H_
#define _GEOM_H_ #define _GEOM_H_
#define G_LIB_VERSION 4 #define G_LIB_VERSION 5
#define G_FLAG_NONE 0x0000 #define G_FLAG_NONE 0x0000
#define G_FLAG_VERBOSE 0x0001 #define G_FLAG_VERBOSE 0x0001
@ -49,7 +49,7 @@
#define G_OPT_SENTINEL { '\0', NULL, NULL, G_TYPE_NONE } #define G_OPT_SENTINEL { '\0', NULL, NULL, G_TYPE_NONE }
#define G_NULL_OPTS { G_OPT_SENTINEL } #define G_NULL_OPTS { G_OPT_SENTINEL }
#define G_CMD_SENTINEL { NULL, 0, NULL, G_NULL_OPTS, NULL, NULL } #define G_CMD_SENTINEL { NULL, 0, NULL, G_NULL_OPTS, NULL }
struct g_option { struct g_option {
char go_char; char go_char;
@ -63,7 +63,6 @@ struct g_command {
unsigned gc_flags; unsigned gc_flags;
void (*gc_func)(struct gctl_req *, unsigned); void (*gc_func)(struct gctl_req *, unsigned);
struct g_option gc_options[G_OPT_MAX]; struct g_option gc_options[G_OPT_MAX];
const char *gc_argname;
const char *gc_usage; const char *gc_usage;
}; };
#endif /* !_GEOM_H_ */ #endif /* !_GEOM_H_ */

View File

@ -1327,6 +1327,10 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
parm = 0; parm = 0;
switch (ap->name[0]) { switch (ap->name[0]) {
case 'a': case 'a':
if (!strcmp(ap->name, "arg0")) {
parm = mparms &
(G_PART_PARM_GEOM | G_PART_PARM_PROVIDER);
}
if (!strcmp(ap->name, "attrib")) if (!strcmp(ap->name, "attrib"))
parm = G_PART_PARM_ATTRIB; parm = G_PART_PARM_ATTRIB;
break; break;
@ -1346,10 +1350,6 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
if (!strcmp(ap->name, "flags")) if (!strcmp(ap->name, "flags"))
parm = G_PART_PARM_FLAGS; parm = G_PART_PARM_FLAGS;
break; break;
case 'g':
if (!strcmp(ap->name, "geom"))
parm = G_PART_PARM_GEOM;
break;
case 'i': case 'i':
if (!strcmp(ap->name, "index")) if (!strcmp(ap->name, "index"))
parm = G_PART_PARM_INDEX; parm = G_PART_PARM_INDEX;
@ -1362,10 +1362,6 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
if (!strcmp(ap->name, "output")) if (!strcmp(ap->name, "output"))
parm = G_PART_PARM_OUTPUT; parm = G_PART_PARM_OUTPUT;
break; break;
case 'p':
if (!strcmp(ap->name, "provider"))
parm = G_PART_PARM_PROVIDER;
break;
case 's': case 's':
if (!strcmp(ap->name, "scheme")) if (!strcmp(ap->name, "scheme"))
parm = G_PART_PARM_SCHEME; parm = G_PART_PARM_SCHEME;