smt は、マルチスレッド化された、読み込みや複製が可能な STREAMS ハードウェアデバイスドライバです。このドライバでは、アプリケーションプログラムがステーション管理の統計情報と状態情報を取得するためのデータリンクプロバイダインタフェース dlpi(7) を使用することができます。smt ドライバは、パケットのスループット統計情報、再構成イベント、インタフェース例外情報を提供します。また、PHY に関する情報と FORMAC エラーカウンタを提供します。
ユーザーは、プログラム中の #include <nfsmt.h> の行の前に次の 2 行を追加する必要があります。
#define SMT7_2 0 #define CFG_YES 1 |
ドライバにアクセスするには、複製された文字型特殊デバイスの /dev/smt が使用されます。開かれたストリームを特定のデバイス (ppa) に関連付けるには、明示的に DL_ATTACH_REQ メッセージ を使用する必要があります (ppa はインタフェースインスタンス番号に対応します)。
DL_ATTACHED 状態になると、DL_BIND_REQ を送信する必要はありません。ioctl(2) 呼び出しを使用して、ドライバと対話することができます。ioctl に対する引数は、以下の形式で指定します。
ioctl (int fd, int request, SMTCB *smtp) |
request は、smt ドライバに固有であり、SMT_GET と SMT_ACT のいずれかを指定することができます。SMTCB は、ヘッダーファイルの nfsmt.h に以下のように定義されています。
typedef struct { int command; int sub_command; int param1; int param2; int param3; char *where; int length; } SMTCB; |
SMT_GET:
SMT_GET は、HPC レジスタを読み取ったり smt 状態を取得したりするためのさまざまな関数を提供します。smtp の command フィールドは、以下のいずれかの値に初期化する必要があります。
HPC_BMAC1_REGS : BMAC レジスタの読み取り HPC_READ : HPC レジスタの読み取り HPC_PORT1_REGS : RMT ポート 1 および HPC_PORT2_REGS ポート 2 レジスタの読み取り |
これらのコマンドには、サブコマンドが用意されているものがあります。sub_command フィールドは、以下のいずれかのサブコマンドに初期化する必要があります。
1. HPC_BMAC1_REGS
HPC_BMAC1_REGS は、BMAC レジスタの読み取りを可能にします。 HPC_BMAC1_REGS には、GET_COUNTER_GROUP および GET_NEIGHBOR_ADDR の 2 つのサブコマンドがあります。 GET_COUNTER_GROUP は、さまざまな SMT カウンタ値を取得するために使用されます。
GET_COUNTER_GROUP を使用するには、SMTCB *smtp を以下のように初期化する必要があります。
COUNTER_GROUP ct; smtp->command = HPC_BMAC1_REGS; smtp->sub_command = GET_COUNTER_GROUP; smtp->where = (char *) &ct; smtp->length = sizeof (ct); |
GET_NEIGHBOR_ADDR は、隣接ステーションの MAC アドレスの取得を可能にします。GET_NEIGHBOR_ADDR を使用するには、SMTCB *smtp を以下のように初期化する必要があります。
char addr_buf[12]; smtp->command = HPC_BMAC1_REGS; smtp->sub_command = GET_NEIGHBOR_ADDR; smtp->where = addr_buf; smtp->length = 12; |
2. HPC_READ
HPC_READ は、HPC レジスタの読み取りを可能にします。HPC_READ には、サブコマンドはありません。HPC_READ を使用するには、SMTCB *smtp を以下のように初期化する必要があります。
smtp->command = HPC_READ; smtp->param1 = HPC_READ | HPC_SIZE_BYTE | <HPC_reg_offset>; smtp->where = (char *) smtp; |
HPC_register_offset オフセットは、HPC が提供するレジスタ空間です。レジスタのオフセットについては、nfsmt.h ファイルを参照してください。
3. HPC_PORT1_REGS と HPC_PORT2_REGS
HPC_PORT1_REGS は、接続管理の状態の取得を可能にします。 HPC_PORT2_REGS は 第 2 ポート用です (DAS インタフェースのみ)。HPC_PORT1_REGS には、GET_PORT_GROUP というサブコマンドがあります。HPC_PORT1_REGS を使用するには、SMTCB *smtp を以下のように初期化する必要があります。
FDDI_PORT_GROUP port; smtp->command = HPC_PORT1_REGS; smtp->sub_command = GET_PORT_GROUP; smtp->where = (char *) &port; smtp->length = sizeof (port); |
port.ecm_state および port.pcm_state は、構造体の port に返される 2 つの重要な状態を表します。port.ecm_state は、ECM 状態マシンの現在の状態に対応しています。有効な値は、OUT、IN、TRACE、PATHTEST、INSERT、CHECK、DEINSERTです。 port.ecm_state に返される値は、ECM 状態のリストへのインデックスになります。port.pcm_state は、PCM 状態マシンの現在の状態に対応しています。有効な値は、OFF、BREAK、TRACE、CONNECT、NEXT、SIGNAL、JOIN、VERIFY、ACTIVE、MAINT です。 port.pcm_state に返される値は、PCM の状態のリストへのインデックスになります。
SMT_ACT:
SMT_ACT は、smt ドライバの状態を設定するためのコマンドです。 command フィールドには、必ず SMT_CTL を設定します。SMT_ACT には、SMT_ACCEPT_FRAME と SMT_CLOSE の 2 つのサブコマンドがあります。SMT_ACCEPT_FRAME は、SMT API クライアントが活動中のときに使用する必要があります。
smtp->command = SMT_CTL; smtp->sub_command = SMT_ACCEPT_FRAME; |
SMT_CLOSE は、API クライアントが終了するときに使用する必要があります。
smtp->command = SMT_CTL; smtp->sub_command = SMT_CLOSE; |
/dev/smt