各種操作関数群
関数説明に先立ち、まずネットワークインターフェイスドライバの状態に関して説明しておく。各ドライバはnet_device構造体中に以下の状態を保持している。各状態は直行しており同時に複数状態を持つことも可能である。
| 状態 | 説明 |
| LINK_STATE_XOFF | 出力停止中 |
| LINK_STATE_START | 起動(up)されている |
| LINK_STATE_PRESENT | デバイスが存在している。PCMCIA等の ホットプラグ可能なデバイスで利用 |
| LINK_STATE_SCHED | 出力処理中 |
- netif_schedule()関数
- 出力先となるnet_deviceの状態に出力中(LINK_STATE_SCHED) にする。
- 上記net_deviceをsoftnet_data[]のoutput_queueにリンクする。 SMP環境ではsoftnet_data[]はCPUの個数分用意される。
- 自CPU上でパケット受信処理(net_tx_action関数)が動作するように ソフト割り込み要求(cpu_raise_softirq(NET_TX_SOFTIRQ)関数) を行う。
- netif_stop_queue()関数
- 出力を停止する(net_deviceの状態にLINK_STATE_XOFFビットを 立てる)にする)。 ネットワークインターフェイスがdownしたときだけでなく、 ドライバの送信バッファがフルになったときのフロー制御にも利用される。
- netif_start_queue()関数
- 出力可能とする(net_deviceの状態のLINK_STATE_XOFFビットを落す)。 ネットワークインターフェイスがupしたときに呼び出される。
- netif_wake_queue()関数
- 出力を再開する。net_deviceの状態からLINK_STATE_XOFF ビットを落し、netif_schedule()関数を呼び出す。
- netif_queue_stopped()関数
- 出力停止中であるか(net_deviceの状態にLINK_STATE_XOFFビットが 立っているか?)確認する。
- netif_running()関数
- ネットワークインターフェイスがupしているか否か (net_deviceの状態にLINK_STATE_STARTビットが立っているか?) 確認する。
- dev_kfree_skb_irq()関数
- パケット(sk_buff)をsoftnet_data[]のcopletion_queueにリンクする。 この時点ではパケットを解放せず、本当の解放処理は 送信処理ハンドラ(net_tx_action関数)に任せる。
- dev_kfree_skb_any()関数
- 割り込みハンドラから呼び出された時は、dev_kfree_skb_irq関数を 呼び出し、プロセスのコンテキストから呼び出されたときは即解放 (dev_kfree_skb関数)する。
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1