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

名称

ng_etfEthertype フィルタリング netgraph ノードタイプ

書式

#include < netgraph.h>
#include < netgraph/ng_etf.h>

解説

etf ノードタイプは、データの最初の 14 バイトにはあると見なされるイーサネットヘッダで見つけられた ethertype に基づいたフックの間のデータを多重化してフィルタにかけます。着信イーサネットフレームは、 downstream (下流) のフックで受け付けられ、ノードがフィルタにかけるために設定された値と ethertype が一致する場合、パケットは、値が設定された時に識別されたフックで送出されます。設定された値が一致しない場合、それは、 nomatch フックに渡されます。 nomatch フックが接続されていない場合、パケットは、落とされます。

ほかの方向 ( downstream (下流) のフックに向かった) に移動するパケットは、また、検査されてフィルタにかけられます。パケットがノードの中に設定された値の 1 つに一致する ethertype を持っている場合、それは、値が設定されたフックで到着しなければなりません。そうでなければ、捨てられます。コントロールメッセージによって設定されたもの以外の ethertypes の値は、 nomatch フックによって到着しなければなりません。

フック

このノードタイプは、次のフックをサポートします:
downstream
一般的に、このフックは、 下部の フックを使用する ng_ether(4) ノードに接続されます。
nomatch
一般的に、このフックも 上部の フックを使用する ng_ether(4) タイプノードに接続されます。
< 任意の正当な名前>
任意の他のフック名は、受け付けられ、ethertype の一致ターゲットとして使用できます。一般的に、このフックは、ethertypes の特定のセットでパケットを要求して発生させるプロトコル操作ノードに取り付けられます。

コントロールメッセージ

このノードタイプは、次を加えて、一般的なコントロールメッセージをサポートします:
NGM_ETF_GET_STATUS ( getstatus)
このコマンドは、パケットカウントのためのノード統計を含む struct ng_etfstat を返します。
NGM_ETF_SET_FILTER ( setfilter)
ノードに新しい ethertype フィルタを設定して、使用すべきタイプのパケットの行き帰りのフックを指定します。フックと ethertype は、タイプ struct ng_etffilter の構造体で指定されます。

struct ng_etffilter { 
    char matchhook[NG_HOOKSIZ]; /* フック名 */ 
    uint16_t ethertype;  /* この ethertype をこのフック */ 
};

使用例

ngctl(8) を使用して、次のようなコマンドラインから適切な場所にフィルタを設定するのは可能です:

#!/bin/sh 
ETHER_IF=fxp0 
MATCH1=0x834 
MATCH2=0x835 
cat <<DONE >/tmp/xwert 
# 新しい ethertype フィルタを作り、イーサネットの下部のフックに 
# 取り付けます。 
# まず最初に、最後の時間から使い残しのビットを取り除きます。 
shutdown ${ETHER_IF}:lower 
mkpeer ${ETHER_IF}: etf lower downstream 
# 容易にそれを参照できるように名前を与える。 
name ${ETHER_IF}:lower etf 
# nomatch フックを同じインタフェースの上部に接続します。 
# まるでフィルタが存在していないかのようにすべての不一致のパケットが 
# 作動します。 
connect ${ETHER_IF}: etf: upper nomatch 
DONE 
ngctl -f /tmp/xwert 
 
# 何か捕獲したパケットへのフックに何かを設定して、それらを表示します。 
echo "Unrecognised packets:" 
nghook -a etf: newproto & 
# そのフックへの 2 つのランダム ethertype をフィルタする。 
ngctl 'msg etf: setfilter { matchhook="newproto" ethertype=${MATCH1} } 
ngctl 'msg etf: setfilter { matchhook="newproto" ethertype=${MATCH2} }

シャットダウン

このノードは、 NGM_SHUTDOWN コントロールメッセージを受け取るか、すべてのフックが切断されている時、シャットダウンします。

歴史

ng_etf ノードタイプは、 FreeBSD 5.0 で実装されました。

作者

Julian Elischer <julian@FreeBSD.org>
November 13, 2012 FreeBSD