ネットワーク プログラミング インターフェイス

ネットワーク プログラミング インターフェイス(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 識別子を使用して、どのクライアント モジュールをどのプロバイダー モジュールにアタッチするかを決定します。