DECLARE_GEOM_CLASS(9)

HOME || NAME SYNOPSIS DESCRIPTION EXAMPLES SEE ALSO AUTHORS
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 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).
EXAMPLES
     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);
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>.