EN JA
NG_CAR(4)
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 トラフィックにより洗練されていますが、キュー処理のために追加されたシステムリソースを消費します。

デフォルトで、すべての情報レートは、1 秒毎の bps で測定され、バーストは、バイト単位で測定されます。しかし、NG_CAR_COUNT_PACKETS オプションが有効にされるとき、レートは、1 秒毎のパケットで測定され、バーストは、パケット単位です。

コントロールメッセージ

このノードタイプは、一般的なコントロールメッセージと次の特有のメッセージをサポートします。
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 <nuno.antunes@gmail.com> Alexander Motin <mav@FreeBSD.org>

バグ

現時点では、DROP と FORWARD 動作だけが実装されています。
November 13, 2012 FreeBSD