NG_CAR(4) | FreeBSD Kernel Interfaces Manual | NG_CAR(4) |
名称
ng_car — コミットされたアクセスレート (Committed Access Rate) netgraph ノードタイプ書式
#include < netgraph/ng_car.h>解説
car ノードタイプは、次を使用を通してトラフィックの流れを制限します:
- RFC 2697 に説明されている単一レート 3 色マーカ。
- RFC 2698 で説明されている 2 つのレート 3 色マーカ。
- Cisco によって使用された RED のようなレート制限アルゴリズム。
- RED で形成されるトラフィック。
フック
このノードタイプは、次のフックをサポートします:- upper
- 上位レイヤ (層) プロトコルに通じるフック。
- lower
- 下位レイヤ (層) プロトコルに通じるフック。
upper (上位) から lower (下位) に流れるトラフィックは、 downstream トラフィックと見なされます。 lower (下位) から upper (上位) に流れるトラフィックは、 upstream トラフィックと見なされます。
操作モード
各フックは、次のモードの 1 つで動作することができます:- NG_CAR_SINGLE_RATE
- RFC 2697 で説明されている単一レート 3 色マーカ。コミットされたバーストパケットは、緑色とみなされ、拡張されたバーストパケットは、黄色にみなされ、限界を超えるパケットは、赤色にみなされます。コミットされたバーストは、CIR (Committed Information Rate (コミットされた情報レート)) 速度で補充されます。それが満たされるとき、限界を超えるバーストが補充されます。
- NG_CAR_DOUBLE_RATE
- RFC 2698 で説明されている 2 つのレート 3 色マーカ。コミットされたバーストパケットは、緑色とみなされ、ピークバーストパケットは、黄色とみなされ、限界を超えたパケットは、赤色とみなされます。コミットされたバースト CIR 速度で補充されます。ピークバーストは、同時に PIR (Peak Information Rate (ピーク情報レート) 速度で補充されます。
- NG_CAR_RED
-
NG_CAR_SINGLE_RATE, と同様ですが、拡張されたバーストの異なった解釈です。限界を超えた通常のバーストと拡張されたバーストが使用されるとき、パケットは、消費された拡張されたバーストの一部とほぼ等しい赤色と見なされます。拡張されたバーストは、最初に補充されます。それが満たされるとき、コミットされたバーストが補充されます。この振る舞いは、RED アクティブキュー管理アルゴリズムと同様です。
このアルゴリズムは、NG_CAR_SINGLE_RATE より TCP トラフィックにより洗練されています。
- NG_CAR_SHAPE
-
コミットされたバーストパケットは、緑色と見なされ、限界を超えたパケットは、RED 管理で遅延キューに入れられ、黄色とみなされます。キューによって落されたパケットは、赤色に見なされます。キューパラメータは、決めうちされます: 長さ 99 パケット、min_th 8 パケット、 max_p 100%。
トラフィック形成は、6-8 TCP セグメントより少ない帯域幅 * 遅延製品とのリンクでレート制限するより TCP トラフィックにより洗練されていますが、キュー処理のために追加されたシステムリソースを消費します。
コントロールメッセージ
このノードタイプは、一般的なコントロールメッセージと次の特有のメッセージをサポートします。- NGM_CAR_SET_CONF ( setconf)
- ノードの設定を指定された struct ng_car_bulkconf に設定します。
- NGM_CAR_GET_CONF ( getconf)
-
struct ng_car_bulkconf として現在のノード設定を返します。
struct ng_car_hookconf { uint64_t cbs; /* コミットされたバーストサイズ (バイト) */ uint64_t ebs; /* 超過/最大バーストサイズ (バイト) */ uint64_t cir; /* コミットされた情報レート (バイト/秒) */ uint64_t pir; /* 最大情報レート (バイト/秒) */ uint8_t green_action; /* 緑色パケットの動作 */ uint8_t yellow_action; /* 黄色パケットの動作 */ uint8_t red_action; /* 赤色パケットの動作 */ uint8_t mode; /* single/double レート, ... */ uint8_t opt; /* color-aware または color-blind */ }; /* 指定できるアクション (..._action) */ enum { NG_CAR_ACTION_FORWARD = 1, NG_CAR_ACTION_DROP }; /* 操作モード (mode) */ enum { NG_CAR_SINGLE_RATE = 0, NG_CAR_DOUBLE_RATE, NG_CAR_RED, NG_CAR_SHAPE }; /* モードオプション (opt) */ #define NG_CAR_COUNT_PACKETS 2 struct ng_car_bulkconf { struct ng_car_hookconf upstream; struct ng_car_hookconf downstream; };
- NGM_CAR_GET_STATS ( getstats)
-
struct ng_car_bulkstats としてノード統計を返します。
struct ng_car_hookstats { uint64_t passed_pkts; /* 渡されたパケットのカウンタ */ uint64_t droped_pkts; /* 落されたパケットのカウンタ */ uint64_t green_pkts; /* 緑パケットのカウンタ */ uint64_t yellow_pkts; /* 黄パケットのカウンタ */ uint64_t red_pkts; /* 赤パケットのカウンタ */ uint64_t errors; /* 操作エラーのカウンタ */ }; struct ng_car_bulkstats { struct ng_car_hookstats upstream; struct ng_car_hookstats downstream; };
- NGM_CAR_CLR_STATS ( clrstats)
- ノード統計をクリアします。
- NGM_CAR_GETCLR_STATS ( getclrstats)
- 不可分にノード統計を返して、クリアします。
シャットダウン
このノードは、 NGM_SHUTDOWN コントロールメッセージを受け取るか、すべてのフックが切断されている時、シャットダウンします。使用例
fxp0 イーサネットインタフェース上の発信データのレートを 20Mbit/s に制限し、着信パケットレートを 5000pps に制限します。
/usr/sbin/ngctl -f- <<-SEQ mkpeer fxp0: car lower lower name fxp0:lower fxp0_car connect fxp0: fxp0_car: upper upper msg fxp0_car: setconf { downstream={ cir=20000000 cbs=2500000 ebs=2500000 greenAction=1 yellowAction=1 redAction=2 mode=2 } upstream={ cir=5000 cbs=100 ebs=100 greenAction=1 yellowAction=1 redAction=2 mode=2 opt=2 } } SEQ
関連項目
netgraph(4), ngctl(8) J. Heinanen, A Single Rate Three Color Marker, RFC 2697. J. Heinanen, A Two Rate Three Color Marker, RFC 2698.作者
<nuno.antunes@gmail.com> <mav@FreeBSD.org>バグ
現時点では、DROP と FORWARD 動作だけが実装されています。November 13, 2012 | FreeBSD |