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

名称

ng_one2manyパケットマルチプレクシング netgraph ノードタイプ

書式

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

解説

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 Cobbs <archie@FreeBSD.org>によって書かれました。すべてのアルゴリズムは、 Rogier R. Mulhuijzen <drwilco@drwilco.net>によって追加されました。

バグ

追加の送信とリンク失敗アルゴリズムは、サポートされるべきです。良い候補は、Cisco の Etherchannel です。
November 13, 2012 FreeBSD