Documentation
¶
Overview ¶
Package conn implements WireGuard's network connections.
Index ¶
- Constants
- Variables
- type Bind
- type BindSocketToInterface
- type Endpoint
- type ErrUDPGSODisabled
- type KeyedEndpoint
- func (rep *KeyedEndpoint) ClearSrc()
- func (rep *KeyedEndpoint) DstIP() netip.Addr
- func (rep *KeyedEndpoint) DstToBytes() []byte
- func (rep *KeyedEndpoint) DstToString() string
- func (rep *KeyedEndpoint) GetInner() Endpoint
- func (rep *KeyedEndpoint) GetPublicKey() *nacl.PublicKey
- func (rep *KeyedEndpoint) SrcIP() netip.Addr
- func (rep *KeyedEndpoint) SrcToString() string
- type PeekLookAtSocketFd
- type ReceiveFunc
- type StdNetBind
- func (s *StdNetBind) BatchSize() int
- func (s *StdNetBind) Close() error
- func (s *StdNetBind) Open(uport uint16) ([]ReceiveFunc, uint16, error)
- func (*StdNetBind) ParseEndpoint(s string) (Endpoint, error)
- func (s *StdNetBind) Send(bufs [][]byte, endpoint Endpoint) error
- func (s *StdNetBind) SetMark(mark uint32) error
- type StdNetEndpoint
- func (e *StdNetEndpoint) ClearSrc()
- func (e *StdNetEndpoint) DstIP() netip.Addr
- func (e *StdNetEndpoint) DstToBytes() []byte
- func (e *StdNetEndpoint) DstToString() string
- func (e *StdNetEndpoint) SrcIP() netip.Addr
- func (e *StdNetEndpoint) SrcIfidx() int32
- func (e *StdNetEndpoint) SrcToString() string
Constants ¶
const (
IdealBatchSize = 128 // maximum number of packets handled per read and write
)
const StdNetSupportsStickySockets = true
Variables ¶
var ( ErrBindAlreadyOpen = errors.New("bind is already open") ErrWrongEndpointType = errors.New("endpoint type does not correspond with bind type") )
Functions ¶
This section is empty.
Types ¶
type Bind ¶
type Bind interface { // Open puts the Bind into a listening state on a given port and reports the actual // port that it bound to. Passing zero results in a random selection. // fns is the set of functions that will be called to receive packets. Open(port uint16) (fns []ReceiveFunc, actualPort uint16, err error) // Close closes the Bind listener. // All fns returned by Open must return net.ErrClosed after a call to Close. Close() error // SetMark sets the mark for each packet sent through this Bind. // This mark is passed to the kernel as the socket option SO_MARK. SetMark(mark uint32) error // Send writes one or more packets in bufs to address ep. The length of // bufs must not exceed BatchSize(). Send(bufs [][]byte, ep Endpoint) error // ParseEndpoint creates a new endpoint from a string. ParseEndpoint(s string) (Endpoint, error) // BatchSize is the number of buffers expected to be passed to // the ReceiveFuncs, and the maximum expected to be passed to SendBatch. BatchSize() int }
A Bind listens on a port for both IPv6 and IPv4 UDP traffic.
A Bind interface may also be a PeekLookAtSocketFd or BindSocketToInterface, depending on the platform-specific implementation.
func NewDefaultBind ¶
func NewDefaultBind() Bind
func NewStdNetBind ¶
func NewStdNetBind() Bind
type BindSocketToInterface ¶
type BindSocketToInterface interface { BindSocketToInterface4(interfaceIndex uint32, blackhole bool) error BindSocketToInterface6(interfaceIndex uint32, blackhole bool) error }
BindSocketToInterface is implemented by Bind objects that support being tied to a single network interface. Used by wireguard-windows.
type Endpoint ¶
type Endpoint interface { ClearSrc() // clears the source address SrcToString() string // returns the local source address (ip:port) DstToString() string // returns the destination address (ip:port) DstToBytes() []byte // used for mac2 cookie calculations DstIP() netip.Addr SrcIP() netip.Addr }
An Endpoint maintains the source/destination caching for a peer.
dst: the remote address of a peer ("endpoint" in uapi terminology) src: the local address from which datagrams originate going to the peer
type ErrUDPGSODisabled ¶
type ErrUDPGSODisabled struct { RetryErr error // contains filtered or unexported fields }
func (ErrUDPGSODisabled) Error ¶
func (e ErrUDPGSODisabled) Error() string
func (ErrUDPGSODisabled) Unwrap ¶
func (e ErrUDPGSODisabled) Unwrap() error
type KeyedEndpoint ¶ added in v0.0.2
type KeyedEndpoint struct {
// contains filtered or unexported fields
}
KeyedEndpoint is an Endpoint implementation which is aware of the remote peer/endpoint's public key. This is useful for logic in the bind to determine if a given packet was sent from a peer from an address other than the one in the state.
This effectively enables changing the address of the peer in the state such that we can maintain a QOS conn for the peer even if its addresses change.
The specific scenario that made us add this is that for peers behind certain NAT gateways, the public UDP address assigned to outbound traffic (on the gateway itself) is endpoint-dependent (can be thought of as destination ip:port-dependent) such that the self-discovered address (via STUN) is different (mostly only the port is different) than the address that the remote peer sees on inbound traffic.
func (*KeyedEndpoint) ClearSrc ¶ added in v0.0.3
func (rep *KeyedEndpoint) ClearSrc()
ClearSrc clears the source address.
func (*KeyedEndpoint) DstIP ¶ added in v0.0.3
func (rep *KeyedEndpoint) DstIP() netip.Addr
DstIP returns the destination IP address.
func (*KeyedEndpoint) DstToBytes ¶ added in v0.0.3
func (rep *KeyedEndpoint) DstToBytes() []byte
DstToBytes returns a byte slice used for mac2 cookie calculations.
func (*KeyedEndpoint) DstToString ¶ added in v0.0.3
func (rep *KeyedEndpoint) DstToString() string
SrcToString returns the destination address (ip:port).
func (*KeyedEndpoint) GetInner ¶ added in v0.0.3
func (rep *KeyedEndpoint) GetInner() Endpoint
GetInner gets the inner Endpoint for a RoamingEndpoint.
func (*KeyedEndpoint) GetPublicKey ¶ added in v0.0.2
func (rep *KeyedEndpoint) GetPublicKey() *nacl.PublicKey
GetPublicKey gets the public key for a RoamingEndpoint.
func (*KeyedEndpoint) SrcIP ¶ added in v0.0.3
func (rep *KeyedEndpoint) SrcIP() netip.Addr
DstIP returns the source IP address.
func (*KeyedEndpoint) SrcToString ¶ added in v0.0.3
func (rep *KeyedEndpoint) SrcToString() string
SrcToString returns the local source address (ip:port).
type PeekLookAtSocketFd ¶
type PeekLookAtSocketFd interface { PeekLookAtSocketFd4() (fd int, err error) PeekLookAtSocketFd6() (fd int, err error) }
PeekLookAtSocketFd is implemented by Bind objects that support having their file descriptor peeked at. Used by wireguard-android.
type ReceiveFunc ¶
A ReceiveFunc receives at least one packet from the network and writes them into packets. On a successful read it returns the number of elements of sizes, packets, and endpoints that should be evaluated. Some elements of sizes may be zero, and callers should ignore them. Callers must pass a sizes and eps slice with a length greater than or equal to the length of packets. These lengths must not exceed the length of the associated Bind.BatchSize().
func (ReceiveFunc) PrettyName ¶
func (fn ReceiveFunc) PrettyName() string
type StdNetBind ¶
type StdNetBind struct {
// contains filtered or unexported fields
}
StdNetBind implements Bind for all platforms. While Windows has its own Bind (see bind_windows.go), it may fall back to StdNetBind. TODO: Remove usage of ipv{4,6}.PacketConn when net.UDPConn has comparable methods for sending and receiving multiple datagrams per-syscall. See the proposal in https://github.com/golang/go/issues/45886#issuecomment-1218301564.
func (*StdNetBind) BatchSize ¶
func (s *StdNetBind) BatchSize() int
TODO: When all Binds handle IdealBatchSize, remove this dynamic function and rename the IdealBatchSize constant to BatchSize.
func (*StdNetBind) Close ¶
func (s *StdNetBind) Close() error
func (*StdNetBind) Open ¶
func (s *StdNetBind) Open(uport uint16) ([]ReceiveFunc, uint16, error)
func (*StdNetBind) ParseEndpoint ¶
func (*StdNetBind) ParseEndpoint(s string) (Endpoint, error)
func (*StdNetBind) SetMark ¶
func (s *StdNetBind) SetMark(mark uint32) error
type StdNetEndpoint ¶
type StdNetEndpoint struct { // AddrPort is the endpoint destination. netip.AddrPort // contains filtered or unexported fields }
func (*StdNetEndpoint) ClearSrc ¶
func (e *StdNetEndpoint) ClearSrc()
func (*StdNetEndpoint) DstIP ¶
func (e *StdNetEndpoint) DstIP() netip.Addr
func (*StdNetEndpoint) DstToBytes ¶
func (e *StdNetEndpoint) DstToBytes() []byte
func (*StdNetEndpoint) DstToString ¶
func (e *StdNetEndpoint) DstToString() string
func (*StdNetEndpoint) SrcIP ¶
func (e *StdNetEndpoint) SrcIP() netip.Addr
func (*StdNetEndpoint) SrcIfidx ¶
func (e *StdNetEndpoint) SrcIfidx() int32
func (*StdNetEndpoint) SrcToString ¶
func (e *StdNetEndpoint) SrcToString() string