mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-18 02:48:40 +00:00
wgengine/magicsock: use math/rands/v2
Updates #11058 Co-authored-by: James Tucker <james@tailscale.com> Signed-off-by: Maisem Ali <maisem@tailscale.com>
This commit is contained in:
parent
573c8bd8c7
commit
36e8e8cd64
@ -514,7 +514,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
hash from compress/zlib+
|
hash from compress/zlib+
|
||||||
hash/adler32 from compress/zlib+
|
hash/adler32 from compress/zlib+
|
||||||
hash/crc32 from compress/gzip+
|
hash/crc32 from compress/gzip+
|
||||||
hash/fnv from tailscale.com/wgengine/magicsock
|
|
||||||
hash/maphash from go4.org/mem
|
hash/maphash from go4.org/mem
|
||||||
html from html/template+
|
html from html/template+
|
||||||
html/template from github.com/gorilla/csrf
|
html/template from github.com/gorilla/csrf
|
||||||
|
@ -23,6 +23,14 @@ func Shuffle[T any](seed uint64, data []T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IntN is like rand.IntN, but it is seeded on the stack and does not allocate
|
||||||
|
// or lock any RNG state.
|
||||||
|
func IntN(seed uint64, n int) int {
|
||||||
|
var pcg randv2.PCG
|
||||||
|
pcg.Seed(seed, seed)
|
||||||
|
return int(uint64n(&pcg, uint64(n)))
|
||||||
|
}
|
||||||
|
|
||||||
// Perm is like rand.Perm, but it is seeded on the stack and does not allocate
|
// Perm is like rand.Perm, but it is seeded on the stack and does not allocate
|
||||||
// or lock any RNG state.
|
// or lock any RNG state.
|
||||||
func Perm(seed uint64, n int) []int {
|
func Perm(seed uint64, n int) []int {
|
||||||
|
@ -7,8 +7,6 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"hash/fnv"
|
|
||||||
"math/rand"
|
|
||||||
"net"
|
"net"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -16,6 +14,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
"github.com/tailscale/wireguard-go/conn"
|
"github.com/tailscale/wireguard-go/conn"
|
||||||
"tailscale.com/derp"
|
"tailscale.com/derp"
|
||||||
@ -31,6 +30,7 @@ import (
|
|||||||
"tailscale.com/types/key"
|
"tailscale.com/types/key"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/util/mak"
|
"tailscale.com/util/mak"
|
||||||
|
"tailscale.com/util/rands"
|
||||||
"tailscale.com/util/sysresources"
|
"tailscale.com/util/sysresources"
|
||||||
"tailscale.com/util/testenv"
|
"tailscale.com/util/testenv"
|
||||||
)
|
)
|
||||||
@ -94,7 +94,6 @@ type activeDerp struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
processStartUnixNano = time.Now().UnixNano()
|
|
||||||
pickDERPFallbackForTests func() int
|
pickDERPFallbackForTests func() int
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -136,10 +135,7 @@ func (c *Conn) pickDERPFallback() int {
|
|||||||
return pickDERPFallbackForTests()
|
return pickDERPFallbackForTests()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: use math/rand/v2 here.
|
return ids[rands.IntN(uint64(uintptr(unsafe.Pointer(c))), len(ids))]
|
||||||
h := fnv.New64()
|
|
||||||
fmt.Fprintf(h, "%p/%d", c, processStartUnixNano) // arbitrary
|
|
||||||
return ids[rand.New(rand.NewSource(int64(h.Sum64()))).Intn(len(ids))]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This allows existing tests to pass, but allows us to still test the
|
// This allows existing tests to pass, but allows us to still test the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user