peer

package
v0.30.2 Latest Latest
Warning

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

Go to latest
Published: Oct 16, 2024 License: BSD-3-Clause Imports: 36 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrSignalIsNotReady = errors.New("signal is not ready")
)

Functions

func NewConnectionAlreadyClosed

func NewConnectionAlreadyClosed(peer string) error

NewConnectionAlreadyClosed creates a new ConnectionAlreadyClosedError error

func NewConnectionClosedError

func NewConnectionClosedError(peer string) error

NewConnectionClosedError creates a new ConnectionClosedError error

func NewConnectionDisconnectedError

func NewConnectionDisconnectedError(peer string) error

NewConnectionDisconnectedError creates a new ConnectionDisconnectedError error

func NewConnectionTimeoutError

func NewConnectionTimeoutError(peer string, timeout time.Duration) error

NewConnectionTimeoutError creates a new ConnectionTimeoutError error

Types

type AtomicConnStatus added in v0.29.3

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

AtomicConnStatus is a thread-safe wrapper for ConnStatus

func NewAtomicConnStatus added in v0.29.3

func NewAtomicConnStatus() *AtomicConnStatus

NewAtomicConnStatus creates a new AtomicConnStatus with the given initial status

func (*AtomicConnStatus) Get added in v0.29.3

func (acs *AtomicConnStatus) Get() ConnStatus

Get returns the current connection status

func (*AtomicConnStatus) Set added in v0.29.3

func (acs *AtomicConnStatus) Set(status ConnStatus)

Set updates the connection status

func (*AtomicConnStatus) String added in v0.29.3

func (acs *AtomicConnStatus) String() string

String returns the string representation of the current status

type Conn

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

func NewConn

func NewConn(engineCtx context.Context, config ConnConfig, statusRecorder *Status, wgProxyFactory *wgproxy.Factory, signaler *Signaler, iFaceDiscover stdnet.ExternalIFaceDiscover, relayManager *relayClient.Manager) (*Conn, error)

NewConn creates a new not opened Conn to the remote peer. To establish a connection run Conn.Open

func (*Conn) AddAfterRemovePeerHook added in v0.27.0

func (conn *Conn) AddAfterRemovePeerHook(hook nbnet.RemoveHookFunc)

func (*Conn) AddBeforeAddPeerHook added in v0.27.0

func (conn *Conn) AddBeforeAddPeerHook(hook nbnet.AddHookFunc)

func (*Conn) Close

func (conn *Conn) Close()

Close closes this peer Conn issuing a close event to the Conn closeCh

func (*Conn) GetKey

func (conn *Conn) GetKey() string

func (*Conn) OnRemoteAnswer

func (conn *Conn) OnRemoteAnswer(answer OfferAnswer) bool

OnRemoteAnswer handles an offer from the remote peer and returns true if the message was accepted, false otherwise doesn't block, discards the message if connection wasn't ready

func (*Conn) OnRemoteCandidate

func (conn *Conn) OnRemoteCandidate(candidate ice.Candidate, haRoutes route.HAMap)

OnRemoteCandidate Handles ICE connection Candidate provided by the remote peer.

func (*Conn) OnRemoteOffer

func (conn *Conn) OnRemoteOffer(offer OfferAnswer) bool

func (*Conn) Open

func (conn *Conn) Open()

Open opens connection to the remote peer It will try to establish a connection using ICE and in parallel with relay. The higher priority connection type will be used.

func (*Conn) SetOnConnected added in v0.25.4

func (conn *Conn) SetOnConnected(handler func(remoteWireGuardKey string, remoteRosenpassPubKey []byte, wireGuardIP string, remoteRosenpassAddr string))

SetOnConnected sets a handler function to be triggered by Conn when a new connection to a remote peer established

func (*Conn) SetOnDisconnected added in v0.25.4

func (conn *Conn) SetOnDisconnected(handler func(remotePeer string, wgIP string))

SetOnDisconnected sets a handler function to be triggered by Conn when a connection to a remote disconnected

func (*Conn) Status

func (conn *Conn) Status() ConnStatus

Status returns current status of the Conn

func (*Conn) WgConfig added in v0.22.0

func (conn *Conn) WgConfig() WgConfig

WgConfig returns the WireGuard config

type ConnConfig

type ConnConfig struct {
	// Key is a public key of a remote peer
	Key string
	// LocalKey is a public key of a local peer
	LocalKey string

	Timeout time.Duration

	WgConfig WgConfig

	LocalWgPort int

	// RosenpassPubKey is this peer's Rosenpass public key
	RosenpassPubKey []byte
	// RosenpassPubKey is this peer's RosenpassAddr server address (IP:port)
	RosenpassAddr string

	// ICEConfig ICE protocol configuration
	ICEConfig ICEConfig
}

ConnConfig is a peer Connection configuration

type ConnMonitor added in v0.30.1

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

func NewConnMonitor added in v0.30.1

func NewConnMonitor(signaler *Signaler, iFaceDiscover stdnet.ExternalIFaceDiscover, config ConnConfig, relayDisconnected, iCEDisconnected chan bool) (*ConnMonitor, <-chan struct{})

func (*ConnMonitor) Start added in v0.30.1

func (cm *ConnMonitor) Start(ctx context.Context)

type ConnPriority added in v0.29.0

type ConnPriority int

type ConnStatus

type ConnStatus int32

ConnStatus describe the status of a peer's connection

const (
	// StatusConnected indicate the peer is in connected state
	StatusConnected ConnStatus = iota
	// StatusConnecting indicate the peer is in connecting state
	StatusConnecting
	// StatusDisconnected indicate the peer is in disconnected state
	StatusDisconnected
)

func (ConnStatus) String

func (s ConnStatus) String() string

type ConnectionAlreadyClosedError

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

ConnectionAlreadyClosedError is an error indicating that a peer Conn has been already closed and the invocation of the Close() method has been performed over a closed connection

func (*ConnectionAlreadyClosedError) Error

type ConnectionClosedError

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

ConnectionClosedError is an error indicating that a peer Conn has been forcefully closed

func (*ConnectionClosedError) Error

func (e *ConnectionClosedError) Error() string

type ConnectionDisconnectedError

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

ConnectionDisconnectedError is an error indicating that a peer Conn has ctx from the remote

func (*ConnectionDisconnectedError) Error

type ConnectionTimeoutError

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

ConnectionTimeoutError is an error indicating that a peer Conn has been timed out

func (*ConnectionTimeoutError) Error

func (e *ConnectionTimeoutError) Error() string

type FullStatus added in v0.14.3

type FullStatus struct {
	Peers           []State
	ManagementState ManagementState
	SignalState     SignalState
	LocalPeerState  LocalPeerState
	RosenpassState  RosenpassState
	Relays          []relay.ProbeResult
	NSGroupStates   []NSGroupState
}

FullStatus contains the full state held by the Status instance

type Handshaker added in v0.29.0

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

func NewHandshaker added in v0.29.0

func NewHandshaker(ctx context.Context, log *log.Entry, config ConnConfig, signaler *Signaler, ice *WorkerICE, relay *WorkerRelay) *Handshaker

func (*Handshaker) AddOnNewOfferListener added in v0.29.0

func (h *Handshaker) AddOnNewOfferListener(offer func(remoteOfferAnswer *OfferAnswer))

func (*Handshaker) Listen added in v0.29.0

func (h *Handshaker) Listen()

func (*Handshaker) OnRemoteAnswer added in v0.29.0

func (h *Handshaker) OnRemoteAnswer(answer OfferAnswer) bool

OnRemoteAnswer handles an offer from the remote peer and returns true if the message was accepted, false otherwise doesn't block, discards the message if connection wasn't ready

func (*Handshaker) OnRemoteOffer added in v0.29.0

func (h *Handshaker) OnRemoteOffer(offer OfferAnswer) bool

OnRemoteOffer handles an offer from the remote peer and returns true if the message was accepted, false otherwise doesn't block, discards the message if connection wasn't ready

func (*Handshaker) SendOffer added in v0.29.0

func (h *Handshaker) SendOffer() error

type ICEConfig added in v0.29.0

type ICEConfig struct {
	// StunTurn is a list of STUN and TURN URLs
	StunTurn *atomic.Value // []*stun.URI

	// InterfaceBlackList is a list of machine interfaces that should be filtered out by ICE Candidate gathering
	// (e.g. if eth0 is in the list, host candidate of this interface won't be used)
	InterfaceBlackList   []string
	DisableIPv6Discovery bool

	UDPMux      ice.UDPMux
	UDPMuxSrflx ice.UniversalUDPMux

	NATExternalIPs []string
}

type ICEConnInfo added in v0.29.0

type ICEConnInfo struct {
	RemoteConn                 net.Conn
	RosenpassPubKey            []byte
	RosenpassAddr              string
	LocalIceCandidateType      string
	RemoteIceCandidateType     string
	RemoteIceCandidateEndpoint string
	LocalIceCandidateEndpoint  string
	Relayed                    bool
	RelayedOnLocal             bool
}

type IceCredentials

type IceCredentials struct {
	UFrag string
	Pwd   string
}

IceCredentials ICE protocol credentials struct

type Listener added in v0.14.5

type Listener interface {
	OnConnected()
	OnDisconnected()
	OnConnecting()
	OnDisconnecting()
	OnAddressChanged(string, string)
	OnPeersListChanged(int)
}

Listener is a callback type about the NetBird network connection state

type LocalPeerState added in v0.14.3

type LocalPeerState struct {
	IP              string
	PubKey          string
	KernelInterface bool
	FQDN            string
	Routes          map[string]struct{}
}

LocalPeerState contains the latest state of the local peer

type ManagementState added in v0.14.3

type ManagementState struct {
	URL       string
	Connected bool
	Error     error
}

ManagementState contains the latest state of a management connection

type NSGroupState added in v0.26.3

type NSGroupState struct {
	ID      string
	Servers []string
	Domains []string
	Enabled bool
	Error   error
}

NSGroupState represents the status of a DNS server group, including associated domains, whether it's enabled, and the last error message encountered during probing.

type OfferAnswer added in v0.8.12

type OfferAnswer struct {
	IceCredentials IceCredentials
	// WgListenPort is a remote WireGuard listen port.
	// This field is used when establishing a direct WireGuard connection without any proxy.
	// We can set the remote peer's endpoint with this port.
	WgListenPort int

	// Version of NetBird Agent
	Version string
	// RosenpassPubKey is the Rosenpass public key of the remote peer when receiving this message
	// This value is the local Rosenpass server public key when sending the message
	RosenpassPubKey []byte
	// RosenpassAddr is the Rosenpass server address (IP:port) of the remote peer when receiving this message
	// This value is the local Rosenpass server address when sending the message
	RosenpassAddr string

	// relay server address
	RelaySrvAddress string
}

OfferAnswer represents a session establishment offer or answer

type RelayConnInfo added in v0.29.0

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

type RosenpassState added in v0.26.1

type RosenpassState struct {
	Enabled    bool
	Permissive bool
}

RosenpassState contains the latest state of the Rosenpass configuration

type SignalState added in v0.14.3

type SignalState struct {
	URL       string
	Connected bool
	Error     error
}

SignalState contains the latest state of a signal connection

type Signaler added in v0.29.0

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

func NewSignaler added in v0.29.0

func NewSignaler(signal signal.Client, wgPrivateKey wgtypes.Key) *Signaler

func (*Signaler) Ready added in v0.29.0

func (s *Signaler) Ready() bool

func (*Signaler) SignalAnswer added in v0.29.0

func (s *Signaler) SignalAnswer(offer OfferAnswer, remoteKey string) error

func (*Signaler) SignalICECandidate added in v0.29.0

func (s *Signaler) SignalICECandidate(candidate ice.Candidate, remoteKey string) error

func (*Signaler) SignalOffer added in v0.29.0

func (s *Signaler) SignalOffer(offer OfferAnswer, remoteKey string) error

type State added in v0.14.3

type State struct {
	Mux                        *sync.RWMutex
	IP                         string
	PubKey                     string
	FQDN                       string
	ConnStatus                 ConnStatus
	ConnStatusUpdate           time.Time
	Relayed                    bool
	LocalIceCandidateType      string
	RemoteIceCandidateType     string
	LocalIceCandidateEndpoint  string
	RemoteIceCandidateEndpoint string
	RelayServerAddress         string
	LastWireguardHandshake     time.Time
	BytesTx                    int64
	BytesRx                    int64
	Latency                    time.Duration
	RosenpassEnabled           bool
	// contains filtered or unexported fields
}

State contains the latest state of a peer

func (*State) AddRoute added in v0.27.3

func (s *State) AddRoute(network string)

AddRoute add a single route to routes map

func (*State) DeleteRoute added in v0.27.3

func (s *State) DeleteRoute(network string)

DeleteRoute removes a route from the network amp

func (*State) GetRoutes added in v0.27.3

func (s *State) GetRoutes() map[string]struct{}

GetRoutes return routes map

func (*State) SetRoutes added in v0.27.3

func (s *State) SetRoutes(routes map[string]struct{})

SetRoutes set state routes

type Status added in v0.14.3

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

Status holds a state of peers, signal, management connections and relays

func NewRecorder added in v0.14.3

func NewRecorder(mgmAddress string) *Status

NewRecorder returns a new Status instance

func (*Status) AddPeer added in v0.14.3

func (d *Status) AddPeer(peerPubKey string, fqdn string) error

AddPeer adds peer to Daemon status map

func (*Status) CleanLocalPeerState added in v0.14.3

func (d *Status) CleanLocalPeerState()

CleanLocalPeerState cleans local peer status

func (*Status) ClientStart added in v0.14.5

func (d *Status) ClientStart()

ClientStart will notify all listeners about the new service state

func (*Status) ClientStop added in v0.14.5

func (d *Status) ClientStop()

ClientStop will notify all listeners about the new service state

func (*Status) ClientTeardown added in v0.14.6

func (d *Status) ClientTeardown()

ClientTeardown will notify all listeners about the service is under teardown

func (*Status) DeleteResolvedDomainsStates added in v0.28.0

func (d *Status) DeleteResolvedDomainsStates(domain domain.Domain)

func (*Status) FinishPeerListModifications added in v0.21.5

func (d *Status) FinishPeerListModifications()

FinishPeerListModifications this event invoke the notification

func (*Status) GetDNSStates added in v0.26.3

func (d *Status) GetDNSStates() []NSGroupState

func (*Status) GetFullStatus added in v0.14.3

func (d *Status) GetFullStatus() FullStatus

GetFullStatus gets full status

func (*Status) GetLocalPeerState added in v0.26.3

func (d *Status) GetLocalPeerState() LocalPeerState

GetLocalPeerState returns the local peer state

func (*Status) GetManagementState added in v0.25.5

func (d *Status) GetManagementState() ManagementState

func (*Status) GetPeer added in v0.14.3

func (d *Status) GetPeer(peerPubKey string) (State, error)

GetPeer adds peer to Daemon status map

func (*Status) GetPeerStateChangeNotifier added in v0.14.3

func (d *Status) GetPeerStateChangeNotifier(peer string) <-chan struct{}

GetPeerStateChangeNotifier returns a change notifier channel for a peer

func (*Status) GetRelayStates added in v0.25.5

func (d *Status) GetRelayStates() []relay.ProbeResult

GetRelayStates returns the stun/turn/permanent relay states

func (*Status) GetResolvedDomainsStates added in v0.28.0

func (d *Status) GetResolvedDomainsStates() map[domain.Domain][]netip.Prefix

func (*Status) GetRosenpassState added in v0.26.1

func (d *Status) GetRosenpassState() RosenpassState

func (*Status) GetSignalState added in v0.25.5

func (d *Status) GetSignalState() SignalState

func (*Status) IsLoginRequired added in v0.26.3

func (d *Status) IsLoginRequired() bool

IsLoginRequired determines if a peer's login has expired.

func (*Status) MarkManagementConnected added in v0.14.3

func (d *Status) MarkManagementConnected()

MarkManagementConnected sets ManagementState to connected

func (*Status) MarkManagementDisconnected added in v0.14.3

func (d *Status) MarkManagementDisconnected(err error)

MarkManagementDisconnected sets ManagementState to disconnected

func (*Status) MarkSignalConnected added in v0.14.3

func (d *Status) MarkSignalConnected()

MarkSignalConnected sets SignalState to connected

func (*Status) MarkSignalDisconnected added in v0.14.3

func (d *Status) MarkSignalDisconnected(err error)

MarkSignalDisconnected sets SignalState to disconnected

func (*Status) RemoveConnectionListener added in v0.14.5

func (d *Status) RemoveConnectionListener()

RemoveConnectionListener remove the listener from the notifier

func (*Status) RemovePeer added in v0.14.3

func (d *Status) RemovePeer(peerPubKey string) error

RemovePeer removes peer from Daemon status map

func (*Status) ReplaceOfflinePeers added in v0.14.3

func (d *Status) ReplaceOfflinePeers(replacement []State)

ReplaceOfflinePeers replaces

func (*Status) SetConnectionListener added in v0.15.0

func (d *Status) SetConnectionListener(listener Listener)

SetConnectionListener set a listener to the notifier

func (*Status) SetRelayMgr added in v0.29.0

func (d *Status) SetRelayMgr(manager *relayClient.Manager)

func (*Status) UpdateDNSStates added in v0.26.3

func (d *Status) UpdateDNSStates(dnsStates []NSGroupState)

func (*Status) UpdateLatency added in v0.26.4

func (d *Status) UpdateLatency(pubKey string, latency time.Duration) error

func (*Status) UpdateLocalPeerState added in v0.14.3

func (d *Status) UpdateLocalPeerState(localPeerState LocalPeerState)

UpdateLocalPeerState updates local peer status

func (*Status) UpdateManagementAddress added in v0.14.5

func (d *Status) UpdateManagementAddress(mgmAddress string)

UpdateManagementAddress update the address of the management server

func (*Status) UpdatePeerFQDN added in v0.14.3

func (d *Status) UpdatePeerFQDN(peerPubKey, fqdn string) error

UpdatePeerFQDN update peer's state fqdn only

func (*Status) UpdatePeerICEState added in v0.29.0

func (d *Status) UpdatePeerICEState(receivedState State) error

func (*Status) UpdatePeerICEStateToDisconnected added in v0.29.0

func (d *Status) UpdatePeerICEStateToDisconnected(receivedState State) error

func (*Status) UpdatePeerRelayedState added in v0.29.0

func (d *Status) UpdatePeerRelayedState(receivedState State) error

func (*Status) UpdatePeerRelayedStateToDisconnected added in v0.29.0

func (d *Status) UpdatePeerRelayedStateToDisconnected(receivedState State) error

func (*Status) UpdatePeerState added in v0.14.3

func (d *Status) UpdatePeerState(receivedState State) error

UpdatePeerState updates peer status

func (*Status) UpdateRelayStates added in v0.25.5

func (d *Status) UpdateRelayStates(relayResults []relay.ProbeResult)

func (*Status) UpdateResolvedDomainsStates added in v0.28.0

func (d *Status) UpdateResolvedDomainsStates(domain domain.Domain, prefixes []netip.Prefix)

func (*Status) UpdateRosenpass added in v0.26.1

func (d *Status) UpdateRosenpass(rosenpassEnabled, rosenpassPermissive bool)

UpdateRosenpass update the Rosenpass configuration

func (*Status) UpdateSignalAddress added in v0.14.5

func (d *Status) UpdateSignalAddress(signalURL string)

UpdateSignalAddress update the address of the signal server

func (*Status) UpdateWireGuardPeerState added in v0.26.1

func (d *Status) UpdateWireGuardPeerState(pubKey string, wgStats configurer.WGStats) error

UpdateWireGuardPeerState updates the WireGuard bits of the peer state

type WgConfig added in v0.22.0

type WgConfig struct {
	WgListenPort int
	RemoteKey    string
	WgInterface  iface.IWGIface
	AllowedIps   string
	PreSharedKey *wgtypes.Key
}

type WorkerCallbacks added in v0.29.0

type WorkerCallbacks struct {
	OnRelayReadyCallback func(info RelayConnInfo)
	OnRelayStatusChanged func(ConnStatus)

	OnICEConnReadyCallback func(ConnPriority, ICEConnInfo)
	OnICEStatusChanged     func(ConnStatus)
}

type WorkerICE added in v0.29.0

type WorkerICE struct {
	StunTurn []*stun.URI
	// contains filtered or unexported fields
}

func NewWorkerICE added in v0.29.0

func NewWorkerICE(ctx context.Context, log *log.Entry, config ConnConfig, signaler *Signaler, ifaceDiscover stdnet.ExternalIFaceDiscover, statusRecorder *Status, hasRelayOnLocally bool, callBacks WorkerICECallbacks) (*WorkerICE, error)

func (*WorkerICE) Close added in v0.29.0

func (w *WorkerICE) Close()

func (*WorkerICE) GetLocalUserCredentials added in v0.29.0

func (w *WorkerICE) GetLocalUserCredentials() (frag string, pwd string)

func (*WorkerICE) OnNewOffer added in v0.29.0

func (w *WorkerICE) OnNewOffer(remoteOfferAnswer *OfferAnswer)

func (*WorkerICE) OnRemoteCandidate added in v0.29.0

func (w *WorkerICE) OnRemoteCandidate(candidate ice.Candidate, haRoutes route.HAMap)

OnRemoteCandidate Handles ICE connection Candidate provided by the remote peer.

type WorkerICECallbacks added in v0.29.0

type WorkerICECallbacks struct {
	OnConnReady     func(ConnPriority, ICEConnInfo)
	OnStatusChanged func(ConnStatus)
}

type WorkerRelay added in v0.29.0

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

func NewWorkerRelay added in v0.29.0

func NewWorkerRelay(log *log.Entry, config ConnConfig, relayManager relayClient.ManagerService, callbacks WorkerRelayCallbacks) *WorkerRelay

func (*WorkerRelay) CloseConn added in v0.29.0

func (w *WorkerRelay) CloseConn()

func (*WorkerRelay) DisableWgWatcher added in v0.29.0

func (w *WorkerRelay) DisableWgWatcher()

func (*WorkerRelay) EnableWgWatcher added in v0.29.0

func (w *WorkerRelay) EnableWgWatcher(ctx context.Context)

func (*WorkerRelay) IsController added in v0.29.0

func (w *WorkerRelay) IsController() bool

func (*WorkerRelay) IsRelayConnectionSupportedWithPeer added in v0.29.0

func (w *WorkerRelay) IsRelayConnectionSupportedWithPeer() bool

func (*WorkerRelay) OnNewOffer added in v0.29.0

func (w *WorkerRelay) OnNewOffer(remoteOfferAnswer *OfferAnswer)

func (*WorkerRelay) RelayInstanceAddress added in v0.29.0

func (w *WorkerRelay) RelayInstanceAddress() (string, error)

func (*WorkerRelay) RelayIsSupportedLocally added in v0.29.0

func (w *WorkerRelay) RelayIsSupportedLocally() bool

type WorkerRelayCallbacks added in v0.29.0

type WorkerRelayCallbacks struct {
	OnConnReady    func(RelayConnInfo)
	OnDisconnected func()
}

Jump to

Keyboard shortcuts

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