高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



NW 49 - OT ドライバから TCP/IP プログラムに対する EINVAL エラーが返されるが、AppleTalk は正常に動作している

(更新日: 97 年 3 月 14 日)

Q: Open Transport ネットワーク上でネットワークハードウェア製品をサポートする DLPI ドライバを開発しました。ドライバのテストを行ったところ、AppleTalk のサポートには何の問題もありませんでしたが、TCP サービスにアクセスしようとすると、TCP/IP アプリケーションを使用しているかどうかに関係なく、常にエラー -3221 が返されます。どこに問題があるのでしょうか。

A: TCP/IP コンフィギュレータが AppleTalk スタックのセットアップ時には行われないチェックをTCP/IP スタックのセットアップ時に行うということが、このエラーの最も一般的な原因として考えられます。コンフィギュレータでは、ポートの OTPortRecord に登録されている fModuleName が DLPI ドライバの module_info グローバルに設定されているモジュール名と一致しているかどうか検証します。これら 2 つの名前が厳密に一致していないと、コンフィギュレーションは正常に終了せず、OpenEndpoint 呼び出しにエラー -3221 が返されます。

module_info グローバルを検査し、fModuleName フィールドの値が対応するポートレコードに入力されているモジュール名と一致しているかどうかを検証すれば、この問題は容易に解決できます。ポートレコードにアクセスするため、ダウンロード可能なサンプルアプリケーション (ソースコードとともに) が用意されています。このサンプルアプリケーションでは、システムに登録済みのポートレコードがすべて表示され、同時に対応するポート名とモジュール名も表示されます。

Open Transport が PCI カードへの OTRegisterPort 呼び出しを行うとき、使用されるモジュール名は、カードの "name" Name Register プロパティになります。ただし、カードに対応するカスタムポートスキャナを開発している場合は、OTRegisterPort 呼び出しに渡されたポートレコード構造体の fModuleName フィールドに割り当てられている値がモジュール名となります。

PC Card Manager 3.0 を使用する場合、ネットワークドライバエキスパートはまず Name Registry を検査して、ネットワークカードに対するカスタムイネーブラが "port-module" プロパティ (C 文字列) を登録しているかどうかチェックします。もし登録されていれば、このプロパティは OTPortRecordfModuleName フィールドで使用され、OT に新しいデバイスを認識させるために OTRegisterPort 呼び出しに渡されます。一方、カスタムイネーブラによって作成されたカードに対応する "port-module" Name Registry プロパティが存在しない場合、PC Card Manager エキスパートは、"name" プロパティから (若干の変更を加えて) OTRegisterPort で登録する名前を構築します。

たとえば、まず最初に次のような "name" プロパティがあるとします。

     ethernet,pc1,MY ETHERNET CARD
PC Card Manager 3.0 エキスパートは、この名前を次のように短くします。
     pc1,MY ETHERNET CARD
これは、モジュール名が半角 31 文字を超えることができないためです。文字列の一部である ethernet がモジュール名を短くするために切り捨てられます。このような処理が行われたかどうかはっきりしない場合は、正しい名前である pc1,MY ETHERNET CARD の代わりに不正な名前を module_info レコードに入力してみるのがいいでしょう。

その結果、登録されている fModuleNamemodule_info レコードの名前と一致しなくなり、TCP/IP コンフィギュレーションのモジュール名チェックは正常に終了せず、EINVAL エラーが返されます。



--Rich Kubota
devsupport@apple.com

[ Technical Q&A's : Communications & Collaboration : Networking : NW49 ]

spacer image