2023-01-27 21:37:20 +00:00
|
|
|
// Copyright (c) Tailscale Inc & AUTHORS
|
|
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
2020-08-06 21:57:03 +00:00
|
|
|
|
|
|
|
package wgengine
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2022-07-26 03:55:44 +00:00
|
|
|
"net/netip"
|
2020-10-13 19:04:52 +00:00
|
|
|
"reflect"
|
2020-08-06 21:57:03 +00:00
|
|
|
"testing"
|
|
|
|
|
2020-10-13 19:04:52 +00:00
|
|
|
"go4.org/mem"
|
2023-01-19 14:42:58 +00:00
|
|
|
"tailscale.com/cmd/testwrapper/flakytest"
|
2021-04-02 07:34:32 +00:00
|
|
|
"tailscale.com/net/dns"
|
2022-07-25 03:08:42 +00:00
|
|
|
"tailscale.com/net/netaddr"
|
2021-03-27 05:14:08 +00:00
|
|
|
"tailscale.com/net/tstun"
|
2020-08-06 21:57:03 +00:00
|
|
|
"tailscale.com/tailcfg"
|
2021-09-07 22:17:39 +00:00
|
|
|
"tailscale.com/tstest"
|
2021-07-21 19:14:04 +00:00
|
|
|
"tailscale.com/tstime/mono"
|
2020-08-06 21:57:03 +00:00
|
|
|
"tailscale.com/types/key"
|
2021-09-01 02:06:04 +00:00
|
|
|
"tailscale.com/types/netmap"
|
2020-10-13 19:04:52 +00:00
|
|
|
"tailscale.com/wgengine/router"
|
2021-01-29 20:16:36 +00:00
|
|
|
"tailscale.com/wgengine/wgcfg"
|
2020-08-06 21:57:03 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestNoteReceiveActivity(t *testing.T) {
|
2021-07-21 19:14:04 +00:00
|
|
|
now := mono.Time(123456)
|
2021-09-07 22:17:39 +00:00
|
|
|
var logBuf tstest.MemLogger
|
2020-08-06 21:57:03 +00:00
|
|
|
|
|
|
|
confc := make(chan bool, 1)
|
|
|
|
gotConf := func() bool {
|
|
|
|
select {
|
|
|
|
case <-confc:
|
|
|
|
return true
|
|
|
|
default:
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
e := &userspaceEngine{
|
2021-09-07 22:17:39 +00:00
|
|
|
timeNow: func() mono.Time { return now },
|
2021-11-02 01:21:48 +00:00
|
|
|
recvActivityAt: map[key.NodePublic]mono.Time{},
|
2021-09-07 22:17:39 +00:00
|
|
|
logf: logBuf.Logf,
|
2021-03-27 06:13:20 +00:00
|
|
|
tundev: new(tstun.Wrapper),
|
2020-08-06 21:57:03 +00:00
|
|
|
testMaybeReconfigHook: func() { confc <- true },
|
2021-11-02 01:21:48 +00:00
|
|
|
trimmedNodes: map[key.NodePublic]bool{},
|
2020-08-06 21:57:03 +00:00
|
|
|
}
|
|
|
|
ra := e.recvActivityAt
|
|
|
|
|
2021-11-02 00:53:40 +00:00
|
|
|
nk := key.NewNode().Public()
|
2020-08-06 21:57:03 +00:00
|
|
|
|
|
|
|
// Activity on an untracked key should do nothing.
|
2021-09-01 02:06:04 +00:00
|
|
|
e.noteRecvActivity(nk)
|
2020-08-06 21:57:03 +00:00
|
|
|
if len(ra) != 0 {
|
|
|
|
t.Fatalf("unexpected growth in map: now has %d keys; want 0", len(ra))
|
|
|
|
}
|
|
|
|
if logBuf.Len() != 0 {
|
|
|
|
t.Fatalf("unexpected log write (and thus activity): %s", logBuf.Bytes())
|
|
|
|
}
|
|
|
|
|
2020-08-26 19:20:09 +00:00
|
|
|
// Now track it, but don't mark it trimmed, so shouldn't update.
|
2021-11-02 01:21:48 +00:00
|
|
|
ra[nk] = 0
|
2021-09-01 02:06:04 +00:00
|
|
|
e.noteRecvActivity(nk)
|
2020-08-06 21:57:03 +00:00
|
|
|
if len(ra) != 1 {
|
|
|
|
t.Fatalf("unexpected growth in map: now has %d keys; want 1", len(ra))
|
|
|
|
}
|
2021-11-02 01:21:48 +00:00
|
|
|
if got := ra[nk]; got != now {
|
2020-08-06 21:57:03 +00:00
|
|
|
t.Fatalf("time in map = %v; want %v", got, now)
|
|
|
|
}
|
2020-08-26 19:20:09 +00:00
|
|
|
if gotConf() {
|
|
|
|
t.Fatalf("unexpected reconfig")
|
2020-08-06 21:57:03 +00:00
|
|
|
}
|
|
|
|
|
2020-08-26 19:20:09 +00:00
|
|
|
// Now mark it trimmed and expect an update.
|
2021-11-02 01:21:48 +00:00
|
|
|
e.trimmedNodes[nk] = true
|
2021-09-01 02:06:04 +00:00
|
|
|
e.noteRecvActivity(nk)
|
2020-08-26 19:20:09 +00:00
|
|
|
if len(ra) != 1 {
|
|
|
|
t.Fatalf("unexpected growth in map: now has %d keys; want 1", len(ra))
|
|
|
|
}
|
2021-11-02 01:21:48 +00:00
|
|
|
if got := ra[nk]; got != now {
|
2020-08-26 19:20:09 +00:00
|
|
|
t.Fatalf("time in map = %v; want %v", got, now)
|
|
|
|
}
|
2020-08-06 21:57:03 +00:00
|
|
|
if !gotConf() {
|
2020-08-26 19:20:09 +00:00
|
|
|
t.Fatalf("didn't get expected reconfig")
|
2020-08-06 21:57:03 +00:00
|
|
|
}
|
|
|
|
}
|
2020-10-13 19:04:52 +00:00
|
|
|
|
2023-08-18 14:57:44 +00:00
|
|
|
func nodeViews(v []*tailcfg.Node) []tailcfg.NodeView {
|
|
|
|
nv := make([]tailcfg.NodeView, len(v))
|
|
|
|
for i, n := range v {
|
|
|
|
nv[i] = n.View()
|
|
|
|
}
|
|
|
|
return nv
|
|
|
|
}
|
|
|
|
|
2020-10-13 19:04:52 +00:00
|
|
|
func TestUserspaceEngineReconfig(t *testing.T) {
|
2021-03-01 18:08:53 +00:00
|
|
|
e, err := NewFakeUserspaceEngine(t.Logf, 0)
|
2020-10-13 19:04:52 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2021-09-15 18:48:49 +00:00
|
|
|
t.Cleanup(e.Close)
|
2020-10-13 19:04:52 +00:00
|
|
|
ue := e.(*userspaceEngine)
|
|
|
|
|
|
|
|
routerCfg := &router.Config{}
|
|
|
|
|
2021-09-01 02:06:04 +00:00
|
|
|
for _, nodeHex := range []string{
|
2020-10-13 19:04:52 +00:00
|
|
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
|
|
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
|
|
} {
|
2021-09-01 02:06:04 +00:00
|
|
|
nm := &netmap.NetworkMap{
|
2023-08-18 14:57:44 +00:00
|
|
|
Peers: nodeViews([]*tailcfg.Node{
|
2021-12-15 16:42:25 +00:00
|
|
|
{
|
2023-09-11 17:13:00 +00:00
|
|
|
ID: 1,
|
2021-11-02 03:55:52 +00:00
|
|
|
Key: nkFromHex(nodeHex),
|
2021-09-01 02:06:04 +00:00
|
|
|
},
|
2023-08-18 14:57:44 +00:00
|
|
|
}),
|
2021-09-01 02:06:04 +00:00
|
|
|
}
|
2021-10-28 00:42:33 +00:00
|
|
|
nk, err := key.ParseNodePublicUntyped(mem.S(nodeHex))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2020-10-13 19:04:52 +00:00
|
|
|
cfg := &wgcfg.Config{
|
|
|
|
Peers: []wgcfg.Peer{
|
|
|
|
{
|
2021-10-28 00:42:33 +00:00
|
|
|
PublicKey: nk,
|
all: convert more code to use net/netip directly
perl -i -npe 's,netaddr.IPPrefixFrom,netip.PrefixFrom,' $(git grep -l -F netaddr.)
perl -i -npe 's,netaddr.IPPortFrom,netip.AddrPortFrom,' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPrefix,netip.Prefix,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPort,netip.AddrPort,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IP\b,netip.Addr,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPv6Raw\b,netip.AddrFrom16,g' $(git grep -l -F netaddr. )
goimports -w .
Then delete some stuff from the net/netaddr shim package which is no
longer neeed.
Updates #5162
Change-Id: Ia7a86893fe21c7e3ee1ec823e8aba288d4566cd8
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-07-26 04:14:09 +00:00
|
|
|
AllowedIPs: []netip.Prefix{
|
|
|
|
netip.PrefixFrom(netaddr.IPv4(100, 100, 99, 1), 32),
|
2020-10-13 19:04:52 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-09-01 02:06:04 +00:00
|
|
|
e.SetNetworkMap(nm)
|
2023-08-18 00:29:15 +00:00
|
|
|
err = e.Reconfig(cfg, routerCfg, &dns.Config{})
|
2020-10-13 19:04:52 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-11-02 01:21:48 +00:00
|
|
|
wantRecvAt := map[key.NodePublic]mono.Time{
|
2021-09-01 02:06:04 +00:00
|
|
|
nkFromHex(nodeHex): 0,
|
2020-10-13 19:04:52 +00:00
|
|
|
}
|
|
|
|
if got := ue.recvActivityAt; !reflect.DeepEqual(got, wantRecvAt) {
|
|
|
|
t.Errorf("wrong recvActivityAt\n got: %v\nwant: %v\n", got, wantRecvAt)
|
|
|
|
}
|
|
|
|
|
2021-11-02 01:21:48 +00:00
|
|
|
wantTrimmedNodes := map[key.NodePublic]bool{
|
2021-09-01 02:06:04 +00:00
|
|
|
nkFromHex(nodeHex): true,
|
2020-10-13 19:04:52 +00:00
|
|
|
}
|
2021-09-01 02:06:04 +00:00
|
|
|
if got := ue.trimmedNodes; !reflect.DeepEqual(got, wantTrimmedNodes) {
|
|
|
|
t.Errorf("wrong wantTrimmedNodes\n got: %v\nwant: %v\n", got, wantTrimmedNodes)
|
2020-10-13 19:04:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-06-22 20:13:59 +00:00
|
|
|
func TestUserspaceEnginePortReconfig(t *testing.T) {
|
2023-08-18 00:29:15 +00:00
|
|
|
tstest.Replace(t, &randomizeClientPort, func() bool { return false })
|
|
|
|
|
2023-01-19 14:42:58 +00:00
|
|
|
flakytest.Mark(t, "https://github.com/tailscale/tailscale/issues/2855")
|
2021-06-22 20:13:59 +00:00
|
|
|
const defaultPort = 49983
|
|
|
|
// Keep making a wgengine until we find an unused port
|
|
|
|
var ue *userspaceEngine
|
|
|
|
for i := 0; i < 100; i++ {
|
|
|
|
attempt := uint16(defaultPort + i)
|
|
|
|
e, err := NewFakeUserspaceEngine(t.Logf, attempt)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
ue = e.(*userspaceEngine)
|
|
|
|
if ue.magicConn.LocalPort() == attempt {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
ue.Close()
|
|
|
|
ue = nil
|
|
|
|
}
|
|
|
|
if ue == nil {
|
|
|
|
t.Fatal("could not create a wgengine with a specific port")
|
|
|
|
}
|
2021-09-15 18:48:49 +00:00
|
|
|
t.Cleanup(ue.Close)
|
2021-06-22 20:13:59 +00:00
|
|
|
|
|
|
|
startingPort := ue.magicConn.LocalPort()
|
2021-10-28 00:42:33 +00:00
|
|
|
nodeKey, err := key.ParseNodePublicUntyped(mem.S("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2021-06-22 20:13:59 +00:00
|
|
|
cfg := &wgcfg.Config{
|
|
|
|
Peers: []wgcfg.Peer{
|
|
|
|
{
|
2021-10-28 00:42:33 +00:00
|
|
|
PublicKey: nodeKey,
|
all: convert more code to use net/netip directly
perl -i -npe 's,netaddr.IPPrefixFrom,netip.PrefixFrom,' $(git grep -l -F netaddr.)
perl -i -npe 's,netaddr.IPPortFrom,netip.AddrPortFrom,' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPrefix,netip.Prefix,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPort,netip.AddrPort,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IP\b,netip.Addr,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPv6Raw\b,netip.AddrFrom16,g' $(git grep -l -F netaddr. )
goimports -w .
Then delete some stuff from the net/netaddr shim package which is no
longer neeed.
Updates #5162
Change-Id: Ia7a86893fe21c7e3ee1ec823e8aba288d4566cd8
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-07-26 04:14:09 +00:00
|
|
|
AllowedIPs: []netip.Prefix{
|
|
|
|
netip.PrefixFrom(netaddr.IPv4(100, 100, 99, 1), 32),
|
2021-06-22 20:13:59 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
routerCfg := &router.Config{}
|
2023-08-18 00:29:15 +00:00
|
|
|
if err := ue.Reconfig(cfg, routerCfg, &dns.Config{}); err != nil {
|
2021-06-22 20:13:59 +00:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if got := ue.magicConn.LocalPort(); got != startingPort {
|
|
|
|
t.Errorf("no debug setting changed local port to %d from %d", got, startingPort)
|
|
|
|
}
|
2023-08-18 00:29:15 +00:00
|
|
|
|
|
|
|
randomizeClientPort = func() bool { return true }
|
|
|
|
if err := ue.Reconfig(cfg, routerCfg, &dns.Config{}); err != nil {
|
2021-06-22 20:13:59 +00:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if got := ue.magicConn.LocalPort(); got == startingPort {
|
|
|
|
t.Errorf("debug setting did not change local port from %d", startingPort)
|
|
|
|
}
|
|
|
|
|
|
|
|
lastPort := ue.magicConn.LocalPort()
|
2023-08-18 00:29:15 +00:00
|
|
|
randomizeClientPort = func() bool { return false }
|
|
|
|
if err := ue.Reconfig(cfg, routerCfg, &dns.Config{}); err != nil {
|
2021-06-22 20:13:59 +00:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if startingPort == defaultPort {
|
|
|
|
// Only try this if we managed to bind defaultPort the first time.
|
|
|
|
// Otherwise, assume someone else on the computer is using defaultPort
|
|
|
|
// and so Reconfig would have caused magicSockt to bind some other port.
|
|
|
|
if got := ue.magicConn.LocalPort(); got != defaultPort {
|
|
|
|
t.Errorf("debug setting did not change local port from %d to %d", startingPort, defaultPort)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if got := ue.magicConn.LocalPort(); got == lastPort {
|
|
|
|
t.Errorf("Reconfig did not change local port from %d", lastPort)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-02 01:21:48 +00:00
|
|
|
func nkFromHex(hex string) key.NodePublic {
|
2020-10-13 19:04:52 +00:00
|
|
|
if len(hex) != 64 {
|
|
|
|
panic(fmt.Sprintf("%q is len %d; want 64", hex, len(hex)))
|
|
|
|
}
|
2021-10-29 21:57:32 +00:00
|
|
|
k, err := key.ParseNodePublicUntyped(mem.S(hex[:64]))
|
2020-10-13 19:04:52 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(fmt.Sprintf("%q is not hex: %v", hex, err))
|
|
|
|
}
|
2021-11-02 01:21:48 +00:00
|
|
|
return k
|
2020-10-13 19:04:52 +00:00
|
|
|
}
|
2021-03-28 05:40:38 +00:00
|
|
|
|
|
|
|
// an experiment to see if genLocalAddrFunc was worth it. As of Go
|
|
|
|
// 1.16, it still very much is. (30-40x faster)
|
|
|
|
func BenchmarkGenLocalAddrFunc(b *testing.B) {
|
2022-07-26 03:55:44 +00:00
|
|
|
la1 := netip.MustParseAddr("1.2.3.4")
|
|
|
|
la2 := netip.MustParseAddr("::4")
|
|
|
|
lanot := netip.MustParseAddr("5.5.5.5")
|
2021-03-28 05:40:38 +00:00
|
|
|
var x bool
|
|
|
|
b.Run("map1", func(b *testing.B) {
|
2021-08-31 03:43:18 +00:00
|
|
|
b.ReportAllocs()
|
|
|
|
b.ResetTimer()
|
all: convert more code to use net/netip directly
perl -i -npe 's,netaddr.IPPrefixFrom,netip.PrefixFrom,' $(git grep -l -F netaddr.)
perl -i -npe 's,netaddr.IPPortFrom,netip.AddrPortFrom,' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPrefix,netip.Prefix,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPort,netip.AddrPort,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IP\b,netip.Addr,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPv6Raw\b,netip.AddrFrom16,g' $(git grep -l -F netaddr. )
goimports -w .
Then delete some stuff from the net/netaddr shim package which is no
longer neeed.
Updates #5162
Change-Id: Ia7a86893fe21c7e3ee1ec823e8aba288d4566cd8
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-07-26 04:14:09 +00:00
|
|
|
m := map[netip.Addr]bool{
|
2021-03-28 05:40:38 +00:00
|
|
|
la1: true,
|
|
|
|
}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
x = m[la1]
|
|
|
|
x = m[lanot]
|
|
|
|
}
|
|
|
|
})
|
|
|
|
b.Run("map2", func(b *testing.B) {
|
2021-08-31 03:43:18 +00:00
|
|
|
b.ReportAllocs()
|
|
|
|
b.ResetTimer()
|
all: convert more code to use net/netip directly
perl -i -npe 's,netaddr.IPPrefixFrom,netip.PrefixFrom,' $(git grep -l -F netaddr.)
perl -i -npe 's,netaddr.IPPortFrom,netip.AddrPortFrom,' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPrefix,netip.Prefix,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPort,netip.AddrPort,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IP\b,netip.Addr,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPv6Raw\b,netip.AddrFrom16,g' $(git grep -l -F netaddr. )
goimports -w .
Then delete some stuff from the net/netaddr shim package which is no
longer neeed.
Updates #5162
Change-Id: Ia7a86893fe21c7e3ee1ec823e8aba288d4566cd8
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-07-26 04:14:09 +00:00
|
|
|
m := map[netip.Addr]bool{
|
2021-03-28 05:40:38 +00:00
|
|
|
la1: true,
|
|
|
|
la2: true,
|
|
|
|
}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
x = m[la1]
|
|
|
|
x = m[lanot]
|
|
|
|
}
|
|
|
|
})
|
|
|
|
b.Run("or1", func(b *testing.B) {
|
2021-08-31 03:43:18 +00:00
|
|
|
b.ReportAllocs()
|
|
|
|
b.ResetTimer()
|
all: convert more code to use net/netip directly
perl -i -npe 's,netaddr.IPPrefixFrom,netip.PrefixFrom,' $(git grep -l -F netaddr.)
perl -i -npe 's,netaddr.IPPortFrom,netip.AddrPortFrom,' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPrefix,netip.Prefix,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPort,netip.AddrPort,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IP\b,netip.Addr,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPv6Raw\b,netip.AddrFrom16,g' $(git grep -l -F netaddr. )
goimports -w .
Then delete some stuff from the net/netaddr shim package which is no
longer neeed.
Updates #5162
Change-Id: Ia7a86893fe21c7e3ee1ec823e8aba288d4566cd8
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-07-26 04:14:09 +00:00
|
|
|
f := func(t netip.Addr) bool {
|
2021-03-28 05:40:38 +00:00
|
|
|
return t == la1
|
|
|
|
}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
x = f(la1)
|
|
|
|
x = f(lanot)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
b.Run("or2", func(b *testing.B) {
|
2021-08-31 03:43:18 +00:00
|
|
|
b.ReportAllocs()
|
|
|
|
b.ResetTimer()
|
all: convert more code to use net/netip directly
perl -i -npe 's,netaddr.IPPrefixFrom,netip.PrefixFrom,' $(git grep -l -F netaddr.)
perl -i -npe 's,netaddr.IPPortFrom,netip.AddrPortFrom,' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPrefix,netip.Prefix,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPPort,netip.AddrPort,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IP\b,netip.Addr,g' $(git grep -l -F netaddr. )
perl -i -npe 's,netaddr.IPv6Raw\b,netip.AddrFrom16,g' $(git grep -l -F netaddr. )
goimports -w .
Then delete some stuff from the net/netaddr shim package which is no
longer neeed.
Updates #5162
Change-Id: Ia7a86893fe21c7e3ee1ec823e8aba288d4566cd8
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-07-26 04:14:09 +00:00
|
|
|
f := func(t netip.Addr) bool {
|
2021-03-28 05:40:38 +00:00
|
|
|
return t == la1 || t == la2
|
|
|
|
}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
x = f(la1)
|
|
|
|
x = f(lanot)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
b.Logf("x = %v", x)
|
|
|
|
}
|