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