flowcap

package
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package flowcap は、同時に保持するフロー数の上限を数える(仕様 7 節の「同時フロー数の上限」)。 エージェントの中継(relay)と vpsd のプロキシモードの中継(proxyrelay)が共有する。 ルールごとの上限は、所属ルールが変わりうるので呼び出し側がリスナーの現在値で数える。

Index

Constants

View Source
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)。

View Source
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

func (c *Counter) Acquire(src netip.Addr) bool

Acquire はフロー 1 つ分の枠を取る。上限に達していれば偽を返し、何も数えない。 真を返したら、フローの終了時に同じ src で Release を 1 回呼ぶ。nil の Counter は常に真を返す。

func (*Counter) Len

func (c *Counter) Len() int

Len は現在のフロー数。

func (*Counter) Release

func (c *Counter) Release(src netip.Addr)

Release は Acquire で取った枠を返す。

func (*Counter) SetPerSource added in v0.4.0

func (c *Counter) SetPerSource(n int)

SetPerSource は接続元 IP ごとの上限を変える。0 は上限なし。既に数えているフローは 追い出さず、上限を超えている接続元は、フローが減って下回るまで新しいフローを拒まれる。

type Limits

type Limits struct {
	UDPTotal     int
	TCPTotal     int
	UDPPerSource int
	TCPPerSource int
}

Limits はプロセス全体と、接続元 IP ごとの上限(設定値)。どの項目もゼロ値なら既定値を使う (WithDefaults)。接続元ごとの上限を外すときは PerSourceOff を入れる。設定の 0(上限なし)は 設定層がこれに写す。ゼロ値を「上限なし」にすると、設定層を通らずに組み立てた Limits で 守りが黙って外れるためである。

func (Limits) MemoryLimit

func (l Limits) MemoryLimit() int64

MemoryLimit は、この上限で動くプロセスに設定するメモリのソフト上限(バイト)。 係数はラボの実測からの定数で、ホストのメモリの量は見ない(仕様 7 節)。

func (Limits) TCPPerRuleCap added in v0.4.0

func (l Limits) TCPPerRuleCap() int

func (Limits) TCPPerSourceCap added in v0.4.0

func (l Limits) TCPPerSourceCap() int

func (Limits) UDPPerRuleCap added in v0.4.0

func (l Limits) UDPPerRuleCap() int

UDPPerRuleCap と TCPPerRuleCap は、ルールごとの同時フロー数の上限をプロセス全体の上限から 導く(仕様 7 節)。全体の半分とするが、以前の固定値と全体の上限の小さいほうを下回らない。 全体を上げれば一緒に上がり、既定や全体を下げた構成では以前と同じ値になる。

func (Limits) UDPPerSourceCap added in v0.4.0

func (l Limits) UDPPerSourceCap() int

UDPPerSourceCap と TCPPerSourceCap は、接続元 IP ごとの上限の実効値。0 は数えない (Counter.PerSource と nft.Config の約束に合わせる)。

func (Limits) WithDefaults

func (l Limits) WithDefaults() Limits

WithDefaults はゼロ値の項目を既定値で埋める。

type LogGate

type LogGate struct {
	// contains filtered or unexported fields
}

LogGate は、上限で拒んだことのログを 1 分に 1 回までに絞る。

func (*LogGate) Allow

func (g *LogGate) Allow() bool

Allow は今ログを出してよいか。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL