|
|
|
@ -72,6 +72,8 @@ type indexedAddrSet struct {
|
|
|
|
|
index int // index of map key in addr.Addrs
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// DefaultPort is the default port to listen on.
|
|
|
|
|
// The current default (zero) means to auto-select a random free port.
|
|
|
|
|
const DefaultPort = 0
|
|
|
|
|
|
|
|
|
|
const DefaultDERP = "https://derp.tailscale.com/derp"
|
|
|
|
@ -559,16 +561,22 @@ func (a *AddrSet) dst() *net.UDPAddr {
|
|
|
|
|
return &a.addrs[i]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *AddrSet) DstToBytes() []byte {
|
|
|
|
|
dst := a.dst()
|
|
|
|
|
b := append([]byte(nil), dst.IP.To4()...)
|
|
|
|
|
if len(b) == 0 {
|
|
|
|
|
b = append([]byte(nil), dst.IP...)
|
|
|
|
|
// packUDPAddr packs a UDPAddr in the form wanted by WireGuard.
|
|
|
|
|
func packUDPAddr(ua *net.UDPAddr) []byte {
|
|
|
|
|
ip := ua.IP.To4()
|
|
|
|
|
if ip == nil {
|
|
|
|
|
ip = ua.IP
|
|
|
|
|
}
|
|
|
|
|
b = append(b, byte(dst.Port&0xff))
|
|
|
|
|
b = append(b, byte((dst.Port>>8)&0xff))
|
|
|
|
|
b := make([]byte, 0, len(ip)+2)
|
|
|
|
|
b = append(b, ip...)
|
|
|
|
|
b = append(b, byte(ua.Port))
|
|
|
|
|
b = append(b, byte(ua.Port>>8))
|
|
|
|
|
return b
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *AddrSet) DstToBytes() []byte {
|
|
|
|
|
return packUDPAddr(a.dst())
|
|
|
|
|
}
|
|
|
|
|
func (a *AddrSet) DstToString() string {
|
|
|
|
|
dst := a.dst()
|
|
|
|
|
return dst.String()
|
|
|
|
@ -730,16 +738,7 @@ func (e *singleEndpoint) DstIP() net.IP { return (*net.UDPAddr)(e).IP }
|
|
|
|
|
func (e *singleEndpoint) SrcIP() net.IP { return nil }
|
|
|
|
|
func (e *singleEndpoint) SrcToString() string { return "" }
|
|
|
|
|
func (e *singleEndpoint) DstToString() string { return (*net.UDPAddr)(e).String() }
|
|
|
|
|
func (e *singleEndpoint) DstToBytes() []byte {
|
|
|
|
|
addr := (*net.UDPAddr)(e)
|
|
|
|
|
out := addr.IP.To4()
|
|
|
|
|
if out == nil {
|
|
|
|
|
out = addr.IP
|
|
|
|
|
}
|
|
|
|
|
out = append(out, byte(addr.Port&0xff))
|
|
|
|
|
out = append(out, byte((addr.Port>>8)&0xff))
|
|
|
|
|
return out
|
|
|
|
|
}
|
|
|
|
|
func (e *singleEndpoint) DstToBytes() []byte { return packUDPAddr((*net.UDPAddr)(e)) }
|
|
|
|
|
func (e *singleEndpoint) UpdateDst(dst *net.UDPAddr) error {
|
|
|
|
|
return fmt.Errorf("magicsock.singleEndpoint(%s).UpdateDst(%s): should never be called", (*net.UDPAddr)(e), dst)
|
|
|
|
|
}
|
|
|
|
|