Documentation ¶
Overview ¶
Package conn implements WireGuard's network connections.
Index ¶
- Variables
- type Bind
- type BindSocketToInterface
- type Endpoint
- type LinuxSocketBind
- func (bind *LinuxSocketBind) Close() error
- func (bind *LinuxSocketBind) Open(port uint16) ([]ReceiveFunc, uint16, error)
- func (*LinuxSocketBind) ParseEndpoint(s string) (Endpoint, error)
- func (bind *LinuxSocketBind) Send(buff []byte, end Endpoint) error
- func (bind *LinuxSocketBind) SetMark(value uint32) error
- type LinuxSocketEndpoint
- func (end *LinuxSocketEndpoint) ClearDst()
- func (end *LinuxSocketEndpoint) ClearSrc()
- func (endpoint *LinuxSocketEndpoint) Dst4() *unix.SockaddrInet4
- func (end *LinuxSocketEndpoint) DstIP() netip.Addr
- func (end *LinuxSocketEndpoint) DstToBytes() []byte
- func (end *LinuxSocketEndpoint) DstToString() string
- func (endpoint *LinuxSocketEndpoint) IsV6() bool
- func (endpoint *LinuxSocketEndpoint) Src4() *ipv4Source
- func (end *LinuxSocketEndpoint) SrcIP() netip.Addr
- func (end *LinuxSocketEndpoint) SrcToString() string
- type PeekLookAtSocketFd
- type ReceiveFunc
- type StdNetBind
- type StdNetEndpoint
Constants ¶
This section is empty.
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 a packet b to address ep. Send(b []byte, ep Endpoint) error // ParseEndpoint creates a new endpoint from a string. ParseEndpoint(s string) (Endpoint, error) }
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 NewLinuxSocketBind ¶
func NewLinuxSocketBind() 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 LinuxSocketBind ¶
type LinuxSocketBind struct {
// contains filtered or unexported fields
}
LinuxSocketBind uses sendmsg and recvmsg to implement a full bind with sticky sockets on Linux.
func (*LinuxSocketBind) Close ¶
func (bind *LinuxSocketBind) Close() error
func (*LinuxSocketBind) Open ¶
func (bind *LinuxSocketBind) Open(port uint16) ([]ReceiveFunc, uint16, error)
func (*LinuxSocketBind) ParseEndpoint ¶
func (*LinuxSocketBind) ParseEndpoint(s string) (Endpoint, error)
func (*LinuxSocketBind) SetMark ¶
func (bind *LinuxSocketBind) SetMark(value uint32) error
type LinuxSocketEndpoint ¶
type LinuxSocketEndpoint struct {
// contains filtered or unexported fields
}
func (*LinuxSocketEndpoint) ClearDst ¶
func (end *LinuxSocketEndpoint) ClearDst()
func (*LinuxSocketEndpoint) ClearSrc ¶
func (end *LinuxSocketEndpoint) ClearSrc()
func (*LinuxSocketEndpoint) Dst4 ¶
func (endpoint *LinuxSocketEndpoint) Dst4() *unix.SockaddrInet4
func (*LinuxSocketEndpoint) DstIP ¶
func (end *LinuxSocketEndpoint) DstIP() netip.Addr
func (*LinuxSocketEndpoint) DstToBytes ¶
func (end *LinuxSocketEndpoint) DstToBytes() []byte
func (*LinuxSocketEndpoint) DstToString ¶
func (end *LinuxSocketEndpoint) DstToString() string
func (*LinuxSocketEndpoint) IsV6 ¶
func (endpoint *LinuxSocketEndpoint) IsV6() bool
func (*LinuxSocketEndpoint) Src4 ¶
func (endpoint *LinuxSocketEndpoint) Src4() *ipv4Source
func (*LinuxSocketEndpoint) SrcIP ¶
func (end *LinuxSocketEndpoint) SrcIP() netip.Addr
func (*LinuxSocketEndpoint) SrcToString ¶
func (end *LinuxSocketEndpoint) SrcToString() string
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 a single inbound packet from the network. It writes the data into b. n is the length of the packet. ep is the remote endpoint.
func (ReceiveFunc) PrettyName ¶
func (fn ReceiveFunc) PrettyName() string
type StdNetBind ¶
type StdNetBind struct {
// contains filtered or unexported fields
}
StdNetBind is meant to be a temporary solution on platforms for which the sticky socket / source caching behavior has not yet been implemented. It uses the Go's net package to implement networking. See LinuxSocketBind for a proper implementation on the Linux platform.
func (*StdNetBind) Close ¶
func (bind *StdNetBind) Close() error
func (*StdNetBind) Open ¶
func (bind *StdNetBind) Open(uport uint16) ([]ReceiveFunc, uint16, error)
func (*StdNetBind) ParseEndpoint ¶
func (*StdNetBind) ParseEndpoint(s string) (Endpoint, error)
func (*StdNetBind) SetMark ¶
func (bind *StdNetBind) SetMark(mark uint32) error
type StdNetEndpoint ¶
func (StdNetEndpoint) ClearSrc ¶
func (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) SrcToString ¶
func (e StdNetEndpoint) SrcToString() string