srcpolicy

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: 8 Imported by: 0

Documentation

Overview

Package srcpolicy はユーザースペースモード(nftables を使わない転送)向けに、 接続元制限とレート制限を Go で評価する。カーネルモードで nftables が担う評価順 (deny、allow、接続元ごとの meter、新規フローの集約上限、パケットの集約上限。 design.md 6.1 節)を、userspace の中継の手前で同じ順に再現する。

入力は Plan が持つ AdmissionPolicy の IR(internal/policy の RulePolicy)である。IR から 評価器を組み立てる 1 実装への統合(design.md 7a.8 節の Phase 5)までは、評価順をこの パッケージが手で持つ。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Policy

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

Policy はルール集合から作る評価器。AdmitFlow、AdmitPacket、SourceAllowed、Drops が 読み書きする状態はすべて mu で守る。

func New

func New(now func() time.Time) *Policy

New は方針の評価器を作る。now はテストで時計を差し替えるため(nil なら time.Now)。

func (*Policy) AdmitFlow

func (p *Policy) AdmitFlow(ruleID string, src netip.Addr, size int) (ok bool, kind string)

AdmitFlow は新しいフロー(TCP の accept、UDP の新しいセッション)を、 deny、allow、per_source、new_flow の順に判定する。通さない場合は落とした種類を返し、 そのルールの drop を 1 パケット size バイトとして数える。未知のルール ID は通す。

func (*Policy) AdmitPacket

func (p *Policy) AdmitPacket(ruleID string, size int) bool

AdmitPacket は UDP のデータグラム 1 つを packet_rate で判定する(TCP には使わない)。 落とした場合は kind "packet" として数える。未知のルール ID、packet_rate 未設定の ルールは通す。

func (*Policy) Drops

func (p *Policy) Drops() []dataplane.Drop

Drops は前回の呼び出し以降に数えた drop を返して 0 に戻す。nft.ReadDrops がテーブル 差し替えの直前にカーネルのカウンタを読むのと同じ扱いで、呼び出し側が SQLite へ累積する。

func (*Policy) SourceAllowed

func (p *Policy) SourceAllowed(ruleID string, src netip.Addr) bool

SourceAllowed は deny と allow だけを見る。レート制限は新しいフローにだけ意味を持つ ので、進行中のセッションを制限の変更後に切るかどうかの判定には含めない。 未知のルール ID は通す。

func (*Policy) Update

func (p *Policy) Update(rules []policy.RulePolicy)

Update は Plan が持つ AdmissionPolicy の IR のルール(転送するルール、つまり有効でエージェントが 登録済みのルールだけを持つ。internal/planner の Build)から方針を作り直す。消えたルール(削除、 無効化、エージェントの登録の取り消しで転送しなくなったルール)の状態(接続元の表、 バケット)は捨て、残ったルールのうち、レートの設定(Count と Unit)が変わっていないものは バケットと接続元の表をそのまま引き継ぐ。allow/deny の一覧は毎回差し替える(進行中の 判定に対する影響は SourceAllowed の呼び出し側が扱う)。

Jump to

Keyboard shortcuts

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