Documentation ¶
Overview ¶
Package portmapper is a UDP port mapping client. It currently allows for mapping over NAT-PMP, UPnP, and PCP.
Index ¶
- Variables
- func IsNoMappingError(err error) bool
- type Client
- func (c *Client) Close() error
- func (c *Client) GetCachedMappingOrStartCreatingOne() (external netip.AddrPort, ok bool)
- func (c *Client) HaveMapping() bool
- func (c *Client) NoteNetworkDown()
- func (c *Client) Probe(ctx context.Context) (res ProbeResult, err error)
- func (c *Client) SetGatewayLookupFunc(f func() (gw, myIP netip.Addr, ok bool))
- func (c *Client) SetLocalPort(localPort uint16)
- type DebugKnobs
- type NoMappingError
- type ProbeResult
Constants ¶
This section is empty.
Variables ¶
var ( ErrNoPortMappingServices = errors.New("no port mapping services were found") ErrGatewayRange = errors.New("skipping portmap; gateway range likely lacks support") ErrGatewayIPv6 = errors.New("skipping portmap; no IPv6 support for portmapping") ErrPortMappingDisabled = errors.New("port mapping is disabled") )
Functions ¶
func IsNoMappingError ¶
IsNoMappingError reports whether err is of type NoMappingError.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a port mapping client.
func NewClient ¶
func NewClient(logf logger.Logf, netMon *netmon.Monitor, debug *DebugKnobs, controlKnobs *controlknobs.Knobs, onChange func()) *Client
NewClient returns a new portmapping client.
The netMon parameter is required.
The debug argument allows configuring the behaviour of the portmapper for debugging; if nil, a sensible set of defaults will be used.
The controlKnobs, if non-nil, specifies the control knobs from the control plane that might disable portmapping.
The optional onChange argument specifies a func to run in a new goroutine whenever the port mapping status has changed. If nil, it doesn't make a callback.
func (*Client) GetCachedMappingOrStartCreatingOne ¶ added in v1.12.0
GetCachedMappingOrStartCreatingOne quickly returns with our current cached portmapping, if any. If there's not one, it starts up a background goroutine to create one. If the background goroutine ends up creating one, the onChange hook registered with the NewClient constructor (if any) will fire.
func (*Client) HaveMapping ¶
HaveMapping reports whether we have a current valid mapping.
func (*Client) NoteNetworkDown ¶
func (c *Client) NoteNetworkDown()
NoteNetworkDown should be called when the network has transitioned to a down state. It's too late to release port mappings at this point (the user might've just turned off their wifi), but we can make sure we invalidate mappings for later when the network comes back.
func (*Client) Probe ¶
func (c *Client) Probe(ctx context.Context) (res ProbeResult, err error)
Probe returns a summary of which port mapping services are available on the network.
If a probe has run recently and there haven't been any network changes since, the returned result might be server from the Client's cache, without sending any network traffic.
func (*Client) SetGatewayLookupFunc ¶
SetGatewayLookupFunc set the func that returns the machine's default gateway IP, and the primary IP address for that gateway. It must be called before the client is used. If not called, interfaces.LikelyHomeRouterIP is used.
func (*Client) SetLocalPort ¶
SetLocalPort updates the local port number to which we want to port map UDP traffic.
type DebugKnobs ¶ added in v1.38.0
type DebugKnobs struct { // VerboseLogs tells the Client to print additional debug information // to its logger. VerboseLogs bool // LogHTTP tells the Client to print the raw HTTP logs (from UPnP) to // its logger. This is useful when debugging buggy UPnP // implementations. LogHTTP bool // Disable* disables a specific service from mapping. DisableUPnP bool DisablePMP bool DisablePCP bool // DisableAll, if non-nil, is a func that reports whether all port // mapping attempts should be disabled. DisableAll func() bool }
DebugKnobs contains debug configuration that can be provided when creating a Client. The zero value is valid for use.
type NoMappingError ¶
type NoMappingError struct {
// contains filtered or unexported fields
}
NoMappingError is returned when no NAT mapping could be done.
func (NoMappingError) Error ¶
func (nme NoMappingError) Error() string
func (NoMappingError) Unwrap ¶
func (nme NoMappingError) Unwrap() error