Solaris DHCP サービス開発ガイド

DHCP ネットワークコンテナ関数

この節で説明する API 関数は、DHCP ネットワークコンテナやその中の IP アドレスレコードを処理するときに使用します。

list_dn()

目的

ネットワークコンテナのリストを返します。

形式

int list_dn(const char *location, char ***listppp, uint_t *count);

説明

location 内で見つかったネットワークコンテナオブジェクトの動的に割り当てられたリストを生成し (listppp) 、リストの項目数を count 内に格納します。ネットワークコンテナオブジェクトが全く存在しない場合は、DSVC_SUCCESS が返され、listpppNULL に設定され、count は 0 に設定されます。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_NO_LOCATION

open_dn()

目的

ネットワークコンテナをオープンするか、または新たに作成します。

形式

int open_dn(void **handpp, const char *location, uint_t flags, const struct in_addr *netp, const struct in_addr *maskp);

説明

既存の DHCP ネットワークコンテナをオープンするか、または netp および maskp (両方ともホスト順) で指定された新しいコンテナを location 内に作成し、そのインスタンスハンドルを指すように handpp を初期設定します。データ格納にとって必要な初期設定があれば、それを行います。新しい DHCP ネットワークコンテナを作成する場合には、所有者/アクセス権に呼び出し元の ID が使用されます。有効なフラグには、DSVC_CREATEDSVC_READDSVC_WRITEDSVC_NONBLOCK が含まれます。DHCP ネットワークコンテナの読み取り専用 (DSVC_CREATE | DSVC_READ) としての作成は無効であることに注意してください。

戻り値

DSVC_SUCCESS, DSVC_EXISTS, DSVC_ACCESS, DSVC_NOENT, DSVC_NO_LOCATION, DSVC_BUSY, DSVC_INTERNAL, DSVC_UNSUPPORTED

lookup_dn()

目的

DHCP ネットワークコンテナ内のレコードに対するクエリー検索を行います。

形式

int lookup_dn(void *handp, boolean_t partial, uint_t query, int count, const dn_rec_t *targetp, dn_rec_list_t **resultp, uint_t *records);

説明

querytargetp の組み合わせで指定されたクエリーにマッチするインスタンスを DHCP ネットワークコンテナから検索します。partial 引数が B_TRUE の場合は、呼び出し元にとって部分的なクエリー結果も適用可能であることを意味します。したがって、partialB_TRUE の場合は、マッチするレコードが 1 つでもあれば、クエリーは有効と見なされます。partialB_FALSE の場合は、クエリーがコンテナ全体に適用された場合だけ DSVC_SUCCESS が返されます。

クエリー引数は、長さがそれぞれ 16 ビットの 2 つのフィールドからなります。下位 16 ビットでは、targetp のどのフィールド {クライアント id、フラグ、クライアント IP、サーバー IP、有効期限、マクロ、またはコメント} をクエリーの対象とするかを選択します。上位 16 ビットでは、下位 16 ビットで選択された特定のフィールド値がマッチするものを検索するのか (ビットセット)、マッチしないものを検索するのか (ビットクリア) を指定します。両方の 16 ビットフィールドとも、ビット 7 から 15 は現在のところ使用されておらず、0 に設定されていなければなりません。クエリーを構築するために有用なマクロを例 3–1 に示します。

count フィールドは、マッチするレコードを最大でいくつ返すかを指定します。count 値に -1 を指定すると、マッチするレコードがいくつあっても、すべて返すことを要求します。count 値に 0 を指定すると、lookup_dn データ無しでただちに返されます。

resultp は、返されるレコードのリストを指すよう設定されます。resultp に NULL が指定される場合、呼び出し元は単にクエリーにマッチするレコードがいくつあるかに関心があるということになります。これらのレコードは動的に割り当てられるため、呼び出し元でこれを解放する必要があることに注意してください。lookup_dn() は、records 引数内にマッチするレコードの数を返します。records の値 0 は、クエリーにマッチするレコードは全く無いことを示します。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_BUSY, DSVC_INTERNAL

add_dn()

目的

DHCP ネットワークコンテナにレコードを追加します。

形式

int add_dn(void *handp, dn_rec_t *newp);

説明

ハンドル handp で参照される DHCP ネットワークコンテナにレコード newp を追加します。newp に対応するシグニチャは、基盤となるパブリックモジュールによって更新されます。更新における衝突が発生する場合は、データ格納は更新されません。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_BUSY, DSVC_INTERNAL, DSVC_EXISTS

modify_dn()

目的

DHCP ネットワークコンテナ内のレコードを変更します。

形式

int modify_dn(void *handp, const dn_rec_t *origp, dn_rec_t *newp);

説明

ハンドル handp で参照される DHCP ネットワークコンテナ内のレコード origp をレコード newp に変更します。newp に対応するシグニチャは、基盤となるパブリックモジュールによって更新されます。更新における衝突が発生する場合には、データ格納は更新されません。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_BUSY, DSVC_COLLISION, DSVC_INTERNAL, DSVC_NOENT

delete_dn()

目的

DHCP ネットワークコンテナからレコードを削除します。

形式

int delete_dn(void *handp, const dn_rec_t *pnp);

説明

ハンドル handp で参照される DHCP ネットワークコンテナから、pnpdn_cip および dn_sig 要素で指定されるレコードを削除します。更新における衝突が発生する場合には、マッチするレコードはデータ格納から削除されず、DSVC_COLLISION が返されます。

pnpdn_sig シグニチャに 0 を指定すると、更新における衝突があるかどうかの検知は行なわず、マッチするレコードが単純に削除されます。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_NOENT, DSVC_BUSY, DSVC_INTERNAL, DSVC_COLLISION

close_dn()

目的

ネットワークコンテナをクローズします。

形式

int close_dn(void **handpp);

説明

インスタンスハンドルを解放し、インスタンスごとの状態を消去します。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_INTERNAL.

remove_dn()

目的

データ格納のロケーションから DHCP ネットワークコンテナを削除します。

形式

int remove_dn(const char *location, const struct in_addr *netp);

説明

location 内の DHCP ネットワークコンテナ netp (ホスト順) を削除します。

戻り値

DSVC_SUCCESS, DSVC_ACCESS, DSVC_NOENT, DSVC_NO_LOCATION, DSVC_BUSY, DSVC_INTERNAL