Documentation
¶
Overview ¶
Package flowcap は、同時に保持するフロー数の上限を数える(仕様 7 節の「同時フロー数の上限」)。 エージェントの中継(relay)と vpsd のプロキシモードの中継(proxyrelay)が共有する。 ルールごとの上限は、所属ルールが変わりうるので呼び出し側がリスナーの現在値で数える。
Index ¶
Constants ¶
const ( UDPTotal = 8192 UDPPerSource = 256 TCPTotal = 2048 TCPPerSource = 128 // ルールごとの上限の下限。設定項目にする前の固定値で、全体の上限を下げた構成で // ルール 1 本の上限が以前より下がらないようにする(Limits.UDPPerRuleCap) UDPPerRuleFloor = 4096 TCPPerRuleFloor = 1024 // プロセス全体の上限に設定できる範囲 TotalMin = 16 TotalMax = 65535 )
仕様 7 節の値。プロセス全体の上限(WGFT_MAX_UDP_FLOWS、WGFT_MAX_TCP_FLOWS)と、 接続元 IP ごとの上限(WGFT_MAX_UDP_FLOWS_PER_SOURCE、WGFT_MAX_TCP_FLOWS_PER_SOURCE。 vpsd だけの設定。11a 節)が設定項目で、ここはその既定値。ルールごとの上限は設定項目ではなく、 プロセス全体の上限から導く(Limits.UDPPerRuleCap、TCPPerRuleCap)。
const PerSourceOff = -1
PerSourceOff は Limits.UDPPerSource/TCPPerSource で、接続元 IP ごとの上限を外すことを表す。
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Counter ¶
type Counter struct {
Total int // プロセス全体の上限。0 は上限なし
PerSource int // 接続元 IP ごとの上限の初期値。0 は上限なし(エージェント、または設定で無効にした場合)
// contains filtered or unexported fields
}
Counter はプロセス全体と接続元 IP ごとのフロー数を数える。ゼロ値は上限なし。 接続元 IP ごとの数は上限の有無にかかわらず常に数えるので、上限は SetPerSource で 動作中に変えられる(変えた後の Acquire から新しい上限で判定する)。
func (*Counter) Acquire ¶
Acquire はフロー 1 つ分の枠を取る。上限に達していれば偽を返し、何も数えない。 真を返したら、フローの終了時に同じ src で Release を 1 回呼ぶ。nil の Counter は常に真を返す。
func (*Counter) SetPerSource ¶ added in v0.4.0
SetPerSource は接続元 IP ごとの上限を変える。0 は上限なし。既に数えているフローは 追い出さず、上限を超えている接続元は、フローが減って下回るまで新しいフローを拒まれる。
type Limits ¶
Limits はプロセス全体と、接続元 IP ごとの上限(設定値)。どの項目もゼロ値なら既定値を使う (WithDefaults)。接続元ごとの上限を外すときは PerSourceOff を入れる。設定の 0(上限なし)は 設定層がこれに写す。ゼロ値を「上限なし」にすると、設定層を通らずに組み立てた Limits で 守りが黙って外れるためである。
func (Limits) MemoryLimit ¶
MemoryLimit は、この上限で動くプロセスに設定するメモリのソフト上限(バイト)。 係数はラボの実測からの定数で、ホストのメモリの量は見ない(仕様 7 節)。
func (Limits) TCPPerRuleCap ¶ added in v0.4.0
func (Limits) TCPPerSourceCap ¶ added in v0.4.0
func (Limits) UDPPerRuleCap ¶ added in v0.4.0
UDPPerRuleCap と TCPPerRuleCap は、ルールごとの同時フロー数の上限をプロセス全体の上限から 導く(仕様 7 節)。全体の半分とするが、以前の固定値と全体の上限の小さいほうを下回らない。 全体を上げれば一緒に上がり、既定や全体を下げた構成では以前と同じ値になる。
func (Limits) UDPPerSourceCap ¶ added in v0.4.0
UDPPerSourceCap と TCPPerSourceCap は、接続元 IP ごとの上限の実効値。0 は数えない (Counter.PerSource と nft.Config の約束に合わせる)。