EN JA
DECLARE_GEOM_CLASS(9)
DECLARE_GEOM_CLASS(9) FreeBSD Kernel Developer's Manual DECLARE_GEOM_CLASS(9)

名称

DECLARE_GEOM_CLASSGEOM クラス宣言マクロ

書式

#include < geom/geom.h>

DECLARE_GEOM_CLASS( class, mod_name);

解説

DECLARE_GEOM_CLASS() マクロは GEOM に GEOM クラスを登録します。 GEOM のクラス自体は 1 つの特定の種類の変換を実装します。典型的な例は次の通りです: MBR ディスクパーティション、 BSD disklabel と RAID5 クラスです。 DECLARE_GEOM_CLASS() はコンパイルされて、 kld(4) モジュール GEOM クラスとしてロードするために使用することができます、そして、それはクラス登録のための唯一の公式な方法です。

DECLARE_GEOM_CLASS() への引数は、次の通りです:

class
GEOM のクラスを説明する g_class 構造体。
mod_name
カーネルモジュール名 (クラス名でない!)。

構造体 g_class はクラスを説明するデータを含みます。それらは次の通りです:

const char * name
クラス名。
g_taste_t * taste
テイスト (taste) イベント操作のために使用される関数へのポインタ。それが NULL でないなら、それは 3 つの状況で呼び出されます:

  • クラスの活性化のときに、すべての既存のプロバイダはテイスト (taste) を提供します。
  • 新しいプロバイダを作成するとき、テイスト (taste) を提供します。
  • プロバイダへの最後の書き込みアクセスがクローズされた後に、再テイスト (retaste) を提供します (最初に、書き込みオープンイベント“spoil”が送信されます)。
g_config_t * config
それ以上このフィールドを使用しないでください、機能的に ctlreq フィールドに取り替えられました。
g_ctl_req_t * ctlreq
ユーザランドアプリケーションから操作イベントのために使用される関数へのポインタ。
g_init_t * init
クラス登録直後に呼び出される関数へのポインタ。
g_fini_t * fini
クラスの登録取り消しの直前に呼び出される関数へのポインタ。
g_ctl_destroy_geom_t * destroy_geom
クラスのアンロードのときにあらゆる geom のために呼び出される関数へのポインタ。このフィールドが設定されていないなら、クラスをアンロードすることはできません。

name フィールドだけが必要です。残りはオプションです。

制限/条件

g_class のフィールドは、C99 スタイルフィールド指定 (下記の example_class の初期化を参照) を使用して常に初期化されるべきです。

使用例

クラス宣言の例。

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);

作者

このマニュアルページは、 Pawel Jakub Dawidek <pjd@FreeBSD.org>によって書かれました。
August 13, 2007 FreeBSD