NG_ONE2MANY(4) | FreeBSD Kernel Interfaces Manual | NG_ONE2MANY(4) |
名称
ng_one2many — パケットマルチプレクシング netgraph ノードタイプ解説
one2many は、一対多数 (one-to-many) (と反対の方向の多対一 (many-to-one)) の方法でいくつかのリンク上のルーティングパケットのための簡単なメカニズムを提供します。 one と名前が付けられた 1 つのフックと many0, many1, 等に名前が付けられた複数のフックがあります。 many フックのいずれで受信されたパケットは、 one フックへ転送されます。 one フックで受信されたパケットは、 many フックの 1 つ以上へ転送されます。そのフックは、ノードの設定された送信アルゴリズムによって決定されます。パケットは、どんな方法でも変更されません。接続された多くのリンクのそれぞれは、アップしているかまたはダウンしていると考えられます。パケットは、ダウンしている many フックには、決して配信されません。リンクがアップしているかまたはダウンしているかを決定する方法は、ノードの設定されたリンク失敗検出アルゴリズムによって決まります。
インタフェースまたはリンクがグループに plumb (垂直) (注:訳不明) であることができる前に、状態は、“アップ”であることを示されなければなりません。通常これは、 rc.conf(5) によって初期ブート段階の間にセットアップされます。また、 ifconfig(8) ユーティリティを使用することによってインタフェースの状態を“アップ”に変更することも可能です。
送信アルゴリズム
- NG_ONE2MANY_XMIT_ROUNDROBIN
- パケットは、シーケンシャル順で多くのフックで配信されます。各パケットは、異なった many フックで出て行きます。
- NG_ONE2MANY_XMIT_ALL
- パケットは、すべての many フックで配信されます。各パケットは、それぞれの many フックで出て行きます。
- NG_ONE2MANY_XMIT_FAILOVER
- パケットは、最初のアクティブな many フックで配信されます。
将来、他のアルゴリズムもまた加えられるかもしれません。
リンク失敗検出
ノードは、アクティブであるかリンクに失敗したかを区別します。データは、アクティブなリンクだけに送信されます。次のリンク失敗検出アルゴリズムが利用可能です:- NG_ONE2MANY_FAIL_MANUAL
- ノードは、リンクのどれが NGM_ONE2MANY_SET_CONFIG コントロールメッセージ (下記参照) でアップされているか明らかに伝えられます。新たに接続されたリンクは、別の方法で設定されるまでダウンしています。
- NG_ONE2MANY_FAIL_NOTIFY
- ノードは、 many (多くの) フックからフロー制御メッセージを listen (接続を受け付け) して、 NGM_LINK_IS_DOWN が受信されたなら、リンクが失敗したと見なします。 NGM_LINK_IS_UP メッセージが受信されたなら、ノードは、リンクがアクティブであると見なします。
将来、他のアルゴリズムもまた加えられるかもしれません。
すべてのリンクが失敗していると見なされるとき、ノードは、 NGM_LINK_IS_DOWN メッセージを one (1 つの) フックに向けて送信します。少なくとも 1 つのリンクがアップしているとき、ノードは、 NGM_LINK_IS_UP メッセージを one (1 つの) フックに向けて送信します。
フック
このノードタイプは、 many0, many1, 等に名前が付けられた NG_ONE2MANY_MAX_LINKS フックと one と名前が付けられた 1 つのフックをサポートします。コントロールメッセージ
このノードタイプは、次を加えて、一般的なコントロールメッセージをサポートします:- NGM_ONE2MANY_SET_CONFIG ( setconfig)
-
コントロールメッセージ引数として
struct ng_one2many_link_config を使用するノード設定を設定します:
/* ノード設定構造体 */ struct ng_one2many_config { uint32_t xmitAlg; /* パケットをどのように配信するか */ uint32_t failAlg; /* リンク失敗をどのように検出するか */ u_char enabledLinks[NG_ONE2MANY_MAX_LINKS]; };
現在、 xmitAlg フィールドのための有効な設定は、 NG_ONE2MANY_XMIT_ROUNDROBIN (デフォルト) または NG_ONE2MANY_XMIT_ALL です。 failAlg のための有効な設定は、 NG_ONE2MANY_FAIL_MANUAL (デフォルト) または NG_ONE2MANY_FAIL_NOTIFY です。
- NGM_ONE2MANY_GET_CONFIG ( getconfig)
- struct ng_one2many_link_config における現在のノード設定を返します。
- NGM_ONE2MANY_GET_STATS ( getstats)
-
このコマンドは、引数として 32 ビットのリンク番号をとり、現在接続されているかもしれない対応する
many リンクのために統計を含む
struct ng_one2many_link_stats を返します
/* 統計構造体 (各リンクあたり 1 つ) */ struct ng_one2many_link_stats { uint64_t recvOctets; /* リンクで受信した合計オクテット */ uint64_t recvPackets; /* リンクで受信した合計パケット */ uint64_t xmitOctets; /* リンクで送信した合計オクテット */ uint64_t xmitPackets; /* リンクで送信した合計パケット */ uint64_t memoryFailures; /* mem または mbuf を取得できなかった 時間 */ };
one リンクのための統計にアクセスするには、リンク番号 -1 を使用します。
- NGM_ONE2MANY_CLR_STATS ( clrstats)
- このコマンドは、引数として 32 ビットのリンク番号をとり、そのリンクのための統計をクリアします。
- NGM_ONE2MANY_GETCLR_STATS ( getclrstats)
- NGM_ONE2MANY_GET_STATS と同様ですが、その上、不可分に統計をクリアします。
シャットダウン
このノードは、 NGM_SHUTDOWN コントロールメッセージを受け取るか、すべてのフックが切断されている時、シャットダウンします。使用例
次のコマンドは、イーサネットインタフェース fxp0 をネットワークインタフェース fxp0 から fxp3 に対応する物理的なインタフェース上にパケットを交互に配信するように設定します。
# Plumb nodes together ngctl mkpeer fxp0: one2many upper one ngctl connect fxp0: fxp0:upper lower many0 ngctl connect fxp1: fxp0:upper lower many1 ngctl connect fxp2: fxp0:upper lower many2 ngctl connect fxp3: fxp0:upper lower many3 # Allow fxp1 through fxp3 to xmit/recv fxp0 frames ngctl msg fxp1: setpromisc 1 ngctl msg fxp2: setpromisc 1 ngctl msg fxp3: setpromisc 1 ngctl msg fxp1: setautosrc 0 ngctl msg fxp2: setautosrc 0 ngctl msg fxp3: setautosrc 0 # Configure all four links as up ngctl msg fxp0:upper \ setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 1 1 ] }" # Bring up interface ifconfig fxp0 192.168.1.1 netmask 0xfffffffc
(アドレス 192.168.1.2 を使用する) ピアマシンでの同様な設定を使って、 4 回の通常の帯域幅でポイントツーポイント (二地点間) のイーサネット接続は、達成されます。
歴史
ng_one2many ノードタイプは、 FreeBSD 4.2 で実装されました。作者
(ラウンドロビンアルゴリズムの) one2many netgraph ノードは、 <archie@FreeBSD.org>によって書かれました。すべてのアルゴリズムは、 <drwilco@drwilco.net>によって追加されました。バグ
追加の送信とリンク失敗アルゴリズムは、サポートされるべきです。良い候補は、Cisco の Etherchannel です。November 13, 2012 | FreeBSD |