HomeFreeBSD

Allow GEOM utilities to specify a -v option.

Description

Allow GEOM utilities to specify a -v option.

Geom utilities (geli(8), glabel(8), gmirror(8), gpart(8), gmirror(8),
gmountver(8), etc) all use the geom(8) utility as their back end
to process their commands and pass them into the kernel. Creating
a new utility requires no more than filling out a template describing
the commands and arguments that the utility supports. Consider the
specification for the very simple gmountver(8) utility:

struct g_command class_commands[] = {
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,

	    {
		G_OPT_SENTINEL
	    },
	    "[-v] prov ..."

},
{ "destroy", G_FLAG_VERBOSE, NULL,

	    {
		{ 'f', "force", NULL, G_TYPE_BOOL },
		G_OPT_SENTINEL
	    },
	    "[-fv] name"

},
G_CMD_SENTINEL
};

It has just two commands of its own: "create" and "destroy" along
with the four standard commands "list", "status", "load", and
"unload" provided by the base geom(8) utility. The base geom(8)
utility allows each command to use the G_FLAG_VERBOSE flag to specify
that a command should accept the -v flag and when the -v flag is
given the utility prints "Done." if the command completes successfully.
In the above example, both of the commands set the G_FLAG_VERBOSE,
so have the -v option available. In addition the "destroy" command
accepts the -f boolean flag to force the destruction.

If the "destroy" command wanted to also print out verbose information,
it would need to explicitly declare its intent by adding a line:

		{ 'v', "verbose", NULL, G_TYPE_BOOL },

Before this change, the geom utility would silently ignore the above
line in the configuration file, so it was impossible for the utility
to know that the -v flag had been set on the command. With this
change a geom command can explicitly specify a -v option with a
line as given above and handle it as it would any other option. If
both a -v option and G_FLAG_VERBOSE are specified for a command
then both types of verbose information will be output when that
command is run with -v.

MFC after: 1 week
Sponsored by: Netflix

Details

Provenance
mckusickAuthored on Oct 29 2021, 5:49 AM
Parents
rGa30e8044aa47: wpa: Fix WITHOUT_CRYPT build
Branches
Unknown
Tags
Unknown

Event Timeline

kp added inline comments.
/sbin/geom/core/geom.c
448

Given https://reviews.freebsd.org/D32736 I wonder if the removal of the verbose check here was correct.

If I'm reading this code right we now always set the verbose flag for any subcommand that supports it (i.e. has G_FLAG_VERBOSE set).

That leads to commands such as glabel always acting as if '-v' was specified.

set_flags() output is only used if g_func is set, which isn't the case in any of the examples in the commit message, so I wonder if that case was overlooked.