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

名称

ng_bridgeイーサネットブリッジ netgraph ノードタイプ

書式

#include < sys/types.h>
#include < netgraph/ng_bridge.h>

解説

bridge ノードタイプは、1 つ以上のリンクにイーサネットブリッジを実行します。 (接続されたフックで代表される) 各リンクは、生のイーサネットフレームを送受信するために使用されます。パケットが受信されているとき、ノードは、各ホストがどのリンクに存在するかを学習します。知られているホストへのパケットユニキャストは、適切なリンクだけに向けられ、他のリンクは、トラフィックなしで済ませられます。この振る舞いは、常にあらゆる受信されたパケットをあらゆるリンクに転送する、ハブと対照的になっています。

ループの検出

bridge ノードは、簡単なループの検出アルゴリズムを組み込んでいます。ループは、2 つのポートが同じ物理的なメディアに接続される時です。ループは、パケットのストーム (あらし) を避けるために重要です。それは、大幅に性能を低下させます。同じパケットを何度も繰り返して送信し受信するとき、パケットのストームが生じます。ホストがリンク A で検出され、そして最初にリンク A で検出された後にある期間以内にリンク B で検出された場合、リンク B は、ループバックしたリンクであると考えられます。時間周期は、最小の安定した時間と呼ばれます。

ループバックしたリンクは、一時的に沈黙されます。すなわち、そのリンクで受信されたすべてのトラフィックは、無視されます。

IPFW 処理

1 つのリンクごとに ipfirewall(4) メカニズムによって IP パケットの処理は、まだ実装されていません。

フック

このノードタイプは、 NG_BRIDGE_MAX_LINKS フックまでサポートします。それぞれの接続されたフックは、ブリッジリンクを表します。フックは、 link0, link1 などと名前がつけられます。通常、これらのフックは、1 つ以上の ng_ether(4) ノードの 下側の フックに接続されます。ホストマシンをブリッジネットワークに接続するには、単に ng_ether(4) ノードの 上側の フックをブリッジノードに接続します。

コントロールメッセージ

このノードタイプは、次を加えて、一般的なコントロールメッセージをサポートします:
NGM_BRIDGE_SET_CONFIG ( setconfig)
ノード設定を設定します。このコマンドは、引数として struct ng_bridge_config を取ります。

/* ノード設定構造体 */ 
struct ng_bridge_config { 
  u_char      ipfw[NG_BRIDGE_MAX_LINKS]; /* ipfw を有効にする */ 
  u_char      debugLevel;           /* デバッグレベル */ 
  uint32_t    loopTimeout;          /* リンクループバック沈黙時間 */ 
  uint32_t    maxStaleness;         /* 削除 (nuking) の前の最大ホスト 
                                       年齢 (age) */ 
  uint32_t    minStableAge;         /* 安定したホストのための最小 
                                       時間 */ 
};

ipfw 配列は、対応するリンクで受信された IP パケットの ipfirewall(4) 処理を有効にします。 debugLevel フィールドは、ノードでデバッグレベルを設定します。 2 以上のレベルでは、検出されたループは、ログに記録されます。デフォルトレベルは、1 です。

loopTimeout は、ループされたリンクがどれくらい長く (秒で) 沈黙されるかを確定します。デフォルトは、60 秒です。 maxStaleness パラメータは、ホストのエントリが忘れられる前にどれくらい長い不活発の期間かを確定します。デフォルトは、15 分です。 minStableAge は、ループバック状態を宣言する前にホストが 1 つの別のものへのリンクからどれくらい素早くジャンプしなければならないかを確定します。デフォルトは、1 秒です。

NGM_BRIDGE_GET_CONFIG ( getconfig)
struct ng_bridge_config として現在の設定を返します。
NGM_BRIDGE_RESET ( reset)
ノードにすべてのホストを忘れるようにし、すべてのリンクを沈黙しないようにします。ノード設定は、変更されません。
NGM_BRIDGE_GET_STATS ( getstats)
このコマンドは、引数として 4 バイトのリンク番号を取り、現在接続しなければならない、対応するリンクのための統計を含む struct ng_bridge_link_stats 返します。

/* 統計構造体 (各リンクあたり 1 つ) */ 
struct ng_bridge_link_stats { 
  uint64_t   recvOctets;     /* リンクで受信した合計オクテッド */ 
  uint64_t   recvPackets;    /* リンクで受信した合計パケット */ 
  uint64_t   recvMulticasts; /* リンクで受信したマルチキャスト 
                                パケット */ 
  uint64_t   recvBroadcasts; /* リンクで受信したブロードキャスト 
                                パケット */ 
  uint64_t   recvUnknown;    /* 未知の宛先アドレスで受信した 
                                パケット */ 
  uint64_t   recvRunts;      /* 14 バイト未満の受信したパケット */ 
  uint64_t   recvInvalid;    /* 偽のソースアドレスで受信した 
                                パケット */ 
  uint64_t   xmitOctets;     /* リンクで送信した合計オクテッド */ 
  uint64_t   xmitPackets;    /* リンクで送信した合計パケット */ 
  uint64_t   xmitMulticasts; /* リンクで送信したマルチキャスト 
                                パケット */ 
  uint64_t   xmitBroadcasts; /* リンクで送信したブロードキャスト 
                                パケット */ 
  uint64_t   loopDrops;      /* ループバックのために落された 
                                パケット */ 
  uint64_t   loopDetects;    /* ループを検出した数 */ 
  uint64_t   memoryFailures; /* メモリか mbuf を取得できなかった 
                                回数 */ 
};
NGM_BRIDGE_CLR_STATS ( clrstats)
このコマンドは、引数として 4 バイトのリンク番号を取り、そのリンクのための統計をクリアします。
NGM_BRIDGE_GETCLR_STATS ( getclrstats)
NGM_BRIDGE_GET_STATS と同様ですが、その上、不可分に統計をクリアします。
NGM_BRIDGE_GET_TABLE ( gettable)
struct ng_bridge_host_ary にパケットを方向づけるために使われる現在のホストマッピングテーブルを返します。
NGM_BRIDGE_SET_PERSISTENT ( setpersistent)
このコマンドは、ノードで永続的なフラグを設定し、引数を取りません。

シャットダウン

このノードは、 NGM_SHUTDOWN コントロールメッセージを受け取るか、すべてのフックが切断されている時、シャットダウンします。 NGM_BRIDGE_SET_PERSISTENT 制御メッセージを通して永続的なフラグを設定することは、最後のフックが切断されるとき、自動的なノードのシャットダウンを無効にします。

関連ファイル

/usr/share/examples/netgraph/ether.bridge
どのようにブリッジネットワークを設定するかを示すスクリプトの例

歴史

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

作者

Archie Cobbs <archie@FreeBSD.org>
May 5, 2010 FreeBSD