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