daemoncmd

package
v0.16.0 Latest Latest
Warning

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

Go to latest
Published: Nov 7, 2023 License: Apache-2.0 Imports: 42 Imported by: 0

Documentation

Overview

Package daemoncmd contains the entrypoint for webmesh nodes running as an application daemon.

Index

Constants

View Source
const ParamsDir = "params"

ParamsDir is the relative path where connection request parameters are stored for each connection ID.

Variables

View Source
var (
	// ErrNoPortsAvailable is returned when no ports are available.
	ErrNoPortsAvailable = status.Errorf(codes.FailedPrecondition, "no ports available")
	// ErrNoIndexAvailable is returned when no utun index is available.
	ErrNoIndexAvailable = status.Errorf(codes.FailedPrecondition, "no utun index available")
	// ErrNotConnected is returned when the node is not connected to the mesh.
	ErrNotConnected = status.Errorf(codes.FailedPrecondition, "not connected to the specified network")
	// ErrAlreadyConnected is returned when the node is already connected to the mesh.
	ErrAlreadyConnected = status.Errorf(codes.FailedPrecondition, "already connected to the specified network")
	// ErrConnected is returned when the node is connected to the mesh.
	ErrConnected = status.Errorf(codes.FailedPrecondition, "connected to the specified network")
)

Functions

func DefaultDaemonSocket

func DefaultDaemonSocket() string

DefaultDaemonSocket returns the default daemon socket path.

func ParamsFile added in v0.16.0

func ParamsFile(connID string) string

ParamsFile returns the relative path to the parameters file for the given connection ID.

func Run

func Run(ctx context.Context, conf Config) error

Run runs the app daemon with the given configuration. The context can be used to shutdown the server, otherwise it will wait for a SIGINT or SIGTERM.

Types

type AppDaemon

type AppDaemon struct {
	v1.UnimplementedAppDaemonServer
	// contains filtered or unexported fields
}

AppDaemon is the app daemon RPC server.

func NewServer

func NewServer(conf Config) (*AppDaemon, error)

NewServer returns a new AppDaemon server.

func (*AppDaemon) Close

func (app *AppDaemon) Close() error

func (*AppDaemon) Connect

func (app *AppDaemon) Connect(ctx context.Context, req *v1.ConnectRequest) (*v1.ConnectResponse, error)

func (*AppDaemon) ConnectionStatus added in v0.16.0

func (app *AppDaemon) ConnectionStatus(ctx context.Context, req *v1.ConnectionStatusRequest) (*v1.ConnectionStatusResponse, error)

func (*AppDaemon) Disconnect

func (app *AppDaemon) Disconnect(ctx context.Context, req *v1.DisconnectRequest) (*v1.DisconnectResponse, error)

func (*AppDaemon) Drop added in v0.15.13

func (app *AppDaemon) Drop(ctx context.Context, req *v1.AppDropRequest) (*v1.AppDropResponse, error)

func (*AppDaemon) Metrics

func (app *AppDaemon) Metrics(ctx context.Context, req *v1.MetricsRequest) (*v1.MetricsResponse, error)

func (*AppDaemon) Query

func (app *AppDaemon) Query(ctx context.Context, req *v1.AppQueryRequest) (*v1.QueryResponse, error)

func (*AppDaemon) Status

func (app *AppDaemon) Status(ctx context.Context, _ *v1.StatusRequest) (*v1.DaemonStatus, error)

type CORS added in v0.15.11

type CORS struct {
	// Enabled is true if CORS is enabled.
	Enabled bool `koanf:"enabled"`
	// AllowedOrigins is a list of allowed origins.
	AllowedOrigins []string `koanf:"allowed-origins"`
}

CORS are options for configuring CORS. These are only applicable when grpc-web is enabled.

func (*CORS) BindFlags added in v0.15.11

func (conf *CORS) BindFlags(prefix string, flagset *pflag.FlagSet)

BindFlags binds the CORS flags to the given flagset.

type Config

type Config struct {
	// Enabled is true if the daemon is enabled.
	Enabled bool `koanf:"enabled"`
	// NodeID is the ID to use for mesh connections from this server.
	// If not provided, one will be generated from the key.
	NodeID string `koanf:"node-id"`
	// KeyFile is the path to the WireGuard private key for the node.
	// If set and it does not exist it will be created, otherwise one
	// will be generated.
	KeyFile string `koanf:"key-file,omitempty"`
	// KeyRotation is the duration between key rotations.
	KeyRotation time.Duration `koanf:"key-rotation"`
	// Bind is the bind address for the daemon.
	Bind string `koanf:"bind"`
	// InsecureSocket uses an insecure socket when binding to a unix socket.
	InsecureSocket bool `koanf:"insecure-socket"`
	// GRPCWeb enables gRPC-Web support.
	GRPCWeb bool `koanf:"grpc-web"`
	// CORS are options for configuring CORS. These are only applicable when
	// grpc-web is enabled.
	CORS CORS `koanf:"cors"`
	// UI are options for exposing a gRPC UI.
	UI WebUI `koanf:"ui"`
	// Persistence are options for persisting mesh data.
	Persistence Persistence `koanf:"persistence"`
	// WireGuardStartPort is the starting port for WireGuard connections.
	WireGuardStartPort uint16 `koanf:"wireguard-start-port"`
	// LogLevel is the log level for the daemon.
	LogLevel string `koanf:"log-level"`
	// LogFormat is the log format for the daemon.
	LogFormat string `koanf:"log-format"`

	// Logger is a pre-configured logger.
	Logger *slog.Logger `koanf:"-"`
}

Config is the configuration for the applicaton daeemon.

func NewDefaultConfig

func NewDefaultConfig() *Config

NewDefaultConfig returns the default configuration.

func (*Config) BindFlags

func (conf *Config) BindFlags(prefix string, flagset *pflag.FlagSet) *Config

BindFlags binds the flags to the given flagset.

func (*Config) LoadKey

func (conf *Config) LoadKey(log *slog.Logger) (crypto.PrivateKey, error)

LoadKey loads the wireguard key from the configuration.

func (*Config) NewLogger

func (conf *Config) NewLogger() *slog.Logger

NewLogger returns a logger with the given configuration.

func (*Config) Validate

func (conf *Config) Validate() error

Validate validates the configuration.

type ConnManager added in v0.15.8

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

ConnManager manages the connections for the daemon.

func NewConnManager added in v0.15.8

func NewConnManager(conf Config) (*ConnManager, error)

NewConnManager creates a new connection manager.

func (*ConnManager) Close added in v0.15.8

func (m *ConnManager) Close() error

Close closes the connection manager and all connections.

func (*ConnManager) ConnIDs added in v0.15.8

func (m *ConnManager) ConnIDs() []string

ConnIDs returns the IDs of the connections.

func (*ConnManager) DataDir added in v0.15.13

func (m *ConnManager) DataDir(connID string) string

DataDir returns the data directory for the given connection ID.

func (*ConnManager) Disconnect added in v0.15.8

func (m *ConnManager) Disconnect(ctx context.Context, connID string) error

Disconnect disconnects the connection for the given ID.

func (*ConnManager) DropStorage added in v0.16.0

func (m *ConnManager) DropStorage(ctx context.Context, connID string) error

DropStorage drops storage for the connection with the given ID.

func (*ConnManager) Get added in v0.15.8

func (m *ConnManager) Get(connID string) (embed.Node, bool)

Get gets the connection for the given ID.

func (*ConnManager) NewConn added in v0.15.8

func (m *ConnManager) NewConn(ctx context.Context, req *v1.ConnectRequest) (id string, node embed.Node, err error)

NewConn creates a new connection for the given request. Start must be called opn the returned node to start the connection.

func (*ConnManager) NodeID added in v0.16.0

func (m *ConnManager) NodeID() string

NodeID returns the node ID used for connections.

func (*ConnManager) PublicKey added in v0.16.0

func (m *ConnManager) PublicKey() string

PublicKey returns the encoded public key used for connections.

func (*ConnManager) RemoveConn added in v0.16.0

func (m *ConnManager) RemoveConn(connID string)

RemoveConn removes the connection for the given ID.

func (*ConnManager) StoredConns added in v0.16.0

func (m *ConnManager) StoredConns() ([]string, error)

StoredConns returns all connection IDs known to the persistence layer.

type Persistence added in v0.15.4

type Persistence struct {
	// Path is the root path to store mesh connection data.
	// Each connection will receive its own subdirectory.
	Path string `koanf:"path"`
}

Persistence is configuration for persistence of mesh connection storage.

func (*Persistence) BindFlags added in v0.15.4

func (conf *Persistence) BindFlags(prefix string, flagset *pflag.FlagSet)

BindFlags binds the persistence flags to the given flagset.

type WebUI

type WebUI struct {
	// Enabled is true if the gRPC UI is enabled.
	Enabled bool `koanf:"enabled"`
	// ListenAddress is the address to listen on.
	ListenAddress string `koanf:"listen-address"`
}

WebUI are options for exposing a gRPC UI.

func (*WebUI) BindFlags

func (conf *WebUI) BindFlags(prefix string, flagset *pflag.FlagSet)

BindFlags binds the UI flags to the given flagset.

Jump to

Keyboard shortcuts

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