DECLARE_GEOM_CLASS(9)
HOME ||
NAME
SYNOPSIS
DESCRIPTION
EXAMPLES
SEE ALSO
AUTHORS
DECLARE_GEOM_CLASS -- GEOM class declaration macro
#include <geom/geom.h>
DECLARE_GEOM_CLASS(class, mod_name);
The DECLARE_GEOM_CLASS() macro registers a GEOM class in GEOM. A GEOM
class itself implements one particular kind of transformation. Typical
examples are: MBR disk partition, BSD disklabel and RAID5 classes.
DECLARE_GEOM_CLASS() can be used both for compiled in and loaded as
kld(4) modules GEOM classes and it is the only official way for class
registration.
The arguments to DECLARE_GEOM_CLASS() are:
class is the g_class structure which describes a GEOM class.
mod_name is a kernel module name (not a class name!).
Structure g_class contains data describing the class. They are:
const char * name
Class name.
g_taste_t * taste
Pointer to function used for taste event handling. If it
is non-NULL it is called in three situations:
- On class activation, all existing providers are offered
for tasting.
- When new provider is created it is offered for tasting.
- After last write access to a provider is closed it is
offered for retasting (on first write open event
``spoil'' was sent).
g_config_t * config
This field is not used anymore, its functionality was
replaced by the ctlreq field.
g_ctl_req_t * ctlreq
Pointer to function used for handling events from userland
applications.
g_init_t * init
Pointer to function which is called right after class reg-
istration.
g_fini_t * fini
Pointer to function which is called right before class
deregistration.
g_ctl_destroy_geom_t * destroy_geom
Pointer to a function which is called for every geom on
class unload. If this field is not set, the class can not
be unloaded.
Only field name is required, the rest is optional.
RESTRICTIONS/CONDITIONS
In the g_class initialization one must use C99 initialization (just like
in the example below).
Example class declaration.
static struct geom *
g_example_taste(struct g_class *mp, struct g_provider *pp,
int flags __unused)
{
g_topology_assert();
[...]
}
static void
g_example_ctlreq(struct gctl_req *req, struct g_class *cp,
char const *verb)
{
[...]
}
static int
g_example_destroy_geom(struct gctl_req *req, struct g_class *cp,
struct g_geom *gp)
{
g_topology_assert();
[...]
}
static void
g_example_init(struct g_class *mp)
{
[...]
}
static void
g_example_fini(struct g_class *mp)
{
[...]
}
struct g_class example_class = {
.name = "EXAMPLE",
.taste = g_example_taste,
.ctlreq = g_example_ctlreq,
.init = g_example_init,
.fini = g_example_fini,
.destroy_geom = g_example_destroy_geom
};
DECLARE_GEOM_CLASS(example_class, g_example);
geom(4), g_attach(9), g_bio(9), g_consumer(9), g_data(9), g_event(9),
g_geom(9), g_provider(9), g_provider_by_name(9), g_wither_geom(9)
This manual page was written by Pawel Jakub Dawidek <pjd@FreeBSD.org>.