DECLARE_GEOM_CLASS man page on FreeBSD

Man page or keyword search:  
man Server   9747 pages
apropos Keyword Search (all sections)
Output format
FreeBSD logo
[printable version]

DECLARE_GEOM_CLASS(9)	 BSD Kernel Developer's Manual	 DECLARE_GEOM_CLASS(9)

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 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 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⟩.

BSD				August 13, 2007				   BSD
[top]

List of man pages available for FreeBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net