Documentation ¶
Overview ¶
Package netutil contains network-related utilities common among dnsproxy packages.
TODO(a.garipov): Move improved versions of these into netutil in module golibs.
Index ¶
- func ListenConfig() (lc *net.ListenConfig)
- func SortIPAddrs(addrs []net.IPAddr, preferIPv6 bool)
- func SortNetIPAddrs(addrs []netip.Addr, preferIPv6 bool)
- func UDPGetOOBSize() (oobSize int)
- func UDPRead(conn *net.UDPConn, buf []byte, udpOOBSize int) (n int, localIP net.IP, remoteAddr *net.UDPAddr, err error)
- func UDPSetOptions(c *net.UDPConn) (err error)
- func UDPWrite(data []byte, conn *net.UDPConn, remoteAddr *net.UDPAddr, localIP net.IP) (n int, err error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ListenConfig ¶
func ListenConfig() (lc *net.ListenConfig)
ListenConfig returns the default net.ListenConfig used by the plain-DNS servers in this module.
TODO(a.garipov): Add tests.
TODO(a.garipov): Add an option to not set SO_REUSEPORT on Unix to prevent issues with OpenWrt.
See https://github.com/AdguardTeam/AdGuardHome/issues/5872.
TODO(a.garipov): DRY with AdGuard DNS when we can.
func SortIPAddrs ¶
SortIPAddrs sorts addrs in accordance with the protocol preferences. Invalid addresses are sorted near the end. Zones are ignored.
TODO(a.garipov): Use netip.Addr instead of net.IPAddr everywhere where this is called.
Example ¶
package main import ( "fmt" "net" "github.com/AdguardTeam/dnsproxy/internal/netutil" ) func main() { printAddrs := func(header string, addrs []net.IPAddr) { fmt.Printf("%s:\n", header) for i, a := range addrs { fmt.Printf("%d: %s\n", i+1, a.IP) } fmt.Println() } addrs := []net.IPAddr{{ IP: net.ParseIP("1.2.3.4"), }, { IP: net.ParseIP("1.2.3.5"), }, { IP: net.ParseIP("2a00::1234"), }, { IP: net.ParseIP("2a00::1235"), }, { IP: nil, }} netutil.SortIPAddrs(addrs, false) printAddrs("IPv4 preferred", addrs) netutil.SortIPAddrs(addrs, true) printAddrs("IPv6 preferred", addrs) }
Output: IPv4 preferred: 1: 1.2.3.4 2: 1.2.3.5 3: 2a00::1234 4: 2a00::1235 5: <nil> IPv6 preferred: 1: 2a00::1234 2: 2a00::1235 3: 1.2.3.4 4: 1.2.3.5 5: <nil>
func SortNetIPAddrs ¶
SortNetIPAddrs sorts addrs in accordance with the protocol preferences. Invalid addresses are sorted near the end. Zones are ignored.
func UDPGetOOBSize ¶
func UDPGetOOBSize() (oobSize int)
UDPGetOOBSize returns maximum size of the received OOB data.
func UDPRead ¶
func UDPRead( conn *net.UDPConn, buf []byte, udpOOBSize int, ) (n int, localIP net.IP, remoteAddr *net.UDPAddr, err error)
UDPRead reads the message from conn using buf and receives a control-message payload of size udpOOBSize from it. It returns the number of bytes copied into buf and the source address of the message.
func UDPSetOptions ¶
UDPSetOptions sets flag options on a UDP socket to be able to receive the necessary OOB data.
Types ¶
This section is empty.