Solaris DHCP サービス開発ガイド

第 1 章 Solaris DHCP データアクセスアーキテクチャの概要

この章では、Solaris 8 7/01 オペレーティング環境で導入された Solaris Dynamic Host Configuration Protocol (DHCP) サービスのアーキテクチャの概要を説明します。この概要によって、ユーザーの作業がアーキテクチャのどの部分に対応するのかがわかります。

Solaris DHCP サービスの一般情報については、『Solaris のシステム管理 (IP サービス)』の「Solaris DHCP (概要)」を参照してください。

この章は、次の節から構成されます。

モジューラのフレームワーク

Solaris DHCP サービスには、DHCP デーモン、管理ツール、および異なるデータストレージ機能のための別個のデータアクセスモジュール (パブリックモジュールと呼ばれる) が含まれます。Solaris DHCP は、必要なデータストレージ機能をサポートするための、共有オブジェクトとして実装される、ユーザー独自のパブリックモジュールを作成できる API を提供します。パブリックモジュールを Solaris DHCP フレームワークに組み込むと、DHCP サービスがそのデータをこのパブリックモジュールを使ってユーザーのデータベースに格納します。パブリックモジュールは Solaris DHCP サービスから独立して提供することができるため、誰でも任意のデータストレージ機能をサポートするためにモジュールを開発し、配布することができます。

このアーキテクチャを使用する Solaris DHCP の最初リリースでは、ASCII ファイル、NIS+、およびファイルシステムベースのバイナリデータ格納に対するパブリックモジュールが提供されます。このマニュアルでは、開発者が任意のデータベースに対する独自のパブリックモジュールを作成するときに必要となる情報を提供します。

DHCP サーバーのマルチスレッド処理

DHCP サーバーにはマルチスレッド機能が実装されているため、DHCP サーバーでは多数のクライアントに同時にサービスを提供することができます。DHCP サーバーによるマルチスレッド処理をサポートするためには、パブリックモジュールが MT-安全でなければならず、これだけに関して言えば DHCP サービスは多数のクライアントに対応することが可能ということになります。しかし、DHCP サーバーの実際の能力は、主にデータストレージ機能の能力と、データのアクセスに使用されるパブリックモジュールの効率に依存します。したがって、高速かつ大容量のデータストレージ機能を使用するパブリックモジュールを作成することで、Solaris DHCP サービスの性能と能力が向上する可能性があります。

データアクセス層

Solaris DHCP モジューラフレームワークの実装では、次のデータアクセス層が使用されます。

次の図に、個々のアーキテクチャ層の対話形式を示します。

図 1–1 DHCP サービスにおけるデータ格納アクセスのアーキテクチャ

最上層にアプリケーション/サービス層、その下にフレームワーク構成層、そして最下層にサービスプロバイダ層hがありデータ格納コンテナに接続しています。

フレームワーク構成層

libdhcpsvc.so で実装される関数がアプリケーション/サービス層に使用され、次のことが行われます。

/etc/inet/dhcpsvc.conf には、パブリックモジュールの開発者に関連する次のキーワードを含む、DHCP サービスの構成パラメータが多数含まれています。

RESOURCE

ロードするパブリックモジュール。RESOURCE の値がパブリックモジュールの名前にマッチします。たとえば、RESOURCE=SUNWfiles は、パブリックモジュールが ds_SUNWfiles.so であることを表しています。パブリックモジュールの名前付けの規則は、パブリックモジュールとデータ格納コンテナの名前付けに記載されています。

PATH

パブリックモジュールがエクスポートするデータサービス内の DHCP コンテナの位置。PATH の値はそのデータサービス固有のものです。たとえば、SUNWfiles リソースの PATH には UNIX のパス名が割り当てられます。

RESOURCE_CONFIG

パブリックモジュール固有の構成情報。このオプション (省略可能) のキーワードは、ユーザーからの認証など、データサービスで構成情報を必要とするときに使用できます。このキーワードを使用する場合には、このキーワードの値を設定するための情報をユーザーに要求するパブリックモジュール管理ビーンを提供する必要があります。データサービス構成ツールと DHCP 管理ツールを参照してください。さらに、このモジュールでは、モジュールのロード時にこのキーワードの値を受け取るための configure() 関数をエクスポートする必要があります。詳細は、 configure()を参照してください。

フレームワーク構成層も、ファイルシステムベースのコンテナへのアクセスの同期化に記述されているように、オプションの API 同期サービスをサービスプロバイダ層に提供します。

サービスプロバイダ層 API

サービスプロバイダ層 API は、関数、データ構造、および /usr/include/dhcp_svc_public.h ファイルに含まれる表記定数から構成されます。

次の表は関数の要約です。個々の関数の詳細については、それぞれ記載されている節を参照してください。

表 1–1 サービスプロバイダ層 API 関数

API 関数 

用途 

すべてのデータ格納コンテナに対する一般的な関数 

configure()

構成文字列をデータ格納に渡します。オプションの関数です。 

mklocation()

データ格納を置く場所を作成します。 

status()

データ格納の一般的なステータス情報を返します。 

version()

データ格納コンテナに実装されるサービスプロバイダ層 API のバージョンを返します。 

dhcptab コンテナ用の関数

list_dt()

dhcptab コンテナの名前を返します。

open_dt()

dhcptab コンテナをオープンまたは作成します。

lookup_dt()

dhcptab コンテナのレコードのクエリー検索を行います。

add_dt()

dhcptab コンテナにレコードを追加します。

modify_dt()

dhcptab コンテナ内の既存のレコードを変更します。

delete_dt()

dhcptab コンテナからレコードを削除します。

close_dt()

dhcptab コンテナをクローズします。

remove_dt()

データ格納から dhcptab コンテナを削除します。

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

list_dn()

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

open_dn()

DHCP ネットワークコンテナをオープンまたは作成します。 

lookup_dn()

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

add_dn()

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

modify_dn()

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

delete_dn()

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

close_dn()

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

remove_dn()

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

データ格納コンテナ

dhcptab および DHCP ネットワークテーブルは、総称的にデータ格納コンテナと呼ばれます。Solaris DHCP では、デフォルトで、次の表に示すコンテナの形式がサポートされます。

サポートされるデータサービス 

パブリックモジュール 

ファイルシステムベースの ASCII 形式 

ds_SUNWfiles.so

NIS+ サービス 

ds_SUNWnisplus.so

ファイルシステムベースのバイナリ形式 

ds_SUNWbinfiles.so