camo

package
v0.0.0-...-cf73d06 Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2021 License: MIT Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// LogLevelNull ...
	LogLevelNull = iota
	// LogLevelFatal ...
	LogLevelFatal
	// LogLevelPanic ...
	LogLevelPanic
	// LogLevelError ...
	LogLevelError
	// LogLevelWarn ...
	LogLevelWarn
	// LogLevelInfo ...
	LogLevelInfo
	// LogLevelDebug ...
	LogLevelDebug
	// LogLevelTrace ...
	LogLevelTrace
)
View Source
const (
	// IPv4HeaderLen is IPv4 header length without extension headers
	IPv4HeaderLen = 20
	// IPv6HeaderLen is IPv6 header length without extension headers
	IPv6HeaderLen = 40
)
View Source
const DefaultMTU = 1400

DefaultMTU TODO

Variables

View Source
var (
	// ErrNoIPConfig ...
	ErrNoIPConfig = &statusError{http.StatusUnprocessableEntity, "no ip config"}
	// ErrUnableAssignIP ...
	ErrUnableAssignIP = &statusError{http.StatusServiceUnavailable, "unable to assign ip address"}
	// ErrIPConflict ...
	ErrIPConflict = &statusError{http.StatusConflict, "ip conflict"}
	// ErrInvalidIP ...
	ErrInvalidIP = &statusError{http.StatusBadRequest, "invalid ip address"}
)
View Source
var LogLevelTexts = map[int]string{
	LogLevelNull:  "NULL",
	LogLevelFatal: "FATAL",
	LogLevelPanic: "PANIC",
	LogLevelError: "ERROR",
	LogLevelWarn:  "WARN",
	LogLevelInfo:  "INFO",
	LogLevelDebug: "DEBUG",
	LogLevelTrace: "TRACE",
}

LogLevelTexts ...

View Source
var LogLevelValues map[string]int

LogLevelValues ...

Functions

func AddRoute

func AddRoute(dst string, gateway string, dev string) error

AddRoute ...

func DelRoute

func DelRoute(dst string, gateway string, dev string) error

DelRoute ...

func GetAuth

func GetAuth(r *http.Request) (mac []byte, ok bool)

GetAuth ...

func GetIPPacketVersion

func GetIPPacketVersion(b []byte) int

GetIPPacketVersion gets ip protocol version from ip packet

func GetRoute

func GetRoute(dst string) (gateway string, dev string, err error)

GetRoute ...

func NewSessionTicketKey

func NewSessionTicketKey(password string) (key [32]byte)

NewSessionTicketKey ...

func NewTLSPSKSessionCache

func NewTLSPSKSessionCache(host string, sessionTicketKey [32]byte) (tls.ClientSessionCache, error)

NewTLSPSKSessionCache ...

func ReadIPPacket

func ReadIPPacket(r io.Reader, b []byte) (int, error)

ReadIPPacket reads a IPv4/IPv6 packet from the io.Reader

func RedirectGateway

func RedirectGateway(dev string, gateway string) (reset func() error, err error)

RedirectGateway 参考 https://www.tinc-vpn.org/examples/redirect-gateway/

func SetAuth

func SetAuth(r *http.Request, password string)

SetAuth ...

func SetupNAT

func SetupNAT(src string) (cancel func() error, err error)

SetupNAT ...

func WithAuth

func WithAuth(h http.Handler, password string, log Logger) http.Handler

WithAuth ...

func WithIOMetric

func WithIOMetric(rw io.ReadWriteCloser, metric *IOMetric) io.ReadWriteCloser

WithIOMetric ...

Types

type BufferPoolMetrics

type BufferPoolMetrics struct {
	FreeBytes  *MetricInt `json:"free_bytes"`
	TotalBytes *MetricInt `json:"total_bytes"`
}

BufferPoolMetrics ...

func NewBufferPoolMetrics

func NewBufferPoolMetrics() *BufferPoolMetrics

NewBufferPoolMetrics ...

type Client

type Client struct {
	MTU       int
	CID       string
	Host      string
	Dial      func(network, addr string) (net.Conn, error)
	TLSConfig *tls.Config
	URLPrefix string
	Auth      func(r *http.Request)
	Logger    Logger
	UseH2C    bool
	UseH3     bool
	Noise     int
	// contains filtered or unexported fields
}

Client ...

func (*Client) CreateTunnel

func (c *Client) CreateTunnel(ctx context.Context, ip net.IP) (tunnel func(context.Context) error, err error)

CreateTunnel ...

func (*Client) Metrics

func (c *Client) Metrics() *Metrics

Metrics ...

func (*Client) RequestIPv4

func (c *Client) RequestIPv4(ctx context.Context) (*IPResult, error)

RequestIPv4 ...

func (*Client) RequestIPv6

func (c *Client) RequestIPv6(ctx context.Context) (*IPResult, error)

RequestIPv6 ...

func (*Client) ServeIface

func (c *Client) ServeIface(ctx context.Context, iface io.ReadWriteCloser) error

ServeIface ...

type ClientAPIError

type ClientAPIError struct {
	Err error
	// contains filtered or unexported fields
}

ClientAPIError ...

func (*ClientAPIError) Error

func (e *ClientAPIError) Error() string

func (*ClientAPIError) Temporary

func (e *ClientAPIError) Temporary() bool

Temporary ...

type IOMetric

type IOMetric struct {
	ReadBytes  *MetricInt `json:"read_bytes"`
	WriteBytes *MetricInt `json:"write_bytes"`
}

IOMetric ...

func NewIOMetric

func NewIOMetric() *IOMetric

NewIOMetric ...

type IPPool

type IPPool interface {
	Get(cid string) (net.IP, net.IPMask, bool)
	Use(ip net.IP, cid string) (net.IPMask, bool)
	Free(net.IP)
	Gateway() net.IP
}

IPPool assigns ip addresses

type IPResult

type IPResult struct {
	IP      net.IP
	Mask    net.IPMask
	TTL     time.Duration
	Gateway net.IP
}

IPResult is result returned by RequestIPv4/RequestIPv6

func (*IPResult) String

func (r *IPResult) String() string

type IPv4Header

type IPv4Header []byte

IPv4Header represents an IPv4 header

func (IPv4Header) Checksum

func (b IPv4Header) Checksum() int

Checksum is IPv4 header checksum

func (IPv4Header) Dst

func (b IPv4Header) Dst() net.IP

Dst is destination address

func (IPv4Header) Flags

func (b IPv4Header) Flags() int

Flags is IPv4 flags

func (IPv4Header) FragOff

func (b IPv4Header) FragOff() int

FragOff is fragment offset

func (IPv4Header) ID

func (b IPv4Header) ID() int

ID is identification

func (IPv4Header) Len

func (b IPv4Header) Len() int

Len is header length

func (IPv4Header) Options

func (b IPv4Header) Options() []byte

Options is extension headers

func (IPv4Header) Protocol

func (b IPv4Header) Protocol() int

Protocol is next protocol

func (IPv4Header) Src

func (b IPv4Header) Src() net.IP

Src is source address

func (IPv4Header) String

func (b IPv4Header) String() string

func (IPv4Header) TOS

func (b IPv4Header) TOS() int

TOS is type-of-service

func (IPv4Header) TTL

func (b IPv4Header) TTL() int

TTL is time-to-live

func (IPv4Header) TotalLen

func (b IPv4Header) TotalLen() int

TotalLen is packet total length

func (IPv4Header) Version

func (b IPv4Header) Version() int

Version is protocol version

type IPv6Header

type IPv6Header []byte

IPv6Header represents an IPv6 base header

func (IPv6Header) Dst

func (b IPv6Header) Dst() net.IP

Dst is destination address

func (IPv6Header) FlowLabel

func (b IPv6Header) FlowLabel() int

FlowLabel is flow label

func (IPv6Header) HopLimit

func (b IPv6Header) HopLimit() int

HopLimit is hop limit

func (IPv6Header) NextHeader

func (b IPv6Header) NextHeader() int

NextHeader is next header

func (IPv6Header) PayloadLen

func (b IPv6Header) PayloadLen() int

PayloadLen is payload length

func (IPv6Header) Src

func (b IPv6Header) Src() net.IP

Src is source address

func (IPv6Header) String

func (b IPv6Header) String() string

func (IPv6Header) TrafficClass

func (b IPv6Header) TrafficClass() int

TrafficClass is traffic class

func (IPv6Header) Version

func (b IPv6Header) Version() int

Version is protocol version

type Iface

type Iface struct {
	*water.Interface
	// contains filtered or unexported fields
}

Iface ...

func NewTunIface

func NewTunIface(mtu int) (*Iface, error)

NewTunIface ...

func (*Iface) CIDR4

func (i *Iface) CIDR4() string

CIDR4 ...

func (*Iface) CIDR6

func (i *Iface) CIDR6() string

CIDR6 ...

func (*Iface) Close

func (i *Iface) Close() error

Close ...

func (*Iface) IPv4

func (i *Iface) IPv4() net.IP

IPv4 ...

func (*Iface) IPv6

func (i *Iface) IPv6() net.IP

IPv6 ...

func (*Iface) MTU

func (i *Iface) MTU() int

MTU ...

func (*Iface) SetIPv4

func (i *Iface) SetIPv4(cidr string) error

SetIPv4 ...

func (*Iface) SetIPv6

func (i *Iface) SetIPv6(cidr string) error

SetIPv6 ...

func (*Iface) Subnet4

func (i *Iface) Subnet4() *net.IPNet

Subnet4 ...

func (*Iface) Subnet6

func (i *Iface) Subnet6() *net.IPNet

Subnet6 ...

type LevelLogger

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

LevelLogger ...

func NewLogger

func NewLogger(l stdLogger, level int) *LevelLogger

NewLogger ...

func (*LevelLogger) Debug

func (l *LevelLogger) Debug(v ...interface{})

Debug ...

func (*LevelLogger) Debugf

func (l *LevelLogger) Debugf(format string, v ...interface{})

Debugf ...

func (*LevelLogger) Error

func (l *LevelLogger) Error(v ...interface{})

Error ...

func (*LevelLogger) Errorf

func (l *LevelLogger) Errorf(format string, v ...interface{})

Errorf ...

func (*LevelLogger) Fatal

func (l *LevelLogger) Fatal(v ...interface{})

Fatal ...

func (*LevelLogger) Fatalf

func (l *LevelLogger) Fatalf(format string, v ...interface{})

Fatalf ...

func (*LevelLogger) Info

func (l *LevelLogger) Info(v ...interface{})

Info ...

func (*LevelLogger) Infof

func (l *LevelLogger) Infof(format string, v ...interface{})

Infof ...

func (*LevelLogger) Level

func (l *LevelLogger) Level() int

Level ...

func (*LevelLogger) Log

func (l *LevelLogger) Log(level int, v ...interface{})

Log ...

func (*LevelLogger) Logf

func (l *LevelLogger) Logf(level int, format string, v ...interface{})

Logf ...

func (*LevelLogger) Panic

func (l *LevelLogger) Panic(v ...interface{})

Panic ...

func (*LevelLogger) Panicf

func (l *LevelLogger) Panicf(format string, v ...interface{})

Panicf ...

func (*LevelLogger) Trace

func (l *LevelLogger) Trace(v ...interface{})

Trace ...

func (*LevelLogger) Tracef

func (l *LevelLogger) Tracef(format string, v ...interface{})

Tracef ...

func (*LevelLogger) Warn

func (l *LevelLogger) Warn(v ...interface{})

Warn ...

func (*LevelLogger) Warnf

func (l *LevelLogger) Warnf(format string, v ...interface{})

Warnf ...

type Logger

type Logger interface {
	Level() int
	Fatal(v ...interface{})
	Fatalf(format string, v ...interface{})
	Panic(v ...interface{})
	Panicf(format string, v ...interface{})
	Error(v ...interface{})
	Errorf(format string, v ...interface{})
	Warn(v ...interface{})
	Warnf(format string, v ...interface{})
	Info(v ...interface{})
	Infof(format string, v ...interface{})
	Debug(v ...interface{})
	Debugf(format string, v ...interface{})
	Trace(v ...interface{})
	Tracef(format string, v ...interface{})
}

Logger ...

type MetricInt

type MetricInt struct {
	expvar.Int
}

MetricInt ...

func (*MetricInt) MarshalJSON

func (i *MetricInt) MarshalJSON() ([]byte, error)

MarshalJSON ...

type Metrics

type Metrics struct {
	Iface   *IOMetric          `json:"iface"`
	Tunnels *TunnelMetrics     `json:"tunnels"`
	Buffer  *BufferPoolMetrics `json:"buffer"`
}

Metrics ...

func NewMetrics

func NewMetrics() *Metrics

NewMetrics ...

func (*Metrics) String

func (m *Metrics) String() string

String returns a valid json string

type Server

type Server struct {
	MTU        int
	IPv4Pool   IPPool
	IPv6Pool   IPPool
	SessionTTL time.Duration
	Logger     Logger
	Noise      int
	// contains filtered or unexported fields
}

Server ...

func (*Server) CreateTunnel

func (s *Server) CreateTunnel(ip net.IP, cid string, rw io.ReadWriteCloser) (func(ctx context.Context) error, error)

CreateTunnel ...

func (*Server) Handler

func (s *Server) Handler(ctx context.Context, prefix string) http.Handler

Handler ...

func (*Server) Metrics

func (s *Server) Metrics() *Metrics

Metrics ...

func (*Server) RequestIPv4

func (s *Server) RequestIPv4(cid string) (*IPResult, error)

RequestIPv4 ...

func (*Server) RequestIPv6

func (s *Server) RequestIPv6(cid string) (*IPResult, error)

RequestIPv6 ...

func (*Server) ServeIface

func (s *Server) ServeIface(ctx context.Context, iface io.ReadWriteCloser) error

ServeIface ...

type SubnetIPPool

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

SubnetIPPool assigns ip addresses in a subnet segment. Currently supports up to 256 allocations.

func NewSubnetIPPool

func NewSubnetIPPool(subnet *net.IPNet, gw net.IP, limit int) *SubnetIPPool

NewSubnetIPPool ...

func (*SubnetIPPool) Free

func (p *SubnetIPPool) Free(ip net.IP)

Free ...

func (*SubnetIPPool) Gateway

func (p *SubnetIPPool) Gateway() net.IP

Gateway ...

func (*SubnetIPPool) Get

func (p *SubnetIPPool) Get(_ string) (ip net.IP, mask net.IPMask, ok bool)

Get ...

func (*SubnetIPPool) Use

func (p *SubnetIPPool) Use(ip net.IP, _ string) (mask net.IPMask, ok bool)

Use ...

type TunnelMetrics

type TunnelMetrics struct {
	*IOMetric
	Streams *MetricInt `json:"streams"`
	Lags    *MetricInt `json:"lags"`
	Drops   *MetricInt `json:"drops"`
}

TunnelMetrics ...

func NewTunnelMetrics

func NewTunnelMetrics() *TunnelMetrics

NewTunnelMetrics ...

Jump to

Keyboard shortcuts

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