EN JA
NG_ETHER(4)
NG_ETHER(4) FreeBSD Kernel Interfaces Manual NG_ETHER(4)

名称

ng_etherイーサネット netgraph ノードタイプ

書式

#include < netgraph/ng_ether.h>

解説

ether netgraph ノードタイプは、イーサネットインタフェースと netgraph(4) ネットワークサブシステムとの情報をやりとりを許します。 ng_ether モジュールがカーネルにいったんロードされると、ノードは、自動的にシステムのそれぞれのイーサネットインタフェースのために作成されます。各ノードは、関連インタフェースと同じ名前でそれ自体の名前を付けることを試みます。

3 つのフックがサポートされます: lower, upper, orphans です。フック名 divert は、 lower のための別名として使用できます。そして、後方互換性のために提供されます。ほんとうに 2 つの名前は、同じフックを表します。

lower フックは、生のイーサネットデバイスへの接続です。接続されたとき、upper 層の処理のためにカーネルに渡される代わりにすべての着信パケットは、このフックに転送されます。このフックへの書き込みは、デバイスによって送信される生のイーサネットフレームをもたらします。通常の発信パケットは、接続された lower によって影響されません。

upper フックは、上位のプロトコルレイヤへの接続です。接続されたとき、デバイスによって送信される代わりに、すべて発信パケットは、このフックへ転送されます。このフックへの書き込みは、ちょうどまるで配線上に入ったかのようにカーネルによって受信される生のイーサネットフレームをもたらします。通常の着信パケットは、接続された upper によって影響されません。

orphans フックは、(そうでなければ捨てられる) 認識されていないパケットだけがそのフックに書き込まれることを除いて、 lower と同等です。さらに、他の通常の着信トラフィックは、影響を受けなません。 upper に書き込まれた認識されていないパケットは、接続された場合、 orphans へ転送して戻されます。

すべての場合では、フレームは、標準に 14 バイトのイーサネットヘッダ (しかし、チェックサムはない) がある生のイーサネットフレームです。

どんなフックも接続されていないとき、 upperlower は、実際には、一緒に接続されます、それでパケットは、通常上方と下方に流れます。

フック

このノードタイプは、次のフックをサポートします:
lower
下位のデバイスリンクレイヤとの接続。
upper
上位のプロトコルレイヤとの接続。
orphans
lower に似ていますが、認識されていないパケットを受信するだけです。

コントロールメッセージ

このノードタイプは、次を加えて、一般的なコントロールメッセージをサポートします:
NGM_ETHER_GET_IFNAME ( getifname)
ヌル文字で終了する ASCII 文字列として関連インタフェースの名前を返します。通常、これは、ノードの名前と同じです。
NGM_ETHER_GET_IFINDEX ( getifindex)
32 ビットの整数として関連インタフェースのグローバルなインデックスを返します。
NGM_ETHER_GET_ENADDR ( getenaddr)
デバイスのユニークな 6 バイトのイーサネットアドレスを返します。
NGM_ETHER_SET_ENADDR ( setenaddr)
デバイスのユニークな 6 バイトのイーサネットアドレスを設定します。このコントロールメッセージは、 SIOCSIFLLADDR ioctl(2) システムコールを使用することと同等です。
NGM_ETHER_SET_PROMISC ( setpromisc)
無差別モードを有効にするか、または無効にします。このメッセージは、インタフェースで無差別モードを有効にするか、または無効にする 32 ビットの 1 つの整数フラグを含んでいます。 0 でない値は、無差別モードを有効にします。
NGM_ETHER_GET_PROMISC ( getpromisc)
ノードの無差別フラグの現在の値を取得します。返り値は、常に 1 か 0 です。このフラグがノードの自己の無差別な設定を反映して、他の手段によって影響することができる、 (例えば、 bpf(4)) 実際のインタフェースの無差別な状態は、反映する必要がないことに注意してください、
NGM_ETHER_SET_AUTOSRC ( setautosrc)
自動ソースアドレス上書きフラグを設定します。このメッセージは、すべての発信パケットをデバイスのユニークなイーサネットアドレスでそれらのソースイーサネットアドレスフィールドを上書きする 32 ビットの 1 つの整数フラグを含んでいます。このフラグが 0 に設定されるなら、発信パケットのソースアドレスは、変更されません。このフラグのためのデフォルト設定は、無効です。
NGM_ETHER_GET_AUTOSRC ( getautosrc)
ノードのソースアドレス上書きフラグの現在の値を取得します。返り値は、常に 1 か 0 です。
NGM_ETHER_ADD_MULTI ( addmulti)
イーサネットマルチキャストグループに加えます。このコントロールメッセージは、 SIOCADDMULTI ioctl(2) システムコールを使用することと同等です。
NGM_ETHER_DEL_MULTI ( delmulti)
イーサネットマルチキャストグループから退きます。このコントロールメッセージは、 SIOCDELMULTI ioctl(2) システムコールを使用することと同等です。
NGM_ETHER_DETACH ( detach)
基本的なイーサネットインタフェースからデタッチして、ノードをシャットダウンします。

シャットダウン

NGM_SHUTDOWN コントロールメッセージを受け取ることによって、すべてのフックは、切断され、無差別モードは、無効にされますが、ノードは、削除されません。ノードは、 NGM_ETHER_DETACH コントロールメッセージを使用してシャットダウンのみ行うことができます。インタフェース自体が取り除かれるなら (例えば、PC Card 取り外しのため)、ノードは、見えなくなります。

使用例

このコマンドは、“ fxp0”インタフェースによって受信されたすべての認識されないパケットを 16 進法と ASCII で復号化されて標準出力にダンプします:

nghook -a fxp0: orphans

このコマンドは、インタフェース“ fxp0”に sample.pkt の内容を送信します:

cat sample.pkt | nghook fxp0: orphans

これらのコマンドは、 ng_tee(4) ノードを、パケットの流れ、統計などをトレースするのに使用することができる lowerupper のプロトコルレイヤの間に挿入します。

ngctl mkpeer fxp0: tee lower right 
ngctl connect fxp0: lower upper left

作者

Julian Elischer <julian@FreeBSD.org> Archie Cobbs <archie@FreeBSD.org>

バグ

他のほとんどの netgraph ノードタイプのために動作する自動 KLD モジュールローディングメカニズムは、 ether ノードが要求に応じて作成されないので、 ether ノードタイプでは、動作しません。代わりに、イーサネットインタフェースが取り付けられるとき、または KLD が最初にロードされるとき、それらは、作成されます。そのため、KLD が静的にカーネルにコンパイルされないなら、 ether ノードを生じさせるために、手動で KLD をロードする必要があります。
June 23, 2011 FreeBSD