model

package
v1.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package model は、維持する外部仕様(proto.Rule)から正規化した内部のドメインモデルを持つ(設計文書 7a.2 節)。

このパッケージは OS、nftables、gVisor を知らない純粋な Go の型と関数だけを持つ。 dataplane、frontend、platform、vpsd、agent のどの package も import しない(設計文書 7a.7 節)。 proto パッケージは維持する外部仕様であり、import してよい対象に含まれる。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Forwarding

type Forwarding int

Forwarding はルール 1 本の転送の意味を選ぶ(設計文書 7a.2 節)。 server・agent 全体の転送方式(今の WGFT_MODE。internal/vpsd が持つ文字列の語彙で、この パッケージの型ではない)と紛れる「kernel」という語を、ルール単位の選択には使わない。

const (
	// Transparent は素通しの転送(今の proto.ModeKernel)。nftables の DNAT で完結する。
	Transparent Forwarding = iota
	// Relay は vpsd 自身が TCP を終端して中継する転送(今の proto.ModeProxy)。
	Relay
)

func (Forwarding) String

func (f Forwarding) String() string

type Rule

type Rule struct {
	ID             string
	Agent          string
	Group          string
	Note           string
	Proto          proto.Proto
	ListenPort     proto.PortRange
	Target         string
	Forwarding     Forwarding
	SourceMetadata SourceMetadata
	SourceAllow    []netip.Prefix
	SourceDeny     []netip.Prefix
	NewFlowRate    *proto.Rate
	PacketRate     *proto.Rate
	PerSourceRate  *proto.Rate
	Enabled        bool
}

Rule はルール 1 本の正規化した内部表現(設計文書 7a.2 節)。維持する外部仕様である proto.Rule の VPSMode/ProxyProtocol を Forwarding/SourceMetadata の 2 つの軸へ写し、それ以外のフィールドは そのまま引き継ぐ。AdmissionPolicy(internal/policy)が使う送信元制限とレートも、正規化した ルールの一部としてここに残る。ルール集合から AdmissionPolicy の IR を組み立てるのは internal/policy の役目であり、Rule 自身は IR を持たない。

Group と Note は転送には影響しない管理用のメタデータだが、外部形式との往復を無損失にするため (設計文書 7a.8 節 Phase 1 の完了条件)にここでも保つ。

func FromProto

func FromProto(r proto.Rule) (Rule, error)

FromProto は 1 本の proto.Rule を正規化する。呼び出し側は、構造的な検査(ポート範囲の重なり、 予約ポートなど)を proto.ValidateRules/ValidateUpsert に先に通す前提である(書き込みの経路である internal/vpsd/store と webui_import はこれを直接呼ぶ)。FromProto 自身は Forwarding/SourceMetadata への写像だけを検査する(proto.Rule.Validate の「proxy_protocol は vps_mode=proxy でしか立てられ ない」という検査と同じ制約を、モデル側の語彙である Transparent + ProxyV2 の禁止として言い換える)。

func NormalizeRules

func NormalizeRules(rules []proto.Rule, reserved proto.Reserved) ([]Rule, error)

NormalizeRules は proto.ValidateRules で構造を検査してから、外部のルール集合を正規化する (設計文書 5.3、7a.2 節)。検査の実装は proto パッケージのものをそのまま呼ぶ(重複させない)。

func (Rule) ToProto

func (r Rule) ToProto() proto.Rule

ToProto は正規化したルールを維持する外部仕様の proto.Rule へ書き戻す。FromProto の逆写像であり、 常に成功する(Rule は既に有効な組み合わせしか表せないため)。

type SourceMetadata

type SourceMetadata int

SourceMetadata は、中継が接続先へ送信元の情報を付けるかどうかを選ぶ(設計文書 7a.2 節)。 Transparent と組み合わせられるのは NoSourceMetadata だけである。

const (
	// NoSourceMetadata は送信元の情報を付けない(今の proxy_protocol=false)。
	NoSourceMetadata SourceMetadata = iota
	// ProxyV2 は PROXY protocol v2 ヘッダを先頭に付ける(今の proxy_protocol=true)。Relay でしか選べない。
	ProxyV2
)

func (SourceMetadata) String

func (m SourceMetadata) String() string

Jump to

Keyboard shortcuts

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