summaryrefslogtreecommitdiffstats
path: root/sbin/geom/class
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2007-05-15 20:25:18 +0000
committermarcel <marcel@FreeBSD.org>2007-05-15 20:25:18 +0000
commit40656d08513a31c921315a57a9bbd86878c991fa (patch)
treede4581799ddcced445b8a47904084798e54bf914 /sbin/geom/class
parent8ea441aed588aa6eb59168cf5f54cf2931aaf6e1 (diff)
downloadFreeBSD-src-40656d08513a31c921315a57a9bbd86878c991fa.zip
FreeBSD-src-40656d08513a31c921315a57a9bbd86878c991fa.tar.gz
Add gpart(8).
In order to support gpart(8), geom(8) needs to support a named argument. Also, optional string parameters are a requirement. Both have been added to the infrastructure. The former required all existing classes to be adjusted.
Diffstat (limited to 'sbin/geom/class')
-rw-r--r--sbin/geom/class/Makefile1
-rw-r--r--sbin/geom/class/cache/geom_cache.c16
-rw-r--r--sbin/geom/class/concat/geom_concat.c12
-rw-r--r--sbin/geom/class/eli/geom_eli.c28
-rw-r--r--sbin/geom/class/journal/geom_journal.c10
-rw-r--r--sbin/geom/class/label/geom_label.c12
-rw-r--r--sbin/geom/class/mirror/geom_mirror.c22
-rw-r--r--sbin/geom/class/multipath/geom_multipath.c4
-rw-r--r--sbin/geom/class/nop/geom_nop.c10
-rw-r--r--sbin/geom/class/part/Makefile9
-rw-r--r--sbin/geom/class/part/geom_part.c91
-rw-r--r--sbin/geom/class/part/gpart.8308
-rw-r--r--sbin/geom/class/raid3/geom_raid3.c16
-rw-r--r--sbin/geom/class/shsec/geom_shsec.c8
-rw-r--r--sbin/geom/class/stripe/geom_stripe.c12
15 files changed, 484 insertions, 75 deletions
diff --git a/sbin/geom/class/Makefile b/sbin/geom/class/Makefile
index f52695b..7b99726 100644
--- a/sbin/geom/class/Makefile
+++ b/sbin/geom/class/Makefile
@@ -12,6 +12,7 @@ SUBDIR+=label
SUBDIR+=mirror
SUBDIR+=multipath
SUBDIR+=nop
+SUBDIR+=part
SUBDIR+=raid3
SUBDIR+=shsec
SUBDIR+=stripe
diff --git a/sbin/geom/class/cache/geom_cache.c b/sbin/geom/class/cache/geom_cache.c
index 5ca829c..636c541 100644
--- a/sbin/geom/class/cache/geom_cache.c
+++ b/sbin/geom/class/cache/geom_cache.c
@@ -53,7 +53,7 @@ static void cache_dump(struct gctl_req *req);
static void cache_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, cache_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, cache_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
{ "configure", G_FLAG_VERBOSE, NULL,
@@ -62,7 +62,7 @@ struct g_command class_commands[] = {
{ 's', "size", &size_configure, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-v] [-b blocksize] [-s size] name"
+ NULL, "[-v] [-b blocksize] [-s size] name"
},
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{
@@ -70,16 +70,16 @@ struct g_command class_commands[] = {
{ 's', "size", &size_label, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-v] [-b blocksize] [-s size] name prov"
+ NULL, "[-v] [-b blocksize] [-s size] name prov"
},
{ "destroy", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
- { "dump", 0, cache_main, G_NULL_OPTS,
+ { "dump", 0, cache_main, G_NULL_OPTS, NULL,
"prov ..."
},
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, cache_main,
@@ -88,9 +88,9 @@ struct g_command class_commands[] = {
{ 's', "size", &size_label, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-v] [-b blocksize] [-s size] name prov"
+ NULL, "[-v] [-b blocksize] [-s size] name prov"
},
- { "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v] name ..."
},
{ "stop", G_FLAG_VERBOSE, NULL,
@@ -98,7 +98,7 @@ struct g_command class_commands[] = {
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/concat/geom_concat.c b/sbin/geom/class/concat/geom_concat.c
index 80fe26b..e1b7342 100644
--- a/sbin/geom/class/concat/geom_concat.c
+++ b/sbin/geom/class/concat/geom_concat.c
@@ -51,20 +51,20 @@ static void concat_dump(struct gctl_req *req);
static void concat_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, concat_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, concat_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS,
- "[-v] name prov ..."
+ NULL, "[-v] name prov ..."
},
{ "destroy", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
- { "dump", 0, concat_main, G_NULL_OPTS,
+ { "dump", 0, concat_main, G_NULL_OPTS, NULL,
"prov ..."
},
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, concat_main,
@@ -72,14 +72,14 @@ struct g_command class_commands[] = {
{ 'h', "hardcode", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-hv] name prov ..."
+ NULL, "[-hv] name prov ..."
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/eli/geom_eli.c b/sbin/geom/class/eli/geom_eli.c
index 7c961d9..46f1bce 100644
--- a/sbin/geom/class/eli/geom_eli.c
+++ b/sbin/geom/class/eli/geom_eli.c
@@ -105,7 +105,7 @@ struct g_command class_commands[] = {
{ 's', "sectorsize", &sectorsize, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-bPv] [-a aalgo] [-e ealgo] [-i iterations] [-l keylen] [-K newkeyfile] [-s sectorsize] prov"
+ NULL, "[-bPv] [-a aalgo] [-e ealgo] [-i iterations] [-l keylen] [-K newkeyfile] [-s sectorsize] prov"
},
{ "label", G_FLAG_VERBOSE, eli_main,
{
@@ -119,7 +119,7 @@ struct g_command class_commands[] = {
{ 's', "sectorsize", &sectorsize, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "- an alias for 'init'"
+ NULL, "- an alias for 'init'"
},
{ "attach", G_FLAG_VERBOSE | G_FLAG_LOADKLD, eli_main,
{
@@ -129,7 +129,7 @@ struct g_command class_commands[] = {
{ 'r', "readonly", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-dprv] [-k keyfile] prov"
+ NULL, "[-dprv] [-k keyfile] prov"
},
{ "detach", 0, NULL,
{
@@ -137,7 +137,7 @@ struct g_command class_commands[] = {
{ 'l', "last", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fl] prov ..."
+ NULL, "[-fl] prov ..."
},
{ "stop", 0, NULL,
{
@@ -145,7 +145,7 @@ struct g_command class_commands[] = {
{ 'l', "last", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "- an alias for 'detach'"
+ NULL, "- an alias for 'detach'"
},
{ "onetime", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{
@@ -156,7 +156,7 @@ struct g_command class_commands[] = {
{ 's', "sectorsize", &sectorsize, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-d] [-a aalgo] [-e ealgo] [-l keylen] [-s sectorsize] prov ..."
+ NULL, "[-d] [-a aalgo] [-e ealgo] [-l keylen] [-s sectorsize] prov ..."
},
{ "configure", G_FLAG_VERBOSE, eli_main,
{
@@ -164,7 +164,7 @@ struct g_command class_commands[] = {
{ 'B', "noboot", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-bB] prov ..."
+ NULL, "[-bB] prov ..."
},
{ "setkey", G_FLAG_VERBOSE, eli_main,
{
@@ -176,7 +176,7 @@ struct g_command class_commands[] = {
{ 'P', "nonewpassphrase", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-pPv] [-n keyno] [-i iterations] [-k keyfile] [-K newkeyfile] prov"
+ NULL, "[-pPv] [-n keyno] [-i iterations] [-k keyfile] [-K newkeyfile] prov"
},
{ "delkey", G_FLAG_VERBOSE, eli_main,
{
@@ -185,25 +185,25 @@ struct g_command class_commands[] = {
{ 'n', "keyno", &keyno, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-afv] [-n keyno] prov"
+ NULL, "[-afv] [-n keyno] prov"
},
{ "kill", G_FLAG_VERBOSE, eli_main,
{
{ 'a', "all", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-av] [prov ...]"
+ NULL, "[-av] [prov ...]"
},
- { "backup", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
+ { "backup", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL,
"[-v] prov file"
},
- { "restore", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
+ { "restore", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL,
"[-v] file prov"
},
- { "clear", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
- { "dump", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS,
+ { "dump", G_FLAG_VERBOSE, eli_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
G_CMD_SENTINEL
diff --git a/sbin/geom/class/journal/geom_journal.c b/sbin/geom/class/journal/geom_journal.c
index ea620b2..3716999 100644
--- a/sbin/geom/class/journal/geom_journal.c
+++ b/sbin/geom/class/journal/geom_journal.c
@@ -55,10 +55,10 @@ static void journal_dump(struct gctl_req *req);
static void journal_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, journal_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, journal_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
- { "dump", 0, journal_main, G_NULL_OPTS,
+ { "dump", 0, journal_main, G_NULL_OPTS, NULL,
"prov ..."
},
{ "label", G_FLAG_VERBOSE, journal_main,
@@ -69,16 +69,16 @@ struct g_command class_commands[] = {
{ 's', "jsize", &default_jsize, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-cfhv] [-s jsize] dataprov [jprov]"
+ NULL, "[-cfhv] [-s jsize] dataprov [jprov]"
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
- { "sync", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "sync", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v]"
},
G_CMD_SENTINEL
diff --git a/sbin/geom/class/label/geom_label.c b/sbin/geom/class/label/geom_label.c
index c3bdebc..9e27eec 100644
--- a/sbin/geom/class/label/geom_label.c
+++ b/sbin/geom/class/label/geom_label.c
@@ -50,31 +50,31 @@ static void label_dump(struct gctl_req *req);
static void label_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, label_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, label_main, G_NULL_OPTS, NULL,
"[-v] dev ..."
},
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS,
- "[-v] name dev"
+ NULL, "[-v] name dev"
},
{ "destroy", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
- { "dump", 0, label_main, G_NULL_OPTS,
+ { "dump", 0, label_main, G_NULL_OPTS, NULL,
"dev ..."
},
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, label_main, G_NULL_OPTS,
- "[-v] name dev"
+ NULL, "[-v] name dev"
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/mirror/geom_mirror.c b/sbin/geom/class/mirror/geom_mirror.c
index 7fc01cd..38912a3 100644
--- a/sbin/geom/class/mirror/geom_mirror.c
+++ b/sbin/geom/class/mirror/geom_mirror.c
@@ -56,10 +56,10 @@ static void mirror_dump(struct gctl_req *req);
static void mirror_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "activate", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS,
+ { "activate", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS, NULL,
"[-v] name prov ..."
},
- { "clear", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, mirror_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
{ "configure", G_FLAG_VERBOSE, NULL,
@@ -74,15 +74,15 @@ struct g_command class_commands[] = {
{ 's', "slice", &configure_slice, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-adfFhnv] [-b balance] [-s slice] name"
+ NULL, "[-adfFhnv] [-b balance] [-s slice] name"
},
- { "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v] name prov ..."
},
- { "dump", 0, mirror_main, G_NULL_OPTS,
+ { "dump", 0, mirror_main, G_NULL_OPTS, NULL,
"prov ..."
},
- { "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"name ..."
},
{ "label", G_FLAG_VERBOSE, mirror_main,
@@ -94,7 +94,7 @@ struct g_command class_commands[] = {
{ 's', "slice", &label_slice, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-Fhnv] [-b balance] [-s slice] name prov ..."
+ NULL, "[-Fhnv] [-b balance] [-s slice] name prov ..."
},
{ "insert", G_FLAG_VERBOSE, NULL,
{
@@ -103,12 +103,12 @@ struct g_command class_commands[] = {
{ 'p', "priority", &insert_priority, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-hiv] [-p priority] name prov ..."
+ NULL, "[-hiv] [-p priority] name prov ..."
},
- { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v] name prov ..."
},
- { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v] name prov ..."
},
{ "stop", G_FLAG_VERBOSE, NULL,
@@ -116,7 +116,7 @@ struct g_command class_commands[] = {
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/multipath/geom_multipath.c b/sbin/geom/class/multipath/geom_multipath.c
index d729af7..1bb3f32 100644
--- a/sbin/geom/class/multipath/geom_multipath.c
+++ b/sbin/geom/class/multipath/geom_multipath.c
@@ -52,11 +52,11 @@ static void mp_clear(struct gctl_req *);
struct g_command class_commands[] = {
{
"label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, mp_main, G_NULL_OPTS,
- "[-v] name prov ..."
+ NULL, "[-v] name prov ..."
},
{
"clear", G_FLAG_VERBOSE, mp_main, G_NULL_OPTS,
- "[-v] prov ..."
+ NULL, "[-v] prov ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/nop/geom_nop.c b/sbin/geom/class/nop/geom_nop.c
index e33ee54..7306add 100644
--- a/sbin/geom/class/nop/geom_nop.c
+++ b/sbin/geom/class/nop/geom_nop.c
@@ -56,8 +56,8 @@ struct g_command class_commands[] = {
{ 'w', "wfailprob", &wfailprob, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-v] [-e error] [-o offset] [-r rfailprob] [-s size] [-S secsize] "
- "[-w wfailprob] dev ..."
+ NULL, "[-v] [-e error] [-o offset] [-r rfailprob] [-s size] "
+ "[-S secsize] [-w wfailprob] dev ..."
},
{ "configure", G_FLAG_VERBOSE, NULL,
{
@@ -66,16 +66,16 @@ struct g_command class_commands[] = {
{ 'w', "wfailprob", &wfailprob, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-v] [-e error] [-r rfailprob] [-w wfailprob] prov ..."
+ NULL, "[-v] [-e error] [-r rfailprob] [-w wfailprob] prov ..."
},
{ "destroy", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] prov ..."
+ NULL, "[-fv] prov ..."
},
- { "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
G_CMD_SENTINEL
diff --git a/sbin/geom/class/part/Makefile b/sbin/geom/class/part/Makefile
new file mode 100644
index 0000000..0588646
--- /dev/null
+++ b/sbin/geom/class/part/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../misc
+
+CLASS= part
+
+WARNS?= 4
+
+.include <bsd.lib.mk>
diff --git a/sbin/geom/class/part/geom_part.c b/sbin/geom/class/part/geom_part.c
new file mode 100644
index 0000000..ce9dfb3
--- /dev/null
+++ b/sbin/geom/class/part/geom_part.c
@@ -0,0 +1,91 @@
+/*-
+ * Copyright (c) 2007 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <readpassphrase.h>
+#include <string.h>
+#include <strings.h>
+#include <libgeom.h>
+#include <paths.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "core/geom.h"
+#include "misc/subr.h"
+
+uint32_t lib_version = G_LIB_VERSION;
+uint32_t version = 0;
+
+static char optional[] = "";
+static char flags[] = "C";
+
+struct g_command class_commands[] = {
+ { "add", 0, NULL, {
+ { 'b', "start", NULL, G_TYPE_STRING },
+ { 's', "size", NULL, G_TYPE_STRING },
+ { 't', "type", NULL, G_TYPE_STRING },
+ { 'i', "index", optional, G_TYPE_STRING },
+ { 'l', "label", optional, G_TYPE_STRING },
+ { 'f', "flags", flags, G_TYPE_STRING },
+ G_OPT_SENTINEL },
+ "geom", NULL,
+ },
+ { "commit", 0, NULL, G_NULL_OPTS, "geom", NULL },
+ { "create", 0, NULL, {
+ { 's', "scheme", NULL, G_TYPE_STRING },
+ { 'n', "entries", optional, G_TYPE_STRING },
+ { 'f', "flags", flags, G_TYPE_STRING },
+ G_OPT_SENTINEL },
+ "provider", NULL
+ },
+ { "delete", 0, NULL, {
+ { 'i', "index", NULL, G_TYPE_STRING },
+ { 'f', "flags", flags, G_TYPE_STRING },
+ G_OPT_SENTINEL },
+ "geom", NULL
+ },
+ { "destroy", 0, NULL, {
+ { 'f', "flags", flags, G_TYPE_STRING },
+ G_OPT_SENTINEL },
+ "geom", NULL },
+ { "modify", 0, NULL, {
+ { 'i', "index", NULL, G_TYPE_STRING },
+ { 'l', "label", optional, G_TYPE_STRING },
+ { 't', "type", optional, G_TYPE_STRING },
+ { 'f', "flags", flags, G_TYPE_STRING },
+ G_OPT_SENTINEL },
+ "geom", NULL
+ },
+ { "undo", 0, NULL, G_NULL_OPTS, "geom", NULL },
+ G_CMD_SENTINEL
+};
diff --git a/sbin/geom/class/part/gpart.8 b/sbin/geom/class/part/gpart.8
new file mode 100644
index 0000000..f98aefa
--- /dev/null
+++ b/sbin/geom/class/part/gpart.8
@@ -0,0 +1,308 @@
+.\" Copyright (c) 2007 Marcel Moolenaar
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd May 15, 2007
+.Dt GPART 8
+.Os
+.Sh NAME
+.Nm gpart
+.Nd "control utility for the disk partitioning GEOM class"
+.Sh SYNOPSIS
+To add support for the disk partitioning GEOM class,
+place one or more of the following
+lines in your kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "options GEOM_PART_APM"
+.Cd "options GEOM_PART_GPT"
+.Ed
+.Pp
+The GEOM_PART_APM option adds support for the Apple Partition Map (APM)
+found on Apple Macintosh computers, and the GEOM_PART_GPT option adds
+support for the GUID Partition Table (GPT) found on Intel Itanium
+computers and Intel-based Macintosh computers.
+.Pp
+Usage of the
+.Xr gpart 8
+utility:
+.Pp
+.\" ==== ADD ====
+.Nm
+.Cm add
+.Fl b Ar start
+.Fl s Ar size
+.Fl t Ar type
+.Op Fl i Ar index
+.Op Fl l Ar label
+.Op Fl f Ar flags
+.Ar geom
+.\" ==== COMMIT ====
+.Nm
+.Cm commit
+.Ar geom
+.\" ==== CREATE ====
+.Nm
+.Cm create
+.Fl s Ar scheme
+.Op Fl n Ar entries
+.Op Fl f Ar flags
+.Ar provider
+.\" ==== DELETE ====
+.Nm
+.Cm delete
+.Fl i Ar index
+.Op Fl f Ar flags
+.Ar geom
+.\" ==== DESTROY ====
+.Nm
+.Cm destroy
+.Op Fl f Ar flags
+.Ar geom
+.\" ==== MODIFY ====
+.Nm
+.Cm modify
+.Fl i Ar index
+.Op Fl l Ar label
+.Op Fl t Ar type
+.Op Fl f Ar flags
+.Ar geom
+.\" ==== UNDO ====
+.Nm
+.Cm undo
+.Ar geom
+.\"
+.Sh DESCRIPTION
+The
+.Nm
+utility is used to partition GEOM providers, normally disks.
+The first argument of which is the action to be taken:
+.Bl -tag -width ".Cm wwwwwww"
+.\" ==== ADD ====
+.It Cm add
+Add a new partition to the partitioning scheme given by
+.Ar geom .
+The partition begins on the logical block address given by the
+.Fl b Ar start
+option.
+Its size is expressed in logical block numbers and given by the
+.Fl s Ar size
+option.
+The type of the partition is given by the
+.Fl t Ar type
+option.
+Partition types are discussed in the section entitled "Partition Types".
+.Pp
+Addition options include:
+.Bl -tag -width ".Fl w Ar wwwwwww"
+.It Fl i Ar index
+The index in the partition table at which the new partition is to be
+placed. The index determines the name of the device special file used
+to represent the partition.
+.It Fl l Ar label
+The label attached to the partition.
+This option is only valid when used on partitioning schemes that support
+partition labels.
+.It Fl f Ar flags
+Additional operational flags.
+See the section entitled "Operational flags" below for a discussion
+about its use.
+.El
+.\" ==== COMMIT ====
+.It Cm commit
+Commit any pending changes for geom
+.Ar geom .
+All actions are being committed by default and will not result in
+pending changes.
+Actions can be modified with the
+.Fl f Ar flags
+option so that they are not being committed by default.
+As such, they become pending.
+Pending changes are reflected by the geom and the
+.Nm
+utility, but they are not actually written to disk.
+The
+.Cm commit
+action will write any and all pending changes to disk.
+.\" ==== CREATE ====
+.It Cm create
+Create a new partitioning scheme on a provider given by
+.Ar provider .
+The
+.Fl s Ar scheme
+option determines the scheme to use.
+The kernel needs to have support for a particular scheme before
+that scheme can be used to partition a disk.
+.Pp
+Addition options include:
+.Bl -tag -width ".Fl w Ar wwwwwww"
+.It Fl n Ar entries
+The number of entries in the partition table.
+Every partitioning scheme has a minimum and a maximum number of entries
+and this option allows tables to be created with the number of entries
+that lies anywhere between the minimum and the maximum.
+Some schemes have a maximum equal to the minimum and some schemes have
+a maximum large enough to be considered unlimited.
+By default, partition tables are created with the minimum number of
+entries.
+.It Fl f Ar flags
+Additional operational flags.
+See the section entitled "Operational flags" below for a discussion
+about its use.
+.El
+.\" ==== DELETE ====
+.It Cm delete
+Delete a partition from geom
+.Ar geom
+and further identified by the
+.Fl i Ar index
+option.
+The partition cannot be actively used by the kernel.
+.Pp
+Addition options include:
+.Bl -tag -width ".Fl w Ar wwwwwww"
+.It Fl f Ar flags
+Additional operational flags.
+See the section entitled "Operational flags" below for a discussion
+about its use.
+.El
+.\" ==== DESTROY ====
+.It Cm destroy
+Destroy the partitioning scheme as implemented by geom
+.Ar geom .
+.Pp
+Addition options include:
+.Bl -tag -width ".Fl w Ar wwwwwww"
+.It Fl f Ar flags
+Additional operational flags.
+See the section entitled "Operational flags" below for a discussion
+about its use.
+.El
+.\" ==== MODIFY ====
+.It Cm modify
+Modify a partition from geom
+.Ar geom
+and further identified by the
+.Fl i Ar index
+option.
+Only the the type and/or label of the partition can be modified.
+To change the type of a partition, specify the new type with the
+.Fl t Ar type
+option.
+To change the label of a partition, specify the new label with the
+.Fl l Ar label
+option.
+Not all partitioning schemes support labels and it is invalid to
+try to change a partition label in such cases.
+.Pp
+Addition options include:
+.Bl -tag -width ".Fl w Ar wwwwwww"
+.It Fl f Ar flags
+Additional operational flags.
+See the section entitled "Operational flags" below for a discussion
+about its use.
+.El
+.\" ==== UNDO ====
+.It Cm undo
+Revert any pending changes.
+This action is the opposite of the
+.Cm commit
+action and can be used to undo any changes that have not been committed.
+.El
+.Sh PARTITION TYPES
+The
+.Nm
+utility uses symbolic names for common partition types to avoid that the
+user needs to know what the partitioning scheme in question is and what
+the actual number or identification needs to be used for a particular
+type.
+the
+.Nm
+utility also allows the user to specify scheme-specific partition types
+for partition types that don't have symbol names.
+The symbolic names currently understood are:
+.Bl -tag -width "wwwwwwwwwwwww"
+.It efi
+The system partition for computers that use the Extensible Firmware
+Interface (EFI).
+In such cases, the GPT partitioning scheme is being used and the
+actual partition type for the system partition can also be specified as
+"!c12a7328-f81f-11d2-ba4b-00a0c93ec93ab".
+.It freebsd
+A FreeBSD partition that uses the BSD disklabel to sub-divide the
+partition into file systems.
+This is a legacy partition type and should not be used for the APM
+or GPT schemes.
+The scheme-specific types are "!FreeBSD" for APM, and
+"!516e7cb4-6ecf-11d6-8ff8-00022d09712b" for GPT.
+.It freebsd-swap
+A FreeBSD partition dedicated to swap space.
+The scheme-specific types are "!FreeBSD-swap" for APM, and
+"!516e7cb5-6ecf-11d6-8ff8-00022d09712b" for GPT.
+.It freebsd-ufs
+A FreeBSD partition that contains a UFS or UFS2 file system.
+the scheme-specific types are "!FreeBSD-UFS" for APM, and
+"!516e7cb6-6ecf-11d6-8ff8-00022d09712b" for GPT.
+.It freebsd-vinum
+A FreeBSD partition that contains a Vinum volume.
+The scheme-specific types are "!FreeBSD-Vinum" for APM, and
+"!516e7cb8-6ecf-11d6-8ff8-00022d09712b" for GPT.
+.It mbr
+A partition that is sub-partitioned by a master boot record (MBR).
+This type is known as "!024dee41-33e7-11d3-9d69-0008c781f39f" by GPT.
+.El
+.Sh OPERATIONAL FLAGS
+Actions other than the
+.Cm commit
+and
+.Cm undo
+actions take an optional
+.Fl f Ar flags
+option.
+This option is used to specify action-specific operational flags.
+By default, the
+.Nm
+utility defines the 'C' flag so that the action is immediately
+committed.
+The user can specify
+.Fl f Ar x
+to have the action result in a pending change that can later, with
+other pending changes, be committed as a single compound change with
+the
+.Cm commit
+action or reverted with the
+.Cm undo
+action.
+.Sh EXIT STATUS
+Exit status is 0 on success, and 1 if the command fails.
+.Sh SEE ALSO
+.Xr geom 4 ,
+.Xr geom 8 ,
+.Sh HISTORY
+The
+.Nm
+utility appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+.An Marcel Moolenaar Aq marcel@FreeBSD.org
diff --git a/sbin/geom/class/raid3/geom_raid3.c b/sbin/geom/class/raid3/geom_raid3.c
index 1bb41cb..4a2dbe2 100644
--- a/sbin/geom/class/raid3/geom_raid3.c
+++ b/sbin/geom/class/raid3/geom_raid3.c
@@ -51,7 +51,7 @@ static void raid3_dump(struct gctl_req *req);
static void raid3_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, raid3_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, raid3_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
{ "configure", G_FLAG_VERBOSE, NULL,
@@ -68,9 +68,9 @@ struct g_command class_commands[] = {
{ 'W', "noverify", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-adfFhnrRvwW] name"
+ NULL, "[-adfFhnrRvwW] name"
},
- { "dump", 0, raid3_main, G_NULL_OPTS,
+ { "dump", 0, raid3_main, G_NULL_OPTS, NULL,
"prov ..."
},
{ "insert", G_FLAG_VERBOSE, NULL,
@@ -79,7 +79,7 @@ struct g_command class_commands[] = {
{ 'n', "number", NULL, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-hv] <-n number> name prov"
+ NULL, "[-hv] <-n number> name prov"
},
{ "label", G_FLAG_VERBOSE, raid3_main,
{
@@ -90,9 +90,9 @@ struct g_command class_commands[] = {
{ 'w', "verify", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-hFnrvw] name prov prov prov ..."
+ NULL, "[-hFnrvw] name prov prov prov ..."
},
- { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
+ { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
"[-v] name prov"
},
{ "remove", G_FLAG_VERBOSE, NULL,
@@ -100,14 +100,14 @@ struct g_command class_commands[] = {
{ 'n', "number", NULL, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-v] <-n number> name"
+ NULL, "[-v] <-n number> name"
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/shsec/geom_shsec.c b/sbin/geom/class/shsec/geom_shsec.c
index 75791de..8af47ee 100644
--- a/sbin/geom/class/shsec/geom_shsec.c
+++ b/sbin/geom/class/shsec/geom_shsec.c
@@ -52,10 +52,10 @@ static void shsec_dump(struct gctl_req *req);
static void shsec_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, shsec_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, shsec_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
- { "dump", 0, shsec_main, G_NULL_OPTS,
+ { "dump", 0, shsec_main, G_NULL_OPTS, NULL,
"prov ..."
},
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, shsec_main,
@@ -63,14 +63,14 @@ struct g_command class_commands[] = {
{ 'h', "hardcode", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-hv] name prov prov ..."
+ NULL, "[-hv] name prov prov ..."
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
diff --git a/sbin/geom/class/stripe/geom_stripe.c b/sbin/geom/class/stripe/geom_stripe.c
index 1e33643..704e000 100644
--- a/sbin/geom/class/stripe/geom_stripe.c
+++ b/sbin/geom/class/stripe/geom_stripe.c
@@ -54,7 +54,7 @@ static void stripe_dump(struct gctl_req *req);
static void stripe_label(struct gctl_req *req);
struct g_command class_commands[] = {
- { "clear", G_FLAG_VERBOSE, stripe_main, G_NULL_OPTS,
+ { "clear", G_FLAG_VERBOSE, stripe_main, G_NULL_OPTS, NULL,
"[-v] prov ..."
},
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
@@ -62,16 +62,16 @@ struct g_command class_commands[] = {
{ 's', "stripesize", &default_stripesize, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-hv] [-s stripesize] name prov prov ..."
+ NULL, "[-hv] [-s stripesize] name prov prov ..."
},
{ "destroy", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
- { "dump", 0, stripe_main, G_NULL_OPTS,
+ { "dump", 0, stripe_main, G_NULL_OPTS, NULL,
"dump prov ..."
},
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, stripe_main,
@@ -80,14 +80,14 @@ struct g_command class_commands[] = {
{ 's', "stripesize", &default_stripesize, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- "[-hv] [-s stripesize] name prov prov ..."
+ NULL, "[-hv] [-s stripesize] name prov prov ..."
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- "[-fv] name ..."
+ NULL, "[-fv] name ..."
},
G_CMD_SENTINEL
};
OpenPOWER on IntegriCloud