ネットワーク プログラミング インターフェイス
ネットワーク プログラミング インターフェイス(NPI) は、相互に接続可能なネットワーク モジュール間のインターフェイスを定義します。 特定の NPI のクライアントとして登録されているクライアント モジュールは、同じ NPI のプロバイダーとして登録されているプロバイダー モジュールにのみアタッチできます。 同様に、特定の NPI のプロバイダーとして登録されているプロバイダー モジュールは、同じ NPI のクライアントとして登録されているクライアント モジュールにのみアタッチできます。
各 NPI は、以下の項目を定義します。
NPI を一意に識別する NPI 識別子。 ネットワーク モジュールは、ネットワーク モジュール レジストラー (NMR) に自身を登録するときに、サポートする特定の NPI を示す NPI 識別子を指定します。 ネットワーク モジュールは、それ自身を NMR に複数回(サポートする NPI ごとに 1 回)登録することで、複数の NPI をサポートできます。 クライアント モジュールがプロバイダー モジュールの両方で同じ NPI をサポートしている場合にのみ、クライアント モジュールのアタッチが開始されます。
各クライアント モジュールの NPI 固有の特性を指定するオプションのクライアント特性構造。 このような NPI 固有の特性には、クライアント モジュールがサポートする NPI のバージョンや、クライアント モジュールで必要なアドレス ファミリやプロトコルなどの項目が含まれる場合があります。 プロバイダー モジュールは、クライアント モジュールのクライアント特性構造に含まれる情報を使用して、クライアント モジュールにアタッチするかどうかを決定できます。 NPI で NPI 固有のクライアント特性が定義されていない場合、この構造は必要ありません。
各プロバイダー モジュールの NPI 固有の特性を指定するオプションのプロバイダー特性構造。 このような NPI 固有の特性には、プロバイダー モジュールがサポートする NPI のバージョンや、プロバイダー モジュールがサポートするアドレス ファミリやプロトコルなどの項目が含まれる場合があります。 クライアント モジュールは、プロバイダー モジュールのクライアント特性構造に含まれる情報を使用して、プロバイダー モジュールにアタッチするかどうかを決定できます。 NPI で NPI 固有のプロバイダー特性が定義されていない場合、この構造は必要ありません。
0 個以上のクライアント モジュール コールバック関数。 プロバイダー モジュールがクライアント モジュールに正常にアタッチされると、プロバイダー モジュールはクライアント モジュールのコールバック関数を呼び出すことによって、クライアント モジュールの機能にアクセスすることができます。
1 つ以上のプロバイダー モジュール関数。 クライアント モジュールがプロバイダー モジュールに正常にアタッチされると、クライアント モジュールはプロバイダー モジュールのコールバック関数を呼び出すことによって、プロバイダー モジュールの機能にアクセスすることができます。
各クライアント モジュール コールバック関数への関数ポインターを含むクライアント ディスパッチ テーブル構造。 NPI でクライアント モジュール コールバック関数が定義されていない場合、この構造は必要ありません。
各プロバイダー モジュール関数への関数ポインターを含むプロバイダー ディスパッチ テーブル構造。
特定の NPI をサポートするクライアント モジュールは、NPI によって定義された項目を使用して、インターフェイスのクライアント側を実装します。 同様に、特定の NPI をサポートするプロバイダー モジュールは、NPI によって定義された項目を使用して、インターフェイスのプロバイダー側を実装します。
NPI で定義されているすべての項目は、NPI 識別子を除き、NMR に対して不透明です。 NMR は NPI 識別子を使用して、どのクライアント モジュールをどのプロバイダー モジュールにアタッチするかを決定します。