Files
prx/internal/proto/proto.go
T

112 lines
3.6 KiB
Go

// SPDX-License-Identifier: MIT
// Package proto defines the request/response contract exchanged between the
// unprivileged prx CLI and the privileged prx-helper.
//
// The CLI resolves user configuration and sends a fully validated Plan to the
// helper. The helper never trusts the plan blindly: it re-validates every field
// before touching the system.
package proto
// Action identifies the operation the helper must perform.
type Action string
// Supported actions.
const (
ActionApply Action = "apply"
ActionRemove Action = "remove"
ActionInspect Action = "inspect"
ActionEngine Action = "engine"
ActionInitEngine Action = "init-engine"
)
// EngineOp identifies a systemd operation for the proxy engine.
type EngineOp string
// Supported engine operations.
const (
EngineStart EngineOp = "start"
EngineStop EngineOp = "stop"
EngineReload EngineOp = "reload"
EngineStatus EngineOp = "status"
)
// Plan is the privileged request sent to the helper.
//
// Network fields are optional overrides; when empty the helper auto-detects the
// default interface and gateway on the host.
type Plan struct {
Action Action `json:"action"`
// Network overrides (empty => auto-detect).
WANInterface string `json:"wan_interface,omitempty"`
WANGateway4 string `json:"wan_gateway_v4,omitempty"`
WANGateway6 string `json:"wan_gateway_v6,omitempty"`
// Conntrack mark and policy routing identifiers.
Mark uint32 `json:"mark"`
TableV4 int `json:"table_v4"`
TableV6 int `json:"table_v6"`
PriorityV4 int `json:"priority_v4"`
PriorityV6 int `json:"priority_v6"`
// Bypass (direct) routing identifiers.
BypassTableV4 int `json:"bypass_table_v4"`
BypassTableV6 int `json:"bypass_table_v6"`
BypassPrioV4 int `json:"bypass_priority_v4"`
BypassPrioV6 int `json:"bypass_priority_v6"`
// BypassCIDRs are routed directly through the WAN instead of the tunnel.
BypassCIDRs []string `json:"bypass_cidrs,omitempty"`
// Engine management.
ManageEngine bool `json:"manage_engine"`
ServiceName string `json:"service_name,omitempty"`
EngineConfig string `json:"engine_config,omitempty"`
StopEngineOnOff bool `json:"stop_engine_on_off"`
SkipEngine bool `json:"skip_engine"`
DryRun bool `json:"dry_run"`
// EngineConfigBody carries a generated engine config for ActionInitEngine.
EngineConfigBody []byte `json:"engine_config_body,omitempty"`
// HealthProbe is a host:port dialed after applying to confirm connectivity.
// Empty disables the probe.
HealthProbe string `json:"health_probe,omitempty"`
// StatePath is where the helper records its snapshot (e.g. /run/prx/state.json).
StatePath string `json:"state_path"`
// EngineOp is used with ActionEngine.
EngineOp EngineOp `json:"engine_op,omitempty"`
}
// Check is the outcome of a single diagnostic.
type Check struct {
Name string `json:"name"`
OK bool `json:"ok"`
Detail string `json:"detail,omitempty"`
Fatal bool `json:"fatal,omitempty"`
Warn bool `json:"warn,omitempty"`
}
// StateInfo is a compact snapshot returned for display.
type StateInfo struct {
Enabled bool `json:"enabled"`
WANInterface string `json:"wan_interface,omitempty"`
Gateway4 string `json:"gateway_v4,omitempty"`
Gateway6 string `json:"gateway_v6,omitempty"`
Mark uint32 `json:"mark"`
}
// Result is the helper response.
type Result struct {
OK bool `json:"ok"`
Action Action `json:"action"`
Changed bool `json:"changed"`
Messages []string `json:"messages,omitempty"`
Checks []Check `json:"checks,omitempty"`
State *StateInfo `json:"state,omitempty"`
Error string `json:"error,omitempty"`
}