dnstype

package
v0.0.0-...-1b709f2 Latest Latest
Warning

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

Go to latest
Published: Feb 9, 2026 License: BSD-3-Clause Imports: 7 Imported by: 0

Documentation

Overview

Package dnstype defines types for working with DNS.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Clone

func Clone(dst, src any) bool

Clone duplicates src into dst and reports whether it succeeded. To succeed, <src, dst> must be of types <*T, *T> or <*T, **T>, where T is one of Resolver.

Types

type Resolver

type Resolver struct {
	// Addr is the address of the DNS resolver, one of:
	//  - A plain IP address for a "classic" UDP+TCP DNS resolver.
	//    This is the common format as sent by the control plane.
	//  - An IP:port, for tests.
	//  - "https://resolver.com/path" for DNS over HTTPS; currently
	//    as of 2022-09-08 only used for certain well-known resolvers
	//    (see the publicdns package) for which the IP addresses to dial DoH are
	//    known ahead of time, so bootstrap DNS resolution is not required.
	//  - "http://node-address:port/path" for DNS over HTTP over WireGuard. This
	//    is implemented in the PeerAPI for exit nodes and app connectors.
	//  - [TODO] "tls://resolver.com" for DNS over TCP+TLS
	Addr string `json:",omitempty"`

	// BootstrapResolution is an optional suggested resolution for the
	// DoT/DoH resolver, if the resolver URL does not reference an IP
	// address directly.
	// BootstrapResolution may be empty, in which case clients should
	// look up the DoT/DoH server using their local "classic" DNS
	// resolver.
	//
	// As of 2022-09-08, BootstrapResolution is not yet used.
	BootstrapResolution []netip.Addr `json:",omitempty"`

	// UseWithExitNode designates that this resolver should continue to be used when an
	// exit node is in use. Normally, DNS resolution is delegated to the exit node but
	// there are situations where it is preferable to still use a Split DNS server and/or
	// global DNS server instead of the exit node.
	UseWithExitNode bool `json:",omitempty"`
}

Resolver is the configuration for one DNS resolver.

func (*Resolver) Clone

func (src *Resolver) Clone() *Resolver

Clone makes a deep copy of Resolver. The result aliases no memory with the original.

func (*Resolver) Equal

func (r *Resolver) Equal(other *Resolver) bool

Equal reports whether r and other are equal.

func (*Resolver) IPPort

func (r *Resolver) IPPort() (ipp netip.AddrPort, ok bool)

IPPort returns r.Addr as an IP address and port if either r.Addr is an IP address (the common case) or if r.Addr is an IP:port (as done in tests).

func (*Resolver) View

func (p *Resolver) View() ResolverView

View returns a read-only view of Resolver.

type ResolverView

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

ResolverView provides a read-only view over Resolver.

Its methods should only be called if `Valid()` returns true.

func (ResolverView) Addr

func (v ResolverView) Addr() string

Addr is the address of the DNS resolver, one of:

  • A plain IP address for a "classic" UDP+TCP DNS resolver. This is the common format as sent by the control plane.
  • An IP:port, for tests.
  • "https://resolver.com/path" for DNS over HTTPS; currently as of 2022-09-08 only used for certain well-known resolvers (see the publicdns package) for which the IP addresses to dial DoH are known ahead of time, so bootstrap DNS resolution is not required.
  • "http://node-address:port/path" for DNS over HTTP over WireGuard. This is implemented in the PeerAPI for exit nodes and app connectors.
  • [TODO] "tls://resolver.com" for DNS over TCP+TLS

func (ResolverView) AsStruct

func (v ResolverView) AsStruct() *Resolver

AsStruct returns a clone of the underlying value which aliases no memory with the original.

func (ResolverView) BootstrapResolution

func (v ResolverView) BootstrapResolution() views.Slice[netip.Addr]

BootstrapResolution is an optional suggested resolution for the DoT/DoH resolver, if the resolver URL does not reference an IP address directly. BootstrapResolution may be empty, in which case clients should look up the DoT/DoH server using their local "classic" DNS resolver.

As of 2022-09-08, BootstrapResolution is not yet used.

func (ResolverView) Equal

func (v ResolverView) Equal(v2 ResolverView) bool

func (ResolverView) MarshalJSON

func (v ResolverView) MarshalJSON() ([]byte, error)

MarshalJSON implements jsonv1.Marshaler.

func (ResolverView) MarshalJSONTo

func (v ResolverView) MarshalJSONTo(enc *jsontext.Encoder) error

MarshalJSONTo implements jsonv2.MarshalerTo.

func (*ResolverView) UnmarshalJSON

func (v *ResolverView) UnmarshalJSON(b []byte) error

UnmarshalJSON implements jsonv1.Unmarshaler.

func (*ResolverView) UnmarshalJSONFrom

func (v *ResolverView) UnmarshalJSONFrom(dec *jsontext.Decoder) error

UnmarshalJSONFrom implements jsonv2.UnmarshalerFrom.

func (ResolverView) UseWithExitNode

func (v ResolverView) UseWithExitNode() bool

UseWithExitNode designates that this resolver should continue to be used when an exit node is in use. Normally, DNS resolution is delegated to the exit node but there are situations where it is preferable to still use a Split DNS server and/or global DNS server instead of the exit node.

func (ResolverView) Valid

func (v ResolverView) Valid() bool

Valid reports whether v's underlying value is non-nil.

Jump to

Keyboard shortcuts

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