GLD の MAC 情報 (gld_mac_info) 構造体は、デバイス固有のドライバと GLD 間のメインデータインタフェースです。この構造体には、GLD が必要とするデータ、およびオプションの追加のドライバ固有情報の構造体に対するポインタが含まれます。
gld_mac_info 構造体は、gld_mac_alloc() を使用して割り当て、gld_mac_free() を使用して割り当てを解除します。ドライバ側でこの構造の長さを想定してはなりません。長さは Solaris の各リリース、各 GLD、またはその両方によって異なる可能性があるためです。このマニュアルには記載されていない GLD 専用の構造体のメンバーをデバイス固有のドライバで設定したり読み取ったりしてはなりません。
gld_mac_info(9S) 構造体には、次のフィールドがあります。
caddr_t gldm_private; /* Driver private data */ int (*gldm_reset)(); /* Reset device */ int (*gldm_start)(); /* Start device */ int (*gldm_stop)(); /* Stop device */ int (*gldm_set_mac_addr)(); /* Set device phys addr */ int (*gldm_set_multicast)(); /* Set/delete multicast addr */ int (*gldm_set_promiscuous)(); /* Set/reset promiscuous mode */ int (*gldm_send)(); /* Transmit routine */ uint_t (*gldm_intr)(); /* Interrupt handler */ int (*gldm_get_stats)(); /* Get device statistics */ int (*gldm_ioctl)(); /* Driver-specific ioctls */ char *gldm_ident; /* Driver identity string */ uint32_t gldm_type; /* Device type */ uint32_t gldm_minpkt; /* Minimum packet size */ /* accepted by driver */ uint32_t gldm_maxpkt; /* Maximum packet size */ /* accepted by driver */ uint32_t gldm_addrlen; /* Physical address length */ int32_t gldm_saplen; /* SAP length for DL_INFO_ACK */ unsigned char *gldm_broadcast_addr; /* Physical broadcast addr */ unsigned char *gldm_vendor_addr; /* Factory MAC address */ t_uscalar_t gldm_ppa; /* Physical Point of */ /* Attachment (PPA) number */ dev_info_t *gldm_devinfo; /* Pointer to device's */ /* dev_info node */ ddi_iblock_cookie_t gldm_cookie; /* Device's interrupt */ /* block cookie */
デバイスドライバは、gld_mac_info 構造体のメンバーを認識できます。
この構造体のメンバーは、デバイス固有のドライバ専用であり、GLD が使用したり変更したりすることはありません。これは、従来専用データに対するポインタとして使用されたもので、ドライバが定義し、またドライバが割り当てたインスタンス別データ構造体を指し示します。
次の構造体メンバーのグループは、gld_register() を呼び出す前にドライバで設定しなければなりません。以後は、ドライバ側で変更してはなりません。gld_register() がこれらの構造体のメンバーの値を使用またはキャッシュすることがあるので、gld_register() を呼び出した後でドライバが変更を行うと、予期せぬ結果を招く可能性があります。
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。gld(9E) を参照
ドライバのエントリポイントに対するポインタ。NULL にすることができる。gld(9E) を参照
デバイスに関する短い記述を含む文字列に対するポインタ。システムメッセージ内のデバイスを識別する場合に使用します。
ドライバが処理するデバイスのタイプ。GLD で現在サポートしている値は、DL_ETHER (ISO 8802-3 [IEEE 802.3] および Ethernet Bus)、DL_TPR (IEEE 802.5 Token Passing Ring)、および DL_FDDI (ISO 9314-2 Fibre Distributed Data Interface) です。GLD を正しく動作させるには、この構造体のメンバーを適切に設定する必要があります。
最小の Service Data Unit サイズ - デバイスが送信する最小パケットサイズです (MAC ヘッダーは含まない)。デバイス固有のドライバが必要なすべてのパディングを処理する場合は、このサイズをゼロにすることができます。
最大の Service Data Unit サイズ - デバイスが送信できる最大パケットサイズです (MAC ヘッダーは含まない)。Ethernet の場合、この値は 1500 です。
デバイスが処理する物理アドレスの長さ (バイト数)。Ethernet、Token Ring、および FDDI の場合、この構造体のメンバーの値は 6 でなければなりません。
ドライバが使用する SAP アドレスの長さ (バイト数)。GLD ベースのドライバでは、これは常に -2 に設定します。この値は、2 バイトの SAP 値がサポートされること、および DLSAP アドレスで物理アドレスの後に SAP が来ることを意味します。詳細は、DLPI 仕様の「Message DL_INFO_ACK」を参照してください。
送信に使用されるブロードキャストアドレスが格納されるバイト配列の長さ gldm_addrlen に対するポインタ。ドライバはブロードキャストアドレスを収めるスペースを提供し、そのスペースに適切な値を入れ、その値を指すように gldm_broadcast_addr を設定する必要があります。Ethernet、Token Ring、および FDDI の場合、ブロードキャストアドレスは通常、0xFF-FF-FF-FF-FF-FF です。
ベンダーが提供したデバイスのネットワーク物理アドレスが格納される、バイト配列の長さ gldm_addrlen に対するポインタ。ドライバはこのアドレスを収めるスペースを提供し、そのスペースにデバイスから読み取った情報を入れ、その情報を指すように gldm_vendor_addr を設定する必要があります。
デバイスのこのインスタンスに対応する PPA 番号。通常、ddi_get_instance(9F) から返されたインスタンス番号に設定します。
このデバイスの dev_info ノードに対するポインタ
ddi_get_iblock_cookie(9F)、 ddi_add_intr(9F)、 ddi_get_soft_iblock_cookie(9F)、 または ddi_add_softintr(9F) から返された割り込みブロック cookie。これは、gld_recv() の呼び出し元となる、デバイスの受信割り込みに対応しなければなりません。
GLD 統計 (gld_stats) 構造体は、gld(9E) および gld(7D) で記述されているように、ドライバの gldm_get_stats() ルーチンから戻るときに、GLD ベースのドライバから GLD に統計情報および状態情報を伝えるために使用します。この構造体のメンバーは、GLD ベースのドライバによってセットされ、GLD が統計情報を報告するときに使用されます。後出の表では、GLD が報告する統計変数の名前がコメントで示されています。個々の統計情報の詳細については、gld(7D) のマニュアルページを参照してください。
ドライバはこの構造体の長さに関して仮定することができません。Solaris、GLD、またはその両方のリリースごとに異なる可能性があります。このマニュアルに記載されていない GLD 専用の構造体のメンバーは、デバイス固有のドライバによって設定したり読み取ったりしてはなりません。
次の構造体のメンバーは、すべてのメディアタイプに対して定義されます。
uint64_t glds_speed; /* ifspeed */ uint32_t glds_media; /* media */ uint32_t glds_intr; /* intr */ uint32_t glds_norcvbuf; /* norcvbuf */ uint32_t glds_errrcv; /* ierrors */ uint32_t glds_errxmt; /* oerrors */ uint32_t glds_missed; /* missed */ uint32_t glds_underflow; /* uflo */ uint32_t glds_overflow; /* oflo */
次の構造体のメンバーは、メディアタイプ DL_ETHER に対して定義されます。
uint32_t glds_frame; /* align_errors */ uint32_t glds_crc; /* fcs_errors */ uint32_t glds_duplex; /* duplex */ uint32_t glds_nocarrier; /* carrier_errors */ uint32_t glds_collisions; /* collisions */ uint32_t glds_excoll; /* ex_collisions */ uint32_t glds_xmtlatecoll; /* tx_late_collisions */ uint32_t glds_defer; /* defer_xmts */ uint32_t glds_dot3_first_coll; /* first_collisions */ uint32_t glds_dot3_multi_coll; /* multi_collisions */ uint32_t glds_dot3_sqe_error; /* sqe_errors */ uint32_t glds_dot3_mac_xmt_error; /* macxmt_errors */ uint32_t glds_dot3_mac_rcv_error; /* macrcv_errors */ uint32_t glds_dot3_frame_too_long; /* toolong_errors */ uint32_t glds_short; /* runt_errors */
次の構造体のメンバーは、メディアタイプ DL_TPR に対して定義されます。
uint32_t glds_dot5_line_error /* line_errors */ uint32_t glds_dot5_burst_error /* burst_errors */ uint32_t glds_dot5_signal_loss /* signal_losses */ uint32_t glds_dot5_ace_error /* ace_errors */ uint32_t glds_dot5_internal_error /* internal_errors */ uint32_t glds_dot5_lost_frame_error /* lost_frame_errors */ uint32_t glds_dot5_frame_copied_error /* frame_copied_errors */ uint32_t glds_dot5_token_error /* token_errors */ uint32_t glds_dot5_freq_error /* freq_errors */
次の構造体のメンバーは、メディアタイプ DL_FDDI に対して定義されます。
uint32_t glds_fddi_mac_error; /* mac_errors */ uint32_t glds_fddi_mac_lost; /* mac_lost_errors */ uint32_t glds_fddi_mac_token; /* mac_tokens */ uint32_t glds_fddi_mac_tvx_expired; /* mac_tvx_expired */ uint32_t glds_fddi_mac_late; /* mac_late */ uint32_t glds_fddi_mac_ring_op; /* mac_ring_ops */
上記の統計変数のほとんどは、特定のイベントが検出された回数を示すカウンタです。例外は次のとおりです。
インタフェースの現在の帯域幅の概算値 (ビット/秒)。帯域幅の変動のないインタフェース、または正確な推定ができないインタフェースの場合、このオブジェクトには公称の帯域幅が入ります。
ハードウェアで使用されているメディア (配線) またはコネクタのタイプ。現在サポートされているメディア名には、 GLDM_AUI、GLDM_BNC、 GLDM_TP、GLDM_10BT、 GLDM_100BT、 GLDM_100BTX、 GLDM_100BT4、 GLDM_RING4、 GLDM_RING16、 GLDM_FIBER、 および GLDM_PHYMII が含まれます。GLDM_UNKNOWN を指定することもできます。
インタフェースの現在の二重状態。サポートされる値は、GLD_DUPLEX_HALF および GLD_DUPLEX_FULL です。GLD_DUPLEX_UNKNOWN を指定することもできます。