Provided by: freebsd-manpages_12.2-2_all bug

NAME

       DECLARE_GEOM_CLASS — GEOM class declaration macro

SYNOPSIS

       #include <geom/geom.h>

       DECLARE_GEOM_CLASS(class, mod_name);

DESCRIPTION

       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         The g_class structure which describes a GEOM class.

             mod_name      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 registration.

             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 a name field is required; the rest are optional.

RESTRICTIONS/CONDITIONS

       The fields of g_class should always be initialized using C99-style field naming (see  the  initialization
       of example_class below).

EXAMPLES

       Example class declaration.

             static struct g_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);

SEE ALSO

       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)

AUTHORS

       This manual page was written by Pawel Jakub Dawidek <pjd@FreeBSD.org>.

Debian                                           August 13, 2007                           DECLARE_GEOM_CLASS(9)