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 ¶
func ToProtoRules ¶
ToProtoRules は正規化したルール集合を外部契約へ書き戻す(NormalizeRules/NormalizeUpsert の逆写像)。 ルールの並び順は保つ。
Types ¶
type DataplaneMode ¶
type DataplaneMode int
DataplaneMode は server 全体、あるいは agent 全体の転送方式を選ぶ(設計文書 7a.2 節)。 今の WGFT_MODE に当たる、ルールではなくプロセス単位の値である。
const ( // Kernel はカーネルの nftables と WireGuard を使う(今の WGFT_MODE=kernel)。 Kernel DataplaneMode = iota // Userspace は wireguard-go と gVisor の netstack だけを使う(今の WGFT_MODE=userspace)。 Userspace )
func ParseDataplaneMode ¶
func ParseDataplaneMode(s string) (DataplaneMode, error)
ParseDataplaneMode は WGFT_MODE の値("kernel"/"userspace")を解釈する。 この 2 語は外部契約(設計文書 7a.6 節)なので、DataplaneMode.String() と対にして変えない。
func (DataplaneMode) String ¶
func (m DataplaneMode) String() string
type Forwarding ¶
type Forwarding int
Forwarding はルール 1 本の転送の意味を選ぶ(設計文書 7a.2 節)。 DataplaneMode(server・agent 全体の転送方式)と紛れる「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 を正規化する。呼び出し側は、構造的な検査(ポート範囲の重なり、 予約ポートなど)を NormalizeRules/NormalizeUpsert 経由で proto.ValidateRules/ValidateUpsert に 先に通す前提である。FromProto 自身は Forwarding/SourceMetadata への写像だけを検査する (proto.Rule.Validate の「proxy_protocol は vps_mode=proxy でしか立てられない」という検査と 同じ制約を、モデル側の語彙である Transparent + ProxyV2 の禁止として言い換える)。
func NormalizeRules ¶
NormalizeRules は proto.ValidateRules で構造を検査してから、外部のルール集合を正規化する (設計文書 5.3、7a.2 節)。検査の実装は proto パッケージのものをそのまま呼ぶ(重複させない)。
func NormalizeUpsert ¶
NormalizeUpsert は proto.ValidateUpsert で検査してから正規化する。before と ID・内容が変わらない 行には Rule.Validate を掛け直さない規則(設計文書 5.4 節)を、そのまま proto.ValidateUpsert から引き継ぐ。
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