Solaris 8 のソフトウェア開発 (追補)

gld_mac_info 構造体

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 構造体のメンバーを認識できます。

gldm_private

この構造体のメンバーは、デバイス固有のドライバ専用であり、GLD が使用したり変更したりすることはありません。これは、従来専用データに対するポインタとして使用されたもので、ドライバが定義し、またドライバが割り当てたインスタンス別データ構造体を指し示します。

次の構造体メンバーのグループは、gld_register() を呼び出す前にドライバで設定しなければなりません。以後は、ドライバ側で変更してはなりません。gld_register() がこれらの構造体のメンバーの値を使用またはキャッシュすることがあるので、gld_register() を呼び出した後でドライバが変更を行うと、予期せぬ結果を招く可能性があります。

gldm_reset

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_start

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_stop

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_set_mac_addr

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_set_multicast

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_set_promiscuous

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_send

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_intr

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_get_stats

ドライバのエントリポイントに対するポインタ。gld(9E) を参照

gldm_ioctl

ドライバのエントリポイントに対するポインタ。NULL にすることができる。gld(9E) を参照

gldm_ident

デバイスに関する短い記述を含む文字列に対するポインタ。システムメッセージ内のデバイスを識別する場合に使用します。

gldm_type

ドライバが処理するデバイスのタイプ。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 を正しく動作させるには、この構造体のメンバーを適切に設定する必要があります。

gldm_minpkt

最小の Service Data Unit サイズ - デバイスが送信する最小パケットサイズです (MAC ヘッダーは含まない)。デバイス固有のドライバが必要なすべてのパディングを処理する場合は、このサイズをゼロにすることができます。

gldm_maxpkt

最大の Service Data Unit サイズ - デバイスが送信できる最大パケットサイズです (MAC ヘッダーは含まない)。Ethernet の場合、この値は 1500 です。

gldm_addrlen

デバイスが処理する物理アドレスの長さ (バイト数)。Ethernet、Token Ring、および FDDI の場合、この構造体のメンバーの値は 6 でなければなりません。

gldm_saplen

ドライバが使用する SAP アドレスの長さ (バイト数)。GLD ベースのドライバでは、これは常に -2 に設定します。この値は、2 バイトの SAP 値がサポートされること、および DLSAP アドレスで物理アドレスの後に SAP が来ることを意味します。詳細は、DLPI 仕様の「Message DL_INFO_ACK」を参照してください。

gldm_broadcast_addr

送信に使用されるブロードキャストアドレスが格納されるバイト配列の長さ gldm_addrlen に対するポインタ。ドライバはブロードキャストアドレスを収めるスペースを提供し、そのスペースに適切な値を入れ、その値を指すように gldm_broadcast_addr を設定する必要があります。Ethernet、Token Ring、および FDDI の場合、ブロードキャストアドレスは通常、0xFF-FF-FF-FF-FF-FF です。

gldm_vendor_addr

ベンダーが提供したデバイスのネットワーク物理アドレスが格納される、バイト配列の長さ gldm_addrlen に対するポインタ。ドライバはこのアドレスを収めるスペースを提供し、そのスペースにデバイスから読み取った情報を入れ、その情報を指すように gldm_vendor_addr を設定する必要があります。

gldm_ppa

デバイスのこのインスタンスに対応する PPA 番号。通常、ddi_get_instance(9F) から返されたインスタンス番号に設定します。

gldm_devinfo

このデバイスの dev_info ノードに対するポインタ

gldm_cookie

ddi_get_iblock_cookie(9F)ddi_add_intr(9F)ddi_get_soft_iblock_cookie(9F)、 または ddi_add_softintr(9F) から返された割り込みブロック cookie。これは、gld_recv() の呼び出し元となる、デバイスの受信割り込みに対応しなければなりません。