diff --git a/.golangcilint.yml b/.golangcilint.yml index d585f3d638..32b7344f46 100644 --- a/.golangcilint.yml +++ b/.golangcilint.yml @@ -11,7 +11,7 @@ linters: - typecheck - unused # Extended linters. - - exportloopref + # - copyloopvar - rowserrcheck - sqlclosecheck - unconvert diff --git a/Makefile b/Makefile index 58044869c4..ef66e84792 100644 --- a/Makefile +++ b/Makefile @@ -127,7 +127,7 @@ GO_BUILD_TAGS_ARG=$(shell bazel info --ui_event_filters=-stdout,-stderr --announ lint-go-golangci: $(info ==> $@) @if [ -t 1 ]; then tty=true; else tty=false; fi; \ - tools/quiet docker run --tty=$$tty --rm -v golangci-lint-modcache:/go -v golangci-lint-buildcache:/root/.cache -v "${PWD}:/src" -w /src golangci/golangci-lint:v1.60.3 golangci-lint run --config=/src/.golangcilint.yml --timeout=3m $(GO_BUILD_TAGS_ARG) --skip-dirs doc ./... + tools/quiet docker run --tty=$$tty --rm -v golangci-lint-modcache:/go -v golangci-lint-buildcache:/root/.cache -v "${PWD}:/src" -w /src golangci/golangci-lint:v1.64.5 golangci-lint run --config=/src/.golangcilint.yml --timeout=3m $(GO_BUILD_TAGS_ARG) --skip-dirs doc ./... lint-go-semgrep: $(info ==> $@) diff --git a/WORKSPACE b/WORKSPACE index d001a454fa..94c518b1f5 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -59,10 +59,7 @@ load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_depe go_rules_dependencies() -go_register_toolchains( - nogo = "@//:nogo", - version = "1.22.7", -) +go_register_toolchains(version = "1.24.0") # Gazelle http_archive( diff --git a/acceptance/router_benchmark/brload/BUILD.bazel b/acceptance/router_benchmark/brload/BUILD.bazel index f42158f1f3..ee52df2c88 100644 --- a/acceptance/router_benchmark/brload/BUILD.bazel +++ b/acceptance/router_benchmark/brload/BUILD.bazel @@ -16,9 +16,9 @@ go_library( "//pkg/scrypto:go_default_library", "//pkg/slayers:go_default_library", "//private/keyconf:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//afpacket:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//afpacket:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_spf13_cobra//:go_default_library", "@org_golang_x_sys//unix:go_default_library", ], diff --git a/acceptance/router_benchmark/brload/main.go b/acceptance/router_benchmark/brload/main.go index 22eafa432e..eac01461dc 100644 --- a/acceptance/router_benchmark/brload/main.go +++ b/acceptance/router_benchmark/brload/main.go @@ -25,9 +25,9 @@ import ( "reflect" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/afpacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/afpacket" + "github.com/gopacket/gopacket/layers" "github.com/spf13/cobra" "github.com/scionproto/scion/acceptance/router_benchmark/cases" diff --git a/acceptance/router_benchmark/brload/mmsg.go b/acceptance/router_benchmark/brload/mmsg.go index 3a9f59f68a..b48ef15e2e 100644 --- a/acceptance/router_benchmark/brload/mmsg.go +++ b/acceptance/router_benchmark/brload/mmsg.go @@ -18,7 +18,7 @@ import ( "reflect" "unsafe" - "github.com/google/gopacket/afpacket" + "github.com/gopacket/gopacket/afpacket" "golang.org/x/sys/unix" ) diff --git a/acceptance/router_benchmark/cases/BUILD.bazel b/acceptance/router_benchmark/cases/BUILD.bazel index 08e299a31c..d2e2ebbab5 100644 --- a/acceptance/router_benchmark/cases/BUILD.bazel +++ b/acceptance/router_benchmark/cases/BUILD.bazel @@ -23,8 +23,8 @@ go_library( "//pkg/slayers:go_default_library", "//pkg/slayers/path:go_default_library", "//pkg/slayers/path/scion:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_mdlayher_arp//:go_default_library", "@com_github_mdlayher_ethernet//:go_default_library", ], diff --git a/acceptance/router_benchmark/cases/helpers.go b/acceptance/router_benchmark/cases/helpers.go index 4abd096cdd..845587cdae 100644 --- a/acceptance/router_benchmark/cases/helpers.go +++ b/acceptance/router_benchmark/cases/helpers.go @@ -15,7 +15,7 @@ package cases import ( - "github.com/google/gopacket" + "github.com/gopacket/gopacket" ) // We make the assumption os protocol sanity: the length and checksum fields are of fixed size diff --git a/acceptance/router_benchmark/cases/topo.go b/acceptance/router_benchmark/cases/topo.go index ef32c98209..c3a7c5f953 100644 --- a/acceptance/router_benchmark/cases/topo.go +++ b/acceptance/router_benchmark/cases/topo.go @@ -23,7 +23,7 @@ import ( "strings" "time" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/mdlayher/arp" "github.com/mdlayher/ethernet" diff --git a/acceptance/router_benchmark/test.py b/acceptance/router_benchmark/test.py index 65301fb20e..739f2b7ea3 100644 --- a/acceptance/router_benchmark/test.py +++ b/acceptance/router_benchmark/test.py @@ -42,9 +42,9 @@ # Those values are valid expectations only when running in the CI environment. TEST_CASES = { "in": 700000, - "out": 730000, + "out": 723000, "in_transit": 700000, - "out_transit": 720000, + "out_transit": 716000, "br_transit": 720000, } diff --git a/control/beacon/BUILD.bazel b/control/beacon/BUILD.bazel index 2029d2b1b9..4a8d3c0e15 100644 --- a/control/beacon/BUILD.bazel +++ b/control/beacon/BUILD.bazel @@ -15,7 +15,6 @@ go_library( deps = [ "//pkg/addr:go_default_library", "//pkg/log:go_default_library", - "//pkg/private/common:go_default_library", "//pkg/private/ptr:go_default_library", "//pkg/private/serrors:go_default_library", "//pkg/proto/control_plane:go_default_library", diff --git a/control/beacon/db.go b/control/beacon/db.go index f9b8105144..6d85fb4acc 100644 --- a/control/beacon/db.go +++ b/control/beacon/db.go @@ -22,19 +22,10 @@ import ( "google.golang.org/protobuf/proto" "github.com/scionproto/scion/pkg/addr" - "github.com/scionproto/scion/pkg/private/common" cppb "github.com/scionproto/scion/pkg/proto/control_plane" seg "github.com/scionproto/scion/pkg/segment" ) -const ( - // ErrReadingRows is the error message in case we fail to read more from - // the database. - ErrReadingRows common.ErrMsg = "Failed to read rows" - // ErrParse is the error message in case the parsing a db entry fails. - ErrParse common.ErrMsg = "Failed to parse entry" -) - // InsertStats provides statistics about an insertion. type InsertStats struct { Inserted, Updated, Filtered int diff --git a/control/beaconing/extender_test.go b/control/beaconing/extender_test.go index 765712dbcf..ceb93de7ee 100644 --- a/control/beaconing/extender_test.go +++ b/control/beaconing/extender_test.go @@ -21,7 +21,7 @@ import ( "crypto/rand" "errors" "hash" - mrand "math/rand" + mrand "math/rand/v2" "testing" "time" diff --git a/control/beaconing/propagator_test.go b/control/beaconing/propagator_test.go index 83ddfc73f6..1bb359fb15 100644 --- a/control/beaconing/propagator_test.go +++ b/control/beaconing/propagator_test.go @@ -83,7 +83,7 @@ func TestPropagatorRunNonCore(t *testing.T) { } g := graph.NewDefaultGraph(mctrl) provider.EXPECT().BeaconsToPropagate(gomock.Any()).Times(1).DoAndReturn( - func(_ interface{}) ([]beacon.Beacon, error) { + func(_ any) ([]beacon.Beacon, error) { res := make([]beacon.Beacon, 0, len(beacons)) for _, desc := range beacons { res = append(res, testBeacon(g, desc)) @@ -157,7 +157,7 @@ func TestPropagatorRunCore(t *testing.T) { } g := graph.NewDefaultGraph(mctrl) provider.EXPECT().BeaconsToPropagate(gomock.Any()).Times(2).DoAndReturn( - func(_ interface{}) ([]beacon.Beacon, error) { + func(_ any) ([]beacon.Beacon, error) { res := make([]beacon.Beacon, 0, len(beacons)) for _, desc := range beacons { res = append(res, testBeacon(g, desc)) @@ -248,7 +248,7 @@ func TestPropagatorFastRecovery(t *testing.T) { // We call run 4 times in this test, since the interface to 1-ff00:0:120 // will never be beaconed on, because the beacons are filtered for loops. provider.EXPECT().BeaconsToPropagate(gomock.Any()).Times(4).DoAndReturn( - func(_ interface{}) ([]beacon.Beacon, error) { + func(_ any) ([]beacon.Beacon, error) { return []beacon.Beacon{testBeacon(g, beacons[0])}, nil }, ) diff --git a/control/beaconing/util.go b/control/beaconing/util.go index 8bcb02f10d..73d51fec2a 100644 --- a/control/beaconing/util.go +++ b/control/beaconing/util.go @@ -122,9 +122,9 @@ type silentLogger struct { log.Logger } -func (s silentLogger) Info(msg string, ctx ...interface{}) { +func (s silentLogger) Info(msg string, ctx ...any) { s.Logger.Debug(msg, ctx...) } -func (s silentLogger) Error(msg string, ctx ...interface{}) { +func (s silentLogger) Error(msg string, ctx ...any) { s.Logger.Debug(msg, ctx...) } diff --git a/control/beaconing/writer_test.go b/control/beaconing/writer_test.go index 5307ae857b..aa3edae88a 100644 --- a/control/beaconing/writer_test.go +++ b/control/beaconing/writer_test.go @@ -119,7 +119,7 @@ func TestRegistrarRun(t *testing.T) { g := graph.NewDefaultGraph(mctrl) segProvider.EXPECT().SegmentsToRegister(gomock.Any(), test.segType).DoAndReturn( - func(_, _ interface{}) ([]beacon.Beacon, error) { + func(_, _ any) ([]beacon.Beacon, error) { res := make([]beacon.Beacon, 0, len(test.beacons)) for _, desc := range test.beacons { res = append(res, testBeacon(g, desc)) @@ -210,7 +210,7 @@ func TestRegistrarRun(t *testing.T) { g := graph.NewDefaultGraph(mctrl) segProvider.EXPECT().SegmentsToRegister(gomock.Any(), test.segType).DoAndReturn( - func(_, _ interface{}) ([]beacon.Beacon, error) { + func(_, _ any) ([]beacon.Beacon, error) { res := make([]beacon.Beacon, len(test.beacons)) for _, desc := range test.beacons { res = append(res, testBeacon(g, desc)) @@ -313,7 +313,7 @@ func TestRegistrarRun(t *testing.T) { require.NoError(t, err) segProvider.EXPECT().SegmentsToRegister(gomock.Any(), seg.TypeDown).DoAndReturn( - func(_, _ interface{}) (<-chan beacon.Beacon, error) { + func(_, _ any) (<-chan beacon.Beacon, error) { res := make(chan beacon.Beacon, 1) b := testBeacon(g, []uint16{graph.If_120_X_111_B}) b.InIfID = 10 diff --git a/control/drkey/grpc/BUILD.bazel b/control/drkey/grpc/BUILD.bazel index 9eb9cdef72..48d1b534f7 100644 --- a/control/drkey/grpc/BUILD.bazel +++ b/control/drkey/grpc/BUILD.bazel @@ -19,7 +19,6 @@ go_library( "//pkg/private/serrors:go_default_library", "//pkg/proto/control_plane:go_default_library", "//pkg/proto/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "//pkg/snet:go_default_library", "@org_go4_netipx//:go_default_library", "@org_golang_google_grpc//credentials:go_default_library", diff --git a/control/drkey/grpc/protobuf.go b/control/drkey/grpc/protobuf.go index 848d72ed41..cc9cfa5571 100644 --- a/control/drkey/grpc/protobuf.go +++ b/control/drkey/grpc/protobuf.go @@ -22,7 +22,6 @@ import ( "github.com/scionproto/scion/pkg/private/serrors" cppb "github.com/scionproto/scion/pkg/proto/control_plane" dkpb "github.com/scionproto/scion/pkg/proto/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" ) func secretRequestToMeta(req *cppb.DRKeySecretValueRequest) (drkey.SecretValueMeta, error) { @@ -65,10 +64,8 @@ func getLevel1KeyFromReply( return drkey.Level1Key{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.Level1Key{ SrcIA: meta.SrcIA, diff --git a/control/segreq/fetcher.go b/control/segreq/fetcher.go index c909557231..c2859e15c2 100644 --- a/control/segreq/fetcher.go +++ b/control/segreq/fetcher.go @@ -17,7 +17,7 @@ package segreq import ( "context" "fmt" - "math/rand" + "math/rand/v2" "net" "time" @@ -196,7 +196,7 @@ func (p *dstProvider) Dst(ctx context.Context, req segfetcher.Request) (net.Addr if len(paths) == 0 { return nil, segfetcher.ErrNotReachable } - path = paths[rand.Intn(len(paths))] + path = paths[rand.IntN(len(paths))] default: panic(fmt.Errorf("Unsupported segment type for request forwarding. "+ "Up segment should have been resolved locally. SegType: %s", req.SegType)) diff --git a/control/segreq/helpers.go b/control/segreq/helpers.go index fad893c0f2..7692e144c8 100644 --- a/control/segreq/helpers.go +++ b/control/segreq/helpers.go @@ -16,7 +16,7 @@ package segreq import ( "context" - "math/rand" + "math/rand/v2" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/serrors" @@ -71,7 +71,7 @@ func (s *SegSelector) SelectSeg(ctx context.Context, if len(segs) < 1 { return nil, serrors.New("no segments found") } - seg := segs[rand.Intn(len(segs))] + seg := segs[rand.IntN(len(segs))] svcaddr, err := s.Pather.GetPath(addr.SvcCS, seg) // odd interface, builds address not path. Use GetPath to convert to snet.Path diff --git a/control/trust/grpc/BUILD.bazel b/control/trust/grpc/BUILD.bazel index ef921c4c39..4c958a57e7 100644 --- a/control/trust/grpc/BUILD.bazel +++ b/control/trust/grpc/BUILD.bazel @@ -36,8 +36,8 @@ go_test( "//pkg/addr:go_default_library", "//pkg/proto/control_plane:go_default_library", "//pkg/scrypto/cppki:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) diff --git a/control/trust/grpc/proto_test.go b/control/trust/grpc/proto_test.go index d5e01bcde5..f176b43f48 100644 --- a/control/trust/grpc/proto_test.go +++ b/control/trust/grpc/proto_test.go @@ -19,9 +19,9 @@ import ( "testing" "time" - "github.com/golang/protobuf/ptypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/timestamppb" trustgrpc "github.com/scionproto/scion/control/trust/grpc" "github.com/scionproto/scion/pkg/addr" @@ -31,10 +31,8 @@ import ( func TestReqToChainQuery(t *testing.T) { now := time.Now().UTC() - validUntil, err := ptypes.TimestampProto(now) - require.NoError(t, err) - validSince, err := ptypes.TimestampProto(now.Add(-time.Hour)) - require.NoError(t, err) + validUntil := timestamppb.New(now) + validSince := timestamppb.New(now.Add(-time.Hour)) req := &cppb.ChainsRequest{ IsdAs: uint64(addr.MustParseIA("1-ff00:0:110")), diff --git a/daemon/drkey/grpc/BUILD.bazel b/daemon/drkey/grpc/BUILD.bazel index c1fdb982c8..b0f787b23f 100644 --- a/daemon/drkey/grpc/BUILD.bazel +++ b/daemon/drkey/grpc/BUILD.bazel @@ -15,7 +15,6 @@ go_library( "//pkg/private/serrors:go_default_library", "//pkg/proto/control_plane:go_default_library", "//pkg/proto/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "//pkg/snet:go_default_library", "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], @@ -32,7 +31,7 @@ go_test( "//pkg/proto/control_plane:go_default_library", "//pkg/proto/control_plane/mock_control_plane:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_stretchr_testify//require:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) diff --git a/daemon/drkey/grpc/fetching_test.go b/daemon/drkey/grpc/fetching_test.go index c00971bccb..4dfd8537f3 100644 --- a/daemon/drkey/grpc/fetching_test.go +++ b/daemon/drkey/grpc/fetching_test.go @@ -20,8 +20,8 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/golang/protobuf/ptypes" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/timestamppb" sd_drkey "github.com/scionproto/scion/daemon/drkey" sd_grpc "github.com/scionproto/scion/daemon/drkey/grpc" @@ -38,10 +38,8 @@ func TestGetHostHost(t *testing.T) { defer ctrl.Finish() now := time.Now().UTC() - epochBegin, err := ptypes.TimestampProto(now) - require.NoError(t, err) - epochEnd, err := ptypes.TimestampProto(now.Add(24 * time.Hour)) - require.NoError(t, err) + epochBegin := timestamppb.New(now) + epochEnd := timestamppb.New(now.Add(24 * time.Hour)) resp := &cppb.DRKeyHostHostResponse{ Key: xtest.MustParseHexString("c584cad32613547c64823c756651b6f5"), @@ -65,6 +63,6 @@ func TestGetHostHost(t *testing.T) { } meta := drkey.HostHostMeta{} - _, err = fetcher.HostHostKey(context.Background(), meta) + _, err := fetcher.HostHostKey(context.Background(), meta) require.NoError(t, err) } diff --git a/daemon/drkey/grpc/protobuf.go b/daemon/drkey/grpc/protobuf.go index cb32f7ba44..3ca874578f 100644 --- a/daemon/drkey/grpc/protobuf.go +++ b/daemon/drkey/grpc/protobuf.go @@ -21,7 +21,6 @@ import ( "github.com/scionproto/scion/pkg/private/serrors" cppb "github.com/scionproto/scion/pkg/proto/control_plane" drkeypb "github.com/scionproto/scion/pkg/proto/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" ) func asHostMetaToProtoRequest(meta drkey.ASHostMeta) *cppb.DRKeyASHostRequest { @@ -48,10 +47,8 @@ func getASHostKeyFromReply( return drkey.ASHostKey{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.ASHostKey{ @@ -94,10 +91,8 @@ func getHostASKeyFromReply( return drkey.HostASKey{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.HostASKey{ @@ -140,10 +135,8 @@ func getHostHostKeyFromReply( return drkey.HostHostKey{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.HostHostKey{ diff --git a/daemon/internal/servers/BUILD.bazel b/daemon/internal/servers/BUILD.bazel index df44d0fd83..6463850f60 100644 --- a/daemon/internal/servers/BUILD.bazel +++ b/daemon/internal/servers/BUILD.bazel @@ -27,10 +27,10 @@ go_library( "//private/revcache:go_default_library", "//private/topology:go_default_library", "//private/trust:go_default_library", - "@com_github_golang_protobuf//ptypes/duration", - "@com_github_golang_protobuf//ptypes/timestamp", "@com_github_opentracing_opentracing_go//:go_default_library", + "@org_golang_google_protobuf//types/known/durationpb:go_default_library", "@org_golang_google_protobuf//types/known/emptypb:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", "@org_golang_x_sync//singleflight:go_default_library", ], ) diff --git a/daemon/internal/servers/grpc.go b/daemon/internal/servers/grpc.go index 1caf06581f..339edc77ac 100644 --- a/daemon/internal/servers/grpc.go +++ b/daemon/internal/servers/grpc.go @@ -20,11 +20,11 @@ import ( "net" "time" - durationpb "github.com/golang/protobuf/ptypes/duration" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" "github.com/opentracing/opentracing-go" "golang.org/x/sync/singleflight" + "google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/timestamppb" drkey_daemon "github.com/scionproto/scion/daemon/drkey" "github.com/scionproto/scion/daemon/fetcher" @@ -117,7 +117,7 @@ func (s *DaemonServer) fetchPaths( ) ([]snet.Path, error) { r, err, _ := group.Do(fmt.Sprintf("%s%s%t", src, dst, refresh), - func() (interface{}, error) { + func() (any, error) { return s.Fetcher.GetPaths(ctx, src, dst, refresh) }, ) diff --git a/demo/drkey/BUILD.bazel b/demo/drkey/BUILD.bazel index 1479aa40e1..ad508fb3a8 100644 --- a/demo/drkey/BUILD.bazel +++ b/demo/drkey/BUILD.bazel @@ -27,11 +27,11 @@ go_library( "//pkg/private/serrors:go_default_library", "//pkg/proto/control_plane:go_default_library", "//pkg/proto/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "//pkg/snet:go_default_library", "//private/app/flag:go_default_library", "@com_github_spf13_pflag//:go_default_library", "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//credentials/insecure:go_default_library", "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) diff --git a/demo/drkey/main.go b/demo/drkey/main.go index d70d5755e8..cd42b0dd87 100644 --- a/demo/drkey/main.go +++ b/demo/drkey/main.go @@ -23,6 +23,7 @@ import ( flag "github.com/spf13/pflag" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/protobuf/types/known/timestamppb" "github.com/scionproto/scion/pkg/addr" @@ -33,7 +34,6 @@ import ( "github.com/scionproto/scion/pkg/private/serrors" cppb "github.com/scionproto/scion/pkg/proto/control_plane" dkpb "github.com/scionproto/scion/pkg/proto/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/pkg/snet" env "github.com/scionproto/scion/private/app/flag" ) @@ -270,7 +270,9 @@ func (s Server) FetchSV( } // Contact CS directly for SV - conn, err := grpc.DialContext(ctx, cs[0], grpc.WithInsecure()) + conn, err := grpc.DialContext( + ctx, cs[0], grpc.WithTransportCredentials(insecure.NewCredentials()), + ) if err != nil { return drkey.SecretValue{}, serrors.Wrap("dialing control service", err) } @@ -305,10 +307,8 @@ func getSecretFromReply( return drkey.SecretValue{}, err } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.SecretValue{ ProtoId: proto, diff --git a/dispatcher/BUILD.bazel b/dispatcher/BUILD.bazel index 527c8bce4a..cbc727af85 100644 --- a/dispatcher/BUILD.bazel +++ b/dispatcher/BUILD.bazel @@ -13,7 +13,7 @@ go_library( "//pkg/slayers:go_default_library", "//pkg/slayers/path/epic:go_default_library", "//pkg/slayers/path/scion:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", "@org_golang_x_net//ipv4:go_default_library", "@org_golang_x_net//ipv6:go_default_library", ], diff --git a/dispatcher/dispatcher.go b/dispatcher/dispatcher.go index 776b3192c8..02e442d684 100644 --- a/dispatcher/dispatcher.go +++ b/dispatcher/dispatcher.go @@ -15,11 +15,12 @@ package dispatcher import ( + "errors" "fmt" "net" "net/netip" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "golang.org/x/net/ipv4" "golang.org/x/net/ipv6" @@ -32,7 +33,7 @@ import ( "github.com/scionproto/scion/pkg/slayers/path/scion" ) -const ErrUnsupportedL4 common.ErrMsg = "unsupported SCION L4 protocol" +var ErrUnsupportedL4 = errors.New("unsupported SCION L4 protocol") // Server is the main object allowing to forward SCION packets coming // from legacy BR to the final endhost application and to handle SCMP diff --git a/doc/command/scion-pki/scion-pki_certificate_renew.rst b/doc/command/scion-pki/scion-pki_certificate_renew.rst index 0159f8296a..a9c57ea899 100644 --- a/doc/command/scion-pki/scion-pki_certificate_renew.rst +++ b/doc/command/scion-pki/scion-pki_certificate_renew.rst @@ -35,7 +35,7 @@ issued the unverifiable certificate chain. The resulting certificate chain is written to the file system, either to or to \--out, if specified. -The fresh private key is is written to the file stystem, either to +The fresh private key is is written to the file system, either to or to \--out-key, if specified. Files are not allowed to be overwritten, by default. Either you have to specify @@ -122,7 +122,7 @@ Options --curve string The elliptic curve to use (P-256|P-384|P-521) (default "P-256") --expires-in string Remaining time threshold for renewal --features strings enable development features () - --force Force overwritting existing files + --force Force overwriting existing files -h, --help help for renew -i, --interactive interactive mode --isd-as isd-as The local ISD-AS to use. (default 0-0) diff --git a/doc/conf.py b/doc/conf.py index 62230146ea..124fe894f9 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -33,6 +33,7 @@ "sphinx_rtd_theme", "sphinx.ext.extlinks", "sphinxcontrib.openapi", + "sphinxcontrib.mermaid", ] copybutton_prompt_text = r"\w*\$ " # matches e.g. $ diff --git a/doc/data-plane.rst b/doc/data-plane.rst index e351c5ae8a..0084267270 100644 --- a/doc/data-plane.rst +++ b/doc/data-plane.rst @@ -15,4 +15,5 @@ Data Plane protocols/authenticator-option protocols/bfd protocols/assigned-protocol-numbers + protocols/stack diff --git a/doc/dev/build.rst b/doc/dev/build.rst index 1549c62d83..c79a98bf00 100644 --- a/doc/dev/build.rst +++ b/doc/dev/build.rst @@ -29,7 +29,7 @@ Prerequisites .. literalinclude:: /../WORKSPACE :start-at: go_register_toolchains( :end-at: ) - :emphasize-lines: 3 + :emphasize-lines: 1 Building with newer go versions *usually* works. diff --git a/doc/dev/contribute.rst b/doc/dev/contribute.rst index fd657229d5..8d8f73f056 100644 --- a/doc/dev/contribute.rst +++ b/doc/dev/contribute.rst @@ -45,6 +45,15 @@ No matter what language you want to contribute to, one of the first steps to tak up a development environment. See :ref:`setting-up-the-development-environment` for the needed steps. If you encounter issues, please visit our :ref:`Slack ` and ask for help. +.. _code-map: + +Souce code map +============== + +Because the code is mostly written in Go and hosted on a public repository, its inline documentation +is rendered automatically at ``__ and includes a helpful +index. + .. _finding-an-issue-to-contribute-to: Finding an issue to contribute to @@ -93,12 +102,13 @@ implementation projects. The current members of the TC Implementation are: -* Jean-Christophe Hugly (|span-github| `@jiceatscion `_, |span-slack| @Jean-Christophe Hugly) -* Dominik Roos (|span-github| `@oncilla `_, |span-slack| @roosd) +* Jean-Christophe Hugly (|span-github| `@jiceatscion `_, |span-slack| @jiceatscion) +* Dominik Roos (|span-github| `@oncilla `_, |span-slack| @Dominik Roos) * François Wirz (|span-github| `@FR4NK-W `_, |span-slack| @frank) * Lukas Vogel (|span-github| `@lukedirtwalker `_, |span-slack| @luke) * Marc Frei (|span-github| `@marcfrei `_, |span-slack| @marcfrei) -* Jordi Subirà (|span-github| `@JordiSubira `_, |span-slack| @jordisubira) +* Jordi Subirà (|span-github| `@JordiSubira `_, |span-slack| @Jordi Subirà-Nieto) +* Markus Legner (|span-github| `@mlegner `_, |span-slack| @Markus Legner) .. rubric:: Responsibilities and Tasks diff --git a/doc/dev/design/router-port-dispatch.rst b/doc/dev/design/router-port-dispatch.rst index 659c155732..07cf98e1f7 100644 --- a/doc/dev/design/router-port-dispatch.rst +++ b/doc/dev/design/router-port-dispatch.rst @@ -179,7 +179,7 @@ With these mechanisms, the update procedure for an individual AS is: The recommended initial port range for the transition is ``31000-32767``. This range is just below the range of ephemeral ports that is assigned by the old dispatcher (32768-65535), ensuring that UDP traffic from legacy end hosts will be unaffected by the port dispatching in the router. - On legacy hosts, SCMP echo and error requests currently use random IDs, and thus have a low chance (~2.5%) to pick an ID in the range that is port dispatched by the router. As a preparatory change, the range of IDs can reduced, so that there is no intersection. + On legacy hosts, SCMP echo and traceroute requests currently use random ports, and thus have a low chance (~2.5%) to pick a port in the range that is dispatched by the router. As a preparatory change, the range of ephemeral ports of the operating system can be reduced, so that there is no intersection. 2. Update devices, **in any order**, without requiring synchronisation: diff --git a/doc/dev/setup.rst b/doc/dev/setup.rst index db1aceea91..41b044d59e 100644 --- a/doc/dev/setup.rst +++ b/doc/dev/setup.rst @@ -9,6 +9,95 @@ Setting up the Development Environment docker and various other tools and scripts. See :doc:`build` for instructions focussing only on how to build the SCION executables. +macOS (Apple silicon) Prerequisites +----------------------------------- + +.. hint:: + + If you're not developing on a Mac, please skip this section and + go straight to :ref:`linux_prerequisites`. + +.. Warning:: + + Currently, ARM64 isn't an officially supported development platform, and you may + face unresolved issues, particularly when executing integration tests. + Running Lima in QEMU x86_64 emulation will work, but is too slow for practical use. + +To set up a development environment on a macOS 13 (or above) M-series Apple silicon macbook +you'll need to set up a Linux virtual machine. +We recommend you use `Lima `_ by following the instructions below. + +#. Install Lima VM: + + .. code-block:: bash + + brew install lima + +#. Create the shared workspace directory: + + .. code-block:: bash + + mkdir /Users/$USER/limavm + + .. hint:: + + Use this workspace directory to host the ``scion`` repository. + By default, Lima mounts your home directory in read-only mode (recommended) + but this will cause issues when using ``make``. + +#. Configure the ``default`` Lima VM: + + .. code-block:: bash + + limactl start + + If the above command opens an interactive prompt, select + ``Open an editor to review or modify the current configuration``, + otherwise manually edit ``~/.lima/default/lima.yaml``. + + Change the following fields in your ``default`` VM configs. + + .. code-block:: yaml + + vmType: "vz" + + .. code-block:: yaml + + arch: "aarch64" + + Add a shared read-write mount that will serve as the main workspace: + + .. code-block:: yaml + + - location: /Users/{{.User}}/limavm # macOS directory + writable: true # Writable for the VM + mountPoint: /home/{{.User}}/shared # Directory inside the VM + + Optionally, adjust ``cpus``, ``memory`` and ``disk`` as you see fit. + +#. Start the ``default`` VM: + + .. code-block:: bash + + limactl start default + +#. SSH into the VM: + + .. code-block:: bash + + lima + +#. Navigate to the workspace: + + .. code-block:: bash + + cd /home/$USER/shared + + Now you're ready to continue with :ref:`linux_prerequisites` to setup the Linux system running + within the Lima virtual machine. + +.. _linux_prerequisites: + Prerequisites ------------- @@ -87,6 +176,12 @@ Setup make test make test-integration + .. Warning:: + + Integration tests will fail to execute on ARM64 due to OpenWRT. + The current workaround is to remove the ``"integration"`` tag from + ``"openwrt_test"`` in ``dist/test/BUILD.bazel``. + #. (Optional) If you already have some code you wish to contribute upstream, you can also run the linters locally with: diff --git a/doc/fig/overview-topology.excalidraw.png b/doc/fig/overview-topology.excalidraw.png new file mode 100644 index 0000000000..edecbb5654 Binary files /dev/null and b/doc/fig/overview-topology.excalidraw.png differ diff --git a/doc/overview.rst b/doc/overview.rst index 5369826acc..7446e21665 100644 --- a/doc/overview.rst +++ b/doc/overview.rst @@ -98,6 +98,31 @@ There are three types of links between ASes in SCION: - A **peering link** also includes at least one non-core AS. The ASes may be in different ISDs. Peering links are only available for use by children (direct or indirect) of the two linked ASes. +Topology summary +^^^^^^^^^^^^^^^^ + +The following diagram provides a visual summary of the topology of a SCION network. + +.. figure:: fig/overview-topology.excalidraw.png + +Core links (in bright red) connect core ASes, thereby providing inter-ISD connectivity. Intra ISD +links (in green) connect ASes within an ISD. AS-internal networks (in blue) connect the various +hosts within an AS (including border routers). Peering links (in purple) provide restricted use +shortcuts between ISDs. + +This diagram attempts to illustrate the variety of valid configurations. For example, notice that: + +- There may be multiple core ASes per ISD. +- There may be connections between a non-core AS and multiple core-ASes. +- There may be multiple connections between any two ASes. +- There may be multiple border routers per AS. +- There may be any number of end-hosts (includng none) in an AS. +- Border routers need not be dedicated to one particular kind of links. +- Excludig core links, the ASes within an ISD form a directed acyclic graph (no other constraint). +- The core ASes themselves form an arbitrary graph. + +The dark red dashed arrows show examples of possible paths through the network. + Routing ^^^^^^^ @@ -123,7 +148,6 @@ The process of creating an end-to-end forwarding path consists of the following .. figure:: fig/overview-routing.excalidraw.png - .. seealso:: :doc:`control-plane` diff --git a/doc/protocols/fig/stack.excalidraw.png b/doc/protocols/fig/stack.excalidraw.png new file mode 100644 index 0000000000..b1eeba4ee4 Binary files /dev/null and b/doc/protocols/fig/stack.excalidraw.png differ diff --git a/doc/protocols/stack.rst b/doc/protocols/stack.rst new file mode 100644 index 0000000000..19278a9d7a --- /dev/null +++ b/doc/protocols/stack.rst @@ -0,0 +1,9 @@ +******************** +SCION Protocol Stack +******************** + +.. _stack: + +This document provides a visual summary of the SCION overall protocol stack. + +.. figure:: fig/stack.excalidraw.png diff --git a/doc/requirements.in b/doc/requirements.in index 2d5b3ab025..6b7e0cb62d 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -5,4 +5,5 @@ sphinx_design sphinx-autobuild sphinx-lint sphinx-rtd-theme -sphinxcontrib-openapi \ No newline at end of file +sphinxcontrib-openapi +sphinxcontrib-mermaid diff --git a/doc/requirements.txt b/doc/requirements.txt index 62a154e811..d156730bf6 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -310,11 +310,13 @@ pyyaml==6.0.1 \ --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f - # via sphinxcontrib-openapi + # via + # sphinxcontrib-mermaid + # sphinxcontrib-openapi recommonmark==0.7.1 \ --hash=sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f \ --hash=sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67 - # via -r requirements.in + # via -r doc/requirements.in referencing==0.34.0 \ --hash=sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844 \ --hash=sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4 @@ -539,7 +541,7 @@ sphinx==7.3.7 \ --hash=sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3 \ --hash=sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc # via - # -r requirements.in + # -r doc/requirements.in # recommonmark # sphinx-autobuild # sphinx-copybutton @@ -547,23 +549,24 @@ sphinx==7.3.7 \ # sphinx-rtd-theme # sphinxcontrib-httpdomain # sphinxcontrib-jquery + # sphinxcontrib-mermaid # sphinxcontrib-openapi sphinx-autobuild==2024.4.16 \ --hash=sha256:1c0ed37a1970eed197f9c5a66d65759e7c4e4cba7b5a5d77940752bf1a59f2c7 \ --hash=sha256:f2522779d30fcbf0253e09714f274ce8c608cb6ebcd67922b1c54de59faba702 - # via -r requirements.in + # via -r doc/requirements.in sphinx-copybutton==0.5.2 \ --hash=sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd \ --hash=sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e - # via -r requirements.in + # via -r doc/requirements.in sphinx-design==0.6.0 \ --hash=sha256:e9bd07eecec82eb07ff72cb50fc3624e186b04f5661270bc7b62db86c7546e95 \ --hash=sha256:ec8e3c5c59fed4049b3a5a2e209360feab31829346b5f6a0c7c342b894082192 - # via -r requirements.in + # via -r doc/requirements.in sphinx-lint==0.9.1 \ --hash=sha256:185cee19ff1129549c45e15a3b25404daeb47c54d15112dda589cedad82957aa \ --hash=sha256:df34271ab65ce43676cbd90726f4dea5cd200b43b01448b2aee8f06e609edcbb - # via -r requirements.in + # via -r doc/requirements.in sphinx-mdinclude==0.6.0 \ --hash=sha256:764b6aeee28002b9d02060758266761a2c724805594d264b19e6ceeaa3bad393 \ --hash=sha256:b1cb4dfa22ce17ca20e90e34d4349d8a97c5052709d9c4eed051cdabb615b20b @@ -571,7 +574,7 @@ sphinx-mdinclude==0.6.0 \ sphinx-rtd-theme==2.0.0 \ --hash=sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b \ --hash=sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586 - # via -r requirements.in + # via -r doc/requirements.in sphinxcontrib-applehelp==1.0.8 \ --hash=sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619 \ --hash=sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4 @@ -596,10 +599,14 @@ sphinxcontrib-jsmath==1.0.1 \ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 # via sphinx +sphinxcontrib-mermaid==1.0.0 \ + --hash=sha256:2e8ab67d3e1e2816663f9347d026a8dee4a858acdd4ad32dd1c808893db88146 \ + --hash=sha256:60b72710ea02087f212028feb09711225fbc2e343a10d34822fe787510e1caa3 + # via -r doc/requirements.in sphinxcontrib-openapi==0.8.4 \ --hash=sha256:50911c18d452d9390ee3a384ef8dc8bde6135f542ba55691f81e1fbc0b71014e \ --hash=sha256:df883808a5b5e4b4113ad697185c43a3f42df3dce70453af78ba7076907e9a20 - # via -r requirements.in + # via -r doc/requirements.in sphinxcontrib-qthelp==1.0.7 \ --hash=sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6 \ --hash=sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182 diff --git a/gateway/cmd/gateway/main.go b/gateway/cmd/gateway/main.go index b549ec4e06..1e2b111f7e 100644 --- a/gateway/cmd/gateway/main.go +++ b/gateway/cmd/gateway/main.go @@ -21,6 +21,7 @@ import ( "net/http" _ "net/http/pprof" "net/netip" + "time" "github.com/go-chi/chi/v5" "github.com/go-chi/cors" @@ -30,7 +31,7 @@ import ( "github.com/scionproto/scion/gateway/config" "github.com/scionproto/scion/gateway/dataplane" api "github.com/scionproto/scion/gateway/mgmtapi" - "github.com/scionproto/scion/pkg/daemon" + dpkg "github.com/scionproto/scion/pkg/daemon" "github.com/scionproto/scion/pkg/log" "github.com/scionproto/scion/pkg/private/serrors" "github.com/scionproto/scion/pkg/snet/addrutil" @@ -53,7 +54,10 @@ func main() { } func realMain(ctx context.Context) error { - daemonService := &daemon.Service{ + + const retryDelay = 2 + + daemonService := &dpkg.Service{ Address: globalCfg.Daemon.Address, } daemon, err := daemonService.Connect(ctx) @@ -63,15 +67,27 @@ func realMain(ctx context.Context) error { defer daemon.Close() localIA, err := daemon.LocalIA(ctx) if err != nil { - return serrors.Wrap("retrieving local ISD-AS", err) - } + // Maybe we were too early. Wait and retry the whole shebang. + log.Info("Retying daemon connection", "retryDelay", retryDelay) + time.Sleep(retryDelay * time.Second) + daemon.Close() + daemon, err = daemonService.Connect(ctx) + if err != nil { + return serrors.Wrap("connecting to daemon", err) + } + localIA, err = daemon.LocalIA(ctx) + if err != nil { + return serrors.Wrap("retrieving local ISD-AS", err) + } + log.Info("Connected to daemon") + } controlAddress, err := net.ResolveUDPAddr("udp", globalCfg.Gateway.CtrlAddr) if err != nil { return serrors.Wrap("parsing control address", err) } if len(controlAddress.IP) == 0 { - controlAddress.IP, err = addrutil.DefaultLocalIP(ctx, daemon) + controlAddress.IP, err = addrutil.DefaultLocalIP(ctx, dpkg.TopoQuerier{Connector: daemon}) if err != nil { return serrors.Wrap("determine default local IP", err) } diff --git a/gateway/control/BUILD.bazel b/gateway/control/BUILD.bazel index d574dcb612..1447b8923f 100644 --- a/gateway/control/BUILD.bazel +++ b/gateway/control/BUILD.bazel @@ -36,8 +36,8 @@ go_library( "//pkg/snet:go_default_library", "//private/path/pathpol:go_default_library", "//private/worker:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_olekukonko_tablewriter//:go_default_library", "@org_go4_netipx//:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", @@ -83,7 +83,7 @@ go_test( "//pkg/snet/path:go_default_library", "//private/path/pathpol:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", diff --git a/gateway/control/engine.go b/gateway/control/engine.go index b10c9e2b71..ff1a92307d 100644 --- a/gateway/control/engine.go +++ b/gateway/control/engine.go @@ -26,7 +26,7 @@ import ( "sync" "time" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/olekukonko/tablewriter" "github.com/scionproto/scion/gateway/pathhealth" diff --git a/gateway/control/enginecontroller_test.go b/gateway/control/enginecontroller_test.go index 443606c800..5d7c1f6c2f 100644 --- a/gateway/control/enginecontroller_test.go +++ b/gateway/control/enginecontroller_test.go @@ -20,7 +20,7 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "golang.org/x/sync/errgroup" diff --git a/gateway/control/mock_control/BUILD.bazel b/gateway/control/mock_control/BUILD.bazel index c8c5b7e16f..aed786a44a 100644 --- a/gateway/control/mock_control/BUILD.bazel +++ b/gateway/control/mock_control/BUILD.bazel @@ -46,7 +46,7 @@ go_library( "//pkg/addr:go_default_library", "//pkg/snet:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", ], ) diff --git a/gateway/control/mock_control/mock.go b/gateway/control/mock_control/mock.go index 5571eec10d..09fc2b14e3 100644 --- a/gateway/control/mock_control/mock.go +++ b/gateway/control/mock_control/mock.go @@ -11,8 +11,8 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - gopacket "github.com/google/gopacket" - layers "github.com/google/gopacket/layers" + gopacket "github.com/gopacket/gopacket" + layers "github.com/gopacket/gopacket/layers" control "github.com/scionproto/scion/gateway/control" pathhealth "github.com/scionproto/scion/gateway/pathhealth" policies "github.com/scionproto/scion/gateway/pathhealth/policies" diff --git a/gateway/control/publishingroutingtable.go b/gateway/control/publishingroutingtable.go index d56fcec737..4b47fba470 100644 --- a/gateway/control/publishingroutingtable.go +++ b/gateway/control/publishingroutingtable.go @@ -19,7 +19,7 @@ import ( "net" "sync" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" ) diff --git a/gateway/control/router.go b/gateway/control/router.go index aa18a084ca..f7bb8cc684 100644 --- a/gateway/control/router.go +++ b/gateway/control/router.go @@ -21,7 +21,7 @@ import ( "io" "sync" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/log" "github.com/scionproto/scion/pkg/metrics" diff --git a/gateway/control/sessionmonitor_test.go b/gateway/control/sessionmonitor_test.go index b986823b2d..67afe800c9 100644 --- a/gateway/control/sessionmonitor_test.go +++ b/gateway/control/sessionmonitor_test.go @@ -45,7 +45,7 @@ type pktMatcher struct { } // Matches returns whether x is a match. -func (m pktMatcher) Matches(x interface{}) bool { +func (m pktMatcher) Matches(x any) bool { other, ok := x.([]byte) if !ok { return false @@ -69,7 +69,7 @@ type udpAddrMatcher struct { } // Matches returns whether x is a match. -func (m udpAddrMatcher) Matches(x interface{}) bool { +func (m udpAddrMatcher) Matches(x any) bool { other, ok := x.(*snet.UDPAddr) if !ok { return false diff --git a/gateway/control/watcher_test.go b/gateway/control/watcher_test.go index e520cacc1a..acaa072605 100644 --- a/gateway/control/watcher_test.go +++ b/gateway/control/watcher_test.go @@ -49,14 +49,14 @@ func TestGatewayWatcherRun(t *testing.T) { fetcher.EXPECT().Close().AnyTimes().Return(nil) discoverer.EXPECT().Gateways(gomock.Any()).DoAndReturn( - func(interface{}) ([]control.Gateway, error) { + func(any) ([]control.Gateway, error) { discoveryCounts.Add(1) return []control.Gateway{gateway1, gateway2}, nil }, ) fetcher.EXPECT().Prefixes(gomock.Any(), gomock.Any()).AnyTimes().DoAndReturn( - func(_ interface{}, g *net.UDPAddr) ([]*net.IPNet, error) { + func(_ any, g *net.UDPAddr) ([]*net.IPNet, error) { fetcherCounts.With("gateway", g.String()).Add(1) return nil, serrors.New("error") }, @@ -105,7 +105,7 @@ func TestGatewayWatcherRun(t *testing.T) { // now let's reset and remove one gateway, this time we only return gateway1 discoverer.EXPECT().Gateways(gomock.Any()).DoAndReturn( - func(interface{}) ([]control.Gateway, error) { + func(any) ([]control.Gateway, error) { discoveryCounts.Add(1) return []control.Gateway{gateway1}, nil }, @@ -144,26 +144,26 @@ func TestPrefixWatcherRun(t *testing.T) { // called with the up to date list. first := []*net.IPNet{cidr(t, "127.0.0.0/24"), cidr(t, "127.0.1.0/24"), cidr(t, "::/64")} fetcher.EXPECT().Prefixes(gomock.Any(), gateway.Control).DoAndReturn( - func(_, _ interface{}) ([]*net.IPNet, error) { + func(_, _ any) ([]*net.IPNet, error) { fetcherCounts.Add(1) return first, nil }, ) consumer.EXPECT().Prefixes(gomock.Any(), gateway, first).Do( - func(_, _, _ interface{}) { + func(_, _, _ any) { consumerCounts.Add(1) }, ) afterwards := []*net.IPNet{cidr(t, "127.0.0.0/24"), cidr(t, "::/64")} fetcher.EXPECT().Prefixes(gomock.Any(), gateway.Control).AnyTimes().DoAndReturn( - func(_, _ interface{}) ([]*net.IPNet, error) { + func(_, _ any) ([]*net.IPNet, error) { fetcherCounts.Add(1) return afterwards, nil }, ) consumer.EXPECT().Prefixes(gomock.Any(), gateway, afterwards).AnyTimes().Do( - func(_, _, _ interface{}) { + func(_, _, _ any) { consumerCounts.Add(1) }, ) diff --git a/gateway/dataplane/BUILD.bazel b/gateway/dataplane/BUILD.bazel index b6a3136e69..c353ef7893 100644 --- a/gateway/dataplane/BUILD.bazel +++ b/gateway/dataplane/BUILD.bazel @@ -31,8 +31,8 @@ go_library( "//pkg/snet:go_default_library", "//pkg/snet/path:go_default_library", "//private/ringbuf:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", ], ) @@ -66,8 +66,8 @@ go_test( "//pkg/snet/path:go_default_library", "//private/ringbuf:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", "@org_uber_go_goleak//:go_default_library", diff --git a/gateway/dataplane/atomicroutingtable.go b/gateway/dataplane/atomicroutingtable.go index 5795c282ea..081dd64092 100644 --- a/gateway/dataplane/atomicroutingtable.go +++ b/gateway/dataplane/atomicroutingtable.go @@ -18,7 +18,7 @@ import ( "io" "sync" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/gateway/control" ) diff --git a/gateway/dataplane/atomicroutingtable_test.go b/gateway/dataplane/atomicroutingtable_test.go index e6f99b996f..d7060f0b4e 100644 --- a/gateway/dataplane/atomicroutingtable_test.go +++ b/gateway/dataplane/atomicroutingtable_test.go @@ -18,7 +18,7 @@ import ( "testing" "github.com/golang/mock/gomock" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/scionproto/scion/gateway/control/mock_control" diff --git a/gateway/dataplane/framebuf.go b/gateway/dataplane/framebuf.go index 547c164a3f..6c4808c20d 100644 --- a/gateway/dataplane/framebuf.go +++ b/gateway/dataplane/framebuf.go @@ -181,7 +181,7 @@ func (fb *frameBuf) String() string { } func initFreeFrames() { - freeFrames = ringbuf.New(freeFramesCap, func() interface{} { + freeFrames = ringbuf.New(freeFramesCap, func() any { return newFrameBuf() }, "ingress_free") } diff --git a/gateway/dataplane/ipforwarder.go b/gateway/dataplane/ipforwarder.go index f1f92fd518..4d61170d42 100644 --- a/gateway/dataplane/ipforwarder.go +++ b/gateway/dataplane/ipforwarder.go @@ -18,8 +18,8 @@ import ( "context" "io" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/gateway/control" "github.com/scionproto/scion/pkg/log" diff --git a/gateway/dataplane/ipforwarder_test.go b/gateway/dataplane/ipforwarder_test.go index d673f582f9..bc9dbda347 100644 --- a/gateway/dataplane/ipforwarder_test.go +++ b/gateway/dataplane/ipforwarder_test.go @@ -24,8 +24,8 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -259,7 +259,7 @@ type packetMatcher struct { packet gopacket.Packet } -func (pm *packetMatcher) Matches(x interface{}) bool { +func (pm *packetMatcher) Matches(x any) bool { packet := x.(gopacket.Packet) return bytes.Equal(packet.Data(), pm.packet.Data()) } diff --git a/gateway/dataplane/routingtable.go b/gateway/dataplane/routingtable.go index 769701972c..a79287ab11 100644 --- a/gateway/dataplane/routingtable.go +++ b/gateway/dataplane/routingtable.go @@ -19,8 +19,8 @@ import ( "io" "net" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/gateway/control" "github.com/scionproto/scion/gateway/pktcls" diff --git a/gateway/dataplane/routingtable_test.go b/gateway/dataplane/routingtable_test.go index 70bb480b32..025178fff7 100644 --- a/gateway/dataplane/routingtable_test.go +++ b/gateway/dataplane/routingtable_test.go @@ -20,8 +20,8 @@ import ( "strconv" "testing" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -33,7 +33,7 @@ import ( func TestRoutingTable(t *testing.T) { rt := &dataplane.RoutingTable{} - _, ok := interface{}(rt).(control.RoutingTable) + _, ok := any(rt).(control.RoutingTable) if ok != true { assert.Fail(t, "should implement the client interface") } diff --git a/gateway/dataplane/sender_test.go b/gateway/dataplane/sender_test.go index 4b77603ed3..06beeb2fff 100644 --- a/gateway/dataplane/sender_test.go +++ b/gateway/dataplane/sender_test.go @@ -20,8 +20,8 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/require" "go.uber.org/goleak" @@ -31,7 +31,7 @@ import ( func expectFrames(conn *mock_net.MockPacketConn) *gomock.Call { return conn.EXPECT().WriteTo(gomock.Any(), gomock.Any()).DoAndReturn( - func(f []byte, _ interface{}) (int, error) { + func(f []byte, _ any) (int, error) { // Slow down the sending to induce packet batching. time.Sleep(10 * time.Millisecond) return 0, nil diff --git a/gateway/dataplane/session.go b/gateway/dataplane/session.go index 1a321de97d..656c502029 100644 --- a/gateway/dataplane/session.go +++ b/gateway/dataplane/session.go @@ -23,8 +23,8 @@ import ( "strings" "sync" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/metrics" "github.com/scionproto/scion/pkg/snet" diff --git a/gateway/dataplane/session_test.go b/gateway/dataplane/session_test.go index e661e7584c..6e17e6987c 100644 --- a/gateway/dataplane/session_test.go +++ b/gateway/dataplane/session_test.go @@ -20,8 +20,8 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/goleak" @@ -128,7 +128,7 @@ func createSession(t *testing.T, ctrl *gomock.Controller, frameChan chan []byte) &snet.UDPAddr{Host: &net.UDPAddr{IP: net.IP{192, 168, 1, 1}}}, ).AnyTimes() conn.EXPECT().WriteTo(gomock.Any(), gomock.Any()).DoAndReturn( - func(f []byte, _ interface{}) (int, error) { + func(f []byte, _ any) (int, error) { frameChan <- f return 0, nil }).AnyTimes() diff --git a/gateway/pktcls/BUILD.bazel b/gateway/pktcls/BUILD.bazel index 9de0b647e9..6bc35847b3 100644 --- a/gateway/pktcls/BUILD.bazel +++ b/gateway/pktcls/BUILD.bazel @@ -20,8 +20,8 @@ go_library( "//pkg/private/common:go_default_library", "//pkg/private/serrors:go_default_library", "@com_github_antlr4_go_antlr_v4//:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", ], ) @@ -36,8 +36,8 @@ go_test( deps = [ ":go_default_library", "//pkg/private/xtest:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/gateway/pktcls/class.go b/gateway/pktcls/class.go index b0637c830e..72353e850f 100644 --- a/gateway/pktcls/class.go +++ b/gateway/pktcls/class.go @@ -17,7 +17,7 @@ package pktcls import ( "encoding/json" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" ) var ( @@ -78,11 +78,11 @@ func (cm *ClassMap) UnmarshalJSON(b []byte) error { return nil } -func (cm ClassMap) MarshalYAML() (interface{}, error) { +func (cm ClassMap) MarshalYAML() (any, error) { return (map[string]*Class)(cm), nil } -func (cm *ClassMap) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (cm *ClassMap) UnmarshalYAML(unmarshal func(any) error) error { err := unmarshal(cm) if err != nil { return err diff --git a/gateway/pktcls/cond.go b/gateway/pktcls/cond.go index 82ace8a978..164cc0e1b5 100644 --- a/gateway/pktcls/cond.go +++ b/gateway/pktcls/cond.go @@ -19,8 +19,8 @@ import ( "fmt" "strings" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" ) // Cond is used to decide which objects match a logical predicate. Types implementing Cond diff --git a/gateway/pktcls/cond_test.go b/gateway/pktcls/cond_test.go index d36092be33..89638e5e2c 100644 --- a/gateway/pktcls/cond_test.go +++ b/gateway/pktcls/cond_test.go @@ -19,8 +19,8 @@ import ( "net" "testing" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/scionproto/scion/gateway/pktcls" diff --git a/gateway/pktcls/error_listener.go b/gateway/pktcls/error_listener.go index 35b8138d98..048d6f93fa 100644 --- a/gateway/pktcls/error_listener.go +++ b/gateway/pktcls/error_listener.go @@ -28,7 +28,7 @@ type ErrorListener struct { errorType string } -func (l *ErrorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol interface{}, line, +func (l *ErrorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol any, line, column int, msg string, e antlr.RecognitionException) { l.msg = msg log.Debug(fmt.Sprintf("%s Error", l.errorType), "err", msg) diff --git a/gateway/pktcls/json.go b/gateway/pktcls/json.go index 15380061e9..3f06a3dbd8 100644 --- a/gateway/pktcls/json.go +++ b/gateway/pktcls/json.go @@ -57,7 +57,7 @@ const ( ) // generic container for marshaling custom data -type jsonContainer map[string]interface{} +type jsonContainer map[string]any func marshalInterface(t Typer) ([]byte, error) { return json.Marshal(jsonContainer{t.Type(): t}) diff --git a/gateway/pktcls/mock_pktcls/BUILD.bazel b/gateway/pktcls/mock_pktcls/BUILD.bazel index 1d141a32bc..c871140052 100644 --- a/gateway/pktcls/mock_pktcls/BUILD.bazel +++ b/gateway/pktcls/mock_pktcls/BUILD.bazel @@ -16,6 +16,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "@com_github_golang_mock//gomock:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", ], ) diff --git a/gateway/pktcls/mock_pktcls/mock.go b/gateway/pktcls/mock_pktcls/mock.go index 6f82291475..4bc6f463b6 100644 --- a/gateway/pktcls/mock_pktcls/mock.go +++ b/gateway/pktcls/mock_pktcls/mock.go @@ -8,7 +8,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - gopacket "github.com/google/gopacket" + gopacket "github.com/gopacket/gopacket" ) // MockCond is a mock of Cond interface. diff --git a/gateway/pktcls/parse.go b/gateway/pktcls/parse.go index bc1aa9cad3..43696f26d1 100644 --- a/gateway/pktcls/parse.go +++ b/gateway/pktcls/parse.go @@ -20,7 +20,7 @@ import ( "strings" "github.com/antlr4-go/antlr/v4" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/antlr/traffic_class" "github.com/scionproto/scion/pkg/private/serrors" diff --git a/gateway/pktcls/pred_ipv4.go b/gateway/pktcls/pred_ipv4.go index 24e145f013..038c18703c 100644 --- a/gateway/pktcls/pred_ipv4.go +++ b/gateway/pktcls/pred_ipv4.go @@ -20,7 +20,7 @@ import ( "fmt" "net" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/private/serrors" ) diff --git a/go.mod b/go.mod index 8d59f204b9..8cd40e627f 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/scionproto/scion -go 1.22.7 +go 1.24.0 require ( connectrpc.com/connect v1.16.2 @@ -14,9 +14,8 @@ require ( github.com/go-chi/chi/v5 v5.0.12 github.com/go-chi/cors v1.2.1 github.com/golang/mock v1.7.0-rc.1 - github.com/golang/protobuf v1.5.4 github.com/google/go-cmp v0.6.0 - github.com/google/gopacket v1.1.19 + github.com/gopacket/gopacket v1.3.1 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 @@ -35,7 +34,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.19.1 github.com/prometheus/procfs v0.14.0 - github.com/quic-go/quic-go v0.43.1 + github.com/quic-go/quic-go v0.49.0 github.com/sergi/go-diff v1.3.1 github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 github.com/spf13/cobra v1.8.0 @@ -47,14 +46,14 @@ require ( go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 go4.org/netipx v0.0.0-20231129151722-fdeea329fbba - golang.org/x/crypto v0.31.0 - golang.org/x/net v0.33.0 + golang.org/x/crypto v0.32.0 + golang.org/x/net v0.34.0 golang.org/x/sync v0.10.0 - golang.org/x/sys v0.28.0 - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d + golang.org/x/sys v0.29.0 + golang.org/x/tools v0.29.0 google.golang.org/grpc v1.63.2 google.golang.org/grpc/examples v0.0.0-20240321213419-eb5828bae753 - google.golang.org/protobuf v1.34.1 + google.golang.org/protobuf v1.36.1 gopkg.in/yaml.v2 v2.4.0 modernc.org/sqlite v1.29.9 zgo.at/zcache/v2 v2.1.0 @@ -76,7 +75,7 @@ require ( github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/pprof v0.0.0-20240509144519-723abb6459b7 // indirect + github.com/google/pprof v0.0.0-20250128161936-077ca0a936bf // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -98,7 +97,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/onsi/ginkgo/v2 v2.17.3 // indirect + github.com/onsi/ginkgo/v2 v2.22.2 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect @@ -115,10 +114,10 @@ require ( github.com/uber/jaeger-lib v2.4.1+incompatible // indirect github.com/vishvananda/netns v0.0.4 // indirect go.uber.org/atomic v1.11.0 // indirect - go.uber.org/mock v0.4.0 // indirect + go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/mod v0.17.0 // indirect + golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect + golang.org/x/mod v0.22.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240509183442-62759503f434 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index 29ba6756e6..43cab13a33 100644 --- a/go.sum +++ b/go.sum @@ -68,8 +68,8 @@ github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vz github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= @@ -102,12 +102,12 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/pprof v0.0.0-20240509144519-723abb6459b7 h1:velgFPYr1X9TDwLIfkV7fWqsFlf7TeP11M/7kPd/dVI= -github.com/google/pprof v0.0.0-20240509144519-723abb6459b7/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20250128161936-077ca0a936bf h1:BvBLUD2hkvLI3dJTJMiopAq8/wp43AAZKTP7qdpptbU= +github.com/google/pprof v0.0.0-20250128161936-077ca0a936bf/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopacket/gopacket v1.3.1 h1:ZppWyLrOJNZPe5XkdjLbtuTkfQoxQ0xyMJzQCqtqaPU= +github.com/gopacket/gopacket v1.3.1/go.mod h1:3I13qcqSpB2R9fFQg866OOgzylYkZxLTmkvcXhvf6qg= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= @@ -191,10 +191,10 @@ github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmt github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU= -github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= -github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE= -github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -219,8 +219,8 @@ github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+a github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= github.com/prometheus/procfs v0.14.0 h1:Lw4VdGGoKEZilJsayHf0B+9YgLGREba2C6xr+Fdfq6s= github.com/prometheus/procfs v0.14.0/go.mod h1:XL+Iwz8k8ZabyZfMFHPiilCniixqQarAy5Mu67pHlNQ= -github.com/quic-go/quic-go v0.43.1 h1:fLiMNfQVe9q2JvSsiXo4fXOEguXHGGl9+6gLp4RPeZQ= -github.com/quic-go/quic-go v0.43.1/go.mod h1:132kz4kL3F9vxhW3CtQJLDVwcFe5wdWeJXXijhsO57M= +github.com/quic-go/quic-go v0.49.0 h1:w5iJHXwHxs1QxyBv1EHKuC50GX5to8mJAxvtnttJp94= +github.com/quic-go/quic-go v0.49.0/go.mod h1:s2wDnmCdooUQBmQfpUSTCYBl1/D4FcqbULMMkASvR6s= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -291,8 +291,8 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= @@ -308,16 +308,16 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= +golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -325,19 +325,17 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -354,8 +352,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -390,8 +388,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -419,14 +417,13 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -451,8 +448,8 @@ google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/examples v0.0.0-20240321213419-eb5828bae753 h1:crPucDOfTtZF6lBfOiv4ex+5g+TFoNjyiSrSDJUpYPc= google.golang.org/grpc/examples v0.0.0-20240321213419-eb5828bae753/go.mod h1:fYxPglWChrD7bqbWtDwno019ra5SPuE1c3i+4YAvado= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/go_deps.bzl b/go_deps.bzl index bc7828680e..2b765204c7 100644 --- a/go_deps.bzl +++ b/go_deps.bzl @@ -157,24 +157,6 @@ def go_deps(): sum = "h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo=", version = "v0.9.0", ) - go_repository( - name = "com_github_chromedp_cdproto", - importpath = "github.com/chromedp/cdproto", - sum = "h1:aPflPkRFkVwbW6dmcVqfgwp1i+UWGFH6VgR1Jim5Ygc=", - version = "v0.0.0-20230802225258-3cf4e6d46a89", - ) - go_repository( - name = "com_github_chromedp_chromedp", - importpath = "github.com/chromedp/chromedp", - sum = "h1:dKtNz4kApb06KuSXoTQIyUC2TrA0fhGDwNZf3bcgfKw=", - version = "v0.9.2", - ) - go_repository( - name = "com_github_chromedp_sysutil", - importpath = "github.com/chromedp/sysutil", - sum = "h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=", - version = "v1.0.0", - ) go_repository( name = "com_github_chzyer_readline", importpath = "github.com/chzyer/readline", @@ -388,8 +370,8 @@ def go_deps(): go_repository( name = "com_github_go_logr_logr", importpath = "github.com/go-logr/logr", - sum = "h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=", - version = "v1.4.1", + sum = "h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=", + version = "v1.4.2", ) go_repository( name = "com_github_go_openapi_jsonpointer", @@ -445,24 +427,6 @@ def go_deps(): sum = "h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=", version = "v1.0.8", ) - go_repository( - name = "com_github_gobwas_httphead", - importpath = "github.com/gobwas/httphead", - sum = "h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=", - version = "v0.1.0", - ) - go_repository( - name = "com_github_gobwas_pool", - importpath = "github.com/gobwas/pool", - sum = "h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=", - version = "v0.2.1", - ) - go_repository( - name = "com_github_gobwas_ws", - importpath = "github.com/gobwas/ws", - sum = "h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=", - version = "v1.2.1", - ) go_repository( name = "com_github_goccy_go_json", importpath = "github.com/goccy/go-json", @@ -529,17 +493,11 @@ def go_deps(): sum = "h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=", version = "v1.1.0", ) - go_repository( - name = "com_github_google_gopacket", - importpath = "github.com/google/gopacket", - sum = "h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=", - version = "v1.1.19", - ) go_repository( name = "com_github_google_pprof", importpath = "github.com/google/pprof", - sum = "h1:velgFPYr1X9TDwLIfkV7fWqsFlf7TeP11M/7kPd/dVI=", - version = "v0.0.0-20240509144519-723abb6459b7", + sum = "h1:BvBLUD2hkvLI3dJTJMiopAq8/wp43AAZKTP7qdpptbU=", + version = "v0.0.0-20250128161936-077ca0a936bf", ) go_repository( name = "com_github_google_s2a_go", @@ -571,6 +529,12 @@ def go_deps(): sum = "h1:zC34cGQu69FG7qzJ3WiKW244WfhDC3xxYMeNOX2gtUQ=", version = "v0.0.0-20210719221736-1c9a4c676720", ) + go_repository( + name = "com_github_gopacket_gopacket", + importpath = "github.com/gopacket/gopacket", + sum = "h1:ZppWyLrOJNZPe5XkdjLbtuTkfQoxQ0xyMJzQCqtqaPU=", + version = "v1.3.1", + ) go_repository( name = "com_github_gorilla_css", importpath = "github.com/gorilla/css", @@ -1048,14 +1012,14 @@ def go_deps(): go_repository( name = "com_github_onsi_ginkgo_v2", importpath = "github.com/onsi/ginkgo/v2", - sum = "h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU=", - version = "v2.17.3", + sum = "h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=", + version = "v2.22.2", ) go_repository( name = "com_github_onsi_gomega", importpath = "github.com/onsi/gomega", - sum = "h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE=", - version = "v1.33.0", + sum = "h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=", + version = "v1.36.2", ) go_repository( name = "com_github_opentracing_opentracing_go", @@ -1126,14 +1090,14 @@ def go_deps(): go_repository( name = "com_github_quic_go_qpack", importpath = "github.com/quic-go/qpack", - sum = "h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=", - version = "v0.4.0", + sum = "h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=", + version = "v0.5.1", ) go_repository( name = "com_github_quic_go_quic_go", importpath = "github.com/quic-go/quic-go", - sum = "h1:fLiMNfQVe9q2JvSsiXo4fXOEguXHGGl9+6gLp4RPeZQ=", - version = "v0.43.1", + sum = "h1:w5iJHXwHxs1QxyBv1EHKuC50GX5to8mJAxvtnttJp94=", + version = "v0.49.0", ) go_repository( name = "com_github_ravenox_go_jsoncommentstrip", @@ -1548,8 +1512,8 @@ def go_deps(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=", - version = "v1.34.1", + sum = "h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=", + version = "v1.36.1", ) go_repository( name = "org_golang_x_arch", @@ -1560,14 +1524,14 @@ def go_deps(): go_repository( name = "org_golang_x_crypto", importpath = "golang.org/x/crypto", - sum = "h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=", - version = "v0.31.0", + sum = "h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=", + version = "v0.32.0", ) go_repository( name = "org_golang_x_exp", importpath = "golang.org/x/exp", - sum = "h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=", - version = "v0.0.0-20240506185415-9bf2ced13842", + sum = "h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=", + version = "v0.0.0-20250128182459-e0ece0dbea4c", ) go_repository( name = "org_golang_x_exp_typeparams", @@ -1596,14 +1560,14 @@ def go_deps(): go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=", - version = "v0.17.0", + sum = "h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=", + version = "v0.22.0", ) go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=", - version = "v0.33.0", + sum = "h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=", + version = "v0.34.0", ) go_repository( name = "org_golang_x_oauth2", @@ -1620,20 +1584,20 @@ def go_deps(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=", - version = "v0.28.0", + sum = "h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=", + version = "v0.29.0", ) go_repository( name = "org_golang_x_telemetry", importpath = "golang.org/x/telemetry", - sum = "h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY=", - version = "v0.0.0-20240228155512-f48c80bd79b2", + sum = "h1:zf5N6UOrA487eEFacMePxjXAJctxKmyjKUsjA11Uzuk=", + version = "v0.0.0-20240521205824-bda55230c457", ) go_repository( name = "org_golang_x_term", importpath = "golang.org/x/term", - sum = "h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=", - version = "v0.27.0", + sum = "h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=", + version = "v0.28.0", ) go_repository( name = "org_golang_x_text", @@ -1650,8 +1614,8 @@ def go_deps(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=", - version = "v0.21.1-0.20240508182429-e35e4ccd0d2d", + sum = "h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=", + version = "v0.29.0", ) go_repository( name = "org_golang_x_xerrors", @@ -1782,8 +1746,8 @@ def go_deps(): go_repository( name = "org_uber_go_mock", importpath = "go.uber.org/mock", - sum = "h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=", - version = "v0.4.0", + sum = "h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU=", + version = "v0.5.0", ) go_repository( name = "org_uber_go_multierr", diff --git a/licenses/data/com_github_google_gopacket/LICENSE b/licenses/data/com_github_gopacket_gopacket/LICENSE similarity index 100% rename from licenses/data/com_github_google_gopacket/LICENSE rename to licenses/data/com_github_gopacket_gopacket/LICENSE diff --git a/licenses/data/go_sdk/LICENSE b/licenses/data/go_sdk/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/LICENSE +++ b/licenses/data/go_sdk/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/github.com/google/pprof/third_party/d3flamegraph/D3_FLAME_GRAPH_LICENSE b/licenses/data/go_sdk/src/cmd/vendor/github.com/google/pprof/third_party/d3flamegraph/D3_FLAME_GRAPH_LICENSE deleted file mode 100644 index 8dada3edaf..0000000000 --- a/licenses/data/go_sdk/src/cmd/vendor/github.com/google/pprof/third_party/d3flamegraph/D3_FLAME_GRAPH_LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/data/go_sdk/src/cmd/vendor/github.com/google/pprof/third_party/d3flamegraph/D3_LICENSE b/licenses/data/go_sdk/src/cmd/vendor/github.com/google/pprof/third_party/d3flamegraph/D3_LICENSE deleted file mode 100644 index b0145150fd..0000000000 --- a/licenses/data/go_sdk/src/cmd/vendor/github.com/google/pprof/third_party/d3flamegraph/D3_LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2010-2021 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/arch/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/arch/LICENSE index d29b37261f..686d8a9191 100644 --- a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/arch/LICENSE +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/arch/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015 The Go Authors. All rights reserved. +Copyright 2015 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/build/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/build/LICENSE new file mode 100644 index 0000000000..2a7cf70da6 --- /dev/null +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/build/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/mod/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/mod/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/mod/LICENSE +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/mod/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sync/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sync/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sync/LICENSE +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sync/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sys/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sys/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sys/LICENSE +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/sys/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/telemetry/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/telemetry/LICENSE new file mode 100644 index 0000000000..2a7cf70da6 --- /dev/null +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/telemetry/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/term/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/term/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/term/LICENSE +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/term/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/text/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/text/LICENSE new file mode 100644 index 0000000000..2a7cf70da6 --- /dev/null +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/text/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/tools/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/tools/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/tools/LICENSE +++ b/licenses/data/go_sdk/src/cmd/vendor/golang.org/x/tools/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/cmd/vendor/rsc.io/markdown/LICENSE b/licenses/data/go_sdk/src/cmd/vendor/rsc.io/markdown/LICENSE new file mode 100644 index 0000000000..6a66aea5ea --- /dev/null +++ b/licenses/data/go_sdk/src/cmd/vendor/rsc.io/markdown/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/data/go_sdk/src/crypto/internal/boring/LICENSE b/licenses/data/go_sdk/src/crypto/internal/boring/LICENSE index 38990bdb77..05b0963f5e 100644 --- a/licenses/data/go_sdk/src/crypto/internal/boring/LICENSE +++ b/licenses/data/go_sdk/src/crypto/internal/boring/LICENSE @@ -6,7 +6,7 @@ When building with GOEXPERIMENT=boringcrypto, the following applies. The goboringcrypto_linux_amd64.syso object file is built from BoringSSL source code by build/build.sh and is covered by the BoringSSL license reproduced below and also at -https://boringssl.googlesource.com/boringssl/+/fips-20190808/LICENSE. +https://boringssl.googlesource.com/boringssl/+/fips-20220613/LICENSE. BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL licensing. Files that are completely new have a Google copyright and an ISC diff --git a/licenses/data/go_sdk/src/vendor/golang.org/x/crypto/LICENSE b/licenses/data/go_sdk/src/vendor/golang.org/x/crypto/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/vendor/golang.org/x/crypto/LICENSE +++ b/licenses/data/go_sdk/src/vendor/golang.org/x/crypto/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/vendor/golang.org/x/net/LICENSE b/licenses/data/go_sdk/src/vendor/golang.org/x/net/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/vendor/golang.org/x/net/LICENSE +++ b/licenses/data/go_sdk/src/vendor/golang.org/x/net/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/vendor/golang.org/x/sys/LICENSE b/licenses/data/go_sdk/src/vendor/golang.org/x/sys/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/vendor/golang.org/x/sys/LICENSE +++ b/licenses/data/go_sdk/src/vendor/golang.org/x/sys/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/go_sdk/src/vendor/golang.org/x/text/LICENSE b/licenses/data/go_sdk/src/vendor/golang.org/x/text/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/go_sdk/src/vendor/golang.org/x/text/LICENSE +++ b/licenses/data/go_sdk/src/vendor/golang.org/x/text/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/org_golang_x_exp/LICENSE b/licenses/data/org_golang_x_exp/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/org_golang_x_exp/LICENSE +++ b/licenses/data/org_golang_x_exp/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/licenses/data/org_golang_x_mod/LICENSE b/licenses/data/org_golang_x_mod/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/licenses/data/org_golang_x_mod/LICENSE +++ b/licenses/data/org_golang_x_mod/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/pkg/daemon/BUILD.bazel b/pkg/daemon/BUILD.bazel index 63b2e6655e..6d2c3e3ed3 100644 --- a/pkg/daemon/BUILD.bazel +++ b/pkg/daemon/BUILD.bazel @@ -23,7 +23,6 @@ go_library( "//pkg/private/serrors:go_default_library", "//pkg/proto/daemon:go_default_library", "//pkg/proto/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "//pkg/segment/iface:go_default_library", "//pkg/snet:go_default_library", "//pkg/snet/path:go_default_library", diff --git a/pkg/daemon/apitypes.go b/pkg/daemon/apitypes.go index 904a7fab4d..c3c66a005c 100644 --- a/pkg/daemon/apitypes.go +++ b/pkg/daemon/apitypes.go @@ -16,7 +16,7 @@ package daemon import ( "context" - "math/rand" + "math/rand/v2" "net" "github.com/scionproto/scion/pkg/addr" @@ -77,7 +77,7 @@ func (h TopoQuerier) UnderlayAnycast(ctx context.Context, svc addr.SVC) (*net.UD if !ok || len(entry) == 0 { return nil, serrors.New("no entry found", "svc", svc, "services", r) } - a, err := net.ResolveUDPAddr("udp", entry[rand.Intn(len(entry))]) + a, err := net.ResolveUDPAddr("udp", entry[rand.IntN(len(entry))]) if err != nil { return nil, err } diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go index a9ba3397ee..c6d41eda4b 100644 --- a/pkg/daemon/daemon.go +++ b/pkg/daemon/daemon.go @@ -72,7 +72,7 @@ type Connector interface { // Paths requests from the daemon a set of end to end paths between the source and destination. Paths(ctx context.Context, dst, src addr.IA, f PathReqFlags) ([]snet.Path, error) // ASInfo requests from the daemon information about AS ia, the zero IA can be - // use to detect the local IA. + // used to detect the local IA. ASInfo(ctx context.Context, ia addr.IA) (ASInfo, error) // SVCInfo requests from the daemon information about addresses and ports of // infrastructure services. Slice svcTypes contains a list of desired diff --git a/pkg/daemon/grpc.go b/pkg/daemon/grpc.go index 16bf2e4df1..9ecfe9f7b5 100644 --- a/pkg/daemon/grpc.go +++ b/pkg/daemon/grpc.go @@ -32,7 +32,6 @@ import ( "github.com/scionproto/scion/pkg/private/serrors" sdpb "github.com/scionproto/scion/pkg/proto/daemon" dkpb "github.com/scionproto/scion/pkg/proto/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/pkg/segment/iface" "github.com/scionproto/scion/pkg/snet" "github.com/scionproto/scion/pkg/snet/path" @@ -355,10 +354,8 @@ func getASHostKeyFromReply(rep *sdpb.DRKeyASHostResponse, return drkey.ASHostKey{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.ASHostKey{ @@ -399,10 +396,8 @@ func getHostASKeyFromReply(rep *sdpb.DRKeyHostASResponse, return drkey.HostASKey{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.HostASKey{ @@ -443,10 +438,8 @@ func getHostHostKeyFromReply(rep *sdpb.DRKeyHostHostResponse, return drkey.HostHostKey{}, serrors.Wrap("invalid EpochEnd from response", err) } epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: rep.EpochBegin.AsTime(), - NotAfter: rep.EpochEnd.AsTime(), - }, + NotBefore: rep.EpochBegin.AsTime(), + NotAfter: rep.EpochEnd.AsTime(), } returningKey := drkey.HostHostKey{ diff --git a/pkg/drkey/drkey.go b/pkg/drkey/drkey.go index 23811a88fe..73621c344d 100644 --- a/pkg/drkey/drkey.go +++ b/pkg/drkey/drkey.go @@ -36,17 +36,13 @@ const ( ) // Epoch represents a validity period. -type Epoch struct { - cppki.Validity -} +type Epoch = cppki.Validity // NewEpoch constructs an Epoch from its uint32 encoded begin and end parts. func NewEpoch(begin, end uint32) Epoch { return Epoch{ - cppki.Validity{ - NotBefore: util.SecsToTime(begin), - NotAfter: util.SecsToTime(end), - }, + NotBefore: util.SecsToTime(begin), + NotAfter: util.SecsToTime(end), } } diff --git a/pkg/experimental/hiddenpath/beaconwriter_test.go b/pkg/experimental/hiddenpath/beaconwriter_test.go index ce44d72fce..2425c4b1aa 100644 --- a/pkg/experimental/hiddenpath/beaconwriter_test.go +++ b/pkg/experimental/hiddenpath/beaconwriter_test.go @@ -299,7 +299,7 @@ type addrMatcher struct { udp *snet.UDPAddr } -func (m addrMatcher) Matches(other interface{}) bool { +func (m addrMatcher) Matches(other any) bool { if m.svc != nil { svc, ok := other.(*snet.SVCAddr) if !ok { diff --git a/pkg/experimental/hiddenpath/group.go b/pkg/experimental/hiddenpath/group.go index e013a47a54..2d20061729 100644 --- a/pkg/experimental/hiddenpath/group.go +++ b/pkg/experimental/hiddenpath/group.go @@ -152,7 +152,7 @@ func (g Groups) Validate() error { } // UnmarshalYAML implements the yaml unmarshaller for the Groups type. -func (g Groups) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (g Groups) UnmarshalYAML(unmarshal func(any) error) error { yg := ®istrationPolicyInfo{} if err := unmarshal(&yg); err != nil { return serrors.Wrap("unmarshaling YAML", err) @@ -171,7 +171,7 @@ func (g Groups) UnmarshalYAML(unmarshal func(interface{}) error) error { } // MarshalYAML implements yaml marshalling. -func (g Groups) MarshalYAML() (interface{}, error) { +func (g Groups) MarshalYAML() (any, error) { return ®istrationPolicyInfo{ Groups: marshalGroups(g), }, nil diff --git a/pkg/experimental/hiddenpath/grpc/BUILD.bazel b/pkg/experimental/hiddenpath/grpc/BUILD.bazel index 8c30cb583e..6354d05177 100644 --- a/pkg/experimental/hiddenpath/grpc/BUILD.bazel +++ b/pkg/experimental/hiddenpath/grpc/BUILD.bazel @@ -26,7 +26,6 @@ go_library( "//pkg/snet:go_default_library", "//private/segment/segfetcher:go_default_library", "//private/segment/verifier:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//peer:go_default_library", "@org_golang_google_grpc//status:go_default_library", diff --git a/pkg/experimental/hiddenpath/grpc/discovery.go b/pkg/experimental/hiddenpath/grpc/discovery.go index 2410756bbc..aac7ac8a73 100644 --- a/pkg/experimental/hiddenpath/grpc/discovery.go +++ b/pkg/experimental/hiddenpath/grpc/discovery.go @@ -20,7 +20,6 @@ import ( "github.com/scionproto/scion/pkg/experimental/hiddenpath" "github.com/scionproto/scion/pkg/grpc" - libgrpc "github.com/scionproto/scion/pkg/grpc" "github.com/scionproto/scion/pkg/private/serrors" dspb "github.com/scionproto/scion/pkg/proto/discovery" ) @@ -28,7 +27,7 @@ import ( // Discoverer can be used to discover remote hidden path instances. type Discoverer struct { // Dialer dials a new gRPC connection. - Dialer libgrpc.Dialer + Dialer grpc.Dialer } // Discover discovers hidden path services at the discovery service that is diff --git a/pkg/experimental/hiddenpath/grpc/requester.go b/pkg/experimental/hiddenpath/grpc/requester.go index e8d35f720d..28fa1bbaa3 100644 --- a/pkg/experimental/hiddenpath/grpc/requester.go +++ b/pkg/experimental/hiddenpath/grpc/requester.go @@ -18,8 +18,8 @@ import ( "context" "net" - "github.com/golang/protobuf/proto" "golang.org/x/sync/errgroup" + "google.golang.org/protobuf/proto" "github.com/scionproto/scion/pkg/experimental/hiddenpath" libgrpc "github.com/scionproto/scion/pkg/grpc" diff --git a/pkg/experimental/hiddenpath/registrationpolicy.go b/pkg/experimental/hiddenpath/registrationpolicy.go index d8d9a41d37..b9cac9b8d5 100644 --- a/pkg/experimental/hiddenpath/registrationpolicy.go +++ b/pkg/experimental/hiddenpath/registrationpolicy.go @@ -48,7 +48,7 @@ func (p RegistrationPolicy) Validate() error { } // MarshalYAML implements the yaml marshaller interface. -func (p RegistrationPolicy) MarshalYAML() (interface{}, error) { +func (p RegistrationPolicy) MarshalYAML() (any, error) { collectedGroups := make(Groups) policies := make(map[uint64][]string, len(p)) for ifID, ip := range p { @@ -68,7 +68,7 @@ func (p RegistrationPolicy) MarshalYAML() (interface{}, error) { } // UnmarshalYAML implements YAML unmarshaling for the registration policy type. -func (p RegistrationPolicy) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (p RegistrationPolicy) UnmarshalYAML(unmarshal func(any) error) error { rawPolicy := ®istrationPolicyInfo{} if err := unmarshal(&rawPolicy); err != nil { return serrors.Wrap("parsing yaml", err) diff --git a/pkg/grpc/BUILD.bazel b/pkg/grpc/BUILD.bazel index e82853d5ff..9649cf9881 100644 --- a/pkg/grpc/BUILD.bazel +++ b/pkg/grpc/BUILD.bazel @@ -22,6 +22,7 @@ go_library( "@com_github_uber_jaeger_client_go//:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//credentials:go_default_library", + "@org_golang_google_grpc//credentials/insecure:go_default_library", "@org_golang_google_grpc//resolver:go_default_library", "@org_golang_google_grpc//resolver/manual:go_default_library", ], diff --git a/pkg/grpc/dialer.go b/pkg/grpc/dialer.go index 509f61ce27..08f9f44c3a 100644 --- a/pkg/grpc/dialer.go +++ b/pkg/grpc/dialer.go @@ -21,6 +21,7 @@ import ( grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/resolver" "google.golang.org/grpc/resolver/manual" @@ -43,7 +44,7 @@ type SimpleDialer struct{} // Dial dials the address by converting it to a string. func (SimpleDialer) Dial(ctx context.Context, address net.Addr) (*grpc.ClientConn, error) { return grpc.DialContext(ctx, address.String(), - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock(), UnaryClientInterceptor(), StreamClientInterceptor(), @@ -106,7 +107,7 @@ func (t *TCPDialer) Dial(ctx context.Context, dst net.Addr) (*grpc.ClientConn, e r.InitialState(resolver.State{Addresses: targets}) return grpc.DialContext(ctx, r.Scheme()+":///"+v.SVC.BaseString(), grpc.WithDefaultServiceConfig(`{"loadBalancingConfig": [{"round_robin":{}}]}`), - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithResolvers(r), UnaryClientInterceptor(), StreamClientInterceptor(), @@ -114,7 +115,7 @@ func (t *TCPDialer) Dial(ctx context.Context, dst net.Addr) (*grpc.ClientConn, e } return grpc.DialContext(ctx, dst.String(), - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), UnaryClientInterceptor(), StreamClientInterceptor(), ) diff --git a/pkg/grpc/interceptor.go b/pkg/grpc/interceptor.go index 6fd6d8e7d6..3ab11d746f 100644 --- a/pkg/grpc/interceptor.go +++ b/pkg/grpc/interceptor.go @@ -31,7 +31,7 @@ func LogIDClientInterceptor() grpc.UnaryClientInterceptor { return func( ctx context.Context, method string, - req, resp interface{}, + req, resp any, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption, @@ -65,10 +65,10 @@ func LogIDClientStreamInterceptor() grpc.StreamClientInterceptor { func LogIDServerInterceptor() grpc.UnaryServerInterceptor { return func( ctx context.Context, - req interface{}, + req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, - ) (interface{}, error) { + ) (any, error) { logger := loggerFromSpan(opentracing.SpanFromContext(ctx)) logger.Debug("Serving RPC", "method", info.FullMethod) @@ -79,7 +79,7 @@ func LogIDServerInterceptor() grpc.UnaryServerInterceptor { func LogIDServerStreamInterceptor() grpc.StreamServerInterceptor { return func( - srv interface{}, + srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler, @@ -116,7 +116,7 @@ func openTracingInterceptorWithTarget() grpc.UnaryClientInterceptor { return func( ctx context.Context, method string, - req, reply interface{}, + req, reply any, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption, @@ -125,7 +125,7 @@ func openTracingInterceptorWithTarget() grpc.UnaryClientInterceptor { spanDecorator := func( span opentracing.Span, method string, - req, resp interface{}, + req, resp any, grpcError error, ) { if span != nil { diff --git a/pkg/log/context.go b/pkg/log/context.go index d7c0813c80..e05f37c237 100644 --- a/pkg/log/context.go +++ b/pkg/log/context.go @@ -57,7 +57,7 @@ func FromCtx(ctx context.Context) Logger { // WithLabels returns context with additional labels added to the logger. // For convenience it also returns the logger itself. -func WithLabels(ctx context.Context, labels ...interface{}) (context.Context, Logger) { +func WithLabels(ctx context.Context, labels ...any) (context.Context, Logger) { logger := FromCtx(ctx).New(labels...) ctx = CtxWith(ctx, logger) return ctx, logger diff --git a/pkg/log/debugid.go b/pkg/log/debugid.go index a0f4839517..bfa631aa7a 100644 --- a/pkg/log/debugid.go +++ b/pkg/log/debugid.go @@ -16,7 +16,7 @@ package log import ( "fmt" - "math/rand" + "math/rand/v2" ) // DebugID is used to correlate behavior in logs. A DebugID is allocated diff --git a/pkg/log/log.go b/pkg/log/log.go index 6044f152b1..8e75cd27d5 100644 --- a/pkg/log/log.go +++ b/pkg/log/log.go @@ -221,7 +221,7 @@ func (l httpLevel) ServeHTTP(w http.ResponseWriter, r *http.Request) { // SafeNewLogger creates a new logger as a child of l only if l is not nil. If l is nil, then // nil is returned. -func SafeNewLogger(l Logger, fields ...interface{}) Logger { +func SafeNewLogger(l Logger, fields ...any) Logger { if l != nil { return l.New(fields...) } @@ -229,7 +229,7 @@ func SafeNewLogger(l Logger, fields ...interface{}) Logger { } // SafeDebug logs to l only if l is not nil. -func SafeDebug(l Logger, msg string, fields ...interface{}) { +func SafeDebug(l Logger, msg string, fields ...any) { if l != nil { if ll, ok := l.(*logger); ok { ll.logger.Debug(msg, convertCtx(fields)...) @@ -240,7 +240,7 @@ func SafeDebug(l Logger, msg string, fields ...interface{}) { } // SafeInfo logs to l only if l is not nil. -func SafeInfo(l Logger, msg string, fields ...interface{}) { +func SafeInfo(l Logger, msg string, fields ...any) { if l != nil { if ll, ok := l.(*logger); ok { ll.logger.Info(msg, convertCtx(fields)...) @@ -251,7 +251,7 @@ func SafeInfo(l Logger, msg string, fields ...interface{}) { } // SafeError logs to l only if l is not nil. -func SafeError(l Logger, msg string, fields ...interface{}) { +func SafeError(l Logger, msg string, fields ...any) { if l != nil { if ll, ok := l.(*logger); ok { ll.logger.Error(msg, convertCtx(fields)...) diff --git a/pkg/log/span.go b/pkg/log/span.go index f20273e7e1..7edde504ad 100644 --- a/pkg/log/span.go +++ b/pkg/log/span.go @@ -25,19 +25,19 @@ type Span struct { } // Debug logs to the logger and span. -func (s Span) Debug(msg string, ctx ...interface{}) { +func (s Span) Debug(msg string, ctx ...any) { s.Logger.Debug(msg, ctx...) s.spanLog("debug", msg, ctx...) } // Info logs to the logger and span. -func (s Span) Info(msg string, ctx ...interface{}) { +func (s Span) Info(msg string, ctx ...any) { s.Logger.Info(msg, ctx...) s.spanLog("info", msg, ctx...) } // Error logs to the logger and span. -func (s Span) Error(msg string, ctx ...interface{}) { +func (s Span) Error(msg string, ctx ...any) { s.Logger.Error(msg, ctx...) s.spanLog("error", msg, ctx...) } @@ -47,16 +47,16 @@ func (s Span) Enabled(lvl Level) bool { } // New creates a new logger with the context attached. -func (s Span) New(ctx ...interface{}) Logger { +func (s Span) New(ctx ...any) Logger { return Span{ Logger: s.Logger.New(ctx...), Span: s.Span, } } -func (s Span) spanLog(lvl, msg string, ctx ...interface{}) { +func (s Span) spanLog(lvl, msg string, ctx ...any) { if s.Span == nil { return } - s.Span.LogKV(append([]interface{}{"level", lvl, "event", msg}, ctx...)...) + s.Span.LogKV(append([]any{"level", lvl, "event", msg}, ctx...)...) } diff --git a/pkg/log/testlog/log.go b/pkg/log/testlog/log.go index ccc5a365ae..8fc6b27a96 100644 --- a/pkg/log/testlog/log.go +++ b/pkg/log/testlog/log.go @@ -36,23 +36,23 @@ type logger struct { } // New creates a logger with the given context. -func New(ctx ...interface{}) log.Logger { +func New(ctx ...any) log.Logger { return &logger{logger: zap.L().With(convertCtx(ctx)...)} } -func (l *logger) New(ctx ...interface{}) log.Logger { +func (l *logger) New(ctx ...any) log.Logger { return &logger{logger: l.logger.With(convertCtx(ctx)...)} } -func (l *logger) Debug(msg string, ctx ...interface{}) { +func (l *logger) Debug(msg string, ctx ...any) { l.logger.Debug(msg, convertCtx(ctx)...) } -func (l *logger) Info(msg string, ctx ...interface{}) { +func (l *logger) Info(msg string, ctx ...any) { l.logger.Info(msg, convertCtx(ctx)...) } -func (l *logger) Error(msg string, ctx ...interface{}) { +func (l *logger) Error(msg string, ctx ...any) { l.logger.Error(msg, convertCtx(ctx)...) } @@ -60,7 +60,7 @@ func (l *logger) Enabled(lvl log.Level) bool { return l.logger.Core().Enabled(zapcore.Level(lvl)) } -func convertCtx(ctx []interface{}) []zap.Field { +func convertCtx(ctx []any) []zap.Field { fields := make([]zap.Field, 0, len(ctx)/2) for i := 0; i+1 < len(ctx); i += 2 { fields = append(fields, zap.Any(ctx[i].(string), ctx[i+1])) diff --git a/pkg/log/wrappers.go b/pkg/log/wrappers.go index 0104cf83dc..f18bcc9201 100644 --- a/pkg/log/wrappers.go +++ b/pkg/log/wrappers.go @@ -21,21 +21,21 @@ import ( ) // Debug logs at debug level. -func Debug(msg string, ctx ...interface{}) { +func Debug(msg string, ctx ...any) { if enabled(DebugLevel) { zap.L().Debug(msg, convertCtx(ctx)...) } } // Info logs at info level. -func Info(msg string, ctx ...interface{}) { +func Info(msg string, ctx ...any) { if enabled(InfoLevel) { zap.L().Info(msg, convertCtx(ctx)...) } } // Error logs at error level. -func Error(msg string, ctx ...interface{}) { +func Error(msg string, ctx ...any) { if enabled(ErrorLevel) { zap.L().Error(msg, convertCtx(ctx)...) } @@ -61,10 +61,10 @@ const ( // Logger describes the logger interface. type Logger interface { - New(ctx ...interface{}) Logger - Debug(msg string, ctx ...interface{}) - Info(msg string, ctx ...interface{}) - Error(msg string, ctx ...interface{}) + New(ctx ...any) Logger + Debug(msg string, ctx ...any) + Info(msg string, ctx ...any) + Error(msg string, ctx ...any) Enabled(lvl Level) bool } @@ -73,27 +73,27 @@ type logger struct { } // New creates a logger with the given context. -func New(ctx ...interface{}) Logger { +func New(ctx ...any) Logger { return &logger{logger: zap.L().With(convertCtx(ctx)...)} } -func (l *logger) New(ctx ...interface{}) Logger { +func (l *logger) New(ctx ...any) Logger { return &logger{logger: l.logger.With(convertCtx(ctx)...)} } -func (l *logger) Debug(msg string, ctx ...interface{}) { +func (l *logger) Debug(msg string, ctx ...any) { if l.Enabled(DebugLevel) { l.logger.Debug(msg, convertCtx(ctx)...) } } -func (l *logger) Info(msg string, ctx ...interface{}) { +func (l *logger) Info(msg string, ctx ...any) { if l.Enabled(InfoLevel) { l.logger.Info(msg, convertCtx(ctx)...) } } -func (l *logger) Error(msg string, ctx ...interface{}) { +func (l *logger) Error(msg string, ctx ...any) { if l.Enabled(ErrorLevel) { l.logger.Error(msg, convertCtx(ctx)...) } @@ -121,13 +121,13 @@ func Discard() { // To see how to use this, see the example. type DiscardLogger struct{} -func (d DiscardLogger) New(ctx ...interface{}) Logger { return d } -func (DiscardLogger) Debug(msg string, ctx ...interface{}) {} -func (DiscardLogger) Info(msg string, ctx ...interface{}) {} -func (DiscardLogger) Error(msg string, ctx ...interface{}) {} -func (DiscardLogger) Enabled(lvl Level) bool { return false } +func (d DiscardLogger) New(ctx ...any) Logger { return d } +func (DiscardLogger) Debug(msg string, ctx ...any) {} +func (DiscardLogger) Info(msg string, ctx ...any) {} +func (DiscardLogger) Error(msg string, ctx ...any) {} +func (DiscardLogger) Enabled(lvl Level) bool { return false } -func convertCtx(ctx []interface{}) []zap.Field { +func convertCtx(ctx []any) []zap.Field { fields := make([]zap.Field, 0, len(ctx)/2) for i := 0; i+1 < len(ctx); i += 2 { fields = append(fields, zap.Any(ctx[i].(string), ctx[i+1])) diff --git a/pkg/private/common/BUILD.bazel b/pkg/private/common/BUILD.bazel index 5f6307f772..165b423fb8 100644 --- a/pkg/private/common/BUILD.bazel +++ b/pkg/private/common/BUILD.bazel @@ -2,20 +2,16 @@ load("//tools/lint:go.bzl", "go_library", "go_test") go_library( name = "go_default_library", - srcs = [ - "defs.go", - "errors.go", - ], + srcs = ["defs.go"], importpath = "github.com/scionproto/scion/pkg/private/common", visibility = ["//visibility:public"], ) go_test( name = "go_default_test", - srcs = [ - "defs_test.go", - "errors_test.go", + srcs = ["defs_test.go"], + deps = [ + ":go_default_library", + "@com_github_stretchr_testify//assert:go_default_library", ], - embed = [":go_default_library"], - deps = ["@com_github_stretchr_testify//assert:go_default_library"], ) diff --git a/pkg/private/common/defs.go b/pkg/private/common/defs.go index 59bf1e5f1d..d8db0f01ad 100644 --- a/pkg/private/common/defs.go +++ b/pkg/private/common/defs.go @@ -28,7 +28,7 @@ const ( TimeFmtSecs = "2006-01-02 15:04:05-0700" ) -func TypeOf(v interface{}) string { +func TypeOf(v any) string { t := reflect.TypeOf(v) if t != nil { return t.String() diff --git a/pkg/private/common/defs_test.go b/pkg/private/common/defs_test.go index cd13c2fe65..bb78655055 100644 --- a/pkg/private/common/defs_test.go +++ b/pkg/private/common/defs_test.go @@ -24,7 +24,7 @@ import ( func TestTypeOf(t *testing.T) { type A struct{} - tests := map[string]interface{}{ + tests := map[string]any{ "nil": nil, "typed nil": (*A)(nil), "ptr": &A{}, diff --git a/pkg/private/common/errors.go b/pkg/private/common/errors.go deleted file mode 100644 index f932d0f24c..0000000000 --- a/pkg/private/common/errors.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2016 ETH Zurich -// Copyright 2019 ETH Zurich, Anapaya Systems -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -// Deprecated: ErrMsg is not useful. It mimics errors.New() but fails to return a singleton. Just -// use errors.New() if you need cheap sentinel errors. -type ErrMsg string - -func (e ErrMsg) Error() string { - return string(e) -} diff --git a/pkg/private/common/errors_test.go b/pkg/private/common/errors_test.go deleted file mode 100644 index 10e29f5380..0000000000 --- a/pkg/private/common/errors_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018 ETH Zurich -// Copyright 2019 ETH Zurich, Anapaya Systems -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestErrMsg(t *testing.T) { - errText := "test error string" - err := ErrMsg(errText) - assert.Equal(t, errText, err.Error()) -} diff --git a/pkg/private/prom/promtest/promtest.go b/pkg/private/prom/promtest/promtest.go index 81fa7cc6b8..4b7c58c886 100644 --- a/pkg/private/prom/promtest/promtest.go +++ b/pkg/private/prom/promtest/promtest.go @@ -27,7 +27,7 @@ import ( // CheckLabelsStruct checks that labels has a Values and Labels method. It also // checks that labels.Labels() returns the struct field names. -func CheckLabelsStruct(t *testing.T, xLabels interface{}) { +func CheckLabelsStruct(t *testing.T, xLabels any) { v, ok := xLabels.(prom.Labels) if !ok { assert.Fail(t, "should implement labels interface") diff --git a/pkg/private/serrors/errors.go b/pkg/private/serrors/errors.go index 663d20ed6b..abf6c8d5b1 100644 --- a/pkg/private/serrors/errors.go +++ b/pkg/private/serrors/errors.go @@ -37,7 +37,7 @@ import ( // ctxPair is one item of context info. type ctxPair struct { Key string - Value interface{} + Value any } // errorInfo is a base class for two implementations of error: basicError and joinedError. @@ -102,7 +102,7 @@ func IsTemporary(err error) bool { return errors.As(err, &t) && t.Temporary() } -func mkErrorInfo(cause error, addStack bool, errCtx ...interface{}) errorInfo { +func mkErrorInfo(cause error, addStack bool, errCtx ...any) errorInfo { np := len(errCtx) / 2 ctx := make([]ctxPair, np) for i := 0; i < np; i++ { @@ -191,7 +191,7 @@ func (e basicError) MarshalLogObject(enc zapcore.ObjectEncoder) error { // // Wrap may be useful to enrich sentinel errors if the main message needs to be different than // that supplied by the sentinel error. -func Wrap(msg string, cause error, errCtx ...interface{}) error { +func Wrap(msg string, cause error, errCtx ...any) error { return basicError{ errorInfo: mkErrorInfo(cause, true, errCtx...), msg: msg, @@ -200,7 +200,7 @@ func Wrap(msg string, cause error, errCtx ...interface{}) error { // WrapNoStack behaves like [Wrap], except that no stack dump is added, regardless of cause's // underlying type. -func WrapNoStack(msg string, cause error, errCtx ...interface{}) error { +func WrapNoStack(msg string, cause error, errCtx ...any) error { return basicError{ errorInfo: mkErrorInfo(cause, false, errCtx...), msg: msg, @@ -212,7 +212,7 @@ func WrapNoStack(msg string, cause error, errCtx ...interface{}) error { // Avoid using this in performance-critical code: it is the most expensive variant. If used to // construct other errors, such as with Join, the embedded stack trace and context serve no // purpose. Therefore, to make sentinel errors, errors.New() should be preferred. -func New(msg string, errCtx ...interface{}) error { +func New(msg string, errCtx ...any) error { return &basicError{ errorInfo: mkErrorInfo(nil, true, errCtx...), msg: msg, @@ -260,7 +260,7 @@ func (e joinedError) MarshalLogObject(enc zapcore.ObjectEncoder) error { // case the result is a sentinel error enriched with context. For such a purpose this is better than // [Wrap], since [Wrap] would retain any irrelevant context possibly attached to the sentinel error // and store a redundant message string. -func Join(err, cause error, errCtx ...interface{}) error { +func Join(err, cause error, errCtx ...any) error { if err == nil && cause == nil { // Pointless. Will not. Also, maintaining backward compatibility with // a previous Join function. @@ -274,7 +274,7 @@ func Join(err, cause error, errCtx ...interface{}) error { // JoinNoStack behaves like [Join] except that no stack dump is added regardless of cause's // underlying type. -func JoinNoStack(err, cause error, errCtx ...interface{}) error { +func JoinNoStack(err, cause error, errCtx ...any) error { if err == nil && cause == nil { // Pointless. Will not. return nil diff --git a/pkg/private/serrors/errors_spec.gobra b/pkg/private/serrors/errors_spec.gobra index fc11ab3b47..44c715b0a2 100644 --- a/pkg/private/serrors/errors_spec.gobra +++ b/pkg/private/serrors/errors_spec.gobra @@ -26,4 +26,4 @@ package serrors // Calls to this method are assumed to always terminate. ensures err != nil decreases _ -func New(msg string, errCtx ...interface{}) (err error) +func New(msg string, errCtx ...any) (err error) diff --git a/pkg/private/serrors/errors_test.go b/pkg/private/serrors/errors_test.go index 36d4647a57..d325ba6bff 100644 --- a/pkg/private/serrors/errors_test.go +++ b/pkg/private/serrors/errors_test.go @@ -255,7 +255,7 @@ func TestEncoding(t *testing.T) { logOut := sanitizeLog(b.Bytes()) // Parse the log output and marshal it again to sort it. // The zap encoder is not deterministic for nested maps. - var parsed map[string]interface{} + var parsed map[string]any require.NoError(t, json.Unmarshal(logOut, &parsed), string(logOut)) sorted, err := json.Marshal(parsed) require.NoError(t, err) diff --git a/pkg/private/xtest/graph/graph.go b/pkg/private/xtest/graph/graph.go index a80b87baa6..985aac6f1a 100644 --- a/pkg/private/xtest/graph/graph.go +++ b/pkg/private/xtest/graph/graph.go @@ -28,7 +28,7 @@ import ( "crypto/elliptic" crand "crypto/rand" "fmt" - "math/rand" + "math/rand/v2" "sort" "sync" "time" diff --git a/pkg/private/xtest/graphupdater/graph.go b/pkg/private/xtest/graphupdater/graph.go index 48c4f463da..d7c0b4ba8c 100644 --- a/pkg/private/xtest/graphupdater/graph.go +++ b/pkg/private/xtest/graphupdater/graph.go @@ -39,7 +39,7 @@ type iface struct { iface string } -func (i *iface) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (i *iface) UnmarshalYAML(unmarshal func(any) error) error { var s string if err := unmarshal(&s); err != nil { return err diff --git a/pkg/private/xtest/grpc.go b/pkg/private/xtest/grpc.go index 599ffc57fc..0b697997bb 100644 --- a/pkg/private/xtest/grpc.go +++ b/pkg/private/xtest/grpc.go @@ -89,9 +89,11 @@ func (s *GRPCService) Start(t *testing.T) { } func (s *GRPCService) Dial(ctx context.Context, addr net.Addr) (*grpc.ClientConn, error) { - transportSecurity := grpc.WithInsecure() + var transportSecurity grpc.DialOption if s.clientCredentials != nil { transportSecurity = grpc.WithTransportCredentials(s.clientCredentials) + } else { + transportSecurity = grpc.WithTransportCredentials(insecure.NewCredentials()) } return grpc.DialContext(ctx, addr.String(), grpc.WithContextDialer( diff --git a/pkg/private/xtest/helpers.go b/pkg/private/xtest/helpers.go index 6f4fb55732..f18b2ea6c3 100644 --- a/pkg/private/xtest/helpers.go +++ b/pkg/private/xtest/helpers.go @@ -108,20 +108,6 @@ func MustTempFileName(dir, prefix string) string { return name } -// MustTempDir creates a new temporary directory under dir with the specified -// prefix. If the function encounters an error it panics. The second return -// value is a clean-up function that can be called to recursively delete the -// entire directory. -func MustTempDir(dir, prefix string) (string, func()) { - name, err := os.MkdirTemp(dir, prefix) - if err != nil { - panic(err) - } - return name, func() { - os.RemoveAll(name) - } -} - // SanitizedName sanitizes the test name such that it can be used as a file name. func SanitizedName(t testing.TB) string { return strings.NewReplacer(" ", "_", "/", "_", "\\", "_", ":", "_").Replace(t.Name()) @@ -139,7 +125,7 @@ func CopyFile(t testing.TB, src, dst string) { // MustMarshalJSONToFile marshals v and writes the result to file // testdata/baseName. If the file exists, it is truncated; if it doesn't exist, // it is created. On errors, t.Fatal() is called. -func MustMarshalJSONToFile(t testing.TB, v interface{}, baseName string) { +func MustMarshalJSONToFile(t testing.TB, v any, baseName string) { t.Helper() enc, err := json.MarshalIndent(v, "", " ") diff --git a/pkg/private/xtest/matchers/matchers.go b/pkg/private/xtest/matchers/matchers.go index 995b235fe1..86de9abbd4 100644 --- a/pkg/private/xtest/matchers/matchers.go +++ b/pkg/private/xtest/matchers/matchers.go @@ -40,7 +40,7 @@ func IsSnetSVCAddrWithIA(ia addr.IA) gomock.Matcher { return &addrIAMatcher{ia: ia} } -func (m *addrIAMatcher) Matches(x interface{}) bool { +func (m *addrIAMatcher) Matches(x any) bool { sAddr, ok := x.(*snet.SVCAddr) if !ok { return false @@ -64,7 +64,7 @@ type QueryParams struct { // Matches returns whether x matches the defined query parameter ignoring the // order of the slices. -func (m *QueryParams) Matches(x interface{}) bool { +func (m *QueryParams) Matches(x any) bool { query, ok := x.(*query.Params) if !ok { return false @@ -108,7 +108,7 @@ type QueryHPGroupIDs struct { // Matches returns whether x matches the defined HPGroupIDs ignoring the // order of the slice elements. -func (m *QueryHPGroupIDs) Matches(x interface{}) bool { +func (m *QueryHPGroupIDs) Matches(x any) bool { ids, ok := x.([]uint64) if !ok { return false @@ -128,10 +128,10 @@ func (m *QueryHPGroupIDs) String() string { // value are ignored. Passing a target which is not a struct or a pointer to a // struct is invalid and will result in a matcher that matches nothing. type PartialStruct struct { - Target interface{} + Target any } -func (m PartialStruct) Matches(x interface{}) bool { +func (m PartialStruct) Matches(x any) bool { expect := reflect.ValueOf(m.Target) unpack := func(v reflect.Value) reflect.Value { return v } if expect.Kind() == reflect.Ptr { diff --git a/pkg/private/xtest/matchers/matchers_test.go b/pkg/private/xtest/matchers/matchers_test.go index 7f8f398856..dd0311ef85 100644 --- a/pkg/private/xtest/matchers/matchers_test.go +++ b/pkg/private/xtest/matchers/matchers_test.go @@ -38,7 +38,7 @@ type testPartial2 struct { func TestPartialStructMatches(t *testing.T) { testCases := map[string]struct { Matcher gomock.Matcher - Input interface{} + Input any ExpectMatch bool }{ "exact match": { diff --git a/pkg/private/xtest/mocking.go b/pkg/private/xtest/mocking.go index c5e89c1556..ca1465a501 100644 --- a/pkg/private/xtest/mocking.go +++ b/pkg/private/xtest/mocking.go @@ -30,6 +30,6 @@ type PanickingReporter struct { *testing.T } -func (reporter *PanickingReporter) Fatalf(format string, args ...interface{}) { +func (reporter *PanickingReporter) Fatalf(format string, args ...any) { panic(fmt.Sprintf(format, args...)) } diff --git a/pkg/scrypto/BUILD.bazel b/pkg/scrypto/BUILD.bazel index df3e1a58b4..1faaf71c12 100644 --- a/pkg/scrypto/BUILD.bazel +++ b/pkg/scrypto/BUILD.bazel @@ -5,13 +5,11 @@ go_library( srcs = [ "mac.go", "pem.go", - "rand.go", "version.go", ], importpath = "github.com/scionproto/scion/pkg/scrypto", visibility = ["//visibility:public"], deps = [ - "//pkg/private/common:go_default_library", "//pkg/private/serrors:go_default_library", "@com_github_dchest_cmac//:go_default_library", "@org_golang_x_crypto//pbkdf2:go_default_library", diff --git a/pkg/scrypto/cms/protocol/protocol.go b/pkg/scrypto/cms/protocol/protocol.go index 863a791825..3c335019a2 100644 --- a/pkg/scrypto/cms/protocol/protocol.go +++ b/pkg/scrypto/cms/protocol/protocol.go @@ -209,7 +209,7 @@ type Attribute struct { } // NewAttribute creates a single-value Attribute. -func NewAttribute(typ asn1.ObjectIdentifier, val interface{}) (Attribute, error) { +func NewAttribute(typ asn1.ObjectIdentifier, val any) (Attribute, error) { der, err := asn1.Marshal(val) if err != nil { return Attribute{}, err diff --git a/pkg/scrypto/cppki/certs_test.go b/pkg/scrypto/cppki/certs_test.go index fd2d5bff10..b774e8bb24 100644 --- a/pkg/scrypto/cppki/certs_test.go +++ b/pkg/scrypto/cppki/certs_test.go @@ -34,9 +34,9 @@ import ( var updateNonDeterministic = xtest.UpdateNonDeterminsticGoldenFiles() -func updateCert(goldenCert string) ([]byte, error) { - dir, cleanF := xtest.MustTempDir("", "safedir") - defer cleanF() +func updateCert(t *testing.T, goldenCert string) ([]byte, error) { + t.Helper() + dir := t.TempDir() cmd := exec.Command("sh", "-c", "./testdata/update_certs.sh") cmd.Env = []string{ @@ -275,7 +275,7 @@ func TestValidateRoot(t *testing.T) { testF := cppki.ValidateRoot if *updateNonDeterministic { - out, err := updateCert(goldenCert) + out, err := updateCert(t, goldenCert) require.NoError(t, err, string(out)) t.Logf("git add ./testdata/%s", goldenCert) return @@ -338,7 +338,7 @@ func TestValidateCA(t *testing.T) { goldenCert := "cp-ca.crt" if *updateNonDeterministic { - out, err := updateCert(goldenCert) + out, err := updateCert(t, goldenCert) require.NoError(t, err, string(out)) t.Logf("git add ./testdata/%s", goldenCert) return @@ -386,7 +386,7 @@ func TestValidateAS(t *testing.T) { goldenCert := "cp-as.crt" if *updateNonDeterministic { - out, err := updateCert(goldenCert) + out, err := updateCert(t, goldenCert) require.NoError(t, err, string(out)) t.Logf("git add ./testdata/%s", goldenCert) return @@ -542,7 +542,7 @@ func TestValidateRegular(t *testing.T) { testF := cppki.ValidateRegular if *updateNonDeterministic { - out, err := updateCert(goldenCert) + out, err := updateCert(t, goldenCert) require.NoError(t, err, out) t.Logf("git add ./testdata/%s", goldenCert) return @@ -597,7 +597,7 @@ func TestValidateSensitive(t *testing.T) { testF := cppki.ValidateSensitive if *updateNonDeterministic { - out, err := updateCert(goldenCert) + out, err := updateCert(t, goldenCert) require.NoError(t, err, out) t.Logf("git add ./testdata/%s", goldenCert) return diff --git a/pkg/scrypto/cppki/signed_trc_test.go b/pkg/scrypto/cppki/signed_trc_test.go index 2a3d150135..2082f9366e 100644 --- a/pkg/scrypto/cppki/signed_trc_test.go +++ b/pkg/scrypto/cppki/signed_trc_test.go @@ -26,7 +26,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/pkg/scrypto/cms/oid" "github.com/scionproto/scion/pkg/scrypto/cms/protocol" "github.com/scionproto/scion/pkg/scrypto/cppki" @@ -37,8 +36,7 @@ func TestUpdateTRCs(t *testing.T) { t.Skip("Specify -update-non-deterministic to update TRCs") } - dir, cleanF := xtest.MustTempDir("", "safedir") - defer cleanF() + dir := t.TempDir() root, err := filepath.Abs("../../../../") require.NoError(t, err) diff --git a/pkg/scrypto/mac.go b/pkg/scrypto/mac.go index 589ca5cb22..7f3b357845 100644 --- a/pkg/scrypto/mac.go +++ b/pkg/scrypto/mac.go @@ -17,24 +17,22 @@ package scrypto import ( "crypto/aes" "crypto/sha256" + "errors" "hash" "github.com/dchest/cmac" "golang.org/x/crypto/pbkdf2" - "github.com/scionproto/scion/pkg/private/common" "github.com/scionproto/scion/pkg/private/serrors" ) -const ( - ErrCipherFailure common.ErrMsg = "Unable to initialize AES cipher" - ErrMacFailure common.ErrMsg = "Unable to initialize Mac" -) - var ( - hfMacSalt = []byte("Derive OF Key") + ErrCipherFailure = errors.New("unable to initialize AES cipher") + ErrMacFailure = errors.New("unable to initialize Mac") ) +var hfMacSalt = []byte("Derive OF Key") + func InitMac(key []byte) (hash.Hash, error) { block, err := aes.NewCipher(key) if err != nil { diff --git a/pkg/scrypto/rand.go b/pkg/scrypto/rand.go deleted file mode 100644 index b998d73ab6..0000000000 --- a/pkg/scrypto/rand.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2018 ETH Zurich, Anapaya Systems -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package scrypto - -import ( - "crypto/rand" - "encoding/binary" - mrand "math/rand" - - "github.com/scionproto/scion/pkg/private/common" -) - -const ( - ErrInvalidNonceSize common.ErrMsg = "Invalid nonce size" - ErrUnableToGenerateNonce common.ErrMsg = "Unable to generate nonce" -) - -func init() { - // Seed math/rand's default generator with a random value, once. - mrand.Seed(RandInt64()) -} - -func RandUint64() uint64 { - b := make([]byte, 8) - if _, err := rand.Read(b); err != nil { - // If this happens, there's some serious problem with the runtime or - // OS, and there's nothing we can do about it. - panic("No random numbers available") - } - return binary.LittleEndian.Uint64(b) -} - -// RandInt64 returns a random int64 value. The returned value can be negative. -func RandInt64() int64 { - return int64(RandUint64()) -} diff --git a/pkg/scrypto/signed/BUILD.bazel b/pkg/scrypto/signed/BUILD.bazel index d1180cd197..48e51e0def 100644 --- a/pkg/scrypto/signed/BUILD.bazel +++ b/pkg/scrypto/signed/BUILD.bazel @@ -11,9 +11,8 @@ go_library( deps = [ "//pkg/private/serrors:go_default_library", "//pkg/proto/crypto:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", - "@com_github_golang_protobuf//ptypes/timestamp", "@org_golang_google_protobuf//proto:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) diff --git a/pkg/scrypto/signed/msg.go b/pkg/scrypto/signed/msg.go index 0336d70efb..d68930efcc 100644 --- a/pkg/scrypto/signed/msg.go +++ b/pkg/scrypto/signed/msg.go @@ -22,9 +22,8 @@ import ( "fmt" "time" - "github.com/golang/protobuf/ptypes" - "github.com/golang/protobuf/ptypes/timestamp" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/scionproto/scion/pkg/private/serrors" cryptopb "github.com/scionproto/scion/pkg/proto/crypto" @@ -66,13 +65,9 @@ func Sign(hdr Header, body []byte, signer crypto.Signer, if err := checkPubKeyAlgo(hdr.SignatureAlgorithm, signer.Public()); err != nil { return nil, err } - var ts *timestamp.Timestamp + var ts *timestamppb.Timestamp if !hdr.Timestamp.IsZero() { - var err error - ts, err = ptypes.TimestampProto(hdr.Timestamp) - if err != nil { - return nil, serrors.Wrap("converting timestamp", err) - } + ts = timestamppb.New(hdr.Timestamp) } inputHdr := &cryptopb.Header{ @@ -220,10 +215,7 @@ func extractHeaderAndBody(signed *cryptopb.SignedMessage) (*Header, []byte, erro } var ts time.Time if hdr.Timestamp != nil { - var err error - if ts, err = ptypes.Timestamp(hdr.Timestamp); err != nil { - return nil, nil, err - } + ts = hdr.Timestamp.AsTime() } return &Header{ SignatureAlgorithm: signatureAlgorithmFromPB(hdr.SignatureAlgorithm), diff --git a/pkg/slayers/BUILD.bazel b/pkg/slayers/BUILD.bazel index c375215d35..cbf56b146d 100644 --- a/pkg/slayers/BUILD.bazel +++ b/pkg/slayers/BUILD.bazel @@ -24,7 +24,7 @@ go_library( "//pkg/slayers/path/epic:go_default_library", "//pkg/slayers/path/onehop:go_default_library", "//pkg/slayers/path/scion:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", ], ) @@ -50,7 +50,7 @@ go_test( "//pkg/slayers/path/empty:go_default_library", "//pkg/slayers/path/onehop:go_default_library", "//pkg/slayers/path/scion:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/pkg/slayers/bfd_test.go b/pkg/slayers/bfd_test.go index d0ce7ff3f2..2c9fd71697 100644 --- a/pkg/slayers/bfd_test.go +++ b/pkg/slayers/bfd_test.go @@ -19,7 +19,7 @@ import ( "path/filepath" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/require" "github.com/scionproto/scion/pkg/slayers" diff --git a/pkg/slayers/extn.go b/pkg/slayers/extn.go index 36e21f3406..1431ad82bd 100644 --- a/pkg/slayers/extn.go +++ b/pkg/slayers/extn.go @@ -17,7 +17,7 @@ package slayers import ( "fmt" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/private/serrors" ) diff --git a/pkg/slayers/extn_test.go b/pkg/slayers/extn_test.go index 3a8239cbd8..2ba5b386fc 100644 --- a/pkg/slayers/extn_test.go +++ b/pkg/slayers/extn_test.go @@ -18,7 +18,7 @@ import ( "fmt" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/slayers/internal/bfd/BUILD.bazel b/pkg/slayers/internal/bfd/BUILD.bazel index 8d4a0a6479..2bc0713f8d 100644 --- a/pkg/slayers/internal/bfd/BUILD.bazel +++ b/pkg/slayers/internal/bfd/BUILD.bazel @@ -6,8 +6,8 @@ go_test( data = ["//pkg/slayers:testdata"], deps = [ "//pkg/slayers:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/pkg/slayers/internal/bfd/bfd_test.go b/pkg/slayers/internal/bfd/bfd_test.go index 848ea87639..a1df5d32ea 100644 --- a/pkg/slayers/internal/bfd/bfd_test.go +++ b/pkg/slayers/internal/bfd/bfd_test.go @@ -23,8 +23,8 @@ import ( "path/filepath" "testing" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/slayers/internal/fuzz/BUILD.bazel b/pkg/slayers/internal/fuzz/BUILD.bazel index e122d031a6..79cb45506e 100644 --- a/pkg/slayers/internal/fuzz/BUILD.bazel +++ b/pkg/slayers/internal/fuzz/BUILD.bazel @@ -7,7 +7,7 @@ go_library( visibility = ["//pkg/slayers:__subpackages__"], deps = [ "//pkg/slayers:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", ], ) diff --git a/pkg/slayers/internal/fuzz/fuzz.go b/pkg/slayers/internal/fuzz/fuzz.go index 9994841f2c..f7ff2678df 100644 --- a/pkg/slayers/internal/fuzz/fuzz.go +++ b/pkg/slayers/internal/fuzz/fuzz.go @@ -18,7 +18,7 @@ import ( "bytes" "fmt" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/slayers" ) diff --git a/pkg/slayers/layertypes.go b/pkg/slayers/layertypes.go index ac561c2622..ac12583c8a 100644 --- a/pkg/slayers/layertypes.go +++ b/pkg/slayers/layertypes.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "strconv" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" ) var ( diff --git a/pkg/slayers/pkt_auth_test.go b/pkg/slayers/pkt_auth_test.go index 5cb5a9fa7e..38df0f0373 100644 --- a/pkg/slayers/pkt_auth_test.go +++ b/pkg/slayers/pkt_auth_test.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/slayers/scion.go b/pkg/slayers/scion.go index 66ff20c755..5680fdca1e 100644 --- a/pkg/slayers/scion.go +++ b/pkg/slayers/scion.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "net/netip" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/serrors" diff --git a/pkg/slayers/scion_test.go b/pkg/slayers/scion_test.go index f1821d221c..42a1642646 100644 --- a/pkg/slayers/scion_test.go +++ b/pkg/slayers/scion_test.go @@ -19,7 +19,7 @@ import ( "fmt" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/slayers/scmp.go b/pkg/slayers/scmp.go index 3e61d6a88d..9e1d071cd3 100644 --- a/pkg/slayers/scmp.go +++ b/pkg/slayers/scmp.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "fmt" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/private/serrors" ) diff --git a/pkg/slayers/scmp_msg.go b/pkg/slayers/scmp_msg.go index 5969a3cfe7..794231296b 100644 --- a/pkg/slayers/scmp_msg.go +++ b/pkg/slayers/scmp_msg.go @@ -17,7 +17,7 @@ package slayers import ( "encoding/binary" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/serrors" diff --git a/pkg/slayers/scmp_msg_test.go b/pkg/slayers/scmp_msg_test.go index 5b7976e835..a0e098299e 100644 --- a/pkg/slayers/scmp_msg_test.go +++ b/pkg/slayers/scmp_msg_test.go @@ -18,7 +18,7 @@ import ( "bytes" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/scionproto/scion/pkg/addr" diff --git a/pkg/slayers/scmp_test.go b/pkg/slayers/scmp_test.go index 32638c831f..b97134fd42 100644 --- a/pkg/slayers/scmp_test.go +++ b/pkg/slayers/scmp_test.go @@ -19,7 +19,7 @@ import ( "fmt" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/slayers/slayers_test.go b/pkg/slayers/slayers_test.go index 34dcffc641..bfa12963da 100644 --- a/pkg/slayers/slayers_test.go +++ b/pkg/slayers/slayers_test.go @@ -20,7 +20,7 @@ import ( "path/filepath" "testing" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/slayers/udp.go b/pkg/slayers/udp.go index cee8fd8c7b..60a348c30d 100644 --- a/pkg/slayers/udp.go +++ b/pkg/slayers/udp.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "fmt" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/private/serrors" ) diff --git a/pkg/snet/BUILD.bazel b/pkg/snet/BUILD.bazel index f0f8a2a654..5dcbcb5abb 100644 --- a/pkg/snet/BUILD.bazel +++ b/pkg/snet/BUILD.bazel @@ -36,7 +36,7 @@ go_library( "//pkg/slayers/path/scion:go_default_library", "//private/topology:go_default_library", "//private/topology/underlay:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", ], ) diff --git a/pkg/snet/addrutil/BUILD.bazel b/pkg/snet/addrutil/BUILD.bazel index 3c83469485..b80358d355 100644 --- a/pkg/snet/addrutil/BUILD.bazel +++ b/pkg/snet/addrutil/BUILD.bazel @@ -7,7 +7,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/addr:go_default_library", - "//pkg/daemon:go_default_library", "//pkg/private/serrors:go_default_library", "//pkg/private/util:go_default_library", "//pkg/segment:go_default_library", diff --git a/pkg/snet/addrutil/addrutil.go b/pkg/snet/addrutil/addrutil.go index 246ab37494..c725087165 100644 --- a/pkg/snet/addrutil/addrutil.go +++ b/pkg/snet/addrutil/addrutil.go @@ -20,7 +20,6 @@ import ( "net" "github.com/scionproto/scion/pkg/addr" - "github.com/scionproto/scion/pkg/daemon" "github.com/scionproto/scion/pkg/private/serrors" "github.com/scionproto/scion/pkg/private/util" seg "github.com/scionproto/scion/pkg/segment" @@ -97,6 +96,11 @@ func (p Pather) GetPath(svc addr.SVC, ps *seg.PathSegment) (*snet.SVCAddr, error } +// TopoQuerier can be used to get topology information from the SCION Daemon. +type TopoQuerier interface { + UnderlayAnycast(ctx context.Context, svc addr.SVC) (*net.UDPAddr, error) +} + // DefaultLocalIP returns _an_ IP of this host in the local AS. // // This returns a sensible but arbitrary local IP. In the general case the @@ -107,9 +111,9 @@ func (p Pather) GetPath(svc addr.SVC, ps *seg.PathSegment) (*snet.SVCAddr, error // This is a simple workaround for not being able to use wildcard addresses // with snet. Once available, a wildcard address should be used instead and // this should be removed. -func DefaultLocalIP(ctx context.Context, sdConn daemon.Connector) (net.IP, error) { +func DefaultLocalIP(ctx context.Context, tq TopoQuerier) (net.IP, error) { // Choose CS as default routing "target". Using any of the interfaces would also make sense. - csAddr, err := daemon.TopoQuerier{Connector: sdConn}.UnderlayAnycast(ctx, addr.SvcCS) + csAddr, err := tq.UnderlayAnycast(ctx, addr.SvcCS) if err != nil { return nil, err } diff --git a/pkg/snet/conn.go b/pkg/snet/conn.go index b2635dcbc6..b21eb8ba53 100644 --- a/pkg/snet/conn.go +++ b/pkg/snet/conn.go @@ -16,6 +16,7 @@ package snet import ( + "fmt" "net" "time" @@ -35,7 +36,10 @@ func (e *OpError) RevInfo() *path_mgmt.RevInfo { } func (e *OpError) Error() string { - return e.typeCode.String() + if e.revInfo == nil { + return e.typeCode.String() + } + return fmt.Sprintf("%s (%s)", e.typeCode, e.revInfo) } var _ net.Conn = (*Conn)(nil) diff --git a/pkg/snet/packet.go b/pkg/snet/packet.go index c36c84778e..b95e655791 100644 --- a/pkg/snet/packet.go +++ b/pkg/snet/packet.go @@ -15,9 +15,9 @@ package snet import ( - "math/rand" + "math/rand/v2" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/common" @@ -214,7 +214,7 @@ const ( // WARNING: This is a transitional helper function, which will be removed // in the dispatcher-less snet; then, the underlay port must be used as identifier. func RandomSCMPIdentifer() uint16 { - id := SCMPIdentifierStart + rand.Int31n(SCMPIdentifierEnd-SCMPIdentifierStart+1) + id := SCMPIdentifierStart + rand.Int32N(SCMPIdentifierEnd-SCMPIdentifierStart+1) return uint16(id) } diff --git a/pkg/snet/squic/BUILD.bazel b/pkg/snet/squic/BUILD.bazel index b05803f897..67274c0430 100644 --- a/pkg/snet/squic/BUILD.bazel +++ b/pkg/snet/squic/BUILD.bazel @@ -27,5 +27,6 @@ go_test( "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//credentials/insecure:go_default_library", ], ) diff --git a/pkg/snet/squic/net.go b/pkg/snet/squic/net.go index a0ceaff412..2055be958a 100644 --- a/pkg/snet/squic/net.go +++ b/pkg/snet/squic/net.go @@ -19,7 +19,7 @@ import ( "crypto/tls" "errors" "fmt" - mrand "math/rand" + "math/rand/v2" "net" "sync" "time" @@ -398,7 +398,7 @@ func (d ConnDialer) Dial(ctx context.Context, dst net.Addr) (net.Conn, error) { return nil, serrors.Wrap("dialing QUIC/SCION", err) } - jitter := time.Duration(mrand.Int63n(int64(5 * time.Millisecond))) + jitter := time.Duration(rand.Int64N(int64(5 * time.Millisecond))) select { case <-time.After(sleep + jitter): case <-ctx.Done(): diff --git a/pkg/snet/squic/net_test.go b/pkg/snet/squic/net_test.go index 687c53cded..a473af85f2 100644 --- a/pkg/snet/squic/net_test.go +++ b/pkg/snet/squic/net_test.go @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" cppb "github.com/scionproto/scion/pkg/proto/control_plane" mock_cp "github.com/scionproto/scion/pkg/proto/control_plane/mock_control_plane" @@ -78,7 +79,7 @@ func TestAcceptLoopParallelism(t *testing.T) { dialer := connDialer(t) conn, err := grpc.DialContext(ctx, "server", - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(func(ctx context.Context, _ string) (net.Conn, error) { return dialer.Dial(ctx, srvConn.LocalAddr()) }), @@ -131,7 +132,7 @@ func TestGRPCQUIC(t *testing.T) { dialer := connDialer(t) conn, err := grpc.DialContext(context.Background(), "server", - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(func(ctx context.Context, _ string) (net.Conn, error) { return dialer.Dial(ctx, srvConn.LocalAddr()) }), diff --git a/pkg/snet/svcaddr_test.go b/pkg/snet/svcaddr_test.go index 1738fe5fe9..ee80430d88 100644 --- a/pkg/snet/svcaddr_test.go +++ b/pkg/snet/svcaddr_test.go @@ -24,7 +24,7 @@ import ( ) func TestSVCAddrInterface(t *testing.T) { - var x interface{} = &snet.SVCAddr{} + var x any = &snet.SVCAddr{} _, ok := x.(net.Addr) assert.True(t, ok, "should implement net interface") } diff --git a/pkg/snet/udpaddr_test.go b/pkg/snet/udpaddr_test.go index c93bd68fba..eec1753d9f 100644 --- a/pkg/snet/udpaddr_test.go +++ b/pkg/snet/udpaddr_test.go @@ -25,7 +25,7 @@ import ( ) func TestUDPAddrInterface(t *testing.T) { - var x interface{} = &snet.UDPAddr{} + var x any = &snet.UDPAddr{} _, ok := x.(net.Addr) assert.True(t, ok, "should implement net interface") } diff --git a/private/app/feature/feature.go b/private/app/feature/feature.go index aff86c83c1..4cad2c8d4f 100644 --- a/private/app/feature/feature.go +++ b/private/app/feature/feature.go @@ -30,7 +30,7 @@ import ( // Parse parses the features from the input into the feature set. The provided // feature set should be a pointer to a struct. All boolean fields on that // struct are discovered as feature flags. Non-boolean fields are ignored. -func Parse(input []string, featureSet interface{}) error { +func Parse(input []string, featureSet any) error { val := reflect.ValueOf(featureSet) if !val.IsValid() || val.IsZero() { return serrors.New("feature set must not be nil") @@ -59,7 +59,7 @@ func ParseDefault(input []string) (Default, error) { } // Features lists the supported features. -func Features(featureSet interface{}) []string { +func Features(featureSet any) []string { m := featureMap(featureSet) var s []string for k := range m { @@ -70,11 +70,11 @@ func Features(featureSet interface{}) []string { } // String returns the features as a sorted list separated by the provided separator. -func String(featureSet interface{}, sep string) string { +func String(featureSet any, sep string) string { return strings.Join(Features(featureSet), sep) } -func featureMap(featureSet interface{}) map[string]int { +func featureMap(featureSet any) map[string]int { m := map[string]int{} val := reflect.ValueOf(featureSet) if !val.IsValid() { diff --git a/private/app/feature/feature_test.go b/private/app/feature/feature_test.go index 6891626d6d..be70b551d7 100644 --- a/private/app/feature/feature_test.go +++ b/private/app/feature/feature_test.go @@ -30,9 +30,9 @@ func TestParse(t *testing.T) { testCases := map[string]struct { Input []string - FeatureSet interface{} + FeatureSet any ErrorAssertion assert.ErrorAssertionFunc - Expected interface{} + Expected any }{ "default": { Input: []string{"header_legacy"}, @@ -132,7 +132,7 @@ func TestString(t *testing.T) { } testCases := map[string]struct { - FeatureSet interface{} + FeatureSet any Expected string }{ "default": { diff --git a/private/app/path/path.go b/private/app/path/path.go index 5a61b8bb64..456538df02 100644 --- a/private/app/path/path.go +++ b/private/app/path/path.go @@ -18,7 +18,7 @@ import ( "bufio" "context" "fmt" - "math/rand" + "math/rand/v2" "net" "os" "sort" @@ -118,7 +118,7 @@ func Choose( return printAndChoose(paths, remote, o.colorScheme) } - return paths[rand.Intn(len(paths))], nil + return paths[rand.IntN(len(paths))], nil } func filterUnhealthy( diff --git a/private/ca/config/pemsymmetrickey.go b/private/ca/config/pemsymmetrickey.go index 07e8f46272..5698f74272 100644 --- a/private/ca/config/pemsymmetrickey.go +++ b/private/ca/config/pemsymmetrickey.go @@ -56,6 +56,6 @@ func NewPEMSymmetricKey(path string) *PEMSymmetricKey { } } -func parsePEMSymmetricKey(b []byte) (interface{}, error) { +func parsePEMSymmetricKey(b []byte) (any, error) { return scrypto.ParsePEMSymmetricKey(b) } diff --git a/private/ca/renewal/ca_signer_gen_test.go b/private/ca/renewal/ca_signer_gen_test.go index 4f55a0907c..36e6e2ffba 100644 --- a/private/ca/renewal/ca_signer_gen_test.go +++ b/private/ca/renewal/ca_signer_gen_test.go @@ -300,8 +300,8 @@ func TestLoadingPolicyGenGenerate(t *testing.T) { } func TestCACertLoaderCACerts(t *testing.T) { - defaultGen := func(t *testing.T) (string, func()) { - dir, cleanF := xtest.MustTempDir("", "trust_ca_cert_loader_ca_certs") + defaultGen := func(t *testing.T) string { + dir := t.TempDir() cmd := testcrypto.Cmd(command.StringPather("")) cmd.SetArgs([]string{ @@ -312,42 +312,42 @@ func TestCACertLoaderCACerts(t *testing.T) { }) err := cmd.Execute() require.NoError(t, err) - return dir, cleanF + return dir } noFiles := func(string) []*x509.Certificate { return nil } testCases := map[string]struct { - prepare func(t *testing.T, ctrl *gomock.Controller) (string, func(), trust.DB) + prepare func(t *testing.T, ctrl *gomock.Controller) (string, trust.DB) expected func(string) []*x509.Certificate assertErr assert.ErrorAssertionFunc }{ "non-existing/empty dir": { - prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, func(), trust.DB) { + prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, trust.DB) { db := mock_trust.NewMockDB(ctrl) - return "not-existing-dir", func() {}, db + return "not-existing-dir", db }, assertErr: assert.Error, expected: noFiles, }, "invalid chain": { - prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, func(), trust.DB) { - dir, cleanF := defaultGen(t) + prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, trust.DB) { + dir := defaultGen(t) trc := xtest.LoadTRC(t, filepath.Join(dir, "trcs/ISD1-B1-S1.trc")) err := os.WriteFile(filepath.Join(dir, "dummy.crt"), []byte{}, 0666) require.NoError(t, err) db := mock_trust.NewMockDB(ctrl) db.EXPECT().SignedTRC(gomock.Any(), cppki.TRCID{ISD: 1}).Return(trc, nil) - return filepath.Join(dir), cleanF, db + return filepath.Join(dir), db }, assertErr: assert.NoError, expected: noFiles, }, "valid single CA cert": { - prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, func(), trust.DB) { - dir, cleanF := defaultGen(t) + prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, trust.DB) { + dir := defaultGen(t) trc := xtest.LoadTRC(t, filepath.Join(dir, "trcs/ISD1-B1-S1.trc")) db := mock_trust.NewMockDB(ctrl) db.EXPECT().SignedTRC(gomock.Any(), cppki.TRCID{ISD: 1}).Return(trc, nil) - return filepath.Join(dir, "ISD1/ASff00_0_110/crypto/ca"), cleanF, db + return filepath.Join(dir, "ISD1/ASff00_0_110/crypto/ca"), db }, expected: func(dir string) []*x509.Certificate { return xtest.LoadChain(t, @@ -356,8 +356,8 @@ func TestCACertLoaderCACerts(t *testing.T) { assertErr: assert.NoError, }, "CA cert in grace period": { - prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, func(), trust.DB) { - dir, cleanF := defaultGen(t) + prepare: func(_ *testing.T, ctrl *gomock.Controller) (string, trust.DB) { + dir := defaultGen(t) cmd := testcrypto.Cmd(command.StringPather("")) cmd.SetArgs([]string{ "update", @@ -373,7 +373,7 @@ func TestCACertLoaderCACerts(t *testing.T) { db.EXPECT().SignedTRC(gomock.Any(), cppki.TRCID{ISD: 1, Serial: 1, Base: 1}). Return(trc1, nil) db.EXPECT().SignedTRC(gomock.Any(), cppki.TRCID{ISD: 1}).Return(trc2, nil) - return filepath.Join(dir, "certs"), cleanF, db + return filepath.Join(dir, "certs"), db }, expected: func(dir string) []*x509.Certificate { return xtest.LoadChain(t, filepath.Join(dir, "ISD1-ASff00_0_110.ca.crt")) @@ -388,8 +388,7 @@ func TestCACertLoaderCACerts(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dir, cleanF, db := tc.prepare(t, ctrl) - defer cleanF() + dir, db := tc.prepare(t, ctrl) loader := renewal.CACertLoader{ IA: addr.MustParseIA("1-ff00:0:110"), Dir: dir, diff --git a/private/ca/renewal/main_test.go b/private/ca/renewal/main_test.go index 83c9d3fa3d..1c085bbcfd 100644 --- a/private/ca/renewal/main_test.go +++ b/private/ca/renewal/main_test.go @@ -109,7 +109,7 @@ func genCrypto(t *testing.T) string { return dir } -func writeKey(t *testing.T, file string, key interface{}) { +func writeKey(t *testing.T, file string, key any) { t.Helper() raw, err := x509.MarshalPKCS8PrivateKey(key) require.NoError(t, err) diff --git a/private/config/config.go b/private/config/config.go index 166bbdce4d..3d2a40417d 100644 --- a/private/config/config.go +++ b/private/config/config.go @@ -161,12 +161,12 @@ func InitAll(defaulters ...Defaulter) { } // Decode decodes a raw config. -func Decode(raw []byte, cfg interface{}) error { +func Decode(raw []byte, cfg any) error { return toml.NewDecoder(bytes.NewReader(raw)).DisallowUnknownFields().Decode(cfg) } // LoadFile loads the config from file. -func LoadFile(file string, cfg interface{}) error { +func LoadFile(file string, cfg any) error { raw, err := os.ReadFile(file) if err != nil { return err @@ -194,7 +194,7 @@ func OverrideName(s Sampler, name string) Sampler { type formatDataSampler struct { Sampler - data []interface{} + data []any } func (s formatDataSampler) Sample(dst io.Writer, path Path, ctx CtxMap) { @@ -205,7 +205,7 @@ func (s formatDataSampler) Sample(dst io.Writer, path Path, ctx CtxMap) { // FormatData creates a sampler that will call fmt.Sprintf on the string returned // by s.Sample using the supplied argument information. -func FormatData(s Sampler, a ...interface{}) Sampler { +func FormatData(s Sampler, a ...any) Sampler { return formatDataSampler{ Sampler: s, data: a, diff --git a/private/file/periodicview.go b/private/file/periodicview.go index 34c2c32bdf..b31bd87941 100644 --- a/private/file/periodicview.go +++ b/private/file/periodicview.go @@ -46,24 +46,24 @@ type PeriodicView struct { taskRunner *periodic.Runner running bool closed bool - obj interface{} + obj any err error } // Parser converts a slice of bytes into an object. type Parser interface { - Parse(b []byte) (interface{}, error) + Parse(b []byte) (any, error) } // ParserFunc is a convenience type for using typical Go parsers as the Parser // type in this package. -type ParserFunc func(b []byte) (interface{}, error) +type ParserFunc func(b []byte) (any, error) -func (f ParserFunc) Parse(b []byte) (interface{}, error) { +func (f ParserFunc) Parse(b []byte) (any, error) { return f(b) } -func (v *PeriodicView) Get() (interface{}, error) { +func (v *PeriodicView) Get() (any, error) { v.mu.Lock() defer v.mu.Unlock() @@ -97,7 +97,7 @@ func (v *PeriodicView) Get() (interface{}, error) { return v.obj, v.err } -func (v *PeriodicView) invokeParserLocked(b []byte) (interface{}, error) { +func (v *PeriodicView) invokeParserLocked(b []byte) (any, error) { if v.Parser == nil { return b, nil } diff --git a/private/file/periodicview_test.go b/private/file/periodicview_test.go index 1d2934f8a6..5ad5c5d3aa 100644 --- a/private/file/periodicview_test.go +++ b/private/file/periodicview_test.go @@ -164,7 +164,7 @@ type syncFileView struct { Path string } -func (v *syncFileView) Get() (interface{}, error) { +func (v *syncFileView) Get() (any, error) { b, err := os.ReadFile(v.Path) if err != nil { return nil, err @@ -191,7 +191,7 @@ type cachedFileView struct { view *file.PeriodicView } -func (v *cachedFileView) Get() (interface{}, error) { +func (v *cachedFileView) Get() (any, error) { b, err := v.view.Get() if err != nil { return nil, err @@ -219,7 +219,7 @@ func benchmarkView(b *testing.B, view file.View) { } } -func pemKeyParse(b []byte) (interface{}, error) { - // Change the return type from []byte to interface{} +func pemKeyParse(b []byte) (any, error) { + // Change the return type from []byte to any return scrypto.ParsePEMSymmetricKey(b) } diff --git a/private/file/view.go b/private/file/view.go index 0cd4a0d781..76703d0481 100644 --- a/private/file/view.go +++ b/private/file/view.go @@ -27,5 +27,5 @@ type View interface { // However, Get implementations are free to return different objects or // return references to the same object, so callers should not assume // they see the same object across different calls. - Get() (interface{}, error) + Get() (any, error) } diff --git a/private/keyconf/BUILD.bazel b/private/keyconf/BUILD.bazel index 84c0f433d3..a866af0131 100644 --- a/private/keyconf/BUILD.bazel +++ b/private/keyconf/BUILD.bazel @@ -5,10 +5,7 @@ go_library( srcs = ["keyconf.go"], importpath = "github.com/scionproto/scion/private/keyconf", visibility = ["//visibility:public"], - deps = [ - "//pkg/private/common:go_default_library", - "//pkg/private/serrors:go_default_library", - ], + deps = ["//pkg/private/serrors:go_default_library"], ) go_test( diff --git a/private/keyconf/keyconf.go b/private/keyconf/keyconf.go index 32b91ae614..447040ae4e 100644 --- a/private/keyconf/keyconf.go +++ b/private/keyconf/keyconf.go @@ -16,12 +16,12 @@ package keyconf import ( "encoding/base64" + "errors" "fmt" "os" "path/filepath" "strings" - "github.com/scionproto/scion/pkg/private/common" "github.com/scionproto/scion/pkg/private/serrors" ) @@ -33,10 +33,10 @@ const ( ) // Errors -const ( - ErrOpen common.ErrMsg = "Unable to load key" - ErrParse common.ErrMsg = "Unable to parse key file" - ErrUnknown common.ErrMsg = "Unknown algorithm" +var ( + ErrOpen = errors.New("unable to load key") + ErrParse = errors.New("unable to parse key file") + ErrUnknown = errors.New("unknown algorithm") ) // loadKey decodes a base64 encoded key stored in file and returns the raw bytes. diff --git a/private/mgmtapi/segments/api/api_test.go b/private/mgmtapi/segments/api/api_test.go index 9020001da6..28705b9f8e 100644 --- a/private/mgmtapi/segments/api/api_test.go +++ b/private/mgmtapi/segments/api/api_test.go @@ -174,7 +174,7 @@ func TestAPI(t *testing.T) { gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().DoAndReturn( - func(_ interface{}, + func(_ any, msg []byte, associatedData ...[]byte) (*cryptopb.SignedMessage, error) { inputHdr := &cryptopb.Header{ diff --git a/private/mgmtapi/tools/package.json b/private/mgmtapi/tools/package.json index e955fcd14f..6a3c2a643c 100644 --- a/private/mgmtapi/tools/package.json +++ b/private/mgmtapi/tools/package.json @@ -1,12 +1,12 @@ { "dependencies": { "@redocly/cli": "1.0.2", - "@stoplight/spectral-cli": "^6.11.1" + "@stoplight/spectral-cli": "^6.14.2" }, "pnpm": { - "overrides": { - "@types/jsonpath-plus": ">=10.0.7" - }, + "overrides": { + "@types/jsonpath-plus": ">=10.3.0" + }, "onlyBuiltDependencies": [], "packageExtensions": { "styled-components@5.3.11": { diff --git a/private/mgmtapi/tools/pnpm-lock.yaml b/private/mgmtapi/tools/pnpm-lock.yaml index 5e4152a3ae..e04b307fd7 100644 --- a/private/mgmtapi/tools/pnpm-lock.yaml +++ b/private/mgmtapi/tools/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - '@types/jsonpath-plus': '>=10.0.0' + '@types/jsonpath-plus': '>=10.3.0' packageExtensionsChecksum: 12431cddfbc961e47dea32fc33af3a5c @@ -15,10 +15,10 @@ importers: dependencies: '@redocly/cli': specifier: 1.0.2 - version: 1.0.2(@babel/core@7.24.7)(core-js@3.37.1)(react-is@18.3.1)(webpack@5.92.1) + version: 1.0.2(@babel/core@7.26.9)(core-js@3.40.0)(react-is@16.13.1)(webpack@5.98.0) '@stoplight/spectral-cli': - specifier: ^6.11.1 - version: 6.11.1 + specifier: ^6.14.2 + version: 6.14.2 packages: @@ -26,112 +26,88 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@asyncapi/specs@4.3.1': - resolution: {integrity: sha512-EfexhJu/lwF8OdQDm28NKLJHFkx0Gb6O+rcezhZYLPIoNYKXJMh2J1vFGpwmfAcTTh+ffK44Oc2Hs1Q4sLBp+A==} + '@asyncapi/specs@6.8.1': + resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + '@babel/runtime@7.26.9': + resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} '@emotion/is-prop-valid@1.2.2': @@ -149,8 +125,8 @@ packages: '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -170,14 +146,20 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jsep-plugin/regex@1.0.3': - resolution: {integrity: sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==} + '@jsep-plugin/assignment@1.3.0': + resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsep-plugin/regex@1.0.4': + resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} engines: {node: '>= 10.16.0'} peerDependencies: jsep: ^0.4.0||^1.0.0 - '@jsep-plugin/ternary@1.1.3': - resolution: {integrity: sha512-qtLGzCNzPVJ3kdH6/zoLWDPjauHIKiLSBAR71Wa0+PWvGA8wODUQvRgxtpUA5YqAYL3CQ8S4qXhd/9WuWTZirg==} + '@jsep-plugin/ternary@1.1.4': + resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==} engines: {node: '>= 10.16.0'} peerDependencies: jsep: ^0.4.0||^1.0.0 @@ -194,18 +176,25 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@redocly/ajv@8.11.0': - resolution: {integrity: sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw==} + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} '@redocly/cli@1.0.2': resolution: {integrity: sha512-IWuo5V2ZKSdvQMgNx05PHBlv1YvqJH3/nX52qslooEtqsvOaCUnZIm/aCd1zw2EW5Ub2+VLb51LqMt6mDF/9vQ==} engines: {node: '>=12.0.0'} hasBin: true + '@redocly/config@0.20.3': + resolution: {integrity: sha512-Nyyv1Bj7GgYwj/l46O0nkH1GTKWbO3Ixe7KFcn021aZipkZd+z8Vlu1BwkhqtVgivcKaClaExtWU/lDHkjBzag==} + '@redocly/openapi-core@1.0.2': resolution: {integrity: sha512-53dzhmG2bsi/8rcAAgBKk9ZLMR035VHgN7oSM3+BM4UAIoNBg6lMC/ChHSf9zO+GrX5qtuWVPqHhjjMti3SAlQ==} engines: {node: '>=12.0.0'} + '@redocly/openapi-core@1.29.0': + resolution: {integrity: sha512-Ju8POuRjYLTl6JfaSMq5exzhw4E/f1Qb7fGxgS4/PDSTzS1jzZ/UUJRBPeiQ1Ag7yuxH6JwltOr2iiltnBey1w==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + '@rollup/plugin-commonjs@22.0.2': resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} engines: {node: '>= 12.0.0'} @@ -232,8 +221,8 @@ packages: resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} engines: {node: '>=8.3.0'} - '@stoplight/json@3.21.0': - resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} + '@stoplight/json@3.21.7': + resolution: {integrity: sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==} engines: {node: '>=8.3.0'} '@stoplight/ordered-object-literal@1.0.5': @@ -244,54 +233,50 @@ packages: resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} engines: {node: '>=8'} - '@stoplight/spectral-cli@6.11.1': - resolution: {integrity: sha512-1zqsQ0TOuVSnxxZ9mHBfC0IygV6ex7nAY6Mp59mLmw5fW103U9yPVK5ZcX9ZngCmr3PdteAnMDUIIaoDGso6nA==} - engines: {node: ^12.20 || >= 14.13} + '@stoplight/spectral-cli@6.14.2': + resolution: {integrity: sha512-yn49Tkin/Zzjwt39CbQvj3NZVolvXrjO3OLNn+Yd+LhQE5C96QNsULuE4q98e7+WRcLu4gK+Z0l5CxYNtsoPtw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} hasBin: true - '@stoplight/spectral-core@1.18.3': - resolution: {integrity: sha512-YY8x7X2SWJIhGTLPol+eFiQpWPz0D0mJdkK2i4A0QJG68KkNhypP6+JBC7/Kz3XWjqr0L/RqAd+N5cQLPOKZGQ==} - engines: {node: ^12.20 || >= 14.13} - - '@stoplight/spectral-formats@1.6.0': - resolution: {integrity: sha512-X27qhUfNluiduH0u/QwJqhOd8Wk5YKdxVmKM03Aijlx0AH1H5mYt3l9r7t2L4iyJrsBaFPnMGt7UYJDGxszbNA==} - engines: {node: '>=12'} + '@stoplight/spectral-core@1.19.4': + resolution: {integrity: sha512-8hnZXfssTlV99SKo8J8BwMt5LsiBFHkCh0V3P7j8IPcCNl//bpG92U4TpYy7AwmUms/zCLX7sxNQC6AZ+bkfzg==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-formatters@1.3.0': - resolution: {integrity: sha512-ryuMwlzbPUuyn7ybSEbFYsljYmvTaTyD51wyCQs4ROzgfm3Yo5QDD0IsiJUzUpKK/Ml61ZX8ebgiPiRFEJtBpg==} - engines: {node: ^12.20 || >=14.13} + '@stoplight/spectral-formats@1.8.2': + resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-functions@1.8.0': - resolution: {integrity: sha512-ZrAkYA/ZGbuQ6EyG1gisF4yQ5nWP/+glcqVoGmS6kH6ekaynz2Yp6FL0oIamWj3rWedFUN7ppwTRUdo+9f/uCw==} - engines: {node: '>=12'} + '@stoplight/spectral-formatters@1.4.3': + resolution: {integrity: sha512-03Nc6nhjMO9aHhJPgBH4zDwMPklKLWEMtvx+PMmzfStCndMjJkf8ki7O/55u3myZ1TwxBzln9z9tXPLSL3KKhw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-parsers@1.0.4': - resolution: {integrity: sha512-nCTVvtX6q71M8o5Uvv9kxU31Gk1TRmgD6/k8HBhdCmKG6FWcwgjiZouA/R3xHLn/VwTI/9k8SdG5Mkdy0RBqbQ==} - engines: {node: ^12.20 || >=14.13} + '@stoplight/spectral-functions@1.9.3': + resolution: {integrity: sha512-jy4mguk0Ddz0Vr76PHervOZeyXTUW650zVfNT2Vt9Ji3SqtTVziHjq913CBVEGFS+IQw1McUXuHVLM6YKVZ6fQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-ref-resolver@1.0.4': - resolution: {integrity: sha512-5baQIYL0NJTSVy8v6RxOR4U51xOUYM8wJri1YvlAT6bPN8m0EIxMwfVYi0xUZEMVeHcWx869nIkoqyWmOutF2A==} - engines: {node: '>=12'} + '@stoplight/spectral-parsers@1.0.5': + resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-ruleset-bundler@1.5.2': - resolution: {integrity: sha512-4QUVUFAU+S7IQ9XeCu+0TQMYxKFpKnkOAfa9unRQ1iPL2cviaipEN6witpbAptdHJD3UUjx4OnwlX8WwmXSq9w==} - engines: {node: ^12.20 || >= 14.13} + '@stoplight/spectral-ref-resolver@1.0.5': + resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-ruleset-migrator@1.9.5': - resolution: {integrity: sha512-76n/HETr3UinVl/xLNldrH9p0JNoD8Gz4K75J6E4OHp4xD0P+BA2e8+W30HjIvqm1LJdLU2BNma0ioy+q3B9RA==} - engines: {node: '>=12'} + '@stoplight/spectral-ruleset-bundler@1.6.1': + resolution: {integrity: sha512-Pk0OVqyHXc/grFtaOWXF268UNRjwAnSGf9idBXO1XZJbieUyrYRJ44v5/E1UVxRMvzVkQ6/As/Ggi8hsEybKZw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-rulesets@1.19.1': - resolution: {integrity: sha512-rfGK87Y1JJCEeLC8MVdLkjUkRH+Y6VnSF388D+UWihfU9xuq2eNB9phWpTFkG+AG4HLRyGx963BmO6PyM9dBag==} - engines: {node: '>=12'} + '@stoplight/spectral-ruleset-migrator@1.11.1': + resolution: {integrity: sha512-z2A1Ual3bU7zLDxYqdHaxYgyirb7TVDaWXc9ONEBAo5W1isio0EHV59ujAUEOUHCLcY5ubd0eYeqgSjqPIQe8w==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/spectral-runtime@1.1.2': - resolution: {integrity: sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==} - engines: {node: '>=12'} + '@stoplight/spectral-rulesets@1.21.3': + resolution: {integrity: sha512-SQp/NNDykfCvgmo9DW1pBAbmyKRHhEHmsc28kuRHC6nJblGFsLyNVGkEDjSIJuviR7ooC2Y00vmf0R3OGcyhyw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} - '@stoplight/types@12.5.0': - resolution: {integrity: sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==} - engines: {node: '>=8'} + '@stoplight/spectral-runtime@1.1.3': + resolution: {integrity: sha512-uoKSVX/OYXOEBRQN7EtAaVefl8MlyhBkDcU2aDYEGALwYXHAH+vmF3ljhZrueMA3fSWLHTL3RxWqsjeeCor6lw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} '@stoplight/types@13.20.0': resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} @@ -325,14 +310,14 @@ packages: '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} @@ -340,14 +325,17 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/markdown-escape@1.1.3': + resolution: {integrity: sha512-JIc1+s3y5ujKnt/+N+wq6s/QdL2qZ11fP79MijrVXsAAnzSxCbT2j/3prHRouJdZ2yFLN3vkP0HytfnoCczjOw==} + '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/node@22.13.4': + resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} '@types/sarif@2.1.7': resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} @@ -355,50 +343,50 @@ packages: '@types/urijs@1.19.25': resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} - '@webassemblyjs/ast@1.12.1': - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - '@webassemblyjs/helper-buffer@1.12.1': - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - '@webassemblyjs/helper-wasm-section@1.12.1': - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - '@webassemblyjs/wasm-edit@1.12.1': - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - '@webassemblyjs/wasm-gen@1.12.1': - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - '@webassemblyjs/wasm-opt@1.12.1': - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - '@webassemblyjs/wasm-parser@1.12.1': - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - '@webassemblyjs/wast-printer@1.12.1': - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -410,16 +398,15 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -441,25 +428,18 @@ packages: ajv: optional: true - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: - ajv: ^6.9.1 + ajv: ^8.8.2 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -471,12 +451,12 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} as-table@1.0.55: @@ -490,10 +470,14 @@ packages: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} @@ -523,8 +507,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -534,8 +518,16 @@ packages: builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} call-me-maybe@1.0.2: @@ -544,12 +536,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001641: - resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + caniuse-lite@1.0.30001700: + resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -577,16 +565,10 @@ packages: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -605,8 +587,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + core-js@3.40.0: + resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} @@ -618,16 +600,16 @@ packages: data-uri-to-buffer@2.0.2: resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} debug@3.2.7: @@ -638,8 +620,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -662,61 +644,61 @@ packages: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} - dompurify@2.5.6: - resolution: {integrity: sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==} + dompurify@2.5.8: + resolution: {integrity: sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} - electron-to-chromium@1.4.825: - resolution: {integrity: sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==} + electron-to-chromium@1.5.102: + resolution: {integrity: sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} es-aggregate-error@1.0.13: resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -761,24 +743,29 @@ packages: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-memoize@2.5.2: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fast-xml-parser@4.5.2: + resolution: {integrity: sha512-xmnYV9o0StIz/0ArdzmWTxn9oDy0lH8Z80/8X/TD2EUQKXY4DHxoT9mYBqgGIG17DgddCJtH1M6DriMbalNsAA==} + hasBin: true + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} foreach@2.0.6: resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} @@ -798,8 +785,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} functions-have-names@1.2.3: @@ -813,15 +800,19 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} glob-parent@5.1.2: @@ -849,8 +840,9 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -860,8 +852,9 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -874,12 +867,12 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: @@ -900,6 +893,10 @@ packages: http2-client@1.3.5: resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} @@ -910,59 +907,72 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} is-number@7.0.0: @@ -972,28 +982,41 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -1013,13 +1036,13 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsep@1.3.8: - resolution: {integrity: sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ==} + jsep@1.4.0: + resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} engines: {node: '>= 10.16.0'} - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} hasBin: true json-parse-even-better-errors@2.3.1: @@ -1028,9 +1051,6 @@ packages: json-pointer@0.6.2: resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -1045,13 +1065,10 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonpath-plus@6.0.1: - resolution: {integrity: sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==} - engines: {node: '>=10.0.0'} - - jsonpath-plus@7.1.0: - resolution: {integrity: sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==} - engines: {node: '>=12.0.0'} + jsonpath-plus@10.2.0: + resolution: {integrity: sha512-T9V+8iNYKFL2n2rF+w02LBOT2JjDnTjioaNFrxRy0Bv1y/hNsqR/EBK7Ojy2ythRHwmz2cRIls+9JitQGZC/sw==} + engines: {node: '>=18.0.0'} + hasBin: true jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} @@ -1067,6 +1084,7 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.topath@4.5.2: resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} @@ -1090,11 +1108,18 @@ packages: mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + markdown-escape@2.0.0: + resolution: {integrity: sha512-Trz4v0+XWlwy68LJIyw3bLbsJiC8XAbRCKF9DbEtZjyndKOGVx6n+wNB0VfoRmY2LKboQLeniap3xrb6LGSJ8A==} + marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1102,8 +1127,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -1154,11 +1179,8 @@ packages: react-native: optional: true - mobx@6.13.0: - resolution: {integrity: sha512-1laWODrBWmB7mDJ8EClCjUQTyLwJ0ydJgE4FtK7t9r3JnjXgc9OhmYs2P4RtHrY1co5+4T6cKP2UswX2SU29mA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + mobx@6.13.6: + resolution: {integrity: sha512-r19KNV0uBN4b+ER8Z0gA4y+MzDYIQ2SvOmn3fUrqPnWXdQfakd9yfbPBDBF/p5I+bd3N5Rk1fHONIvMay+bJGA==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1166,8 +1188,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nimma@0.2.2: - resolution: {integrity: sha512-V52MLl7BU+tH2Np9tDrIXK8bql3MVUadnMIl/0/oZSGC9keuro0O9UUv9QKp0aMvtN8HRew4G7byY7H4eWsxaQ==} + nimma@0.2.3: + resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} engines: {node: ^12.20 || >=14.13} node-fetch-h2@2.3.0: @@ -1195,8 +1217,8 @@ packages: node-readfiles@0.2.0: resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} node-sarif-builder@2.0.3: resolution: {integrity: sha512-Pzr3rol8fvhG/oJjIq2NTVB0vmdNNlz22FENhhPojYRZ4/ee08CfK4YuKmuL54V9MLhI1kpzxfOJ/63LzmZzDg==} @@ -1226,23 +1248,27 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - openapi-sampler@1.5.1: - resolution: {integrity: sha512-tIWIrZUKNAsbqf3bd9U1oH6JEXo8LNYuDlXw26By67EygpjT+ArFnsxxyTMjFWRfbqo5ozkvgSQDK69Gd8CddA==} + openapi-sampler@1.6.1: + resolution: {integrity: sha512-s1cIatOqrrhSj2tmJ4abFYZQK6l5v+V4toO5q1Pa0DyN8mtyqy2I+Qrj5W9vOELEtybIMQs/TBZGVO/DtTFK8w==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -1254,11 +1280,11 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - perfect-scrollbar@1.5.5: - resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==} + perfect-scrollbar@1.5.6: + resolution: {integrity: sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1280,8 +1306,8 @@ packages: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-value-parser@4.2.0: @@ -1297,10 +1323,6 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1315,9 +1337,6 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-tabs@3.2.3: resolution: {integrity: sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==} peerDependencies: @@ -1345,14 +1364,18 @@ packages: react-dom: ^16.8.4 || ^17.0.0 styled-components: ^4.1.1 || ^5.1.1 + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + reftools@1.1.9: resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} require-directory@2.1.1: @@ -1367,31 +1390,36 @@ packages: resolution: {integrity: sha512-/qO54MWj5L8WCBP9/UNe2iefJc+L9yETbH32xO/ft/EYPOTCR5k+azvDUgdCOKwZH8hXwPd0b8XBL78Nn2U69g==} engines: {node: '>=0.8'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} engines: {node: '>=10.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} safe-stable-stringify@1.1.1: @@ -1400,8 +1428,8 @@ packages: scheduler@0.20.2: resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} engines: {node: '>= 10.13.0'} semver@5.7.2: @@ -1412,8 +1440,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -1428,6 +1456,10 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -1449,12 +1481,24 @@ packages: should@13.2.3: resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} - simple-eval@1.0.0: - resolution: {integrity: sha512-kpKJR+bqTscgC0xuAl2xHN6bB12lHjC2DCUfqjAx19bQyO3R2EVLOurm3H9AUltv/uFVcSCVNc6faegR+8NYLw==} + simple-eval@1.0.1: + resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==} engines: {node: '>=12'} simple-websocket@9.1.0: @@ -1485,12 +1529,13 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -1503,6 +1548,9 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + style-loader@3.3.4: resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} engines: {node: '>= 12.13.0'} @@ -1541,8 +1589,8 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -1557,18 +1605,14 @@ packages: uglify-js: optional: true - terser@5.31.2: - resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} engines: {node: '>=10'} hasBin: true text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1579,48 +1623,49 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - uglify-js@3.18.0: - resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} urijs@1.19.11: resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} @@ -1638,8 +1683,8 @@ packages: validate-npm-package-name@3.0.0: resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} - watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} webidl-conversions@3.0.1: @@ -1649,8 +1694,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.92.1: - resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==} + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -1662,11 +1707,20 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} wordwrap@1.0.0: @@ -1729,160 +1783,125 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@asyncapi/specs@4.3.1': + '@asyncapi/specs@6.8.1': dependencies: '@types/json-schema': 7.0.15 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/compat-data@7.24.7': {} + '@babel/compat-data@7.26.8': {} - '@babel/core@7.24.7': + '@babel/core@7.26.9': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7(supports-color@5.5.0) - '@babel/types': 7.24.7 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 convert-source-map: 2.0.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.7': + '@babel/generator@7.26.9': dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.24.7': + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.26.9 - '@babel/helper-compilation-targets@7.24.7': + '@babel/helper-compilation-targets@7.26.5': dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.2 + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.24.7(supports-color@5.5.0)': - dependencies: - '@babel/traverse': 7.24.7(supports-color@5.5.0) - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.26.9(supports-color@5.5.0) + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-simple-access@7.24.7': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': dependencies: - '@babel/traverse': 7.24.7(supports-color@5.5.0) - '@babel/types': 7.24.7 + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9(supports-color@5.5.0) transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-plugin-utils@7.26.5': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-option@7.24.7': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/helper-validator-option@7.25.9': {} - '@babel/highlight@7.24.7': + '@babel/helpers@7.26.9': dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 - '@babel/parser@7.24.7': + '@babel/parser@7.26.9': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.26.9 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/runtime@7.24.7': + '@babel/runtime@7.26.9': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': + '@babel/template@7.26.9': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 - '@babel/traverse@7.24.7(supports-color@5.5.0)': + '@babel/traverse@7.26.9(supports-color@5.5.0)': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5(supports-color@5.5.0) + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': + '@babel/types@7.26.9': dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@emotion/is-prop-valid@1.2.2': dependencies: @@ -1896,7 +1915,7 @@ snapshots: '@exodus/schemasafe@1.3.0': {} - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 @@ -1908,7 +1927,7 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -1918,13 +1937,17 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jsep-plugin/regex@1.0.3(jsep@1.3.8)': + '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': + dependencies: + jsep: 1.4.0 + + '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': dependencies: - jsep: 1.3.8 + jsep: 1.4.0 - '@jsep-plugin/ternary@1.1.3(jsep@1.3.8)': + '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)': dependencies: - jsep: 1.3.8 + jsep: 1.4.0 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -1936,16 +1959,16 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.0 - '@redocly/ajv@8.11.0': + '@redocly/ajv@8.11.2': dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 + uri-js-replace: 1.0.1 - '@redocly/cli@1.0.2(@babel/core@7.24.7)(core-js@3.37.1)(react-is@18.3.1)(webpack@5.92.1)': + '@redocly/cli@1.0.2(@babel/core@7.26.9)(core-js@3.40.0)(react-is@16.13.1)(webpack@5.98.0)': dependencies: '@redocly/openapi-core': 1.0.2 assert-node-version: 1.0.3 @@ -1955,15 +1978,15 @@ snapshots: glob-promise: 3.4.0(glob@7.2.3) handlebars: 4.7.8 lodash.isequal: 4.5.0 - mobx: 6.13.0 + mobx: 6.13.6 node-fetch: 2.6.7 portfinder: 1.0.32 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - redoc: 2.0.0(core-js@3.37.1)(mobx@6.13.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2))(webpack@5.92.1) - semver: 7.6.2 + redoc: 2.0.0(core-js@3.40.0)(mobx@6.13.6)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(styled-components@5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2))(webpack@5.98.0) + semver: 7.7.1 simple-websocket: 9.1.0 - styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2) + styled-components: 5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2) yargs: 17.0.1 transitivePeerDependencies: - '@babel/core' @@ -1976,42 +1999,58 @@ snapshots: - utf-8-validate - webpack + '@redocly/config@0.20.3': {} + '@redocly/openapi-core@1.0.2': dependencies: - '@redocly/ajv': 8.11.0 + '@redocly/ajv': 8.11.2 '@types/node': 14.18.63 colorette: 1.4.0 js-levenshtein: 1.1.6 js-yaml: 4.1.0 lodash.isequal: 4.5.0 minimatch: 5.1.6 - node-fetch: 2.6.7 + node-fetch: 2.7.0 pluralize: 8.0.0 yaml-ast-parser: 0.0.43 transitivePeerDependencies: - encoding - '@rollup/plugin-commonjs@22.0.2(rollup@2.79.1)': + '@redocly/openapi-core@1.29.0': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.20.3 + colorette: 1.4.0 + https-proxy-agent: 7.0.6 + js-levenshtein: 1.1.6 + js-yaml: 4.1.0 + minimatch: 5.1.6 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-commonjs@22.0.2(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) commondir: 1.0.1 estree-walker: 2.0.2 glob: 7.2.3 is-reference: 1.2.1 magic-string: 0.25.9 - resolve: 1.22.8 - rollup: 2.79.1 + resolve: 1.22.10 + rollup: 2.79.2 - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 2.79.1 + rollup: 2.79.2 - '@stoplight/better-ajv-errors@1.0.3(ajv@8.16.0)': + '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': dependencies: - ajv: 8.16.0 + ajv: 8.17.1 jsonpointer: 5.0.1 leven: 3.1.0 @@ -2024,7 +2063,7 @@ snapshots: '@stoplight/json-ref-resolver@3.1.6': dependencies: - '@stoplight/json': 3.21.0 + '@stoplight/json': 3.21.7 '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 '@types/urijs': 1.19.25 @@ -2032,10 +2071,10 @@ snapshots: fast-memoize: 2.5.2 immer: 9.0.21 lodash: 4.17.21 - tslib: 2.6.3 + tslib: 2.8.1 urijs: 1.19.11 - '@stoplight/json@3.21.0': + '@stoplight/json@3.21.7': dependencies: '@stoplight/ordered-object-literal': 1.0.5 '@stoplight/path': 1.3.2 @@ -2048,18 +2087,18 @@ snapshots: '@stoplight/path@1.3.2': {} - '@stoplight/spectral-cli@6.11.1': + '@stoplight/spectral-cli@6.14.2': dependencies: - '@stoplight/json': 3.21.0 + '@stoplight/json': 3.21.7 '@stoplight/path': 1.3.2 - '@stoplight/spectral-core': 1.18.3 - '@stoplight/spectral-formatters': 1.3.0 - '@stoplight/spectral-parsers': 1.0.4 - '@stoplight/spectral-ref-resolver': 1.0.4 - '@stoplight/spectral-ruleset-bundler': 1.5.2 - '@stoplight/spectral-ruleset-migrator': 1.9.5 - '@stoplight/spectral-rulesets': 1.19.1 - '@stoplight/spectral-runtime': 1.1.2 + '@stoplight/spectral-core': 1.19.4 + '@stoplight/spectral-formatters': 1.4.3 + '@stoplight/spectral-parsers': 1.0.5 + '@stoplight/spectral-ref-resolver': 1.0.5 + '@stoplight/spectral-ruleset-bundler': 1.6.1 + '@stoplight/spectral-ruleset-migrator': 1.11.1 + '@stoplight/spectral-rulesets': 1.21.3 + '@stoplight/spectral-runtime': 1.1.3 '@stoplight/types': 13.20.0 chalk: 4.1.2 fast-glob: 3.2.12 @@ -2067,172 +2106,169 @@ snapshots: lodash: 4.17.21 pony-cause: 1.1.1 stacktracey: 2.1.8 - tslib: 2.6.3 + tslib: 2.8.1 yargs: 17.7.2 transitivePeerDependencies: - encoding - '@stoplight/spectral-core@1.18.3': + '@stoplight/spectral-core@1.19.4': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.16.0) - '@stoplight/json': 3.21.0 + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/json': 3.21.7 '@stoplight/path': 1.3.2 - '@stoplight/spectral-parsers': 1.0.4 - '@stoplight/spectral-ref-resolver': 1.0.4 - '@stoplight/spectral-runtime': 1.1.2 + '@stoplight/spectral-parsers': 1.0.5 + '@stoplight/spectral-ref-resolver': 1.0.5 + '@stoplight/spectral-runtime': 1.1.3 '@stoplight/types': 13.6.0 '@types/es-aggregate-error': 1.0.6 '@types/json-schema': 7.0.15 - ajv: 8.16.0 - ajv-errors: 3.0.0(ajv@8.16.0) - ajv-formats: 2.1.1(ajv@8.16.0) + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) es-aggregate-error: 1.0.13 - jsonpath-plus: 7.1.0 + jsonpath-plus: 10.2.0 lodash: 4.17.21 lodash.topath: 4.5.2 minimatch: 3.1.2 - nimma: 0.2.2 + nimma: 0.2.3 pony-cause: 1.1.1 - simple-eval: 1.0.0 - tslib: 2.6.3 + simple-eval: 1.0.1 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/spectral-formats@1.6.0': + '@stoplight/spectral-formats@1.8.2': dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.18.3 + '@stoplight/json': 3.21.7 + '@stoplight/spectral-core': 1.19.4 '@types/json-schema': 7.0.15 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/spectral-formatters@1.3.0': + '@stoplight/spectral-formatters@1.4.3': dependencies: '@stoplight/path': 1.3.2 - '@stoplight/spectral-core': 1.18.3 - '@stoplight/spectral-runtime': 1.1.2 + '@stoplight/spectral-core': 1.19.4 + '@stoplight/spectral-runtime': 1.1.3 '@stoplight/types': 13.20.0 + '@types/markdown-escape': 1.1.3 chalk: 4.1.2 cliui: 7.0.4 lodash: 4.17.21 + markdown-escape: 2.0.0 node-sarif-builder: 2.0.3 strip-ansi: 6.0.1 text-table: 0.2.0 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/spectral-functions@1.8.0': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.16.0) - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.18.3 - '@stoplight/spectral-formats': 1.6.0 - '@stoplight/spectral-runtime': 1.1.2 - ajv: 8.16.0 - ajv-draft-04: 1.0.0(ajv@8.16.0) - ajv-errors: 3.0.0(ajv@8.16.0) - ajv-formats: 2.1.1(ajv@8.16.0) + '@stoplight/spectral-functions@1.9.3': + dependencies: + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/json': 3.21.7 + '@stoplight/spectral-core': 1.19.4 + '@stoplight/spectral-formats': 1.8.2 + '@stoplight/spectral-runtime': 1.1.3 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) lodash: 4.17.21 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/spectral-parsers@1.0.4': + '@stoplight/spectral-parsers@1.0.5': dependencies: - '@stoplight/json': 3.21.0 + '@stoplight/json': 3.21.7 '@stoplight/types': 14.1.1 '@stoplight/yaml': 4.3.0 - tslib: 2.6.3 + tslib: 2.8.1 - '@stoplight/spectral-ref-resolver@1.0.4': + '@stoplight/spectral-ref-resolver@1.0.5': dependencies: '@stoplight/json-ref-readers': 1.2.2 '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-runtime': 1.1.2 + '@stoplight/spectral-runtime': 1.1.3 dependency-graph: 0.11.0 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/spectral-ruleset-bundler@1.5.2': + '@stoplight/spectral-ruleset-bundler@1.6.1': dependencies: - '@rollup/plugin-commonjs': 22.0.2(rollup@2.79.1) + '@rollup/plugin-commonjs': 22.0.2(rollup@2.79.2) '@stoplight/path': 1.3.2 - '@stoplight/spectral-core': 1.18.3 - '@stoplight/spectral-formats': 1.6.0 - '@stoplight/spectral-functions': 1.8.0 - '@stoplight/spectral-parsers': 1.0.4 - '@stoplight/spectral-ref-resolver': 1.0.4 - '@stoplight/spectral-ruleset-migrator': 1.9.5 - '@stoplight/spectral-rulesets': 1.19.1 - '@stoplight/spectral-runtime': 1.1.2 + '@stoplight/spectral-core': 1.19.4 + '@stoplight/spectral-formats': 1.8.2 + '@stoplight/spectral-functions': 1.9.3 + '@stoplight/spectral-parsers': 1.0.5 + '@stoplight/spectral-ref-resolver': 1.0.5 + '@stoplight/spectral-ruleset-migrator': 1.11.1 + '@stoplight/spectral-rulesets': 1.21.3 + '@stoplight/spectral-runtime': 1.1.3 '@stoplight/types': 13.20.0 - '@types/node': 20.14.10 + '@types/node': 22.13.4 pony-cause: 1.1.1 - rollup: 2.79.1 - tslib: 2.6.3 + rollup: 2.79.2 + tslib: 2.8.1 validate-npm-package-name: 3.0.0 transitivePeerDependencies: - encoding - '@stoplight/spectral-ruleset-migrator@1.9.5': + '@stoplight/spectral-ruleset-migrator@1.11.1': dependencies: - '@stoplight/json': 3.21.0 + '@stoplight/json': 3.21.7 '@stoplight/ordered-object-literal': 1.0.5 '@stoplight/path': 1.3.2 - '@stoplight/spectral-functions': 1.8.0 - '@stoplight/spectral-runtime': 1.1.2 + '@stoplight/spectral-functions': 1.9.3 + '@stoplight/spectral-runtime': 1.1.3 '@stoplight/types': 13.20.0 '@stoplight/yaml': 4.2.3 - '@types/node': 20.14.10 - ajv: 8.16.0 + '@types/node': 22.13.4 + ajv: 8.17.1 ast-types: 0.14.2 - astring: 1.8.6 + astring: 1.9.0 reserved: 0.1.2 - tslib: 2.6.3 + tslib: 2.8.1 validate-npm-package-name: 3.0.0 transitivePeerDependencies: - encoding - '@stoplight/spectral-rulesets@1.19.1': + '@stoplight/spectral-rulesets@1.21.3': dependencies: - '@asyncapi/specs': 4.3.1 - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.16.0) - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.18.3 - '@stoplight/spectral-formats': 1.6.0 - '@stoplight/spectral-functions': 1.8.0 - '@stoplight/spectral-runtime': 1.1.2 + '@asyncapi/specs': 6.8.1 + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/json': 3.21.7 + '@stoplight/spectral-core': 1.19.4 + '@stoplight/spectral-formats': 1.8.2 + '@stoplight/spectral-functions': 1.9.3 + '@stoplight/spectral-runtime': 1.1.3 '@stoplight/types': 13.20.0 '@types/json-schema': 7.0.15 - ajv: 8.16.0 - ajv-formats: 2.1.1(ajv@8.16.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) json-schema-traverse: 1.0.0 leven: 3.1.0 lodash: 4.17.21 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/spectral-runtime@1.1.2': + '@stoplight/spectral-runtime@1.1.3': dependencies: - '@stoplight/json': 3.21.0 + '@stoplight/json': 3.21.7 '@stoplight/path': 1.3.2 - '@stoplight/types': 12.5.0 + '@stoplight/types': 13.20.0 abort-controller: 3.0.0 lodash: 4.17.21 node-fetch: 2.7.0 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding - '@stoplight/types@12.5.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - '@stoplight/types@13.20.0': dependencies: '@types/json-schema': 7.0.15 @@ -2257,126 +2293,128 @@ snapshots: '@stoplight/ordered-object-literal': 1.0.5 '@stoplight/types': 13.20.0 '@stoplight/yaml-ast-parser': 0.0.48 - tslib: 2.6.3 + tslib: 2.8.1 '@stoplight/yaml@4.3.0': dependencies: '@stoplight/ordered-object-literal': 1.0.5 '@stoplight/types': 14.1.1 '@stoplight/yaml-ast-parser': 0.0.50 - tslib: 2.6.3 + tslib: 2.8.1 '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 20.14.10 + '@types/node': 22.13.4 '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 - '@types/eslint@8.56.10': + '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 '@types/estree@0.0.39': {} - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.10 + '@types/node': 22.13.4 '@types/json-schema@7.0.15': {} + '@types/markdown-escape@1.1.3': {} + '@types/minimatch@5.1.2': {} '@types/node@14.18.63': {} - '@types/node@20.14.10': + '@types/node@22.13.4': dependencies: - undici-types: 5.26.5 + undici-types: 6.20.0 '@types/sarif@2.1.7': {} '@types/urijs@1.19.25': {} - '@webassemblyjs/ast@1.12.1': + '@webassemblyjs/ast@1.14.1': dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - '@webassemblyjs/helper-api-error@1.11.6': {} + '@webassemblyjs/helper-api-error@1.13.2': {} - '@webassemblyjs/helper-buffer@1.12.1': {} + '@webassemblyjs/helper-buffer@1.14.1': {} - '@webassemblyjs/helper-numbers@1.11.6': + '@webassemblyjs/helper-numbers@1.13.2': dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - '@webassemblyjs/helper-wasm-section@1.12.1': + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/ieee754@1.11.6': + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.11.6': + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.11.6': {} + '@webassemblyjs/utf8@1.13.2': {} - '@webassemblyjs/wasm-edit@1.12.1': + '@webassemblyjs/wasm-edit@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 - '@webassemblyjs/wasm-gen@1.12.1': + '@webassemblyjs/wasm-gen@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wasm-opt@1.12.1': + '@webassemblyjs/wasm-opt@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wasm-parser@1.12.1': + '@webassemblyjs/wasm-parser@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wast-printer@1.12.1': + '@webassemblyjs/wast-printer@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 '@xtuc/ieee754@1.2.0': {} @@ -2387,48 +2425,36 @@ snapshots: dependencies: event-target-shim: 5.0.1 - acorn-import-attributes@1.9.5(acorn@8.12.1): - dependencies: - acorn: 8.12.1 + acorn@8.14.0: {} - acorn@8.12.1: {} + agent-base@7.1.3: {} - ajv-draft-04@1.0.0(ajv@8.16.0): + ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 + ajv: 8.17.1 - ajv-errors@3.0.0(ajv@8.16.0): + ajv-errors@3.0.0(ajv@8.17.1): dependencies: - ajv: 8.16.0 + ajv: 8.17.1 - ajv-formats@2.1.1(ajv@8.16.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 + ajv: 8.17.1 - ajv@6.12.6: + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: + ajv: 8.17.1 fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.16.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-regex@5.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -2440,21 +2466,20 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.1: + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bound: 1.0.3 + is-array-buffer: 3.0.5 - arraybuffer.prototype.slice@1.0.3: + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 as-table@1.0.55: dependencies: @@ -2467,9 +2492,11 @@ snapshots: ast-types@0.14.2: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 + + astring@1.9.0: {} - astring@1.8.6: {} + async-function@1.0.0: {} async@2.6.4: dependencies: @@ -2477,16 +2504,16 @@ snapshots: available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 - babel-plugin-styled-components@2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.26.9)(styled-components@5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2))(supports-color@5.5.0): dependencies: - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2) + styled-components: 5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2) transitivePeerDependencies: - '@babel/core' - supports-color @@ -2508,36 +2535,39 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.2: + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001641 - electron-to-chromium: 1.4.825 - node-releases: 2.0.14 - update-browserslist-db: 1.1.0(browserslist@4.23.2) + caniuse-lite: 1.0.30001700 + electron-to-chromium: 1.5.102 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) buffer-from@1.1.2: {} builtins@1.0.3: {} - call-bind@1.0.7: + call-bind-apply-helpers@1.0.2: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 set-function-length: 1.2.2 + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.2.7 + call-me-maybe@1.0.2: {} camelize@1.0.1: {} - caniuse-lite@1.0.30001641: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + caniuse-lite@1.0.30001700: {} chalk@4.1.2: dependencies: @@ -2574,16 +2604,10 @@ snapshots: clsx@1.2.1: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} colorette@1.4.0: {} @@ -2596,7 +2620,7 @@ snapshots: convert-source-map@2.0.0: {} - core-js@3.37.1: {} + core-js@3.40.0: {} css-color-keywords@1.0.0: {} @@ -2608,31 +2632,31 @@ snapshots: data-uri-to-buffer@2.0.2: {} - data-view-buffer@1.0.1: + data-view-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-length@1.0.1: + data-view-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: + data-view-byte-offset@1.0.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 debug@3.2.7: dependencies: ms: 2.1.3 - debug@4.3.5(supports-color@5.5.0): + debug@4.4.0(supports-color@5.5.0): dependencies: - ms: 2.1.2 + ms: 2.1.3 optionalDependencies: supports-color: 5.5.0 @@ -2640,9 +2664,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -2652,106 +2676,114 @@ snapshots: dependency-graph@0.11.0: {} - dompurify@2.5.6: {} + dompurify@2.5.8: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - electron-to-chromium@1.4.825: {} + electron-to-chromium@1.5.102: {} emoji-regex@8.0.0: {} - enhanced-resolve@5.17.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - es-abstract@1.23.3: + es-abstract@1.23.9: dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 es-aggregate-error@1.0.13: dependencies: define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 function-bind: 1.1.2 globalthis: 1.0.4 has-property-descriptors: 1.0.2 set-function-name: 2.0.2 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} - es-object-atoms@1.0.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: + es-set-tostringtag@2.1.0: dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 - es-to-primitive@1.2.1: + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-date-object: 1.1.0 + is-symbol: 1.1.1 es6-promise@3.3.1: {} - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} + escalade@3.2.0: {} eslint-scope@5.1.1: dependencies: @@ -2786,15 +2818,19 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 - - fast-json-stable-stringify@2.1.0: {} + micromatch: 4.0.8 fast-memoize@2.5.2: {} fast-safe-stringify@2.1.1: {} - fastq@1.17.1: + fast-uri@3.0.6: {} + + fast-xml-parser@4.5.2: + dependencies: + strnum: 1.0.5 + + fastq@1.19.0: dependencies: reusify: 1.0.4 @@ -2802,7 +2838,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - for-each@0.3.3: + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -2821,12 +2857,14 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: + function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -2834,24 +2872,34 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.4: + get-intrinsic@1.2.7: dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 get-source@2.0.12: dependencies: data-uri-to-buffer: 2.0.2 source-map: 0.6.1 - get-symbol-description@1.0.2: + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 glob-parent@5.1.2: dependencies: @@ -2878,11 +2926,9 @@ snapshots: globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -2893,9 +2939,9 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.18.0 + uglify-js: 3.19.3 - has-bigints@1.0.2: {} + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -2903,15 +2949,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 - has-proto@1.0.3: {} + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown@2.0.2: dependencies: @@ -2925,6 +2973,13 @@ snapshots: http2-client@1.3.5: {} + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + immer@9.0.21: {} inflight@1.0.6: @@ -2934,94 +2989,132 @@ snapshots: inherits@2.0.4: {} - internal-slot@1.0.7: + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 - is-array-buffer@3.0.4: + is-async-function@2.1.1: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - is-bigint@1.0.4: + is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 + has-bigints: 1.1.0 is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.1.2: + is-boolean-object@1.2.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: + is-data-view@1.0.2: dependencies: - is-typed-array: 1.1.13 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 - is-date-object@1.0.5: + is-date-object@1.1.0: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.3 + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-negative-zero@2.0.3: {} + is-map@2.0.3: {} - is-number-object@1.0.7: + is-number-object@1.1.1: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-number@7.0.0: {} is-reference@1.2.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 - is-regex@1.1.4: + is-regex@1.2.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 - is-shared-array-buffer@1.0.3: + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 - is-string@1.0.7: + is-string@1.1.1: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-symbol@1.0.4: + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: dependencies: - has-symbols: 1.0.3 + which-typed-array: 1.1.18 + + is-weakmap@2.0.2: {} - is-typed-array@1.1.13: + is-weakref@1.1.1: dependencies: - which-typed-array: 1.1.15 + call-bound: 1.0.3 - is-weakref@1.0.2: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 isarray@2.0.5: {} jest-worker@27.5.1: dependencies: - '@types/node': 20.14.10 + '@types/node': 22.13.4 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -3033,9 +3126,9 @@ snapshots: dependencies: argparse: 2.0.1 - jsep@1.3.8: {} + jsep@1.4.0: {} - jsesc@2.5.2: {} + jsesc@3.1.0: {} json-parse-even-better-errors@2.3.1: {} @@ -3043,8 +3136,6 @@ snapshots: dependencies: foreach: 2.0.6 - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} json5@2.2.3: {} @@ -3057,10 +3148,11 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonpath-plus@6.0.1: - optional: true - - jsonpath-plus@7.1.0: {} + jsonpath-plus@10.2.0: + dependencies: + '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) + '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) + jsep: 1.4.0 jsonpointer@5.0.1: {} @@ -3090,13 +3182,17 @@ snapshots: mark.js@8.11.1: {} + markdown-escape@2.0.0: {} + marked@4.3.0: {} + math-intrinsics@1.1.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -3121,37 +3217,35 @@ snapshots: dependencies: minimist: 1.2.8 - mobx-react-lite@3.4.3(mobx@6.13.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): + mobx-react-lite@3.4.3(mobx@6.13.6)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: - mobx: 6.13.0 + mobx: 6.13.6 react: 17.0.2 optionalDependencies: react-dom: 17.0.2(react@17.0.2) - mobx-react@7.6.0(mobx@6.13.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): + mobx-react@7.6.0(mobx@6.13.6)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: - mobx: 6.13.0 - mobx-react-lite: 3.4.3(mobx@6.13.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + mobx: 6.13.6 + mobx-react-lite: 3.4.3(mobx@6.13.6)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react: 17.0.2 optionalDependencies: react-dom: 17.0.2(react@17.0.2) - mobx@6.13.0: {} - - ms@2.1.2: {} + mobx@6.13.6: {} ms@2.1.3: {} neo-async@2.6.2: {} - nimma@0.2.2: + nimma@0.2.3: dependencies: - '@jsep-plugin/regex': 1.0.3(jsep@1.3.8) - '@jsep-plugin/ternary': 1.1.3(jsep@1.3.8) - astring: 1.8.6 - jsep: 1.3.8 + '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) + '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0) + astring: 1.9.0 + jsep: 1.4.0 optionalDependencies: - jsonpath-plus: 6.0.1 + jsonpath-plus: 10.2.0 lodash.topath: 4.5.2 node-fetch-h2@2.3.0: @@ -3170,7 +3264,7 @@ snapshots: dependencies: es6-promise: 3.3.1 - node-releases@2.0.14: {} + node-releases@2.0.19: {} node-sarif-builder@2.0.3: dependencies: @@ -3195,7 +3289,7 @@ snapshots: oas-kit-common: 1.0.8 reftools: 1.1.9 yaml: 1.10.2 - yargs: 17.0.1 + yargs: 17.7.2 oas-schema-walker@1.1.5: {} @@ -3212,35 +3306,44 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.2: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} - object.assign@4.1.5: + object.assign@4.1.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - has-symbols: 1.0.3 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 object-keys: 1.1.1 once@1.4.0: dependencies: wrappy: 1.0.2 - openapi-sampler@1.5.1: + openapi-sampler@1.6.1: dependencies: '@types/json-schema': 7.0.15 + fast-xml-parser: 4.5.2 json-pointer: 0.6.2 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + path-browserify@1.0.1: {} path-is-absolute@1.0.1: {} path-parse@1.0.7: {} - perfect-scrollbar@1.5.5: {} + perfect-scrollbar@1.5.6: {} - picocolors@1.0.1: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -3248,7 +3351,7 @@ snapshots: polished@4.3.1: dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.26.9 pony-cause@1.1.1: {} @@ -3260,7 +3363,7 @@ snapshots: transitivePeerDependencies: - supports-color - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} postcss-value-parser@4.2.0: {} @@ -3274,8 +3377,6 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - punycode@2.3.1: {} - queue-microtask@1.2.3: {} randombytes@2.1.0: @@ -3291,8 +3392,6 @@ snapshots: react-is@16.13.1: {} - react-is@18.3.1: {} - react-tabs@3.2.3(react@17.0.2): dependencies: clsx: 1.2.1 @@ -3314,25 +3413,25 @@ snapshots: dependencies: picomatch: 2.3.1 - redoc@2.0.0(core-js@3.37.1)(mobx@6.13.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2))(webpack@5.92.1): + redoc@2.0.0(core-js@3.40.0)(mobx@6.13.6)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(styled-components@5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2))(webpack@5.98.0): dependencies: - '@redocly/openapi-core': 1.0.2 + '@redocly/openapi-core': 1.29.0 call-me-maybe: 1.0.2 classnames: 2.5.1 - core-js: 3.37.1 + core-js: 3.40.0 decko: 1.2.0 - dompurify: 2.5.6 + dompurify: 2.5.8 eventemitter3: 4.0.7 fast-safe-stringify: 2.1.1 json-pointer: 0.6.2 lunr: 2.3.9 mark.js: 8.11.1 marked: 4.3.0 - mobx: 6.13.0 - mobx-react: 7.6.0(mobx@6.13.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - openapi-sampler: 1.5.1 + mobx: 6.13.6 + mobx-react: 7.6.0(mobx@6.13.6)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + openapi-sampler: 1.6.1 path-browserify: 1.0.1 - perfect-scrollbar: 1.5.5 + perfect-scrollbar: 1.5.6 polished: 4.3.1 prismjs: 1.29.0 prop-types: 15.8.1 @@ -3341,25 +3440,39 @@ snapshots: react-tabs: 3.2.3(react@17.0.2) slugify: 1.4.7 stickyfill: 1.1.1 - style-loader: 3.3.4(webpack@5.92.1) - styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2) + style-loader: 3.3.4(webpack@5.98.0) + styled-components: 5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2) swagger2openapi: 7.0.8 url-template: 2.0.8 yaml: 2.1.3 transitivePeerDependencies: - encoding - react-native + - supports-color - webpack + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + reftools@1.1.9: {} regenerator-runtime@0.14.1: {} - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 set-function-name: 2.0.2 require-directory@2.1.1: {} @@ -3368,15 +3481,15 @@ snapshots: reserved@0.1.2: {} - resolve@1.22.8: + resolve@1.22.10: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 reusify@1.0.4: {} - rollup@2.79.1: + rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 @@ -3384,20 +3497,26 @@ snapshots: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.2: + safe-array-concat@1.1.3: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.2.1: {} - safe-regex-test@1.0.3: + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - is-regex: 1.1.4 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 safe-stable-stringify@1.1.1: {} @@ -3406,17 +3525,18 @@ snapshots: loose-envify: 1.4.0 object-assign: 4.1.1 - schema-utils@3.3.0: + schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) semver@5.7.2: {} semver@6.3.1: {} - semver@7.6.2: {} + semver@7.7.1: {} serialize-javascript@6.0.2: dependencies: @@ -3427,8 +3547,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -3438,6 +3558,12 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + shallowequal@1.1.0: {} should-equal@2.0.0: @@ -3466,20 +3592,41 @@ snapshots: should-type-adaptors: 1.1.0 should-util: 1.0.1 - side-channel@1.0.6: + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 - simple-eval@1.0.0: + simple-eval@1.0.1: dependencies: - jsep: 1.3.8 + jsep: 1.4.0 simple-websocket@9.1.0: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.4.0(supports-color@5.5.0) queue-microtask: 1.2.3 randombytes: 2.1.0 readable-stream: 3.6.2 @@ -3513,24 +3660,28 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string.prototype.trim@1.2.9: + string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 - string.prototype.trimend@1.0.8: + string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string_decoder@1.3.0: dependencies: @@ -3540,23 +3691,25 @@ snapshots: dependencies: ansi-regex: 5.0.1 - style-loader@3.3.4(webpack@5.92.1): + strnum@1.0.5: {} + + style-loader@3.3.4(webpack@5.98.0): dependencies: - webpack: 5.92.1 + webpack: 5.98.0 - styled-components@5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2): + styled-components@5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2): dependencies: - '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) - '@babel/traverse': 7.24.7(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.26.9(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.2 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@17.0.2(react@17.0.2))(react-is@18.3.1)(react@17.0.2))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.26.9)(styled-components@5.3.11(@babel/core@7.26.9)(react-dom@17.0.2(react@17.0.2))(react-is@16.13.1)(react@17.0.2))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - react-is: 18.3.1 + react-is: 16.13.1 shallowequal: 1.1.0 supports-color: 5.5.0 transitivePeerDependencies: @@ -3579,7 +3732,7 @@ snapshots: swagger2openapi@7.0.8: dependencies: call-me-maybe: 1.0.2 - node-fetch: 2.6.7 + node-fetch: 2.7.0 node-fetch-h2: 2.3.0 node-readfiles: 0.2.0 oas-kit-common: 1.0.8 @@ -3588,32 +3741,30 @@ snapshots: oas-validator: 5.0.8 reftools: 1.1.9 yaml: 1.10.2 - yargs: 17.0.1 + yargs: 17.7.2 transitivePeerDependencies: - encoding tapable@2.2.1: {} - terser-webpack-plugin@5.3.10(webpack@5.92.1): + terser-webpack-plugin@5.3.11(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.31.2 - webpack: 5.92.1 + terser: 5.39.0 + webpack: 5.98.0 - terser@5.31.2: + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 text-table@0.2.0: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -3622,63 +3773,62 @@ snapshots: tslib@1.14.1: {} - tslib@2.6.3: {} + tslib@2.8.1: {} - typed-array-buffer@1.0.2: + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: + typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - uglify-js@3.18.0: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + uglify-js@3.19.3: optional: true - unbox-primitive@1.0.2: + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 - undici-types@5.26.5: {} + undici-types@6.20.0: {} universalify@2.0.1: {} - update-browserslist-db@1.1.0(browserslist@4.23.2): + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 + uri-js-replace@1.0.1: {} urijs@1.19.11: {} @@ -3692,7 +3842,7 @@ snapshots: dependencies: builtins: 1.0.3 - watchpack@2.4.1: + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 @@ -3701,19 +3851,18 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.92.1: + webpack@5.98.0: dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.2 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -3722,10 +3871,10 @@ snapshots: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.92.1) - watchpack: 2.4.1 + terser-webpack-plugin: 5.3.11(webpack@5.98.0) + watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -3737,20 +3886,44 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-boxed-primitive@1.0.2: + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + + which-collection@1.0.2: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 - which-typed-array@1.1.15: + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.5 + gopd: 1.2.0 has-tostringtag: 1.0.2 wordwrap@1.0.0: {} @@ -3782,7 +3955,7 @@ snapshots: yargs@17.0.1: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -3792,7 +3965,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/private/path/pathpol/acl.go b/private/path/pathpol/acl.go index bf7d846948..7a07fad96b 100644 --- a/private/path/pathpol/acl.go +++ b/private/path/pathpol/acl.go @@ -69,11 +69,11 @@ func (a *ACL) UnmarshalJSON(b []byte) error { return validateACL(a.Entries) } -func (a *ACL) MarshalYAML() (interface{}, error) { +func (a *ACL) MarshalYAML() (any, error) { return a.Entries, nil } -func (a *ACL) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (a *ACL) UnmarshalYAML(unmarshal func(any) error) error { if err := unmarshal(&a.Entries); err != nil { return err } @@ -168,11 +168,11 @@ func (ae *ACLEntry) UnmarshalJSON(b []byte) error { return ae.LoadFromString(str) } -func (ae *ACLEntry) MarshalYAML() (interface{}, error) { +func (ae *ACLEntry) MarshalYAML() (any, error) { return ae.String(), nil } -func (ae *ACLEntry) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (ae *ACLEntry) UnmarshalYAML(unmarshal func(any) error) error { var str string err := unmarshal(&str) if err != nil { diff --git a/private/path/pathpol/sequence.go b/private/path/pathpol/sequence.go index 29f7aa2da3..c5a927613e 100644 --- a/private/path/pathpol/sequence.go +++ b/private/path/pathpol/sequence.go @@ -122,11 +122,11 @@ func (s *Sequence) UnmarshalJSON(b []byte) error { return nil } -func (s *Sequence) MarshalYAML() (interface{}, error) { +func (s *Sequence) MarshalYAML() (any, error) { return s.srcstr, nil } -func (s *Sequence) UnmarshalYAML(unmarshal func(interface{}) error) error { +func (s *Sequence) UnmarshalYAML(unmarshal func(any) error) error { var str string err := unmarshal(&str) if err != nil { @@ -145,7 +145,7 @@ type errorListener struct { msg string } -func (l *errorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol interface{}, line, +func (l *errorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol any, line, column int, msg string, e antlr.RecognitionException) { //fmt.Printf("Error: %s\n", msg) diff --git a/private/ringbuf/ringbuf.go b/private/ringbuf/ringbuf.go index 56a3330b6d..6a82ae2402 100644 --- a/private/ringbuf/ringbuf.go +++ b/private/ringbuf/ringbuf.go @@ -20,9 +20,9 @@ import ( "github.com/scionproto/scion/private/ringbuf/internal/metrics" ) -type Entry interface{} +type Entry any type EntryList []Entry -type NewEntryF func() interface{} +type NewEntryF func() any // Ring is a classic generic ring buffer on top of a fixed-sized slice. It is thread-safe. type Ring struct { diff --git a/private/segment/segfetcher/fetcher.go b/private/segment/segfetcher/fetcher.go index 66ca014356..c367253a65 100644 --- a/private/segment/segfetcher/fetcher.go +++ b/private/segment/segfetcher/fetcher.go @@ -16,7 +16,7 @@ package segfetcher import ( "context" - "math/rand" + "math/rand/v2" "net" "time" @@ -145,7 +145,7 @@ func (f *Fetcher) nextQuery(segs Segments) time.Time { // by the minimum and the configured query interval. func (f *Fetcher) nearestNextQueryTime(now, nextQuery time.Time) time.Time { // Adding +-10% random jitter - jitterPercent := time.Duration(rand.Intn(20) - 10) + jitterPercent := time.Duration(rand.IntN(20) - 10) if earliest := now.Add(minQueryInterval); nextQuery.Before(earliest) { jitter := minQueryInterval * jitterPercent / 100 diff --git a/private/service/statuspages.go b/private/service/statuspages.go index 98cd5f9d60..241fca19de 100644 --- a/private/service/statuspages.go +++ b/private/service/statuspages.go @@ -125,7 +125,7 @@ func (s StatusPages) Register(serveMux *http.ServeMux, elemId string) error { } // NewConfigStatusPage returns a page with the specified TOML config. -func NewConfigStatusPage(config interface{}) StatusPage { +func NewConfigStatusPage(config any) StatusPage { handler := func(w http.ResponseWriter, r *http.Request) { var buf bytes.Buffer err := toml.NewEncoder(&buf).Encode(config) diff --git a/private/storage/beacon/sqlite/db.go b/private/storage/beacon/sqlite/db.go index 69f90bfcea..0d2b67efae 100644 --- a/private/storage/beacon/sqlite/db.go +++ b/private/storage/beacon/sqlite/db.go @@ -142,11 +142,11 @@ func (e *executor) CandidateBeacons( var rawBeacon sql.RawBytes var inIfID iface.ID if err = rows.Scan(&rawBeacon, &inIfID); err != nil { - return nil, db.NewReadError(beacon.ErrReadingRows, err) + return nil, db.NewReadError("failed to read rows", err) } s, err := beacon.UnpackBeacon(rawBeacon) if err != nil { - return nil, db.NewDataError(beacon.ErrParse, err) + return nil, db.NewDataError("failed to parse entry", err) } beacons = append(beacons, beacon.Beacon{Segment: s, InIfID: uint16(inIfID)}) } @@ -249,8 +249,8 @@ func (e *executor) DeleteBeacon(ctx context.Context, partialID string) error { return err } -func (e *executor) buildQuery(params *storagebeacon.QueryParams) (string, []interface{}) { - var args []interface{} +func (e *executor) buildQuery(params *storagebeacon.QueryParams) (string, []any) { + var args []any query := "SELECT DISTINCT RowID, LastUpdated, Usage, Beacon, InIntfID FROM Beacons" if params == nil { return query, args diff --git a/private/storage/db/BUILD.bazel b/private/storage/db/BUILD.bazel index 9ed6145d99..38c27701f3 100644 --- a/private/storage/db/BUILD.bazel +++ b/private/storage/db/BUILD.bazel @@ -14,7 +14,6 @@ go_library( importpath = "github.com/scionproto/scion/private/storage/db", visibility = ["//visibility:public"], deps = [ - "//pkg/private/common:go_default_library", "//pkg/private/prom:go_default_library", "//pkg/private/serrors:go_default_library", "@org_modernc_sqlite//:go_default_library", @@ -25,4 +24,5 @@ go_test( name = "go_default_test", srcs = ["errors_test.go"], embed = [":go_default_library"], + deps = ["@com_github_stretchr_testify//require:go_default_library"], ) diff --git a/private/storage/db/errors.go b/private/storage/db/errors.go index 1e027a1dd4..7ee40e5bff 100644 --- a/private/storage/db/errors.go +++ b/private/storage/db/errors.go @@ -15,7 +15,6 @@ package db import ( - "github.com/scionproto/scion/pkg/private/common" "github.com/scionproto/scion/pkg/private/serrors" ) @@ -32,27 +31,27 @@ var ( ErrTx = serrors.New("db: transaction error") ) -func NewTxError(msg common.ErrMsg, err error, logCtx ...interface{}) error { +func NewTxError(msg string, err error, logCtx ...any) error { return serrors.JoinNoStack(ErrTx, err, - append([]interface{}{"detailMsg", msg}, logCtx...)...) + append([]any{"detailMsg", msg}, logCtx...)...) } -func NewInputDataError(msg common.ErrMsg, err error, logCtx ...interface{}) error { +func NewInputDataError(msg string, err error, logCtx ...any) error { return serrors.JoinNoStack(ErrInvalidInputData, err, - append([]interface{}{"detailMsg", msg}, logCtx...)...) + append([]any{"detailMsg", msg}, logCtx...)...) } -func NewDataError(msg common.ErrMsg, err error, logCtx ...interface{}) error { +func NewDataError(msg string, err error, logCtx ...any) error { return serrors.JoinNoStack(ErrDataInvalid, err, - append([]interface{}{"detailMsg", msg}, logCtx...)...) + append([]any{"detailMsg", msg}, logCtx...)...) } -func NewReadError(msg common.ErrMsg, err error, logCtx ...interface{}) error { +func NewReadError(msg string, err error, logCtx ...any) error { return serrors.JoinNoStack(ErrReadFailed, err, - append([]interface{}{"detailMsg", msg}, logCtx...)...) + append([]any{"detailMsg", msg}, logCtx...)...) } -func NewWriteError(msg common.ErrMsg, err error, logCtx ...interface{}) error { +func NewWriteError(msg string, err error, logCtx ...any) error { return serrors.JoinNoStack(ErrWriteFailed, err, - append([]interface{}{"detailMsg", msg}, logCtx...)...) + append([]any{"detailMsg", msg}, logCtx...)...) } diff --git a/private/storage/db/errors_test.go b/private/storage/db/errors_test.go index ee9397b964..cdacb67d83 100644 --- a/private/storage/db/errors_test.go +++ b/private/storage/db/errors_test.go @@ -17,41 +17,20 @@ package db import ( "fmt" "testing" + + "github.com/stretchr/testify/require" ) func TestErrFmt(t *testing.T) { - tests := []struct { - Err error - Expected string - }{ - { - Err: NewTxError("test", nil), - Expected: fmt.Sprintf("%s {detailMsg=test}", ErrTx), - }, - { - Err: NewInputDataError("test", nil), - Expected: fmt.Sprintf("%s {detailMsg=test}", ErrInvalidInputData), - }, - { - Err: NewDataError("test", nil), - Expected: fmt.Sprintf("%s {detailMsg=test}", ErrDataInvalid), - }, - { - Err: NewReadError("test", nil), - Expected: fmt.Sprintf("%s {detailMsg=test}", ErrReadFailed), - }, - { - Err: NewWriteError("test", nil), - Expected: fmt.Sprintf("%s {detailMsg=test}", ErrWriteFailed), - }, - } - for _, test := range tests { - checkStringEq(t, test.Err.Error(), test.Expected) + f := func(t *testing.T, expect error, err error) { + t.Helper() + expectedMsg := fmt.Sprintf("%s {detailMsg=test}", expect) + require.Equal(t, expectedMsg, err.Error()) } -} -func checkStringEq(t *testing.T, actual, expected string) { - if actual != expected { - t.Fatalf("Expected %s to be %s", actual, expected) - } + f(t, ErrTx, NewTxError("test", nil)) + f(t, ErrInvalidInputData, NewInputDataError("test", nil)) + f(t, ErrDataInvalid, NewDataError("test", nil)) + f(t, ErrReadFailed, NewReadError("test", nil)) + f(t, ErrWriteFailed, NewWriteError("test", nil)) } diff --git a/private/storage/db/sqler.go b/private/storage/db/sqler.go index 946474a13a..53afade42c 100644 --- a/private/storage/db/sqler.go +++ b/private/storage/db/sqler.go @@ -26,9 +26,9 @@ var _ Sqler = (*sql.Tx)(nil) // Sqler contains the common functions of *sql.DB and *sql.Tx. type Sqler interface { - ExecContext(context.Context, string, ...interface{}) (sql.Result, error) - QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) - QueryRowContext(context.Context, string, ...interface{}) *sql.Row + ExecContext(context.Context, string, ...any) (sql.Result, error) + QueryContext(context.Context, string, ...any) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...any) *sql.Row } // DoInTx executes the given action in a transaction. If db is already a transaction the action is diff --git a/private/storage/drkey/level1/dbtest/BUILD.bazel b/private/storage/drkey/level1/dbtest/BUILD.bazel index 9c0e892365..23d39e00df 100644 --- a/private/storage/drkey/level1/dbtest/BUILD.bazel +++ b/private/storage/drkey/level1/dbtest/BUILD.bazel @@ -8,7 +8,6 @@ go_library( deps = [ "//pkg/addr:go_default_library", "//pkg/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "//private/drkey/drkeytest:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", ], diff --git a/private/storage/drkey/level1/dbtest/dbtest.go b/private/storage/drkey/level1/dbtest/dbtest.go index 8ecd3efe43..afa914adf5 100644 --- a/private/storage/drkey/level1/dbtest/dbtest.go +++ b/private/storage/drkey/level1/dbtest/dbtest.go @@ -23,7 +23,6 @@ import ( "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/private/drkey/drkeytest" ) @@ -58,10 +57,8 @@ func testDRKeyLevel1(t *testing.T, db drkey.Level1DB) { defer cancelF() epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: time.Now(), - NotAfter: time.Now().Add(timeOffset), - }, + NotBefore: time.Now(), + NotAfter: time.Now().Add(timeOffset), } protoId := drkey.Protocol(0) drkeyLevel1 := drkeytest.GetLevel1(t, protoId, epoch, srcIA, dstIA) diff --git a/private/storage/drkey/level2/dbtest/BUILD.bazel b/private/storage/drkey/level2/dbtest/BUILD.bazel index e98fb9459d..514c2d0b53 100644 --- a/private/storage/drkey/level2/dbtest/BUILD.bazel +++ b/private/storage/drkey/level2/dbtest/BUILD.bazel @@ -8,7 +8,6 @@ go_library( deps = [ "//pkg/addr:go_default_library", "//pkg/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "//private/drkey/drkeytest:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", diff --git a/private/storage/drkey/level2/dbtest/dbtest.go b/private/storage/drkey/level2/dbtest/dbtest.go index cfaac344ca..e895c9c441 100644 --- a/private/storage/drkey/level2/dbtest/dbtest.go +++ b/private/storage/drkey/level2/dbtest/dbtest.go @@ -24,7 +24,6 @@ import ( "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/private/drkey/drkeytest" ) @@ -60,10 +59,8 @@ func testDRKeyLevel2(t *testing.T, db drkey.Level2DB) { ctx, cancelF := context.WithTimeout(context.Background(), time.Second) defer cancelF() epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: time.Now(), - NotAfter: time.Now().Add(timeOffset), - }, + NotBefore: time.Now(), + NotAfter: time.Now().Add(timeOffset), } protoId := drkey.Protocol(0) drkeyLevel1 := drkeytest.GetLevel1(t, protoId, epoch, srcIA, dstIA) diff --git a/private/storage/drkey/secret/dbtest/BUILD.bazel b/private/storage/drkey/secret/dbtest/BUILD.bazel index 60b43d8d8c..37a568f188 100644 --- a/private/storage/drkey/secret/dbtest/BUILD.bazel +++ b/private/storage/drkey/secret/dbtest/BUILD.bazel @@ -8,7 +8,6 @@ go_library( deps = [ "//pkg/addr:go_default_library", "//pkg/drkey:go_default_library", - "//pkg/scrypto/cppki:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/private/storage/drkey/secret/dbtest/dbtest.go b/private/storage/drkey/secret/dbtest/dbtest.go index 33ba0d7e04..8f1959a455 100644 --- a/private/storage/drkey/secret/dbtest/dbtest.go +++ b/private/storage/drkey/secret/dbtest/dbtest.go @@ -24,7 +24,6 @@ import ( "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/drkey" - "github.com/scionproto/scion/pkg/scrypto/cppki" ) const ( @@ -57,10 +56,8 @@ func testDB(t *testing.T, db drkey.SecretValueDB) { defer cancelF() epoch := drkey.Epoch{ - Validity: cppki.Validity{ - NotBefore: time.Now(), - NotAfter: time.Now().Add(timeOffset), - }, + NotBefore: time.Now(), + NotAfter: time.Now().Add(timeOffset), } asSecret := []byte{0, 1, 2, 3, 4, 5, 6, 7} asSecret = append(asSecret, byte(srcIA)) diff --git a/private/storage/path/dbtest/dbtest.go b/private/storage/path/dbtest/dbtest.go index 920cbe499e..38882c92c8 100644 --- a/private/storage/path/dbtest/dbtest.go +++ b/private/storage/path/dbtest/dbtest.go @@ -18,7 +18,7 @@ import ( "bytes" "context" "fmt" - mrand "math/rand" + "math/rand/v2" "sort" "testing" "time" @@ -515,7 +515,7 @@ func AllocPathSegment(t *testing.T, ifs []uint64, infoTS uint32) (*seg.PathSegme }, } - pseg, err := seg.CreateSegment(time.Unix(int64(infoTS), 0), uint16(mrand.Int())) + pseg, err := seg.CreateSegment(time.Unix(int64(infoTS), 0), uint16(rand.Int())) require.NoError(t, err) for _, ase := range ases { signer := graph.NewSigner() diff --git a/private/storage/path/path.go b/private/storage/path/path.go index 5c49441706..3a4a3ba377 100644 --- a/private/storage/path/path.go +++ b/private/storage/path/path.go @@ -23,7 +23,7 @@ import ( type GroupIDs []uint64 -func (g *GroupIDs) Scan(src interface{}) error { +func (g *GroupIDs) Scan(src any) error { var group string switch src := src.(type) { case string: @@ -46,7 +46,7 @@ func (g *GroupIDs) Scan(src interface{}) error { type SegTypes []seg.Type -func (t *SegTypes) Scan(src interface{}) error { +func (t *SegTypes) Scan(src any) error { var group string switch src := src.(type) { case string: diff --git a/private/storage/path/sqlite/sqlite.go b/private/storage/path/sqlite/sqlite.go index 7426d194bb..27dd86711b 100644 --- a/private/storage/path/sqlite/sqlite.go +++ b/private/storage/path/sqlite/sqlite.go @@ -439,8 +439,8 @@ func (e *executor) Get(ctx context.Context, params *query.Params) (query.Results return res, nil } -func (e *executor) buildQuery(params *query.Params) (string, []interface{}) { - var args []interface{} +func (e *executor) buildQuery(params *query.Params) (string, []any) { + var args []any query := []string{ "SELECT DISTINCT s.RowID, s.Segment, s.LastUpdated, group_concat(DISTINCT t.Type), " + "group_concat(DISTINCT h.GroupID) FROM Segments s", diff --git a/private/storage/trust/fspersister/db_test.go b/private/storage/trust/fspersister/db_test.go index fe313b01df..585dd6965d 100644 --- a/private/storage/trust/fspersister/db_test.go +++ b/private/storage/trust/fspersister/db_test.go @@ -37,14 +37,12 @@ const ( type DB struct { storage.TrustDB - Dir string - cleanup []func() + Dir string } func (db *DB) Prepare(t *testing.T, _ context.Context) { - dir, cleanupF := xtest.MustTempDir("", "tmp") + dir := t.TempDir() db.prepare(t, dir) - db.cleanup = append(db.cleanup, cleanupF) } func (db *DB) prepare(t *testing.T, dbDir string) { @@ -61,9 +59,6 @@ func (db *DB) prepare(t *testing.T, dbDir string) { func TestDB(t *testing.T) { testDB := &DB{} dbtest.Run(t, testDB, dbtest.Config{}) - for _, cleanup := range testDB.cleanup { - cleanup() - } } func TestInsertTRCWithFSPersistenceBadCfg(t *testing.T) { @@ -147,10 +142,6 @@ func TestInsertTRCWithFSPersistence(t *testing.T) { persistedTRC := xtest.LoadTRC(t, persistedTRCPath) require.Equal(t, SignedTRC, persistedTRC) }) - - for _, cleanup := range testDB.cleanup { - cleanup() - } } func getModTime(t *testing.T, file string) int64 { diff --git a/private/storage/trust/sqlite/db.go b/private/storage/trust/sqlite/db.go index 1cb02582dc..83e5e307b2 100644 --- a/private/storage/trust/sqlite/db.go +++ b/private/storage/trust/sqlite/db.go @@ -88,7 +88,7 @@ func (e *executor) SignedTRC(ctx context.Context, id cppki.TRCID) (cppki.SignedT sqlQuery := `SELECT trc FROM trcs WHERE isd_id=$1 ORDER BY base DESC, serial DESC LIMIT 1` - args := []interface{}{id.ISD} + args := []any{id.ISD} if !id.Base.IsLatest() { sqlQuery = `SELECT trc FROM trcs WHERE isd_id=$1 AND base=$2 AND serial=$3` args = append(args, id.Base, id.Serial) @@ -150,7 +150,7 @@ func (e *executor) Chains(ctx context.Context, defer e.RUnlock() sqlQuery := []string{"SELECT as_cert, ca_cert FROM chains"} - var args []interface{} + var args []any var filters []string if len(query.SubjectKeyID) != 0 { @@ -274,7 +274,7 @@ func (e *executor) SignedTRCs(ctx context.Context, defer e.RUnlock() var filter string - var args []interface{} + var args []any if len(query.ISD) > 0 { subQ := make([]string, 0, len(query.ISD)) for _, ISD := range query.ISD { diff --git a/private/svc/resolver.go b/private/svc/resolver.go index e4af3741f9..e42ab0e078 100644 --- a/private/svc/resolver.go +++ b/private/svc/resolver.go @@ -16,6 +16,7 @@ package svc import ( "context" + "errors" "net" "net/netip" @@ -34,14 +35,14 @@ import ( // Internal resolver errors. These are implementation details and can change, // and calling code should not depend on them. -const ( - errNilPacket common.ErrMsg = "packet is nil" - errNilUnderlay common.ErrMsg = "underlay is nil" - errUnsupportedPld common.ErrMsg = "unsupported payload type" - errRegistration common.ErrMsg = "unable to open conn" - errWrite common.ErrMsg = "unable to write" - errRead common.ErrMsg = "unable to read" - errDecode common.ErrMsg = "decode failed" +var ( + errNilPacket = errors.New("packet is nil") + errNilUnderlay = errors.New("underlay is nil") + errUnsupportedPld = errors.New("unsupported payload type") + errRegistration = errors.New("unable to open conn") + errWrite = errors.New("unable to write") + errRead = errors.New("unable to read") + errDecode = errors.New("decode failed") ) // For now, the request payload does not need to be dynamic. We initialize it diff --git a/private/svc/resolver_test.go b/private/svc/resolver_test.go index 41de6c71c6..9a0aadd02f 100644 --- a/private/svc/resolver_test.go +++ b/private/svc/resolver_test.go @@ -73,7 +73,7 @@ func TestResolver(t *testing.T) { mockRoundTripper := mock_svc.NewMockRoundTripper(ctrl) mockRoundTripper.EXPECT().RoundTrip(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Do( - func(_, _ interface{}, pkt *snet.Packet, _ interface{}) { + func(_, _ any, pkt *snet.Packet, _ any) { pld := pkt.Payload.(snet.UDPPayload) require.NoError(t, proto.Unmarshal(pld.Payload, &cppb.ServiceResolutionRequest{})) }) diff --git a/private/svc/svc.go b/private/svc/svc.go index b6cc57810b..6b536ed5b4 100644 --- a/private/svc/svc.go +++ b/private/svc/svc.go @@ -16,6 +16,7 @@ package svc import ( + "errors" "net" "github.com/scionproto/scion/pkg/addr" @@ -25,7 +26,7 @@ import ( "github.com/scionproto/scion/pkg/snet" ) -const ErrHandler common.ErrMsg = "Unable to handle SVC request" +var ErrHandler = errors.New("unable to handle SVC request") // Result is used to inform Handler users on the outcome of handler execution. type Result int diff --git a/private/topology/interface.go b/private/topology/interface.go index e5bb6f6984..a04d9b7ac4 100644 --- a/private/topology/interface.go +++ b/private/topology/interface.go @@ -17,7 +17,7 @@ package topology import ( "crypto/sha256" "encoding/json" - "math/rand" + "math/rand/v2" "net" "sort" @@ -230,7 +230,7 @@ func (t *topologyS) Anycast(svc addr.SVC) (*net.UDPAddr, error) { if err != nil { return nil, err } - return addrs[rand.Intn(len(addrs))], nil + return addrs[rand.IntN(len(addrs))], nil } func (t *topologyS) Multicast(svc addr.SVC) ([]*net.UDPAddr, error) { @@ -365,7 +365,7 @@ func (t *topologyS) Writable() *RWTopology { return t.Topology } -func Digest(t interface{}) ([]byte, error) { +func Digest(t any) ([]byte, error) { h := sha256.New() enc := json.NewEncoder(h) if err := enc.Encode(t); err != nil { diff --git a/private/topology/topology.go b/private/topology/topology.go index 1d4a528dba..01657fc543 100644 --- a/private/topology/topology.go +++ b/private/topology/topology.go @@ -18,7 +18,7 @@ package topology import ( "encoding/json" "fmt" - "math/rand" + "math/rand/v2" "net" "net/netip" "os" @@ -666,7 +666,7 @@ func (s ServiceNames) GetRandom() (string, error) { if numServers == 0 { return "", serrors.New("No names present") } - return s[rand.Intn(numServers)], nil + return s[rand.IntN(numServers)], nil } func copyUDPAddr(a *net.UDPAddr) *net.UDPAddr { diff --git a/private/trust/BUILD.bazel b/private/trust/BUILD.bazel index e62405f87f..0a36a074c9 100644 --- a/private/trust/BUILD.bazel +++ b/private/trust/BUILD.bazel @@ -82,12 +82,12 @@ go_test( "//scion-pki/testcrypto:go_default_library", "//scion-pki/trcs:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", "@com_github_patrickmn_go_cache//:go_default_library", "@com_github_prometheus_client_golang//prometheus/testutil:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/private/trust/db_inspector.go b/private/trust/db_inspector.go index ed523d31d6..23a918b254 100644 --- a/private/trust/db_inspector.go +++ b/private/trust/db_inspector.go @@ -17,7 +17,7 @@ package trust import ( "context" "fmt" - "math/rand" + "math/rand/v2" "time" "github.com/patrickmn/go-cache" @@ -167,7 +167,7 @@ func (i CachingInspector) HasAttributes(ctx context.Context, ia addr.IA, return hasAttributes, nil } -func (i CachingInspector) cacheGet(key string, reqType string) (interface{}, bool) { +func (i CachingInspector) cacheGet(key string, reqType string) (any, bool) { if i.Cache == nil { return nil, false } @@ -185,7 +185,7 @@ func (i CachingInspector) cacheGet(key string, reqType string) (interface{}, boo return result, ok } -func (i CachingInspector) cacheAdd(key string, value interface{}, d time.Duration) { +func (i CachingInspector) cacheAdd(key string, value any, d time.Duration) { if i.Cache == nil { return } @@ -197,5 +197,5 @@ func (i CachingInspector) cacheExpiration() time.Duration { if dur == 0 { dur = defaultCacheExpiration } - return time.Duration(rand.Int63n(int64(dur-(dur/2))) + int64(dur/2)) + return time.Duration(rand.Int64N(int64(dur-(dur/2))) + int64(dur/2)) } diff --git a/private/trust/dbtest/dbtest_test.go b/private/trust/dbtest/dbtest_test.go index 939d50b4da..ad2d73cf7e 100644 --- a/private/trust/dbtest/dbtest_test.go +++ b/private/trust/dbtest/dbtest_test.go @@ -31,8 +31,7 @@ func TestUpdateCrypto(t *testing.T) { t.Skip("Only runs if -update-non-deterministic is specified") } - dir, cleanF := xtest.MustTempDir("", "trustdbtest") - defer cleanF() + dir := t.TempDir() testdata, err := filepath.Abs("./testdata") require.NoError(t, err) diff --git a/private/trust/grpc/BUILD.bazel b/private/trust/grpc/BUILD.bazel index 9214748926..446c95cdd3 100644 --- a/private/trust/grpc/BUILD.bazel +++ b/private/trust/grpc/BUILD.bazel @@ -20,8 +20,8 @@ go_library( "//private/tracing:go_default_library", "//private/trust:go_default_library", "//private/trust/internal/metrics:go_default_library", - "@com_github_golang_protobuf//ptypes/timestamp", "@com_github_opentracing_opentracing_go//:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) @@ -47,7 +47,6 @@ go_test( "//private/trust/internal/metrics:go_default_library", "//scion-pki/testcrypto:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/private/trust/grpc/proto.go b/private/trust/grpc/proto.go index 00aee5adb8..6632b85b16 100644 --- a/private/trust/grpc/proto.go +++ b/private/trust/grpc/proto.go @@ -17,7 +17,7 @@ package grpc import ( "crypto/x509" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/scionproto/scion/pkg/private/serrors" cppb "github.com/scionproto/scion/pkg/proto/control_plane" diff --git a/private/trust/grpc/proto_test.go b/private/trust/grpc/proto_test.go index 3106755085..36bda50199 100644 --- a/private/trust/grpc/proto_test.go +++ b/private/trust/grpc/proto_test.go @@ -20,7 +20,6 @@ import ( "testing" "time" - "github.com/golang/protobuf/ptypes" "github.com/stretchr/testify/assert" "github.com/scionproto/scion/pkg/addr" @@ -44,11 +43,9 @@ func TestChainQueryToReq(t *testing.T) { req := trustgrpc.ChainQueryToReq(query) assert.Equal(t, uint64(query.IA), req.IsdAs) assert.Equal(t, query.SubjectKeyID, req.SubjectKeyId) - validSince, err := ptypes.Timestamp(req.AtLeastValidSince) - assert.NoError(t, err) + validSince := req.AtLeastValidSince.AsTime() assert.Equal(t, query.Validity.NotBefore, validSince) - validUntil, err := ptypes.Timestamp(req.AtLeastValidUntil) - assert.NoError(t, err) + validUntil := req.AtLeastValidUntil.AsTime() assert.Equal(t, query.Validity.NotAfter, validUntil) } diff --git a/private/trust/main_test.go b/private/trust/main_test.go index 02b4d165aa..392f003418 100644 --- a/private/trust/main_test.go +++ b/private/trust/main_test.go @@ -75,7 +75,7 @@ type chainQueryMatcher struct { skid []byte } -func (m chainQueryMatcher) Matches(x interface{}) bool { +func (m chainQueryMatcher) Matches(x any) bool { v, ok := x.(trust.ChainQuery) if !ok { return false @@ -89,7 +89,7 @@ func (m chainQueryMatcher) String() string { type ctxMatcher struct{} -func (m ctxMatcher) Matches(x interface{}) bool { +func (m ctxMatcher) Matches(x any) bool { _, ok := x.(context.Context) return ok } diff --git a/private/trust/options_test.go b/private/trust/options_test.go index a9e14e5271..e6faf8af96 100644 --- a/private/trust/options_test.go +++ b/private/trust/options_test.go @@ -27,7 +27,7 @@ type OptionsMatcher struct { Server net.Addr } -func (m OptionsMatcher) Matches(x interface{}) bool { +func (m OptionsMatcher) Matches(x any) bool { var o options if opts, ok := x.([]Option); ok { diff --git a/private/trust/signer_gen_test.go b/private/trust/signer_gen_test.go index 1bb80b224d..4412db1a29 100644 --- a/private/trust/signer_gen_test.go +++ b/private/trust/signer_gen_test.go @@ -322,7 +322,7 @@ func TestSignerGenGenerate(t *testing.T) { "rsa key": { keyRing: func(mctrl *gomock.Controller) trust.KeyRing { ring := mock_trust.NewMockKeyRing(mctrl) - priv, err := rsa.GenerateKey(rand.Reader, 512) + priv, err := rsa.GenerateKey(rand.Reader, 1024) require.NoError(t, err) ring.EXPECT().PrivateKeys(gomock.Any()).Return( diff --git a/private/trust/signer_test.go b/private/trust/signer_test.go index 8507a51173..b6bdbd2e90 100644 --- a/private/trust/signer_test.go +++ b/private/trust/signer_test.go @@ -25,10 +25,10 @@ import ( "testing" "time" - "github.com/golang/protobuf/proto" "github.com/prometheus/client_golang/prometheus/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/proto" "github.com/scionproto/scion/pkg/addr" cppb "github.com/scionproto/scion/pkg/proto/control_plane" diff --git a/private/trust/store_test.go b/private/trust/store_test.go index 642b07bde7..6e15d018ff 100644 --- a/private/trust/store_test.go +++ b/private/trust/store_test.go @@ -42,8 +42,8 @@ func TestLoadChains(t *testing.T) { } } noFiles := func(_ string) []string { return nil } - defaultGen := func(t *testing.T) (string, func()) { - dir, cleanF := xtest.MustTempDir("", "trust_load_chains") + defaultGen := func(t *testing.T) string { + dir := t.TempDir() cmd := testcrypto.Cmd(command.StringPather("")) cmd.SetArgs([]string{ @@ -56,20 +56,17 @@ func TestLoadChains(t *testing.T) { require.NoError(t, err) err = os.WriteFile(filepath.Join(dir, "certs", "dummy.pem"), []byte{}, 0666) require.NoError(t, err) - return dir, cleanF + return dir } testCases := map[string]struct { - genCrypto func(t *testing.T) (string, func()) + genCrypto func(t *testing.T) string setupDB func(*gomock.Controller, string) trust.DB assertFunc assert.ErrorAssertionFunc ignored func(dir string) []string loaded func(dir string) []string }{ "valid": { - genCrypto: func(t *testing.T) (string, func()) { - dir, cleanF := defaultGen(t) - return dir, cleanF - }, + genCrypto: defaultGen, setupDB: func(ctlr *gomock.Controller, dir string) trust.DB { db := mock_trust.NewMockDB(ctlr) trc := xtest.LoadTRC(t, filepath.Join(dir, "ISD1/trcs/ISD1-B1-S1.trc")) @@ -94,10 +91,10 @@ func TestLoadChains(t *testing.T) { }, }, "valid with grace period": { - genCrypto: func(t *testing.T) (string, func()) { + genCrypto: func(t *testing.T) string { // note that defaultGen already does a simple testcrypto update, // but we want a full re-gen. - dir, cleanF := defaultGen(t) + dir := defaultGen(t) cmd := testcrypto.Cmd(command.StringPather("")) cmd.SetArgs([]string{ "update", @@ -106,7 +103,7 @@ func TestLoadChains(t *testing.T) { }) err := cmd.Execute() require.NoError(t, err) - return dir, cleanF + return dir }, setupDB: func(ctlr *gomock.Controller, dir string) trust.DB { db := mock_trust.NewMockDB(ctlr) @@ -134,9 +131,7 @@ func TestLoadChains(t *testing.T) { }, }, "invalid dir": { - genCrypto: func(t *testing.T) (string, func()) { - return "./path/to/nowhere", func() {} - }, + genCrypto: func(t *testing.T) string { return "./path/to/nowhere" }, setupDB: func(ctlr *gomock.Controller, _ string) trust.DB { return mock_trust.NewMockDB(ctlr) }, @@ -223,8 +218,7 @@ func TestLoadChains(t *testing.T) { ctlr := gomock.NewController(t) defer ctlr.Finish() - dir, cleanF := tc.genCrypto(t) - defer cleanF() + dir := tc.genCrypto(t) db := tc.setupDB(ctlr, dir) res, err := trust.LoadChains(context.Background(), filepath.Join(dir, "certs"), db) diff --git a/private/trust/verifier.go b/private/trust/verifier.go index 5ee8c4bb08..edae024bcf 100644 --- a/private/trust/verifier.go +++ b/private/trust/verifier.go @@ -18,7 +18,7 @@ import ( "context" "crypto/x509" "fmt" - "math/rand" + "math/rand/v2" "net" "time" @@ -161,7 +161,7 @@ func (v *Verifier) getChains(ctx context.Context, q ChainQuery) ([][]*x509.Certi return chains, nil } -func (v *Verifier) cacheGet(key string, reqType string) (interface{}, bool) { +func (v *Verifier) cacheGet(key string, reqType string) (any, bool) { if v.Cache == nil { return nil, false } @@ -179,7 +179,7 @@ func (v *Verifier) cacheGet(key string, reqType string) (interface{}, bool) { return result, ok } -func (v *Verifier) cacheAdd(key string, value interface{}, d time.Duration) { +func (v *Verifier) cacheAdd(key string, value any, d time.Duration) { if v.Cache == nil { return } @@ -191,7 +191,7 @@ func (v *Verifier) cacheExpiration(chains [][]*x509.Certificate) time.Duration { if dur == 0 { dur = defaultCacheExpiration } - validity := time.Duration(rand.Int63n(int64(dur-(dur/2))) + int64(dur/2)) + validity := time.Duration(rand.Int64N(int64(dur-(dur/2))) + int64(dur/2)) expiration := time.Now().Add(validity) for _, chain := range chains { if notAfter := chain[0].NotAfter; notAfter.Before(expiration) { diff --git a/router/BUILD.bazel b/router/BUILD.bazel index ef54cc4e5e..ae14a80732 100644 --- a/router/BUILD.bazel +++ b/router/BUILD.bazel @@ -5,10 +5,12 @@ go_library( srcs = [ "connector.go", "dataplane.go", + "doc.go", "fnv1aCheap.go", "metrics.go", "serialize_proxy.go", "svc.go", + "underlay.go", ], importpath = "github.com/scionproto/scion/router", visibility = ["//visibility:public"], @@ -35,8 +37,8 @@ go_library( "//router/bfd:go_default_library", "//router/config:go_default_library", "//router/control:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus/promauto:go_default_library", ], @@ -68,9 +70,10 @@ go_test( "//private/underlay/conn:go_default_library", "//router/control:go_default_library", "//router/mock_router:go_default_library", + "//router/underlayproviders:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/router/bfd/BUILD.bazel b/router/bfd/BUILD.bazel index 4bd8fae563..1911f20091 100644 --- a/router/bfd/BUILD.bazel +++ b/router/bfd/BUILD.bazel @@ -14,7 +14,8 @@ go_library( deps = [ "//pkg/log:go_default_library", "//pkg/private/serrors:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "//router/control:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library", ], ) @@ -35,7 +36,7 @@ go_test( "//pkg/log/testlog:go_default_library", "//router/bfd/mock_bfd:go_default_library", "@com_github_golang_mock//gomock:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus/testutil:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", diff --git a/router/bfd/fsm.go b/router/bfd/fsm.go index aa7be91509..794617fd30 100644 --- a/router/bfd/fsm.go +++ b/router/bfd/fsm.go @@ -17,7 +17,7 @@ package bfd import ( "fmt" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" ) // state describes a BFD state machine state. diff --git a/router/bfd/jitter.go b/router/bfd/jitter.go index ce046426d1..ea2f0a74f3 100644 --- a/router/bfd/jitter.go +++ b/router/bfd/jitter.go @@ -16,7 +16,7 @@ package bfd import ( "fmt" - "math/rand" + "math/rand/v2" "time" ) @@ -96,7 +96,7 @@ func (g defaultIntervalGenerator) Generate(x, y int) int { func (g defaultIntervalGenerator) intn(n int) int { if g.Source == nil { - return rand.Intn(n) + return rand.IntN(n) } return g.Source.Intn(n) } diff --git a/router/bfd/session.go b/router/bfd/session.go index dd991fce46..4fd850968e 100644 --- a/router/bfd/session.go +++ b/router/bfd/session.go @@ -16,15 +16,18 @@ package bfd import ( "context" + "crypto/rand" "fmt" "math" + "math/big" "sync" "time" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/log" "github.com/scionproto/scion/pkg/private/serrors" + "github.com/scionproto/scion/router/control" ) const ( @@ -161,6 +164,33 @@ type Session struct { testLogger log.Logger } +// NewSession returns a new BFD session, configured as specified and updating the +// given metrics. BFD packets are transmitted via the given Sender. Up to 10 incoming BFD packets +// per session can be queued waiting for processing; excess traffic will be blocked. +// A random discriminator is generated automatically. This can be used by the recipient to route +// packets to the correct session. +// +// TODO(jiceatscion): blocking incoming traffic (*all of it*) when the BFD queue is full is +// probably the wrong thing to do, but this is what we have been doing so far. +func NewSession(s Sender, cfg control.BFD, metrics Metrics) (*Session, error) { + + // Generate random discriminator. It can't be zero. + discInt, err := rand.Int(rand.Reader, big.NewInt(0xfffffffe)) + if err != nil { + return nil, err + } + disc := layers.BFDDiscriminator(uint32(discInt.Uint64()) + 1) + return &Session{ + Sender: s, + DetectMult: layers.BFDDetectMultiplier(cfg.DetectMult), + DesiredMinTxInterval: cfg.DesiredMinTxInterval, + RequiredMinRxInterval: cfg.RequiredMinRxInterval, + LocalDiscriminator: disc, + ReceiveQueueSize: 10, + Metrics: metrics, + }, nil +} + func (s *Session) String() string { return fmt.Sprintf("local_disc %v, remote_disc %v, sender %v", s.LocalDiscriminator, s.getRemoteDiscriminator(), s.Sender) diff --git a/router/bfd/session_test.go b/router/bfd/session_test.go index 3b094e8acd..526327d9cb 100644 --- a/router/bfd/session_test.go +++ b/router/bfd/session_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/router/cmd/router/BUILD.bazel b/router/cmd/router/BUILD.bazel index f1014ba346..20b4f28c45 100644 --- a/router/cmd/router/BUILD.bazel +++ b/router/cmd/router/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//router/config:go_default_library", "//router/control:go_default_library", "//router/mgmtapi:go_default_library", + "//router/underlayproviders:go_default_library", "@com_github_go_chi_chi_v5//:go_default_library", "@com_github_go_chi_cors//:go_default_library", "@org_golang_x_sync//errgroup:go_default_library", diff --git a/router/cmd/router/main.go b/router/cmd/router/main.go index 72a7c3f48b..fb599391b5 100644 --- a/router/cmd/router/main.go +++ b/router/cmd/router/main.go @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Router is a SCION border router implementation as a system process. package main import ( @@ -36,6 +37,7 @@ import ( "github.com/scionproto/scion/router/config" "github.com/scionproto/scion/router/control" api "github.com/scionproto/scion/router/mgmtapi" + _ "github.com/scionproto/scion/router/underlayproviders" ) var globalCfg config.Config @@ -63,6 +65,11 @@ func realMain(ctx context.Context) error { DataPlane: router.DataPlane{ Metrics: metrics, ExperimentalSCMPAuthentication: globalCfg.Features.ExperimentalSCMPAuthentication, + RunConfig: router.RunConfig{ + NumProcessors: globalCfg.Router.NumProcessors, + NumSlowPathProcessors: globalCfg.Router.NumSlowPathProcessors, + BatchSize: globalCfg.Router.BatchSize, + }, }, ReceiveBufferSize: globalCfg.Router.ReceiveBufferSize, SendBufferSize: globalCfg.Router.SendBufferSize, @@ -130,12 +137,7 @@ func realMain(ctx context.Context) error { }) g.Go(func() error { defer log.HandlePanic() - runConfig := &router.RunConfig{ - NumProcessors: globalCfg.Router.NumProcessors, - NumSlowPathProcessors: globalCfg.Router.NumSlowPathProcessors, - BatchSize: globalCfg.Router.BatchSize, - } - if err := dp.DataPlane.Run(errCtx, runConfig); err != nil { + if err := dp.DataPlane.Run(errCtx); err != nil { return serrors.Wrap("running dataplane", err) } return nil diff --git a/router/connector.go b/router/connector.go index 36c610caa2..8ae0788774 100644 --- a/router/connector.go +++ b/router/connector.go @@ -27,7 +27,7 @@ import ( "github.com/scionproto/scion/router/control" ) -// Connector implements the Dataplane API of the router control process. It sets +// Connector implements the Dataplane interface used by the router control API. It sets // up connections for the DataPlane. type Connector struct { DataPlane DataPlane diff --git a/router/control/conf.go b/router/control/conf.go index 99c9859a8b..fa755fc390 100644 --- a/router/control/conf.go +++ b/router/control/conf.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package control is the configuration API of the router and specifies the management interface +// expected of the router. package control import ( @@ -27,8 +29,8 @@ import ( "github.com/scionproto/scion/private/topology" ) -// Dataplane is the interface that a dataplane has to support to be controlled -// by this controller. +// Dataplane is the interface that this controller or the http status handler expect from the +// Dataplane. type Dataplane interface { CreateIACtx(ia addr.IA) error AddInternalInterface(ia addr.IA, local netip.AddrPort) error @@ -66,13 +68,13 @@ type ObservableDataplane interface { ListSiblingInterfaces() ([]SiblingInterface, error) } -// InternalInterface represents the internal interface of a router. +// InternalInterface represents the internal underlay interface of a router. type InternalInterface struct { IA addr.IA Addr netip.AddrPort } -// ExternalInterface represents an external interface of a router. +// ExternalInterface represents an external underlay interface of a router. type ExternalInterface struct { // InterfaceID is the identifier of the external interface. IfID uint16 @@ -82,7 +84,8 @@ type ExternalInterface struct { State InterfaceState } -// SiblingInterface represents a sibling interface of a router. +// SiblingInterface represents a sibling underlay interface of a router. A sibling interface +// is an external interface owned by another router in the same AS. type SiblingInterface struct { // InterfaceID is the identifier of the external interface. IfID uint16 diff --git a/router/dataplane.go b/router/dataplane.go index 6c407ab1c6..93f44522cb 100644 --- a/router/dataplane.go +++ b/router/dataplane.go @@ -24,7 +24,6 @@ import ( "errors" "fmt" "hash" - "math/big" "net" "net/netip" "sync" @@ -32,8 +31,8 @@ import ( "time" "unsafe" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/prometheus/client_golang/prometheus" "github.com/scionproto/scion/pkg/addr" @@ -78,7 +77,7 @@ const ( is32bit = 1 - (ptrSize-4)/4 ) -type bfdSession interface { +type BFDSession interface { Run(ctx context.Context) error ReceiveMessage(*layers.BFD) IsUp() bool @@ -91,6 +90,17 @@ type BatchConn interface { Close() error } +// underlay is a pointer to our underlay provider. +// +// TODO(multi_underlay): this allows for a single underlay. In the future, each link could be +// via a different underlay. That would have to be supported by the configuration code and there +// would likely be a registry of underlays. For now, That's the whole registry. +var newUnderlay func() UnderlayProvider + +func AddUnderlay(newProvider func() UnderlayProvider) { + newUnderlay = newProvider +} + type disposition int const ( @@ -100,7 +110,7 @@ const ( pDone ) -// packet aggregates buffers and ancillary metadata related to one packet. +// Packet aggregates buffers and ancillary metadata related to one packet. // That is everything we need to pass-around while processing a packet. The motivation is to save on // copy (pass everything via one reference) AND garbage collection (reuse everything). // The buffer is allocated in a separate location (but still reused) to keep the packet structures @@ -110,7 +120,7 @@ const ( // arch) until Slowpath request which is 6 bytes long. The rest is in decreasing order of size and // size-aligned. We want to fit neatly into cache lines, so we need to fit in 64 bytes. The padding // required to occupy exactly 64 bytes depends on the architecture. -type packet struct { +type Packet struct { // The useful part of the raw packet at a point in time (i.e. a slice of the full buffer). // It can be any portion of the full buffer; not necessarily the start. rawPacket []byte @@ -122,7 +132,7 @@ type packet struct { srcAddr *net.UDPAddr // The address to where we are forwarding the packet. // Will be set by the processing routine; it is updated in-place. - dstAddr *net.UDPAddr + DstAddr *net.UDPAddr // Additional metadata in case the packet is put on the slow path. Updated in-place. slowPathRequest slowPathRequest // The ingress on which this packet arrived. This is set by the receiver. @@ -146,25 +156,25 @@ type slowPathRequest struct { } // Make sure that the packet structure has the size we expect. -const _ uintptr = 64 - unsafe.Sizeof(packet{}) // assert 64 >= sizeof(packet) -const _ uintptr = unsafe.Sizeof(packet{}) - 64 // assert sizeof(packet) >= 64 +const _ uintptr = 64 - unsafe.Sizeof(Packet{}) // assert 64 >= sizeof(Packet) +const _ uintptr = unsafe.Sizeof(Packet{}) - 64 // assert sizeof(Packet) >= 64 // initPacket configures the given blank packet (and returns it, for convenience). -func (p *packet) init(buffer *[bufSize]byte) *packet { +func (p *Packet) init(buffer *[bufSize]byte) *Packet { p.buffer = buffer p.rawPacket = p.buffer[:] - p.dstAddr = &net.UDPAddr{IP: make(net.IP, net.IPv6len)} + p.DstAddr = &net.UDPAddr{IP: make(net.IP, net.IPv6len)} return p } // reset() makes the packet ready to receive a new underlay message. // A cleared dstAddr is represented with a zero-length IP so we keep reusing the IP storage bytes. -func (p *packet) reset() { - p.dstAddr.IP = p.dstAddr.IP[0:0] // We're keeping the object, just blank it. - *p = packet{ +func (p *Packet) reset() { + p.DstAddr.IP = p.DstAddr.IP[0:0] // We're keeping the object, just blank it. + *p = Packet{ buffer: p.buffer, // keep the buffer rawPacket: p.buffer[:], // restore the full packet capacity - dstAddr: p.dstAddr, // keep the dstAddr and so the IP slice and bytes + DstAddr: p.DstAddr, // keep the dstAddr and so the IP slice and bytes } // Everything else is reset to zero value. } @@ -173,16 +183,13 @@ func (p *packet) reset() { // from multiple sockets, performs routing, and sends them to their destinations // (after updating the path, if that is needed). type DataPlane struct { - interfaces map[uint16]BatchConn - external map[uint16]BatchConn + underlay UnderlayProvider + interfaces map[uint16]Link linkTypes map[uint16]topology.LinkType neighborIAs map[uint16]addr.IA - peerInterfaces map[uint16]uint16 internalIP netip.Addr - internalNextHops map[uint16]netip.AddrPort svc *services macFactory func() hash.Hash - bfdSessions map[uint16]bfdSession localIA addr.IA mtx sync.Mutex running atomic.Bool @@ -192,10 +199,7 @@ type DataPlane struct { dispatchedPortEnd uint16 ExperimentalSCMPAuthentication bool - - // The forwarding queues. Each is consumed by a forwarder process and fed by - // one bfd sender and the packet processors. - fwQs map[uint16]chan *packet + RunConfig RunConfig // The pool that stores all the packet buffers as described in the design document. See // https://github.com/scionproto/scion/blob/master/doc/dev/design/BorderRouter.rst @@ -205,7 +209,7 @@ type DataPlane struct { // packet structure is fetched from the pool passed-around through the various channels and // returned to the pool. To reduce the cost of copying, the packet structure is passed by // reference. - packetPool chan *packet + packetPool chan *Packet } var ( @@ -224,7 +228,6 @@ var ( unsupportedV4MappedV6Address = errors.New("unsupported v4mapped IP v6 address") unsupportedUnspecifiedAddress = errors.New("unsupported unspecified address") noBFDSessionFound = errors.New("no BFD session was found") - noBFDSessionConfigured = errors.New("no BFD sessions have been configured") errPeeringEmptySeg0 = errors.New("zero-length segment[0] in peering path") errPeeringEmptySeg1 = errors.New("zero-length segment[1] in peering path") errPeeringNonemptySeg2 = errors.New("non-zero-length segment[2] in peering path") @@ -338,13 +341,18 @@ func (d *DataPlane) AddInternalInterface(conn BatchConn, ip netip.Addr) error { if conn == nil { return emptyValue } + if d.underlay == nil { + d.underlay = newUnderlay() + } if d.interfaces == nil { - d.interfaces = make(map[uint16]BatchConn) + d.interfaces = make(map[uint16]Link) } else if d.interfaces[0] != nil { return alreadySet } - d.interfaces[0] = conn + + d.interfaces[0] = d.underlay.NewInternalLink(conn, d.RunConfig.BatchSize) d.internalIP = ip + return nil } @@ -363,21 +371,21 @@ func (d *DataPlane) AddExternalInterface(ifID uint16, conn BatchConn, if conn == nil || !src.Addr.IsValid() || !dst.Addr.IsValid() { return emptyValue } - err := d.addExternalInterfaceBFD(ifID, src, dst, cfg) + if d.underlay == nil { + d.underlay = newUnderlay() + } + bfd, err := d.newExternalInterfaceBFD(ifID, src, dst, cfg) if err != nil { return serrors.Wrap("adding external BFD", err, "if_id", ifID) } - if d.external == nil { - d.external = make(map[uint16]BatchConn) - } if d.interfaces == nil { - d.interfaces = make(map[uint16]BatchConn) + d.interfaces = make(map[uint16]Link) } - if _, exists := d.external[ifID]; exists { + if _, exists := d.interfaces[ifID]; exists { return serrors.JoinNoStack(alreadySet, nil, "ifID", ifID) } - d.interfaces[ifID] = conn - d.external[ifID] = conn + d.interfaces[ifID] = d.underlay.NewExternalLink( + conn, d.RunConfig.BatchSize, bfd, dst.Addr, ifID) return nil } @@ -422,30 +430,12 @@ func (d *DataPlane) AddLinkType(ifID uint16, linkTo topology.LinkType) error { return nil } -// AddRemotePeer adds the remote peering interface ID for local -// interface ID. If the link type for the given ID is already set to -// a different type, this method will return an error. This can only -// be called on a not yet running dataplane. -func (d *DataPlane) AddRemotePeer(local, remote uint16) error { - if t, ok := d.linkTypes[local]; ok && t != topology.Peer { - return serrors.JoinNoStack(unsupportedPathType, nil, "type", t) - } - if _, exists := d.peerInterfaces[local]; exists { - return serrors.JoinNoStack(alreadySet, nil, "local_interface", local) - } - if d.peerInterfaces == nil { - d.peerInterfaces = make(map[uint16]uint16) - } - d.peerInterfaces[local] = remote - return nil -} - // AddExternalInterfaceBFD adds the inter AS connection BFD session. -func (d *DataPlane) addExternalInterfaceBFD(ifID uint16, - src, dst control.LinkEnd, cfg control.BFD) error { +func (d *DataPlane) newExternalInterfaceBFD(ifID uint16, + src, dst control.LinkEnd, cfg control.BFD) (BFDSession, error) { if *cfg.Disable { - return nil + return nil, nil } var m bfd.Metrics if d.Metrics != nil { @@ -463,47 +453,21 @@ func (d *DataPlane) addExternalInterfaceBFD(ifID uint16, } s, err := newBFDSend(d, src.IA, dst.IA, src.Addr, dst.Addr, ifID, d.macFactory()) if err != nil { - return err + return nil, err } - return d.addBFDController(ifID, s, cfg, m) + return bfd.NewSession(s, cfg, m) } // getInterfaceState checks if there is a bfd session for the input interfaceID and -// returns InterfaceUp if the relevant bfdsession state is up, or if there is no BFD +// returns InterfaceUp if the relevant BFDSession state is up, or if there is no BFD // session. Otherwise, it returns InterfaceDown. func (d *DataPlane) getInterfaceState(ifID uint16) control.InterfaceState { - bfdSessions := d.bfdSessions - if bfdSession, ok := bfdSessions[ifID]; ok && !bfdSession.IsUp() { + if link := d.interfaces[ifID]; link != nil && !link.IsUp() { return control.InterfaceDown } return control.InterfaceUp } -func (d *DataPlane) addBFDController(ifID uint16, s bfd.Sender, cfg control.BFD, - metrics bfd.Metrics) error { - - if d.bfdSessions == nil { - d.bfdSessions = make(map[uint16]bfdSession) - } - - // Generate random discriminator. It can't be zero. - discInt, err := rand.Int(rand.Reader, big.NewInt(0xfffffffe)) - if err != nil { - return err - } - disc := layers.BFDDiscriminator(uint32(discInt.Uint64()) + 1) - d.bfdSessions[ifID] = &bfd.Session{ - Sender: s, - DetectMult: layers.BFDDetectMultiplier(cfg.DetectMult), - DesiredMinTxInterval: cfg.DesiredMinTxInterval, - RequiredMinRxInterval: cfg.RequiredMinRxInterval, - LocalDiscriminator: disc, - ReceiveQueueSize: 10, - Metrics: metrics, - } - return nil -} - // AddSvc adds the address for the given service. This can be called multiple // times for the same service, with the address added to the list of addresses // that provide the service. @@ -559,36 +523,32 @@ func (d *DataPlane) AddNextHop(ifID uint16, src, dst netip.AddrPort, cfg control if !dst.IsValid() || !src.IsValid() { return emptyValue } - err := d.addNextHopBFD(ifID, src, dst, cfg, sibling) + if d.underlay == nil { + d.underlay = newUnderlay() + } + bfd, err := d.newNextHopBFD(ifID, src, dst, cfg, sibling) if err != nil { return serrors.Wrap("adding next hop BFD", err, "if_id", ifID) } - if d.internalNextHops == nil { - d.internalNextHops = make(map[uint16]netip.AddrPort) + if d.interfaces == nil { + d.interfaces = make(map[uint16]Link) } - if _, exists := d.internalNextHops[ifID]; exists { + if _, exists := d.interfaces[ifID]; exists { return serrors.JoinNoStack(alreadySet, nil, "ifID", ifID) } - d.internalNextHops[ifID] = dst + + d.interfaces[ifID] = d.underlay.NewSiblingLink(d.RunConfig.BatchSize, bfd, dst) return nil } // AddNextHopBFD adds the BFD session for the next hop address. // If the remote ifID belongs to an existing address, the existing // BFD session will be re-used. -func (d *DataPlane) addNextHopBFD(ifID uint16, src, dst netip.AddrPort, cfg control.BFD, - sibling string) error { +func (d *DataPlane) newNextHopBFD(ifID uint16, src, dst netip.AddrPort, cfg control.BFD, + sibling string) (BFDSession, error) { if *cfg.Disable { - return nil - } - for k, v := range d.internalNextHops { - if v.String() == dst.String() { - if c, ok := d.bfdSessions[k]; ok { - d.bfdSessions[ifID] = c - return nil - } - } + return nil, nil } var m bfd.Metrics if d.Metrics != nil { @@ -603,9 +563,9 @@ func (d *DataPlane) addNextHopBFD(ifID uint16, src, dst netip.AddrPort, cfg cont s, err := newBFDSend(d, d.localIA, d.localIA, src, dst, 0, d.macFactory()) if err != nil { - return err + return nil, err } - return d.addBFDController(ifID, s, cfg, m) + return bfd.NewSession(s, cfg, m) } func max(a int, b int) int { @@ -621,49 +581,56 @@ type RunConfig struct { BatchSize int } -func (d *DataPlane) Run(ctx context.Context, cfg *RunConfig) error { +func (d *DataPlane) Run(ctx context.Context) error { d.mtx.Lock() d.initMetrics() + // TODO(multi_underlay): we leave all the ingest work here for now, so we get the set of + // connections from the underlay. + underlayConnections := d.underlay.Connections() processorQueueSize := max( - len(d.interfaces)*cfg.BatchSize/cfg.NumProcessors, - cfg.BatchSize) + len(underlayConnections)*d.RunConfig.BatchSize/d.RunConfig.NumProcessors, + d.RunConfig.BatchSize) - d.initPacketPool(cfg, processorQueueSize) - procQs, fwQs, slowQs := initQueues(cfg, d.interfaces, processorQueueSize) - d.fwQs = fwQs // Shared with BFD senders + d.initPacketPool(processorQueueSize) + procQs, slowQs := d.initQueues(processorQueueSize) d.setRunning() - for ifID, conn := range d.interfaces { - go func(ifID uint16, conn BatchConn) { + for _, c := range underlayConnections { + go func(c UnderlayConn) { defer log.HandlePanic() - d.runReceiver(ifID, conn, cfg, procQs) - }(ifID, conn) - go func(ifID uint16, conn BatchConn) { + d.runReceiver(c, procQs) + }(c) + go func(c UnderlayConn) { defer log.HandlePanic() - d.runForwarder(ifID, conn, cfg, fwQs[ifID]) - }(ifID, conn) + d.runForwarder(c) + }(c) } - for i := 0; i < cfg.NumProcessors; i++ { + + for i := 0; i < d.RunConfig.NumProcessors; i++ { go func(i int) { defer log.HandlePanic() - d.runProcessor(i, procQs[i], fwQs, slowQs[i%cfg.NumSlowPathProcessors]) + d.runProcessor(i, procQs[i], slowQs[i%d.RunConfig.NumSlowPathProcessors]) }(i) } - for i := 0; i < cfg.NumSlowPathProcessors; i++ { + for i := 0; i < d.RunConfig.NumSlowPathProcessors; i++ { go func(i int) { defer log.HandlePanic() - d.runSlowPathProcessor(i, slowQs[i], fwQs) + d.runSlowPathProcessor(i, slowQs[i]) }(i) } - for k, v := range d.bfdSessions { - go func(ifID uint16, c bfdSession) { + for addr, link := range d.underlay.Links() { + s := link.BFDSession() + if s == nil { + continue + } + go func(addr netip.AddrPort) { defer log.HandlePanic() - if err := c.Run(ctx); err != nil && err != bfd.AlreadyRunning { - log.Error("BFD session failed to start", "ifID", ifID, "err", err) + if err := s.Run(ctx); err != nil && err != bfd.AlreadyRunning { + log.Error("BFD session failed to start", "remote address", addr, "err", err) } - }(k, v) + }(addr) } d.mtx.Unlock() @@ -673,43 +640,41 @@ func (d *DataPlane) Run(ctx context.Context, cfg *RunConfig) error { // initializePacketPool calculates the size of the packet pool based on the // current dataplane settings and allocates all the buffers -func (d *DataPlane) initPacketPool(cfg *RunConfig, processorQueueSize int) { - poolSize := len(d.interfaces)*cfg.BatchSize + - (cfg.NumProcessors+cfg.NumSlowPathProcessors)*(processorQueueSize+1) + - len(d.interfaces)*(2*cfg.BatchSize) +func (d *DataPlane) initPacketPool(processorQueueSize int) { + poolSize := len(d.interfaces)*d.RunConfig.BatchSize + + (d.RunConfig.NumProcessors+d.RunConfig.NumSlowPathProcessors)*(processorQueueSize+1) + + len(d.interfaces)*(2*d.RunConfig.BatchSize) log.Debug("Initialize packet pool of size", "poolSize", poolSize) - d.packetPool = make(chan *packet, poolSize) + d.packetPool = make(chan *Packet, poolSize) pktBuffers := make([][bufSize]byte, poolSize) - pktStructs := make([]packet, poolSize) + pktStructs := make([]Packet, poolSize) for i := 0; i < poolSize; i++ { d.packetPool <- pktStructs[i].init(&pktBuffers[i]) } } -// initializes the processing routines and forwarders queues -func initQueues(cfg *RunConfig, interfaces map[uint16]BatchConn, - processorQueueSize int) ([]chan *packet, map[uint16]chan *packet, []chan *packet) { +// initializes the processing routines and queues +func (d *DataPlane) initQueues(processorQueueSize int) ([]chan *Packet, []chan *Packet) { - procQs := make([]chan *packet, cfg.NumProcessors) - for i := 0; i < cfg.NumProcessors; i++ { - procQs[i] = make(chan *packet, processorQueueSize) - } - slowQs := make([]chan *packet, cfg.NumSlowPathProcessors) - for i := 0; i < cfg.NumSlowPathProcessors; i++ { - slowQs[i] = make(chan *packet, processorQueueSize) + procQs := make([]chan *Packet, d.RunConfig.NumProcessors) + for i := 0; i < d.RunConfig.NumProcessors; i++ { + procQs[i] = make(chan *Packet, processorQueueSize) } - fwQs := make(map[uint16]chan *packet) - for ifID := range interfaces { - fwQs[ifID] = make(chan *packet, cfg.BatchSize) + slowQs := make([]chan *Packet, d.RunConfig.NumSlowPathProcessors) + for i := 0; i < d.RunConfig.NumSlowPathProcessors; i++ { + slowQs[i] = make(chan *Packet, processorQueueSize) } - return procQs, fwQs, slowQs + return procQs, slowQs } -func (d *DataPlane) runReceiver(ifID uint16, conn BatchConn, cfg *RunConfig, - procQs []chan *packet) { +// runReceiver handles incoming traffic from the given connection. +// +// TODO(multi_underlay): we should not have direct knowledge of connections. Later we will move +// parts of this to the connection itself, so that we don't have to know. +func (d *DataPlane) runReceiver(u UnderlayConn, procQs []chan *Packet) { - log.Debug("Run receiver for", "interface", ifID) + log.Debug("Run receiver", "connection", u.Name()) // Each receiver (therefore each input interface) has a unique random seed for the procID hash // function. @@ -724,21 +689,22 @@ func (d *DataPlane) runReceiver(ifID uint16, conn BatchConn, cfg *RunConfig, // A collection of socket messages, as the readBatch API expects them. We keep using the same // collection, call after call; only replacing the buffer. - msgs := underlayconn.NewReadMessages(cfg.BatchSize) + msgs := underlayconn.NewReadMessages(d.RunConfig.BatchSize) // An array of corresponding packet references. Each corresponds to one msg. // The packet owns the buffer that we set in the matching msg, plus the metadata that we'll add. - packets := make([]*packet, cfg.BatchSize) + packets := make([]*Packet, d.RunConfig.BatchSize) - numReusable := 0 // unused buffers from previous loop + numReusable := 0 // unused buffers from previous loop + ifID := u.IfID() metrics := d.forwardingMetrics[ifID] // If receiver exists, fw metrics exist too. - enqueueForProcessing := func(size int, srcAddr *net.UDPAddr, pkt *packet) { + enqueueForProcessing := func(size int, srcAddr *net.UDPAddr, pkt *Packet) { sc := classOfSize(size) metrics[sc].InputPacketsTotal.Inc() metrics[sc].InputBytesTotal.Add(float64(size)) - procID, err := computeProcID(pkt.rawPacket, cfg.NumProcessors, hashSeed) + procID, err := computeProcID(pkt.rawPacket, d.RunConfig.NumProcessors, hashSeed) if err != nil { log.Debug("Error while computing procID", "err", err) d.returnPacketToPool(pkt) @@ -747,6 +713,9 @@ func (d *DataPlane) runReceiver(ifID uint16, conn BatchConn, cfg *RunConfig, } pkt.rawPacket = pkt.rawPacket[:size] // Update size; readBatch does not. + // TODO(multi_underlay): We should begin with finding the link and get the ifID + // from there. We will do that once we actually move these pre-processing tasks directly + // into the underlay. pkt.ingress = ifID pkt.srcAddr = srcAddr select { @@ -757,11 +726,12 @@ func (d *DataPlane) runReceiver(ifID uint16, conn BatchConn, cfg *RunConfig, } } + conn := u.Conn() for d.IsRunning() { // collect packets. // Give a new buffer to the msgs elements that have been used in the previous loop. - for i := 0; i < cfg.BatchSize-numReusable; i++ { + for i := 0; i < d.RunConfig.BatchSize-numReusable; i++ { p := d.getPacketFromPool() p.reset() packets[i] = p @@ -808,16 +778,15 @@ func computeProcID(data []byte, numProcRoutines int, hashSeed uint32) (uint32, e return s % uint32(numProcRoutines), nil } -func (d *DataPlane) getPacketFromPool() *packet { +func (d *DataPlane) getPacketFromPool() *Packet { return <-d.packetPool } -func (d *DataPlane) returnPacketToPool(pkt *packet) { +func (d *DataPlane) returnPacketToPool(pkt *Packet) { d.packetPool <- pkt } -func (d *DataPlane) runProcessor(id int, q <-chan *packet, - fwQs map[uint16]chan *packet, slowQ chan<- *packet) { +func (d *DataPlane) runProcessor(id int, q <-chan *Packet, slowQ chan<- *Packet) { log.Debug("Initialize processor with", "id", id) processor := newPacketProcessor(d) @@ -856,25 +825,21 @@ func (d *DataPlane) runProcessor(id int, q <-chan *packet, d.returnPacketToPool(p) continue } - fwCh, ok := fwQs[p.egress] + fwLink, ok := d.interfaces[p.egress] if !ok { log.Debug("Error determining forwarder. Egress is invalid", "egress", p.egress) metrics.DroppedPacketsInvalid.Inc() d.returnPacketToPool(p) continue } - - select { - case fwCh <- p: - default: + if !fwLink.Send(p) { d.returnPacketToPool(p) metrics.DroppedPacketsBusyForwarder.Inc() } } } -func (d *DataPlane) runSlowPathProcessor(id int, q <-chan *packet, - fwQs map[uint16]chan *packet) { +func (d *DataPlane) runSlowPathProcessor(id int, q <-chan *Packet) { log.Debug("Initialize slow-path processor with", "id", id) processor := newSlowPathProcessor(d) @@ -892,15 +857,13 @@ func (d *DataPlane) runSlowPathProcessor(id int, q <-chan *packet, d.returnPacketToPool(p) continue } - fwCh, ok := fwQs[p.egress] + fwLink, ok := d.interfaces[p.egress] if !ok { log.Debug("Error determining forwarder. Egress is invalid", "egress", p.egress) d.returnPacketToPool(p) continue } - select { - case fwCh <- p: - default: + if !fwLink.Send(p) { d.returnPacketToPool(p) } } @@ -923,7 +886,7 @@ func newSlowPathProcessor(d *DataPlane) *slowPathPacketProcessor { type slowPathPacketProcessor struct { d *DataPlane - pkt *packet + pkt *Packet scionLayer slayers.SCION hbhLayer slayers.HopByHopExtnSkipper @@ -950,7 +913,7 @@ func (p *slowPathPacketProcessor) reset() { p.e2eLayer = slayers.EndToEndExtnSkipper{} } -func (p *slowPathPacketProcessor) processPacket(pkt *packet) error { +func (p *slowPathPacketProcessor) processPacket(pkt *Packet) error { var err error p.reset() p.pkt = pkt @@ -1008,7 +971,7 @@ func (p *slowPathPacketProcessor) processPacket(pkt *packet) error { } } -func updateOutputMetrics(metrics interfaceMetrics, packets []*packet) { +func updateOutputMetrics(metrics interfaceMetrics, packets []*Packet) { // We need to collect stats by traffic type and size class. // Try to reduce the metrics lookup penalty by using some // simpler staging data structure. @@ -1031,32 +994,51 @@ func updateOutputMetrics(metrics interfaceMetrics, packets []*packet) { } } -func (d *DataPlane) runForwarder(ifID uint16, conn BatchConn, cfg *RunConfig, c <-chan *packet) { +// TODO(jiceatscion): There is a big issue with metrics and ifID. If an underlay connection must be +// shared between links (for example, sibling links), then we don't have a specific ifID in the +// connection per se. It changes for each packet. As a result, in the shared case, either we account +// all metrics to whatever placeholder ifID we have (i.e. 0), or we have to use pkt.egress and +// lookup the metrics in the map for each packet. This is too expensive. +// +// Mitigations: +// - use ifID even if it is 0 for sibling links - no worse than before, since sibling links were +// already redirected to interface 0 (...until we have fully shared forwarders - like with an +// XDP underlay impl). +// - stage our own internal metrics map, sorted by ifID = pkt.egress, and batch update the +// metrics... might not be much cheaper than the naive way. +// - Use one fw queue per ifID in each connection... but then have to round-robin for fairness.... +// smaller batches? +// +// For now, we do the first option. Whether that is good enough is still TBD. + +func (d *DataPlane) runForwarder(u UnderlayConn) { - log.Debug("Initialize forwarder for", "interface", ifID) + log.Debug("Run forwarder", "connection", u.Name()) // We use this somewhat like a ring buffer. - pkts := make([]*packet, cfg.BatchSize) + pkts := make([]*Packet, d.RunConfig.BatchSize) // We use this as a temporary buffer, but allocate it just once // to save on garbage handling. - msgs := make(underlayconn.Messages, cfg.BatchSize) + msgs := make(underlayconn.Messages, d.RunConfig.BatchSize) for i := range msgs { msgs[i].Buffers = make([][]byte, 1) } - metrics := d.forwardingMetrics[ifID] - + c := u.Queue() + conn := u.Conn() + metrics := d.forwardingMetrics[u.IfID()] toWrite := 0 for d.IsRunning() { - toWrite += readUpTo(c, cfg.BatchSize-toWrite, toWrite == 0, pkts[toWrite:]) + // Top-up our batch. + toWrite += readUpTo(c, d.RunConfig.BatchSize-toWrite, toWrite == 0, pkts[toWrite:]) // Turn the packets into underlay messages that WriteBatch can send. for i, p := range pkts[:toWrite] { msgs[i].Buffers[0] = p.rawPacket msgs[i].Addr = nil - if len(p.dstAddr.IP) != 0 { - msgs[i].Addr = p.dstAddr + if len(p.DstAddr.IP) != 0 { + msgs[i].Addr = p.DstAddr } } written, _ := conn.WriteBatch(msgs[:toWrite], 0) @@ -1089,7 +1071,7 @@ func (d *DataPlane) runForwarder(ifID uint16, conn BatchConn, cfg *RunConfig, c } } -func readUpTo(c <-chan *packet, n int, needsBlocking bool, pkts []*packet) int { +func readUpTo(c <-chan *Packet, n int, needsBlocking bool, pkts []*Packet) int { i := 0 if needsBlocking { p, ok := <-c @@ -1149,7 +1131,7 @@ func errorDiscard(ctx ...any) disposition { return pDiscard } -func (p *scionPacketProcessor) processPkt(pkt *packet) disposition { +func (p *scionPacketProcessor) processPkt(pkt *Packet) disposition { if err := p.reset(); err != nil { return errorDiscard("error", err) } @@ -1191,26 +1173,33 @@ func (p *scionPacketProcessor) processPkt(pkt *packet) disposition { } func (p *scionPacketProcessor) processInterBFD(oh *onehop.Path, data []byte) disposition { - if len(p.d.bfdSessions) == 0 { - return errorDiscard("error", noBFDSessionConfigured) - } + // If this is an inter-AS BFD, it can via an interface we own. So the ifID matches one link + // and the ifID better be valid. In the future that will be checked upstream from here. + link, exists := p.d.interfaces[p.pkt.ingress] + if !exists { + return errorDiscard("error", noBFDSessionFound) + } + session := link.BFDSession() + if session == nil { + return errorDiscard("error", noBFDSessionFound) + } bfd := &p.bfdLayer if err := bfd.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil { return errorDiscard("error", err) } - - if v, ok := p.d.bfdSessions[p.pkt.ingress]; ok { - v.ReceiveMessage(bfd) - return pDiscard // All's fine. That packet's journey ends here. - } - - return errorDiscard("error", noBFDSessionFound) + session.ReceiveMessage(bfd) + return pDiscard // All's fine. That packet's journey ends here. } func (p *scionPacketProcessor) processIntraBFD(data []byte) disposition { - if len(p.d.bfdSessions) == 0 { - return errorDiscard("error", noBFDSessionConfigured) + + // This packet came over a link that doesn't have a define ifID. We have to find it + // by srcAddress. We always find one. The internal link matches anything that is not known. + src := p.pkt.srcAddr.AddrPort() // POSSIBLY EXPENSIVE CONVERSION + session := p.d.underlay.Link(src).BFDSession() + if session == nil { + return errorDiscard("error", noBFDSessionFound) } bfd := &p.bfdLayer @@ -1218,21 +1207,8 @@ func (p *scionPacketProcessor) processIntraBFD(data []byte) disposition { return errorDiscard("error", err) } - ifID := uint16(0) - src := p.pkt.srcAddr.AddrPort() // POSSIBLY EXPENSIVE CONVERSION - for k, v := range p.d.internalNextHops { - if src == v { - ifID = k - break - } - } - - if v, ok := p.d.bfdSessions[ifID]; ok { - v.ReceiveMessage(bfd) - return pDiscard // All's fine. That packet's journey ends here. - } - - return errorDiscard("error", noBFDSessionFound) + session.ReceiveMessage(bfd) + return pDiscard // All's fine. That packet's journey ends here. } func (p *scionPacketProcessor) processSCION() disposition { @@ -1301,7 +1277,7 @@ type scionPacketProcessor struct { // d is a reference to the dataplane instance that initiated this processor. d *DataPlane // pkt is the packet currently being processed by this processor. - pkt *packet + pkt *Packet // mac is the hasher for the MAC computation. mac hash.Hash @@ -1369,7 +1345,7 @@ func (p *slowPathPacketProcessor) packSCMP( // The original traffic type, if one had been set, no-longer applies. p.pkt.trafficType = ttOther p.pkt.egress = p.pkt.ingress - updateNetAddrFromNetAddr(p.pkt.dstAddr, p.pkt.srcAddr) + updateNetAddrFromNetAddr(p.pkt.DstAddr, p.pkt.srcAddr) return nil } @@ -1524,34 +1500,43 @@ func (p *scionPacketProcessor) respInvalidDstIA() disposition { // Provided that underlying network infrastructure prevents address spoofing, // this check prevents malicious end hosts in the local AS from bypassing the // SrcIA checks by disguising packets as transit traffic. +// +// TODO(multi_underlay): All or part of this check should move to the underlay. func (p *scionPacketProcessor) validateTransitUnderlaySrc() disposition { if p.path.IsFirstHop() || p.pkt.ingress != 0 { // not a transit packet, nothing to check return pForward } pktIngressID := p.ingressInterface() - expectedSrc, okE := p.d.internalNextHops[pktIngressID] - if !okE { + ingressLink := p.d.interfaces[pktIngressID] + if ingressLink.Scope() != Sibling { // Drop return errorDiscard("error", invalidSrcAddrForTransit) } src, okS := netip.AddrFromSlice(p.pkt.srcAddr.IP) - if !(okS && expectedSrc.Addr() == src) { + if !(okS && ingressLink.Remote().Addr() == src) { // Drop return errorDiscard("error", invalidSrcAddrForTransit) } return pForward } -// Validates the egress interface referenced by the current hop. +// Validates the egress interface referenced by the current hop. This is not called for +// packets to be delivered to the local AS, so pkt.egress is never 0. +// If pkt.ingress is zero, the packet can be coming from either a local end-host or a +// sibling router. In either of these cases, it must be leaving via a locally owned external +// interface (i.e. it can be going to a sibling router or to a local end-host). On the other +// hand, a packet coming directly from another AS can be going anywhere: local delivery, +// to another AS directly, or via a sibling router. func (p *scionPacketProcessor) validateEgressID() disposition { egressID := p.pkt.egress - _, ih := p.d.internalNextHops[egressID] - _, eh := p.d.external[egressID] + link, found := p.d.interfaces[egressID] + // egress interface must be a known interface + // egress is never the internalInterface // packet coming from internal interface, must go to an external interface - // packet coming from external interface can go to either internal or external interface - if !ih && !eh || (p.pkt.ingress == 0) && !eh { + // Note that, for now, ingress == 0 is also true for sibling interfaces. That might change. + if !found || (p.pkt.ingress == 0 && link.Scope() == Sibling) { errCode := slayers.SCMPCodeUnknownHopFieldEgress if !p.infoField.ConsDir { errCode = slayers.SCMPCodeUnknownHopFieldIngress @@ -1669,7 +1654,7 @@ func (p *scionPacketProcessor) verifyCurrentMAC() disposition { } func (p *scionPacketProcessor) resolveInbound() disposition { - err := p.d.resolveLocalDst(p.pkt.dstAddr, p.scionLayer, p.lastLayer) + err := p.d.resolveLocalDst(p.pkt.DstAddr, p.scionLayer, p.lastLayer) switch err { case nil: @@ -1760,22 +1745,21 @@ func (p *scionPacketProcessor) egressInterface() uint16 { func (p *scionPacketProcessor) validateEgressUp() disposition { egressID := p.pkt.egress - if v, ok := p.d.bfdSessions[egressID]; ok { - if !v.IsUp() { - log.Debug("SCMP response", "cause", errBFDSessionDown) - if _, external := p.d.external[p.pkt.egress]; !external { - p.pkt.slowPathRequest = slowPathRequest{ - scmpType: slayers.SCMPTypeInternalConnectivityDown, - code: 0, - } - } else { - p.pkt.slowPathRequest = slowPathRequest{ - scmpType: slayers.SCMPTypeExternalInterfaceDown, - code: 0, - } + egressLink := p.d.interfaces[egressID] + if !egressLink.IsUp() { + log.Debug("SCMP response", "cause", errBFDSessionDown) + if egressLink.Scope() != External { + p.pkt.slowPathRequest = slowPathRequest{ + scmpType: slayers.SCMPTypeInternalConnectivityDown, + code: 0, + } + } else { + p.pkt.slowPathRequest = slowPathRequest{ + scmpType: slayers.SCMPTypeExternalInterfaceDown, + code: 0, } - return pSlowPath } + return pSlowPath } return pForward } @@ -1810,7 +1794,7 @@ func (p *scionPacketProcessor) handleEgressRouterAlert() disposition { if !*alert { return pForward } - if _, ok := p.d.external[p.pkt.egress]; !ok { + if p.d.interfaces[p.pkt.egress].Scope() != External { // the egress router is not this one. return pForward } @@ -1981,7 +1965,7 @@ func (p *scionPacketProcessor) process() disposition { if disp := p.validateEgressUp(); disp != pForward { return disp } - if _, ok := p.d.external[egressID]; ok { + if p.d.interfaces[egressID].Scope() == External { // Not ASTransit in if disp := p.processEgress(); disp != pForward { return disp @@ -2003,25 +1987,9 @@ func (p *scionPacketProcessor) process() disposition { } // ASTransit in: pkt leaving this AS through another BR. - if a, ok := p.d.internalNextHops[egressID]; ok { - p.pkt.trafficType = ttInTransit - updateNetAddrFromAddrPort(p.pkt.dstAddr, a) - // The packet must go to the other router via the internal interface. - p.pkt.egress = 0 - return pForward - } - - errCode := slayers.SCMPCodeUnknownHopFieldEgress - if !p.infoField.ConsDir { - errCode = slayers.SCMPCodeUnknownHopFieldIngress - } - log.Debug("SCMP response", "cause", cannotRoute) - p.pkt.slowPathRequest = slowPathRequest{ - scmpType: slayers.SCMPTypeParameterProblem, - code: errCode, - pointer: p.currentHopPointer(), - } - return pSlowPath + // We already know the egressID is valid. The packet can go straight to forwarding. + p.pkt.trafficType = ttInTransit + return pForward } func (p *scionPacketProcessor) processOHP() disposition { @@ -2086,7 +2054,7 @@ func (p *scionPacketProcessor) processOHP() disposition { if err := updateSCIONLayer(p.pkt.rawPacket, s); err != nil { return errorDiscard("error", err) } - err := p.d.resolveLocalDst(p.pkt.dstAddr, s, p.lastLayer) + err := p.d.resolveLocalDst(p.pkt.DstAddr, s, p.lastLayer) if err != nil { return errorDiscard("error", err) } @@ -2117,7 +2085,7 @@ func (d *DataPlane) resolveLocalDst( if a.Port() < d.dispatchedPortStart || a.Port() > d.dispatchedPortEnd { updateNetAddrFromAddrAndPort(resolvedDst, a.Addr(), topology.EndhostPort) } else { - updateNetAddrFromAddrPort(resolvedDst, a) + UpdateNetAddrFromAddrPort(resolvedDst, a) } return nil case addr.HostTypeIP: @@ -2159,6 +2127,16 @@ func (d *DataPlane) addEndhostPort( if port < d.dispatchedPortStart || port > d.dispatchedPortEnd { port = topology.EndhostPort } + case slayers.L4TCP: + if len(lastLayer.LayerPayload()) < 20 { + // TODO: Treat this as a parameter problem + return serrors.New("SCION/TCP header len too small", "length", + len(lastLayer.LayerPayload())) + } + port = binary.BigEndian.Uint16(lastLayer.LayerPayload()[2:]) + if port < d.dispatchedPortStart || port > d.dispatchedPortEnd { + port = topology.EndhostPort + } case slayers.L4SCMP: var scmpLayer slayers.SCMP err := scmpLayer.DecodeFromBytes(lastLayer.LayerPayload(), gopacket.NilDecodeFeedback) @@ -2408,16 +2386,14 @@ func (b *bfdSend) Send(bfd *layers.BFD) error { // BfdControllers and fwQs are initialized from the same set of ifIDs. So not finding // the forwarding queue is an serious internal error. Let that panic. - fwChan := b.dataPlane.fwQs[b.ifID] + fwLink := b.dataPlane.interfaces[b.ifID] if b.ifID == 0 { // Using the internal interface: must specify the destination address - updateNetAddrFromAddrPort(p.dstAddr, b.dstAddr) + UpdateNetAddrFromAddrPort(p.DstAddr, b.dstAddr) } // No need to specify pkt.egress. It isn't used downstream from here. - select { - case fwChan <- p: - default: + if !fwLink.Send(p) { // We do not care if some BFD packets get bounced under high load. If it becomes a problem, // the solution is do use BFD's demand-mode. To be considered in a future refactoring. b.dataPlane.returnPacketToPool(p) @@ -2484,8 +2460,8 @@ func (p *slowPathPacketProcessor) prepareSCMP( } // If the packet is sent to an external router, we need to increment the // path to prepare it for the next hop. - _, external := p.d.external[p.pkt.ingress] - if external { + // This is an SCMP response to pkt, so egress will be pkt.ingress. + if p.d.interfaces[p.pkt.ingress].Scope() == External { infoField := &revPath.InfoFields[revPath.PathMeta.CurrINF] if infoField.ConsDir && !peering { hopField := revPath.HopFields[revPath.PathMeta.CurrHF] @@ -2611,7 +2587,7 @@ func (p *slowPathPacketProcessor) prepareSCMP( } p.pkt.rawPacket = serBuf.Bytes() - log.Debug("scmp", "typecode", scmpH.TypeCode) + log.Debug("SCMP", "typecode", scmpH.TypeCode) return nil } @@ -2737,12 +2713,9 @@ func nextHdr(layer gopacket.DecodingLayer) slayers.L4ProtocolType { // forwarding. func (d *DataPlane) initMetrics() { d.forwardingMetrics = make(map[uint16]interfaceMetrics) - d.forwardingMetrics[0] = newInterfaceMetrics(d.Metrics, 0, d.localIA, d.neighborIAs) - for ifID := range d.external { - if _, notOwned := d.internalNextHops[ifID]; notOwned { - continue - } - d.forwardingMetrics[ifID] = newInterfaceMetrics(d.Metrics, ifID, d.localIA, d.neighborIAs) + for ifID, link := range d.interfaces { + d.forwardingMetrics[ifID] = newInterfaceMetrics( + d.Metrics, ifID, d.localIA, link.Scope(), d.neighborIAs) } // Start our custom /proc/pid/stat collector to export iowait time and (in the future) other @@ -2759,7 +2732,7 @@ func (d *DataPlane) initMetrics() { // given netip.AddrPort. newDst.Addr() returns the IP by value. The compiler may or // may not inline the call and optimize out the copy. It is doubtful that manually inlining // increases the chances that the copy get elided. TODO(jiceatscion): experiment. -func updateNetAddrFromAddrPort(netAddr *net.UDPAddr, newDst netip.AddrPort) { +func UpdateNetAddrFromAddrPort(netAddr *net.UDPAddr, newDst netip.AddrPort) { updateNetAddrFromAddrAndPort(netAddr, newDst.Addr(), newDst.Port()) } diff --git a/router/dataplane_internal_test.go b/router/dataplane_internal_test.go index f6274f5f3c..3ce3eead4a 100644 --- a/router/dataplane_internal_test.go +++ b/router/dataplane_internal_test.go @@ -16,9 +16,10 @@ package router import ( "bytes" + "crypto/rand" "encoding/binary" "hash/fnv" - "math/rand" + mrand "math/rand/v2" "net" "net/netip" "reflect" @@ -26,7 +27,7 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -52,7 +53,15 @@ var ( func TestReceiver(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dp := &DataPlane{Metrics: metrics} + dp := &DataPlane{ + underlay: newUnderlay(), + interfaces: make(map[uint16]Link), + Metrics: metrics, + RunConfig: RunConfig{ + NumProcessors: 1, + BatchSize: 64, + }, + } counter := 0 mInternal := mock_router.NewMockBatchConn(ctrl) done := make(chan bool) @@ -79,17 +88,13 @@ func TestReceiver(t *testing.T) { _ = dp.AddInternalInterface(mInternal, netip.Addr{}) - runConfig := &RunConfig{ - NumProcessors: 1, - BatchSize: 64, - } - dp.initPacketPool(runConfig, 64) - procCh, _, _ := initQueues(runConfig, dp.interfaces, 64) + dp.initPacketPool(64) + procCh, _ := dp.initQueues(64) initialPoolSize := len(dp.packetPool) dp.setRunning() dp.initMetrics() go func() { - dp.runReceiver(0, dp.interfaces[0], runConfig, procCh) + dp.runReceiver(dp.underlay.Connections()[netip.AddrPort{}], procCh) }() ptrMap := make(map[uintptr]struct{}) for i := 0; i < 21; i++ { @@ -115,7 +120,7 @@ func TestReceiver(t *testing.T) { } <-done // make sure that the packet pool has the expected size after the test - assert.Equal(t, initialPoolSize-runConfig.BatchSize-20, len(dp.packetPool)) + assert.Equal(t, initialPoolSize-dp.RunConfig.BatchSize-20, len(dp.packetPool)) } // TestForwarder sets up a mocked batchConn, starts the forwarder that will write to @@ -127,7 +132,15 @@ func TestForwarder(t *testing.T) { defer ctrl.Finish() done := make(chan struct{}) prepareDP := func(ctrl *gomock.Controller) *DataPlane { - ret := &DataPlane{Metrics: metrics} + ret := &DataPlane{ + underlay: newUnderlay(), + Metrics: metrics, + RunConfig: RunConfig{ + NumProcessors: 20, + BatchSize: 64, + NumSlowPathProcessors: 1, + }, + } mInternal := mock_router.NewMockBatchConn(ctrl) totalCount := 0 @@ -140,7 +153,7 @@ func TestForwarder(t *testing.T) { for i, m := range ms { totalCount++ // 1/5 of the packets (randomly chosen) are errors - if rand.Intn(5) == 0 { + if mrand.IntN(5) == 0 { expectedPktId++ ms = ms[:i] break @@ -173,16 +186,14 @@ func TestForwarder(t *testing.T) { return ret } dp := prepareDP(ctrl) - runConfig := &RunConfig{ - NumProcessors: 20, - BatchSize: 64, - } - dp.initPacketPool(runConfig, 64) - _, fwCh, _ := initQueues(runConfig, dp.interfaces, 64) + dp.initPacketPool(64) + dp.initQueues(64) + conn := dp.underlay.Connections()[netip.AddrPort{}] + intf := dp.interfaces[0] initialPoolSize := len(dp.packetPool) dp.setRunning() dp.initMetrics() - go dp.runForwarder(0, dp.interfaces[0], runConfig, fwCh[0]) + go dp.runForwarder(conn) dstAddr := &net.UDPAddr{IP: net.IP{10, 0, 200, 200}} for i := 0; i < 255; i++ { @@ -191,19 +202,18 @@ func TestForwarder(t *testing.T) { pkt.rawPacket = pkt.rawPacket[:1] pkt.rawPacket[0] = byte(i) if i < 100 { - pkt.dstAddr.IP = pkt.dstAddr.IP[:4] - copy(pkt.dstAddr.IP, dstAddr.IP) + pkt.DstAddr.IP = pkt.DstAddr.IP[:4] + copy(pkt.DstAddr.IP, dstAddr.IP) } pkt.srcAddr = &net.UDPAddr{} // Receiver always sets this. pkt.ingress = 0 assert.NotEqual(t, initialPoolSize, len(dp.packetPool)) - select { - case fwCh[0] <- pkt: - case <-done: - } - + // Normal use would be + // intf.Send(pkt): + // However we want to exclude queue overflow from the test. So we want a blocking send. + intf.SendBlocking(pkt) } select { case <-done: @@ -432,7 +442,7 @@ func TestSlowPathProcessing(t *testing.T) { // ProcessPacket assumes some pre-conditions: // * The ingress interface has to exist. This fake map is good for the test cases we have. // * InternalNextHops may not be nil. Empty is ok for all the test cases we have. - fakeExternalInterfaces := map[uint16]BatchConn{1: nil} + fakeExternalInterfaces := []uint16{1} fakeInternalNextHops := map[uint16]netip.AddrPort{} fakeServices := map[addr.SVC][]netip.AddrPort{} @@ -619,7 +629,7 @@ func TestSlowPathProcessing(t *testing.T) { dp.initMetrics() rp := tc.mockMsg() - pkt := packet{} + pkt := Packet{} pkt.init(&[bufSize]byte{}) pkt.reset() pkt.ingress = tc.srcInterface diff --git a/router/dataplane_test.go b/router/dataplane_test.go index 1c812f9816..404e0de64a 100644 --- a/router/dataplane_test.go +++ b/router/dataplane_test.go @@ -26,8 +26,8 @@ import ( "time" "github.com/golang/mock/gomock" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -47,6 +47,7 @@ import ( "github.com/scionproto/scion/router" "github.com/scionproto/scion/router/control" "github.com/scionproto/scion/router/mock_router" + _ "github.com/scionproto/scion/router/underlayproviders" ) var ( @@ -200,29 +201,45 @@ func TestDataPlaneAddNextHop(t *testing.T) { l := netip.AddrPortFrom(netip.IPv4Unspecified(), 0) r := netip.AddrPortFrom(netip.IPv4Unspecified(), 0) nilAddrPort := netip.AddrPort{} + nilAddr := netip.Addr{} nobfd := control.BFD{Disable: ptr.To(true)} t.Run("fails after serve", func(t *testing.T) { d := &router.DataPlane{} + ctrl := gomock.NewController(t) + defer ctrl.Finish() + assert.NoError(t, d.AddInternalInterface(mock_router.NewMockBatchConn(ctrl), nilAddr)) d.FakeStart() assert.Error(t, d.AddNextHop(45, l, r, nobfd, "")) }) t.Run("setting nil dst is not allowed", func(t *testing.T) { d := &router.DataPlane{} + ctrl := gomock.NewController(t) + defer ctrl.Finish() + assert.NoError(t, d.AddInternalInterface(mock_router.NewMockBatchConn(ctrl), nilAddr)) assert.Error(t, d.AddNextHop(45, l, nilAddrPort, nobfd, "")) }) t.Run("setting nil src is not allowed", func(t *testing.T) { d := &router.DataPlane{} + ctrl := gomock.NewController(t) + defer ctrl.Finish() + assert.NoError(t, d.AddInternalInterface(mock_router.NewMockBatchConn(ctrl), nilAddr)) assert.Error(t, d.AddNextHop(45, nilAddrPort, r, nobfd, "")) }) t.Run("normal add works", func(t *testing.T) { d := &router.DataPlane{} + ctrl := gomock.NewController(t) + defer ctrl.Finish() + assert.NoError(t, d.AddInternalInterface(mock_router.NewMockBatchConn(ctrl), nilAddr)) assert.NoError(t, d.AddNextHop(45, l, r, nobfd, "")) assert.NoError(t, d.AddNextHop(43, l, r, nobfd, "")) }) t.Run("overwrite fails", func(t *testing.T) { d := &router.DataPlane{} + ctrl := gomock.NewController(t) + defer ctrl.Finish() + assert.NoError(t, d.AddInternalInterface(mock_router.NewMockBatchConn(ctrl), nilAddr)) assert.NoError(t, d.AddNextHop(45, l, r, nobfd, "")) assert.Error(t, d.AddNextHop(45, l, r, nobfd, "")) }) @@ -238,7 +255,14 @@ func TestDataPlaneRun(t *testing.T) { }{ "route 10 msg from external to internal": { prepareDP: func(ctrl *gomock.Controller, done chan<- struct{}) *router.DataPlane { - ret := &router.DataPlane{Metrics: metrics} + ret := &router.DataPlane{ + Metrics: metrics, + RunConfig: router.RunConfig{ + NumProcessors: 8, + BatchSize: 256, + NumSlowPathProcessors: 1, + }, + } key := []byte("testkey_xxxxxxxx") local := addr.MustParseIA("1-ff00:0:110") @@ -326,7 +350,14 @@ func TestDataPlaneRun(t *testing.T) { }, "bfd bootstrap internal session": { prepareDP: func(ctrl *gomock.Controller, done chan<- struct{}) *router.DataPlane { - ret := &router.DataPlane{Metrics: metrics} + ret := &router.DataPlane{ + Metrics: metrics, + RunConfig: router.RunConfig{ + NumProcessors: 8, + BatchSize: 256, + NumSlowPathProcessors: 1, + }, + } postInternalBFD := func(id layers.BFDDiscriminator, src netip.AddrPort) []byte { scn := &slayers.SCION{ @@ -405,7 +436,14 @@ func TestDataPlaneRun(t *testing.T) { }, "bfd sender internal": { prepareDP: func(ctrl *gomock.Controller, done chan<- struct{}) *router.DataPlane { - ret := &router.DataPlane{Metrics: metrics} + ret := &router.DataPlane{ + Metrics: metrics, + RunConfig: router.RunConfig{ + NumProcessors: 8, + BatchSize: 256, + NumSlowPathProcessors: 1, + }, + } localAddr := netip.MustParseAddrPort("10.0.200.100:0") remoteAddr := netip.MustParseAddrPort("10.0.200.200:0") mInternal := mock_router.NewMockBatchConn(ctrl) @@ -456,7 +494,15 @@ func TestDataPlaneRun(t *testing.T) { }, "bfd sender external": { prepareDP: func(ctrl *gomock.Controller, done chan<- struct{}) *router.DataPlane { - ret := &router.DataPlane{Metrics: metrics} + ret := &router.DataPlane{ + Metrics: metrics, + RunConfig: router.RunConfig{ + NumProcessors: 8, + BatchSize: 256, + NumSlowPathProcessors: 1, + }, + } + ifID := uint16(1) mInternal := mock_router.NewMockBatchConn(ctrl) mInternal.EXPECT().ReadBatch(gomock.Any()).Return(0, nil).AnyTimes() @@ -508,7 +554,14 @@ func TestDataPlaneRun(t *testing.T) { }, "bfd bootstrap external session": { prepareDP: func(ctrl *gomock.Controller, done chan<- struct{}) *router.DataPlane { - ret := &router.DataPlane{Metrics: metrics} + ret := &router.DataPlane{ + Metrics: metrics, + RunConfig: router.RunConfig{ + NumProcessors: 8, + BatchSize: 256, + NumSlowPathProcessors: 1, + }, + } postExternalBFD := func(id layers.BFDDiscriminator, fromIfID uint16) []byte { scn := &slayers.SCION{ @@ -589,18 +642,13 @@ func TestDataPlaneRun(t *testing.T) { name, tc := name, tc t.Run(name, func(t *testing.T) { t.Parallel() - runConfig := &router.RunConfig{ - NumProcessors: 8, - BatchSize: 256, - NumSlowPathProcessors: 1, - } ch := make(chan struct{}) dp := tc.prepareDP(ctrl, ch) errors := make(chan error) ctx, cancelF := context.WithCancel(context.Background()) defer cancelF() go func() { - errors <- dp.Run(ctx, runConfig) + errors <- dp.Run(ctx) }() for done := false; !done; { @@ -643,7 +691,7 @@ func TestProcessPkt(t *testing.T) { // * The ingress interface has to exist. This fake map is good for most test cases. // Others need a custom one. // * InternalNextHops may not be nil. Empty is ok (sufficient unless testing AS transit). - fakeExternalInterfaces := map[uint16]router.BatchConn{1: nil, 2: nil, 3: nil} + fakeExternalInterfaces := []uint16{1, 2, 3} fakeInternalNextHops := map[uint16]netip.AddrPort{} testCases := map[string]struct { @@ -725,9 +773,7 @@ func TestProcessPkt(t *testing.T) { "outbound": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1}, map[uint16]topology.LinkType{ 1: topology.Child, }, @@ -759,10 +805,7 @@ func TestProcessPkt(t *testing.T) { "brtransit": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1, 2}, map[uint16]topology.LinkType{ 1: topology.Parent, 2: topology.Child, @@ -794,10 +837,7 @@ func TestProcessPkt(t *testing.T) { "brtransit non consdir": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1, 2}, map[uint16]topology.LinkType{ 2: topology.Parent, 1: topology.Child, @@ -830,10 +870,7 @@ func TestProcessPkt(t *testing.T) { "brtransit peering consdir": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1, 2}, map[uint16]topology.LinkType{ 1: topology.Peer, 2: topology.Child, @@ -900,10 +937,7 @@ func TestProcessPkt(t *testing.T) { "brtransit peering non consdir": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1, 2}, map[uint16]topology.LinkType{ 1: topology.Peer, 2: topology.Child, @@ -977,10 +1011,7 @@ func TestProcessPkt(t *testing.T) { // happens on the next hop. prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1, 2}, map[uint16]topology.LinkType{ 1: topology.Peer, 2: topology.Child, @@ -1051,10 +1082,7 @@ func TestProcessPkt(t *testing.T) { "peering non consdir upstream": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1, 2}, map[uint16]topology.LinkType{ 1: topology.Peer, 2: topology.Child, @@ -1133,11 +1161,7 @@ func TestProcessPkt(t *testing.T) { "astransit direct": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - // Interface 3 isn't in the external interfaces of this router - // another router has it. - }, + []uint16{1}, // Interface 3 is in the external interfaces of a sibling router map[uint16]topology.LinkType{ 1: topology.Core, 3: topology.Core, @@ -1157,9 +1181,11 @@ func TestProcessPkt(t *testing.T) { dpath.HopFields[1].Mac = computeMAC(t, key, dpath.InfoFields[0], dpath.HopFields[1]) var dstAddr *net.UDPAddr ingress := uint16(1) - egress := uint16(0) // Internal forward to the egress router + egress := uint16(0) // To make sure it gets updated. if afterProcessing { - dstAddr = &net.UDPAddr{IP: net.ParseIP("10.0.200.200").To4(), Port: 30043} + egress = uint16(3) // The sibling router is locally mapped to the egress ifID. + // The link is specific to the sibling. It has the address. So we don't expect: + // dstAddr = &net.UDPAddr{IP: net.ParseIP("10.0.200.200").To4(), Port: 30043} } return router.NewPacket(toBytes(t, spkt, dpath), nil, dstAddr, ingress, egress) }, @@ -1168,9 +1194,7 @@ func TestProcessPkt(t *testing.T) { "astransit xover": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(51): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{51}, map[uint16]topology.LinkType{ 51: topology.Child, 3: topology.Core, @@ -1210,11 +1234,13 @@ func TestProcessPkt(t *testing.T) { var dstAddr *net.UDPAddr ingress := uint16(51) // == consEgress, bc non-consdir - egress := uint16(0) // Cross-over. The egress happens in the next segment. + egress := uint16(0) // To check that it is updated if afterProcessing { dpath.PathMeta.CurrHF++ dpath.PathMeta.CurrINF++ - dstAddr = &net.UDPAddr{IP: net.ParseIP("10.0.200.200").To4(), Port: 30043} + egress = uint16(3) // Internal hop => egress points at sibling router. + // The link is specific to the sibling. It has the address. So we don't expect: + // dstAddr = &net.UDPAddr{IP: net.ParseIP("10.0.200.200").To4(), Port: 30043} } else { dpath.InfoFields[0].UpdateSegID(dpath.HopFields[1].Mac) } @@ -1365,9 +1391,7 @@ func TestProcessPkt(t *testing.T) { "reversed onehop outbound": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(1): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{1}, nil, mock_router.NewMockBatchConn(ctrl), fakeInternalNextHops, @@ -1425,9 +1449,7 @@ func TestProcessPkt(t *testing.T) { "onehop outbound": { prepareDP: func(ctrl *gomock.Controller) *router.DataPlane { return router.NewDP( - map[uint16]router.BatchConn{ - uint16(2): mock_router.NewMockBatchConn(ctrl), - }, + []uint16{2}, nil, mock_router.NewMockBatchConn(ctrl), fakeInternalNextHops, nil, diff --git a/router/doc.go b/router/doc.go new file mode 100644 index 0000000000..46fcdbf27f --- /dev/null +++ b/router/doc.go @@ -0,0 +1,25 @@ +// Copyright 2024 SCION Association +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package router implements the SCION border router (BR) component as a self-contained process. +// +// The code in this package is organized as follows: +// - connector.go: implementation of the management API. +// - dataplane.go: forwards packets between underlay connections. +// - fnv1aCheap.go: a domain-specific implementation of the fnv1a hash function. +// - metrics.go: manages the monitoring sensors. +// - serialize_proxy.go: a domain-specific implementation of gopacket.SerializeBuffer. +// - svc.go: maps a service address to a set of possible destinations. +// - subpackages and tests. +package router diff --git a/router/export_test.go b/router/export_test.go index 1c87bcce8b..c67f8effb4 100644 --- a/router/export_test.go +++ b/router/export_test.go @@ -36,37 +36,31 @@ func GetMetrics() *Metrics { var NewServices = newServices -// Export the Packet struct so dataplane test can call ProcessPkt -type Packet struct { - packet -} - type Disposition disposition const PDiscard = Disposition(pDiscard) func NewPacket(raw []byte, src, dst *net.UDPAddr, ingress, egress uint16) *Packet { p := Packet{ - packet: packet{ - dstAddr: &net.UDPAddr{IP: make(net.IP, 0, net.IPv6len)}, - srcAddr: &net.UDPAddr{IP: make(net.IP, 0, net.IPv6len)}, - rawPacket: make([]byte, len(raw)), - ingress: ingress, - egress: egress, - }, + DstAddr: &net.UDPAddr{IP: make(net.IP, 0, net.IPv6len)}, + srcAddr: &net.UDPAddr{IP: make(net.IP, 0, net.IPv6len)}, + rawPacket: make([]byte, len(raw)), + ingress: ingress, + egress: egress, } + if src != nil { p.srcAddr = src } if dst != nil { - p.dstAddr = dst + p.DstAddr = dst } copy(p.rawPacket, raw) return &p } func NewDP( - external map[uint16]BatchConn, + external []uint16, linkTypes map[uint16]topology.LinkType, internal BatchConn, internalNextHops map[uint16]netip.AddrPort, @@ -76,12 +70,11 @@ func NewDP( key []byte) *DataPlane { dp := &DataPlane{ - interfaces: map[uint16]BatchConn{0: internal}, + underlay: newUnderlay(), + interfaces: make(map[uint16]Link), localIA: local, - external: external, linkTypes: linkTypes, neighborIAs: neighbors, - internalNextHops: internalNextHops, dispatchedPortStart: uint16(dispatchedPortStart), dispatchedPortEnd: uint16(dispatchedPortEnd), svc: &services{m: svc}, @@ -89,6 +82,19 @@ func NewDP( Metrics: metrics, } + dp.interfaces[0] = dp.underlay.NewInternalLink(internal, 64) + + // Make dummy external interfaces, as requested by the test. They are not actually used to send + // or receive. The blank address might cause issues, though. + for _, i := range external { + dp.interfaces[i] = dp.underlay.NewExternalLink(nil, 64, nil, netip.AddrPort{}, i) + } + + // Make dummy sibling interfaces, as requestes by the test. + for i, addr := range internalNextHops { + dp.interfaces[i] = dp.underlay.NewSiblingLink(64, nil, addr) + } + if err := dp.SetKey(key); err != nil { panic(err) } @@ -103,7 +109,7 @@ func (d *DataPlane) FakeStart() { func (d *DataPlane) ProcessPkt(pkt *Packet) Disposition { p := newPacketProcessor(d) - disp := p.processPkt(&(pkt.packet)) + disp := p.processPkt(pkt) // Erase trafficType; we don't set it in the expected results. pkt.trafficType = ttOther return Disposition(disp) diff --git a/router/metrics.go b/router/metrics.go index 5253bba765..d26b2aa9ef 100644 --- a/router/metrics.go +++ b/router/metrics.go @@ -282,9 +282,10 @@ func newInterfaceMetrics( metrics *Metrics, id uint16, localIA addr.IA, + scope LinkScope, neighbors map[uint16]addr.IA) interfaceMetrics { - ifLabels := interfaceLabels(id, localIA, neighbors) + ifLabels := interfaceLabels(id, localIA, scope, neighbors) m := interfaceMetrics{} for sc := minSizeClass; sc < maxSizeClass; sc++ { scLabels := prometheus.Labels{"sizeclass": sc.String()} @@ -355,7 +356,9 @@ func newOutputMetrics( return om } -func interfaceLabels(id uint16, localIA addr.IA, neighbors map[uint16]addr.IA) prometheus.Labels { +func interfaceLabels( + id uint16, localIA addr.IA, scope LinkScope, neighbors map[uint16]addr.IA) prometheus.Labels { + if id == 0 { return prometheus.Labels{ "isd_as": localIA.String(), @@ -363,10 +366,16 @@ func interfaceLabels(id uint16, localIA addr.IA, neighbors map[uint16]addr.IA) p "neighbor_isd_as": localIA.String(), } } + viaSibling := "->" + neighbor := "unknown" + if scope == External { + viaSibling = "" + neighbor = neighbors[id].String() + } return prometheus.Labels{ "isd_as": localIA.String(), - "interface": strconv.FormatUint(uint64(id), 10), - "neighbor_isd_as": neighbors[id].String(), + "interface": viaSibling + strconv.FormatUint(uint64(id), 10), + "neighbor_isd_as": neighbor, } } diff --git a/router/mgmtapi/api.go b/router/mgmtapi/api.go index eb127c88b7..69e92532bd 100644 --- a/router/mgmtapi/api.go +++ b/router/mgmtapi/api.go @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package mgmtapi implements the http status API of the router. package mgmtapi import ( @@ -23,7 +24,7 @@ import ( "github.com/scionproto/scion/router/control" ) -// Server implements the Control Service API. +// Server implements the http status API of the router. type Server struct { Config http.HandlerFunc Info http.HandlerFunc diff --git a/router/serialize_proxy.go b/router/serialize_proxy.go index e3b6b1cfbc..2492b7403e 100644 --- a/router/serialize_proxy.go +++ b/router/serialize_proxy.go @@ -15,7 +15,7 @@ package router import ( - "github.com/google/gopacket" + "github.com/gopacket/gopacket" ) // serializeProxy implements gopacket.SerializeBuffer. It is a very simple implementation that diff --git a/router/svc.go b/router/svc.go index ed1a656d58..c13ba5b6da 100644 --- a/router/svc.go +++ b/router/svc.go @@ -15,7 +15,7 @@ package router import ( - mrand "math/rand" + "math/rand/v2" "net/netip" "slices" "sync" @@ -65,5 +65,5 @@ func (s *services) Any(svc addr.SVC) (netip.AddrPort, bool) { if len(addrs) == 0 { return netip.AddrPort{}, false } - return addrs[mrand.Intn(len(addrs))], true + return addrs[rand.IntN(len(addrs))], true } diff --git a/router/underlay.go b/router/underlay.go new file mode 100644 index 0000000000..e073a49689 --- /dev/null +++ b/router/underlay.go @@ -0,0 +1,118 @@ +// Copyright 2025 SCION Association +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This module defines the interfaces between the router and the underlay network implementations. + +package router + +import ( + "net/netip" +) + +// LinkScope describes the kind (or scope) of a link: internal, sibling, or external. +type LinkScope int + +const ( + Internal LinkScope = iota // to/from end-hosts in the local AS + Sibling // to/from (external interfaces owned by) a sibling router + External // to/from routers in another AS +) + +// Link embodies the router's idea of a point to point connection. A link associates the underlay +// connection with a BFDSession, a destination address, etc. It also allows the concrete send +// operation to be delegated to different underlay implementations. The association between +// link and underlay connection is a channel, on the sending side, and should be a demultiplexer on +// the receiving side. The demultiplexer must have a src-addr:link map in all cases where links +// share connections. +// +// Regardless of underlay, links come in three scopes: internal, sibling, and external. The +// difference in behaviour is hidden from the rest of the router. The router only needs to +// associate an interface ID with a link. If the interface ID belongs to a sibling router, then +// the link is a sibling link. If the interface ID is zero, then the link is the internal link. +type Link interface { + Scope() LinkScope + BFDSession() BFDSession + IsUp() bool + IfID() uint16 + Remote() netip.AddrPort // TODO(multi_underlay): using code will move to underlay. + Send(p *Packet) bool + SendBlocking(p *Packet) +} + +// A provider of connectivity over some underlay implementation +// +// For any given underlay, there are three kinds of Link implementations to choose from. +// The difference between them is the intent regarding addressing. +// +// TODO(multi_underlay): addresses are still explicitly IP/port. In the next step, we have to +// make them opaque; to be interpreted only by the underlay implementation. +type UnderlayProvider interface { + + // NewExternalLink returns a link that addresses a single remote AS at a unique underlay + // address. So, it is given an ifID and a underlay remote address at creation. Outgoing packets + // do not need an underlay destination as metadata. Incoming packets have a defined ingress + // ifID. + NewExternalLink( + conn BatchConn, qSize int, bfd BFDSession, remote netip.AddrPort, ifID uint16, + ) Link + + // NewSinblingLink returns a link that addresses any number of remote ASes via a single sibling + // router. So, it is not given an ifID at creation, but it is given a remote underlay address: + // that of the sibling router. Outgoing packets do not need an underlay destination as metadata. + // Incoming packets have no defined ingress ifID. + NewSiblingLink(qSize int, bfd BFDSession, remote netip.AddrPort) Link + + // NewIternalLink returns a link that addresses any host internal to the enclosing AS, so it is + // given neither ifID nor address. Outgoing packets need to have a destination address as + // metadata. Incoming packets have no defined ingress ifID. + NewInternalLink(conn BatchConn, qSize int) Link + + // Connections returns the set of configured distinct connections in the provider. + // + // TODO(multi_underlay): this exists so most of the receiving code can stay in the main + // dataplane code for now. There may be fewer connections than links. For example, right now + // all sibling links and the internal link use a shared un-bound connection. + Connections() map[netip.AddrPort]UnderlayConn + + // Links returns the set of configured distinct links in the provider. + // + // TODO(multi_underlay): this exists so most of the receiving code can stay in-here for now. + // There may be fewer links than ifIDs. For example, all interfaces owned by one given sibling + // router are connected via the same link because the remote address is the same. + Links() map[netip.AddrPort]Link + + // Link returns a link that matches the given source address. If the address is not that of + // a known link, then the internal link is returned. + // + // TODO(multi_underlay): This has to exist until incoming packets are "demuxed" (i.e. + // matched with a link), on ingest by the underlay. That would imply moving a part of the + // runReceiver routine to the underlay. We will do that in the next step. + Link(netip.AddrPort) Link +} + +// UnderlayConn defines the minimum interface that the router expects from an underlay +// connection. +// +// TODO(multi_underlay): this will eventually be reduced to nothing at all because the sender +// receiver tasks will be part of the underlay. +type UnderlayConn interface { + // Conn returns the BatchConn associated with the connection. + Conn() BatchConn + // Queue returns the channel associated with the connection. + Queue() <-chan *Packet + // Name returns the name (for logging) associated with the connection. + Name() string + // IfID returns the IfID associated with the connection. + IfID() uint16 +} diff --git a/router/underlayproviders/BUILD.bazel b/router/underlayproviders/BUILD.bazel new file mode 100644 index 0000000000..1f5ab23865 --- /dev/null +++ b/router/underlayproviders/BUILD.bazel @@ -0,0 +1,9 @@ +load("//tools/lint:go.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["udpip.go"], + importpath = "github.com/scionproto/scion/router/underlayproviders", + visibility = ["//visibility:public"], + deps = ["//router:go_default_library"], +) diff --git a/router/underlayproviders/udpip.go b/router/underlayproviders/udpip.go new file mode 100644 index 0000000000..72e78717ed --- /dev/null +++ b/router/underlayproviders/udpip.go @@ -0,0 +1,326 @@ +// Copyright 2025 SCION Association +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package underlayproviders + +import ( + "maps" + "net/netip" + + "github.com/scionproto/scion/router" +) + +// provider implements UnderlayProvider by making and returning Udp/Ip links. +// +// This is currently the only implementation. The goal of splitting out this code from the router +// is to enable other implementations. However, as a first step, we continue assuming that the +// batchConn is given to us and is a UDP socket and that, in the case of externalLink, it is bound. +type provider struct { + allLinks map[netip.AddrPort]router.Link + allConnections map[netip.AddrPort]*udpConnection +} + +func init() { + // Register ourselves as an underlay provider. The registration consists of a constructor, not + // a provider object, because multiple router instances each must have their own underlay + // provider. The provider is not re-entrant. + router.AddUnderlay(newProvider) +} + +// New instantiates a new instance of the provider for exclusive use by the caller. +func newProvider() router.UnderlayProvider { + return &provider{ + allLinks: make(map[netip.AddrPort]router.Link), + allConnections: make(map[netip.AddrPort]*udpConnection), + } +} + +func (u *provider) Connections() map[netip.AddrPort]router.UnderlayConn { + // A map of interfaces and a map of concrete implementations aren't compatible. + // For the same reason, we cannot have the map of concrete implementations as our return type; + // it does not satisfy the Connections() interface (so much for the "don't return + // interfaces" rule)... Brilliant, Go. + // Since we do not want to store our own things as interfaces, we have to translate. + // Good thing it doesn't happen often. + m := make(map[netip.AddrPort]router.UnderlayConn) + for a, c := range u.allConnections { + m[a] = c // Yeah that's exactly as stupid as it looks. + } + return m +} + +func (u *provider) Links() map[netip.AddrPort]router.Link { + return maps.Clone(u.allLinks) +} + +func (u *provider) Link(addr netip.AddrPort) router.Link { + // There is one link for every address. The internal Link catches all. + l, found := u.allLinks[addr] + if found { + return l + } + return u.allLinks[netip.AddrPort{}] +} + +// udpConnection is simply the combination of a BatchConn and sending queue (plus metadata for +// logs and such). This allows UDP connections to be shared between links. Bundling link and +// connection together is possible and simpler for the code here, but leaks more refactoring changes +// in the main router code. Specifically, either: +// - sibling links would each need an independent socket to the sibling router, which +// the router cannot provide at the moment. +// - the internal links and sibling links would be the same, which means the router needs to +// special case the sibling links: which we want to remove from the main code. +type udpConnection struct { + conn router.BatchConn + queue chan *router.Packet + ifID uint16 // for metrics. All sibling links plus the internal link will be zero, though. + name string // for logs. It's more informative than ifID. +} + +// TODO(multi_underlay): The following implements UnderlayConn so some of the code +// that needs to interact with it can stay in the main router code. This will be removed in the +// next step + +func (u *udpConnection) Conn() router.BatchConn { + return u.conn +} + +func (u *udpConnection) Queue() <-chan *router.Packet { + return u.queue +} + +func (u *udpConnection) Name() string { + return u.name +} + +func (u *udpConnection) IfID() uint16 { + return u.ifID +} + +// todo(jiceatscion): use inheritance between implementations? + +type externalLink struct { + queue chan<- *router.Packet + bfdSession router.BFDSession + ifID uint16 + remote netip.AddrPort // We keep this only for Remote() +} + +// NewExternalLink returns an external link over the UdpIpUnderlay. +// +// TODO(multi_underlay): we get the connection ready-made and require it to be bound. So, we +// don't keep the remote address, but in the future, we will be making the connections, and +// the conn argument will be gone. +func (u *provider) NewExternalLink( + conn router.BatchConn, + qSize int, + bfd router.BFDSession, + remote netip.AddrPort, + ifID uint16, +) router.Link { + + queue := make(chan *router.Packet, qSize) + c := &udpConnection{ + conn: conn, + queue: queue, + ifID: ifID, + name: remote.String(), + } + u.allConnections[remote] = c + l := &externalLink{ + queue: queue, + bfdSession: bfd, + ifID: ifID, + } + u.allLinks[remote] = l + return l +} + +func (l *externalLink) Scope() router.LinkScope { + return router.External +} + +func (l *externalLink) BFDSession() router.BFDSession { + return l.bfdSession +} + +func (l *externalLink) IsUp() bool { + return l.bfdSession == nil || l.bfdSession.IsUp() +} + +func (l *externalLink) IfID() uint16 { + return l.ifID +} + +func (l *externalLink) Remote() netip.AddrPort { + return l.remote +} + +func (l *externalLink) Send(p *router.Packet) bool { + select { + case l.queue <- p: + default: + return false + } + return true +} + +func (l *externalLink) SendBlocking(p *router.Packet) { + l.queue <- p +} + +type siblingLink struct { + queue chan<- *router.Packet + bfdSession router.BFDSession + remote netip.AddrPort +} + +// newSiblingLink returns a sibling link over the UdpIpUnderlay. +// +// TODO(multi_underlay): this can only be an improvement over internalLink if we have a bound +// batchConn with the sibling router. However, currently the caller doesn't have one to give us; +// the main code has so far been reusing the internal connection. So, that's what we do for now. +// As a result, we keep the remote address; as we need to supply it for every packet being sent +// (something we will get rid of eventually). +// In the future we will be making one connection per remote address and we might even be able +// to erase the separation between link and connection for this implementation. Side effect +// of moving the address:link map here: the router does not know if there is an existing link. As +// a result it has to give us a BFDSession in all cases and we might throw it away (there +// are no permanent resources attached to it). This will be fixed by moving some BFD related code +// in-here. +func (u *provider) NewSiblingLink( + qSize int, bfd router.BFDSession, remote netip.AddrPort) router.Link { + + // There is exactly one sibling link per sibling router address. + l, exists := u.allLinks[remote] + if exists { + return l.(*siblingLink) + } + + // All sibling links re-use the internal connection. This used to be a late binding (packets to + // siblings would get routed through the internal interface at run-time). But now this binding + // happens right now and it can't work if this is called before newInternalLink. + c, exists := u.allConnections[netip.AddrPort{}] + if !exists { + // TODO(multi_underlay):That doesn't actually happen. + // It is only required until we stop sharing the internal connection. + panic("newSiblingLink called before newInternalLink") + } + + s := &siblingLink{ + queue: c.queue, + bfdSession: bfd, + remote: remote, + } + u.allLinks[remote] = s + return s +} + +func (l *siblingLink) Scope() router.LinkScope { + return router.Sibling +} + +func (l *siblingLink) BFDSession() router.BFDSession { + return l.bfdSession +} + +func (l *siblingLink) IsUp() bool { + return l.bfdSession == nil || l.bfdSession.IsUp() +} + +func (l *siblingLink) IfID() uint16 { + return 0 +} + +func (l *siblingLink) Remote() netip.AddrPort { + return l.remote +} + +func (l *siblingLink) Send(p *router.Packet) bool { + // We use an unbound connection but we offer a connection-oriented service. So, we need to + // supply the packet's destination address. + router.UpdateNetAddrFromAddrPort(p.DstAddr, l.remote) + select { + case l.queue <- p: + default: + return false + } + return true +} + +func (l *siblingLink) SendBlocking(p *router.Packet) { + // We use an unbound connection but we offer a connection-oriented service. So, we need to + // supply the packet's destination address. + router.UpdateNetAddrFromAddrPort(p.DstAddr, l.remote) + l.queue <- p +} + +type internalLink struct { + queue chan *router.Packet +} + +// newSiblingLink returns a sibling link over the UdpIpUnderlay. +// +// TODO(multi_underlay): we get the connection ready made. In the future we will be making it +// and the conn argument will be gone. +func (u *provider) NewInternalLink(conn router.BatchConn, qSize int) router.Link { + queue := make(chan *router.Packet, qSize) + c := &udpConnection{ + conn: conn, + queue: queue, + name: "internal", + ifID: 0, + } + u.allConnections[netip.AddrPort{}] = c + l := &internalLink{ + queue: queue, + } + u.allLinks[netip.AddrPort{}] = l + return l +} + +func (l *internalLink) Scope() router.LinkScope { + return router.Internal +} + +func (l *internalLink) IsUp() bool { + return true +} + +func (l *internalLink) BFDSession() router.BFDSession { + return nil +} + +func (l *internalLink) IfID() uint16 { + return 0 +} + +func (l *internalLink) Remote() netip.AddrPort { + return netip.AddrPort{} +} + +// The packet's destination is already in the packet's meta-data. +func (l *internalLink) Send(p *router.Packet) bool { + select { + case l.queue <- p: + default: + return false + } + return true +} + +// The packet's destination is already in the packet's meta-data. +func (l *internalLink) SendBlocking(p *router.Packet) { + l.queue <- p +} diff --git a/scion-pki/certs/certformat.go b/scion-pki/certs/certformat.go index 01ac497d23..5f37bfec48 100644 --- a/scion-pki/certs/certformat.go +++ b/scion-pki/certs/certformat.go @@ -44,7 +44,7 @@ type formatBuffer struct { } // Writef writes a string formated using fmt.Sprintf. -func (b *formatBuffer) Writef(format string, args ...interface{}) (int, error) { +func (b *formatBuffer) Writef(format string, args ...any) (int, error) { return b.Buffer.WriteString(fmt.Sprintf(format, args...)) } @@ -202,7 +202,7 @@ func getProvisioner(cert *x509.Certificate) *provisioner { return nil } -func getPublicKeyAlgorithm(algorithm x509.PublicKeyAlgorithm, key interface{}) string { +func getPublicKeyAlgorithm(algorithm x509.PublicKeyAlgorithm, key any) string { var params string switch pk := key.(type) { case *ecdsa.PublicKey: diff --git a/scion-pki/certs/certinfo.go b/scion-pki/certs/certinfo.go index a8b5d7efaf..bdd44ae06c 100644 --- a/scion-pki/certs/certinfo.go +++ b/scion-pki/certs/certinfo.go @@ -195,7 +195,7 @@ func printVersion(version int, buf *bytes.Buffer) { buf.WriteString(fmt.Sprintf("%8sVersion: %d (%#x)\n", "", version, hexVersion)) } -func printSubjectInformation(subj *pkix.Name, pkAlgo x509.PublicKeyAlgorithm, pk interface{}, buf *bytes.Buffer) error { +func printSubjectInformation(subj *pkix.Name, pkAlgo x509.PublicKeyAlgorithm, pk any, buf *bytes.Buffer) error { buf.WriteString(fmt.Sprintf("%8sSubject:", "")) if len(subj.Names) > 0 { buf.WriteString(" ") diff --git a/scion-pki/certs/create_test.go b/scion-pki/certs/create_test.go index 6a2fe33b07..3695bb260e 100644 --- a/scion-pki/certs/create_test.go +++ b/scion-pki/certs/create_test.go @@ -27,15 +27,13 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/private/app/command" "github.com/scionproto/scion/scion-pki/key" ) func TestNewCreateCmd(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "certificate-create-test") - defer cleanup() + dir := t.TempDir() now := time.Now() @@ -439,8 +437,7 @@ func TestNewCreateCmd(t *testing.T) { } func TestNewCreateCmdCSR(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "certificate-create-csr-test") - defer cleanup() + dir := t.TempDir() testCases := map[string]struct { Prepare func(t *testing.T) diff --git a/scion-pki/certs/renew.go b/scion-pki/certs/renew.go index a074777fe9..36b3aca8df 100644 --- a/scion-pki/certs/renew.go +++ b/scion-pki/certs/renew.go @@ -173,7 +173,7 @@ issued the unverifiable certificate chain. The resulting certificate chain is written to the file system, either to or to \--out, if specified. -The fresh private key is is written to the file stystem, either to +The fresh private key is is written to the file system, either to or to \--out-key, if specified. Files are not allowed to be overwritten, by default. Either you have to specify @@ -203,10 +203,10 @@ The template is expressed in JSON. A valid example:: RunE: func(cmd *cobra.Command, args []string) error { certFile := args[0] keyFile := args[1] - printErr := func(f string, ctx ...interface{}) { + printErr := func(f string, ctx ...any) { fmt.Fprintf(cmd.ErrOrStderr(), f, ctx...) } - printf := func(f string, ctx ...interface{}) { + printf := func(f string, ctx ...any) { fmt.Fprintf(cmd.OutOrStdout(), f, ctx...) } @@ -587,7 +587,7 @@ The template is expressed in JSON. A valid example:: "Remaining time threshold for renewal", ) cmd.Flags().BoolVar(&flags.force, "force", false, - "Force overwritting existing files", + "Force overwriting existing files", ) cmd.Flags().BoolVar(&flags.backup, "backup", false, "Back up existing files before overwriting", @@ -729,7 +729,10 @@ func (r *renewer) requestRemote( return nil, serrors.Wrap("resolving local address", err) } } else { - if localIP, err = addrutil.DefaultLocalIP(ctx, r.Daemon); err != nil { + if localIP, err = addrutil.DefaultLocalIP( + ctx, + daemon.TopoQuerier{Connector: r.Daemon}, + ); err != nil { return nil, serrors.Wrap("resolving default address", err) } } diff --git a/scion-pki/cmd/scion-pki/kms.go b/scion-pki/cmd/scion-pki/kms.go index 99d1f6bbda..1d5c7bda4d 100644 --- a/scion-pki/cmd/scion-pki/kms.go +++ b/scion-pki/cmd/scion-pki/kms.go @@ -88,7 +88,7 @@ https://smallstep.com/docs/step-ca/cryptographic-protection. } // tmpl executes the given template text on data, writing the result to w. -func tmpl(w io.Writer, text string, data interface{}) error { +func tmpl(w io.Writer, text string, data any) error { t := template.New("top") t.Funcs(templateFuncs) template.Must(t.Parse(text)) diff --git a/scion-pki/conf/trc_test.go b/scion-pki/conf/trc_test.go index 1055239b08..9b76941c60 100644 --- a/scion-pki/conf/trc_test.go +++ b/scion-pki/conf/trc_test.go @@ -35,8 +35,7 @@ func TestUpdateCerts(t *testing.T) { t.Skip("Specify -update-non-deterministic to update certs") return } - dir, cleanF := xtest.MustTempDir("", "safedir") - defer cleanF() + dir := t.TempDir() cmd := exec.Command("sh", "-c", "./testdata/update_certs.sh") cmd.Env = []string{ diff --git a/scion-pki/file/BUILD.bazel b/scion-pki/file/BUILD.bazel index f6b22b59dd..786cc16b78 100644 --- a/scion-pki/file/BUILD.bazel +++ b/scion-pki/file/BUILD.bazel @@ -13,7 +13,6 @@ go_test( srcs = ["file_test.go"], deps = [ ":go_default_library", - "//pkg/private/xtest:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", ], diff --git a/scion-pki/file/file_test.go b/scion-pki/file/file_test.go index a3fe94b904..4a7808b318 100644 --- a/scion-pki/file/file_test.go +++ b/scion-pki/file/file_test.go @@ -21,13 +21,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/scion-pki/file" ) func TestWriteFile(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "file-write-file-test") - defer cleanup() + dir := t.TempDir() testCases := map[string]struct { Prepare func(t *testing.T) diff --git a/scion-pki/key/BUILD.bazel b/scion-pki/key/BUILD.bazel index ea179503e3..0ddd361be3 100644 --- a/scion-pki/key/BUILD.bazel +++ b/scion-pki/key/BUILD.bazel @@ -36,7 +36,6 @@ go_test( data = glob(["testdata/**"]), deps = [ ":go_default_library", - "//pkg/private/xtest:go_default_library", "//private/app/command:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", "@com_github_stretchr_testify//require:go_default_library", diff --git a/scion-pki/key/private_test.go b/scion-pki/key/private_test.go index 4110aa8d32..8adacbe133 100644 --- a/scion-pki/key/private_test.go +++ b/scion-pki/key/private_test.go @@ -21,14 +21,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/private/app/command" "github.com/scionproto/scion/scion-pki/key" ) func TestNewPrivateCmd(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "private-key-test") - defer cleanup() + dir := t.TempDir() testCases := map[string]struct { Prepare func(t *testing.T) diff --git a/scion-pki/key/public_test.go b/scion-pki/key/public_test.go index 0f205571a7..14ecdd9001 100644 --- a/scion-pki/key/public_test.go +++ b/scion-pki/key/public_test.go @@ -21,14 +21,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/private/app/command" "github.com/scionproto/scion/scion-pki/key" ) func TestNewPublicCmd(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "public-key-test") - defer cleanup() + dir := t.TempDir() testCases := map[string]struct { Prepare func(t *testing.T) diff --git a/scion-pki/key/symmetric_test.go b/scion-pki/key/symmetric_test.go index de7606632b..7fcfd3b021 100644 --- a/scion-pki/key/symmetric_test.go +++ b/scion-pki/key/symmetric_test.go @@ -25,14 +25,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/private/app/command" "github.com/scionproto/scion/scion-pki/key" ) func TestNewSymmetricCmd(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "symmetric-key-test") - defer cleanup() + dir := t.TempDir() testCases := map[string]struct { Prepare func(t *testing.T) diff --git a/scion-pki/testcrypto/BUILD.bazel b/scion-pki/testcrypto/BUILD.bazel index 67d020c781..eed3561ad0 100644 --- a/scion-pki/testcrypto/BUILD.bazel +++ b/scion-pki/testcrypto/BUILD.bazel @@ -36,7 +36,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/addr:go_default_library", - "//pkg/private/xtest:go_default_library", "//pkg/scrypto/cppki:go_default_library", "//scion-pki/trcs:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", diff --git a/scion-pki/testcrypto/testcrypto_test.go b/scion-pki/testcrypto/testcrypto_test.go index 1a8cbfdbd3..bb795b65bf 100644 --- a/scion-pki/testcrypto/testcrypto_test.go +++ b/scion-pki/testcrypto/testcrypto_test.go @@ -25,7 +25,6 @@ import ( "github.com/stretchr/testify/require" "github.com/scionproto/scion/pkg/addr" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/scion-pki/testcrypto" "github.com/scionproto/scion/scion-pki/trcs" @@ -35,8 +34,7 @@ func TestCmd(t *testing.T) { if _, bazel := os.LookupEnv("TEST_UNDECLARED_OUTPUTS_DIR"); bazel { t.Skip("Test can't run through bazel because of symlinks and docker not playing nice") } - outDir, cleanF := xtest.MustTempDir("", "testcrypto") - defer cleanF() + outDir := t.TempDir() topo := "./testdata/test.topo" var buf bytes.Buffer diff --git a/scion-pki/testcrypto/update_test.go b/scion-pki/testcrypto/update_test.go index 54218424ec..a219ef2ee9 100644 --- a/scion-pki/testcrypto/update_test.go +++ b/scion-pki/testcrypto/update_test.go @@ -26,7 +26,6 @@ import ( "github.com/stretchr/testify/require" "github.com/scionproto/scion/pkg/addr" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/scion-pki/testcrypto" "github.com/scionproto/scion/scion-pki/trcs" @@ -38,8 +37,7 @@ func TestUpdateExtend(t *testing.T) { if _, bazel := os.LookupEnv("TEST_UNDECLARED_OUTPUTS_DIR"); bazel { t.Skip("Test can't run through bazel because of symlinks and docker not playing nice") } - outDir, cleanF := xtest.MustTempDir("", "testcrypto") - defer cleanF() + outDir := t.TempDir() topo := "./testdata/test.topo" var buf bytes.Buffer @@ -112,8 +110,7 @@ func TestUpdateReSign(t *testing.T) { if _, bazel := os.LookupEnv("TEST_UNDECLARED_OUTPUTS_DIR"); bazel { t.Skip("Test can't run through bazel because of symlinks and docker not playing nice") } - outDir, cleanF := xtest.MustTempDir("", "testcrypto") - defer cleanF() + outDir := t.TempDir() topo := "./testdata/test.topo" var buf bytes.Buffer @@ -182,8 +179,7 @@ func TestUpdateReGen(t *testing.T) { if _, bazel := os.LookupEnv("TEST_UNDECLARED_OUTPUTS_DIR"); bazel { t.Skip("Test can't run through bazel because of symlinks and docker not playing nice") } - outDir, cleanF := xtest.MustTempDir("", "testcrypto") - defer cleanF() + outDir := t.TempDir() topo := "./testdata/test.topo" var buf bytes.Buffer diff --git a/scion-pki/trcs/combine_test.go b/scion-pki/trcs/combine_test.go index 2be91d8e1b..92cf5aba6b 100644 --- a/scion-pki/trcs/combine_test.go +++ b/scion-pki/trcs/combine_test.go @@ -38,8 +38,7 @@ var updateNonDeterministic = xtest.UpdateNonDeterminsticGoldenFiles() func TestCombine(t *testing.T) { if *updateNonDeterministic { - dir, cleanF := xtest.MustTempDir("", "safedir") - defer cleanF() + dir := t.TempDir() root, err := filepath.Abs("../../../") require.NoError(t, err) @@ -76,8 +75,7 @@ func TestCombine(t *testing.T) { require.NoError(t, os.WriteFile("./testdata/admin/ISD1-B1-S1.trc", raw, 0644)) } - dir, clean := xtest.MustTempDir("", "scion-pki-trcs-combine") - defer clean() + dir := t.TempDir() out := filepath.Join(dir, "combined.der") parts := []string{ diff --git a/scion-pki/trcs/format_test.go b/scion-pki/trcs/format_test.go index 71bfb9884e..fc33511354 100644 --- a/scion-pki/trcs/format_test.go +++ b/scion-pki/trcs/format_test.go @@ -21,15 +21,13 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/private/app/command" ) var NewFormatCmd = newFormatCmd func TestNewFormatCmd(t *testing.T) { - dir, cleanup := xtest.MustTempDir("", "format-trc-test") - defer cleanup() + dir := t.TempDir() testCases := map[string]struct { Prepare func(t *testing.T) diff --git a/scion-pki/trcs/inspect.go b/scion-pki/trcs/inspect.go index a46153206c..3b36c38e5a 100644 --- a/scion-pki/trcs/inspect.go +++ b/scion-pki/trcs/inspect.go @@ -99,7 +99,7 @@ return an error if parts of a TRC fail to decode, enable the strict mode. return cmd } -func getEncoder(w io.Writer, format string) (interface{ Encode(v interface{}) error }, error) { +func getEncoder(w io.Writer, format string) (interface{ Encode(v any) error }, error) { switch format { case "yaml", "yml": return yaml.NewEncoder(w), nil diff --git a/scion-pki/trcs/sign_test.go b/scion-pki/trcs/sign_test.go index 89e9ae7d97..a52bc884c0 100644 --- a/scion-pki/trcs/sign_test.go +++ b/scion-pki/trcs/sign_test.go @@ -30,7 +30,6 @@ import ( "github.com/stretchr/testify/require" "github.com/scionproto/scion/pkg/addr" - "github.com/scionproto/scion/pkg/private/xtest" "github.com/scionproto/scion/pkg/scrypto/cppki" "github.com/scionproto/scion/private/app/command" "github.com/scionproto/scion/scion-pki/certs" @@ -39,8 +38,7 @@ import ( ) func TestSign(t *testing.T) { - outDir, cleanF := xtest.MustTempDir("", "scion-pki-trcs-sign") - defer cleanF() + outDir := t.TempDir() gen(t, outDir) testCases := map[string]struct { @@ -115,8 +113,7 @@ func TestOpensslCompatible(t *testing.T) { t.Skip("This test only runs as integration test") } - outDir, cleanF := xtest.MustTempDir("", "scion-pki-trcs-sign") - defer cleanF() + outDir := t.TempDir() gen(t, outDir) testCases := map[string]struct { diff --git a/scion-pki/trcs/verify_test.go b/scion-pki/trcs/verify_test.go index 6ac9f932ca..d76d8b78a3 100644 --- a/scion-pki/trcs/verify_test.go +++ b/scion-pki/trcs/verify_test.go @@ -27,8 +27,7 @@ import ( func TestVerify(t *testing.T) { // prepare certificate bundle - dir, clean := xtest.MustTempDir("", "scion-pki-trcs-verify") - defer clean() + dir := t.TempDir() testCases := map[string]struct { Files []string diff --git a/scion.bzl b/scion.bzl index b1d6e70b03..11f2937e4d 100644 --- a/scion.bzl +++ b/scion.bzl @@ -11,6 +11,8 @@ def scion_go_binary(name, visibility, *args, **kwargs): x_defs = x_defs, name = name, visibility = visibility, + # disable automatically setting the build id since Go 1.24 + gc_linkopts = ["-B", "none"], *args, **kwargs ) diff --git a/scion/cmd/scion/address.go b/scion/cmd/scion/address.go index 5ee64bb559..91ef1314c2 100644 --- a/scion/cmd/scion/address.go +++ b/scion/cmd/scion/address.go @@ -74,7 +74,7 @@ case, the host could have multiple SCION addresses. return err } - localIP, err := addrutil.DefaultLocalIP(ctx, sd) + localIP, err := addrutil.DefaultLocalIP(ctx, daemon.TopoQuerier{Connector: sd}) if err != nil { return err } diff --git a/scion/cmd/scion/common.go b/scion/cmd/scion/common.go index 48db32d300..15b1656e4c 100644 --- a/scion/cmd/scion/common.go +++ b/scion/cmd/scion/common.go @@ -63,14 +63,14 @@ func getHops(path snet.Path) []Hop { // getPrintf returns a printf function for the "human" formatting flag and an empty one for machine // readable format flags -func getPrintf(output string, writer io.Writer) (func(format string, ctx ...interface{}), error) { +func getPrintf(output string, writer io.Writer) (func(format string, ctx ...any), error) { switch output { case "human": - return func(format string, ctx ...interface{}) { + return func(format string, ctx ...any) { fmt.Fprintf(writer, format, ctx...) }, nil case "yaml", "json": - return func(format string, ctx ...interface{}) {}, nil + return func(format string, ctx ...any) {}, nil default: return nil, serrors.New("format not supported", "format", output) } @@ -86,7 +86,7 @@ func (d durationMillis) MarshalJSON() ([]byte, error) { return json.Marshal(d.MillisRounded()) } -func (d durationMillis) MarshalYAML() (interface{}, error) { +func (d durationMillis) MarshalYAML() (any, error) { return d.MillisRounded(), nil } diff --git a/tools/braccept/BUILD.bazel b/tools/braccept/BUILD.bazel index 972054c646..ac151e529a 100644 --- a/tools/braccept/BUILD.bazel +++ b/tools/braccept/BUILD.bazel @@ -13,7 +13,7 @@ go_library( "//private/keyconf:go_default_library", "//tools/braccept/cases:go_default_library", "//tools/braccept/runner:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", ], ) diff --git a/tools/braccept/cases/BUILD.bazel b/tools/braccept/cases/BUILD.bazel index c63bf2453b..09908b1b42 100644 --- a/tools/braccept/cases/BUILD.bazel +++ b/tools/braccept/cases/BUILD.bazel @@ -44,7 +44,7 @@ go_library( "//pkg/spao:go_default_library", "//private/drkey/drkeyutil:go_default_library", "//tools/braccept/runner:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", ], ) diff --git a/tools/braccept/cases/bfd.go b/tools/braccept/cases/bfd.go index e178869caa..4489639dc4 100644 --- a/tools/braccept/cases/bfd.go +++ b/tools/braccept/cases/bfd.go @@ -19,8 +19,8 @@ import ( "net" "path/filepath" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/slayers" diff --git a/tools/braccept/cases/child_to_child_xover.go b/tools/braccept/cases/child_to_child_xover.go index 81f4c85b88..eefbca4617 100644 --- a/tools/braccept/cases/child_to_child_xover.go +++ b/tools/braccept/cases/child_to_child_xover.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/child_to_internal.go b/tools/braccept/cases/child_to_internal.go index 9e3ba10a36..8b417e18e5 100644 --- a/tools/braccept/cases/child_to_internal.go +++ b/tools/braccept/cases/child_to_internal.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/child_to_parent.go b/tools/braccept/cases/child_to_parent.go index aa049a547c..ccb8c5f46c 100644 --- a/tools/braccept/cases/child_to_parent.go +++ b/tools/braccept/cases/child_to_parent.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/child_to_peer.go b/tools/braccept/cases/child_to_peer.go index 1a705d1059..e869680f11 100644 --- a/tools/braccept/cases/child_to_peer.go +++ b/tools/braccept/cases/child_to_peer.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/internal_to_child.go b/tools/braccept/cases/internal_to_child.go index b668a5c448..bddc9a4d80 100644 --- a/tools/braccept/cases/internal_to_child.go +++ b/tools/braccept/cases/internal_to_child.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/jumbo.go b/tools/braccept/cases/jumbo.go index 1d3b80675e..5b3a140316 100644 --- a/tools/braccept/cases/jumbo.go +++ b/tools/braccept/cases/jumbo.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/malformed_path.go b/tools/braccept/cases/malformed_path.go index 460a12120f..383264709c 100644 --- a/tools/braccept/cases/malformed_path.go +++ b/tools/braccept/cases/malformed_path.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/onehop.go b/tools/braccept/cases/onehop.go index 47df9fdde0..29216eb3ed 100644 --- a/tools/braccept/cases/onehop.go +++ b/tools/braccept/cases/onehop.go @@ -21,8 +21,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/parent_to_child.go b/tools/braccept/cases/parent_to_child.go index 25ce70ced3..cbb52e1544 100644 --- a/tools/braccept/cases/parent_to_child.go +++ b/tools/braccept/cases/parent_to_child.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/parent_to_internal.go b/tools/braccept/cases/parent_to_internal.go index 80f3527a8f..c0dca32309 100644 --- a/tools/braccept/cases/parent_to_internal.go +++ b/tools/braccept/cases/parent_to_internal.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/peer_to_child.go b/tools/braccept/cases/peer_to_child.go index 1590dddd91..53507a311f 100644 --- a/tools/braccept/cases/peer_to_child.go +++ b/tools/braccept/cases/peer_to_child.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp.go b/tools/braccept/cases/scmp.go index d90b480b3e..a05c79a160 100644 --- a/tools/braccept/cases/scmp.go +++ b/tools/braccept/cases/scmp.go @@ -15,7 +15,7 @@ package cases import ( - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/scionproto/scion/pkg/drkey" "github.com/scionproto/scion/pkg/slayers" diff --git a/tools/braccept/cases/scmp_dest_unreachable.go b/tools/braccept/cases/scmp_dest_unreachable.go index c9a9a71654..8d96deb50d 100644 --- a/tools/braccept/cases/scmp_dest_unreachable.go +++ b/tools/braccept/cases/scmp_dest_unreachable.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_expired_hop.go b/tools/braccept/cases/scmp_expired_hop.go index 919ef92d39..2c125d2b7c 100644 --- a/tools/braccept/cases/scmp_expired_hop.go +++ b/tools/braccept/cases/scmp_expired_hop.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_invalid_hop.go b/tools/braccept/cases/scmp_invalid_hop.go index cdf21b185d..13f6eb20e9 100644 --- a/tools/braccept/cases/scmp_invalid_hop.go +++ b/tools/braccept/cases/scmp_invalid_hop.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_invalid_ia.go b/tools/braccept/cases/scmp_invalid_ia.go index 73540869b5..d29274a2ce 100644 --- a/tools/braccept/cases/scmp_invalid_ia.go +++ b/tools/braccept/cases/scmp_invalid_ia.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_invalid_mac.go b/tools/braccept/cases/scmp_invalid_mac.go index f65231f4b3..bc5de2b8a5 100644 --- a/tools/braccept/cases/scmp_invalid_mac.go +++ b/tools/braccept/cases/scmp_invalid_mac.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_invalid_pkt.go b/tools/braccept/cases/scmp_invalid_pkt.go index 7879f80c49..d5e9b24e59 100644 --- a/tools/braccept/cases/scmp_invalid_pkt.go +++ b/tools/braccept/cases/scmp_invalid_pkt.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_invalid_segment_change.go b/tools/braccept/cases/scmp_invalid_segment_change.go index 1568923189..917eb307c7 100644 --- a/tools/braccept/cases/scmp_invalid_segment_change.go +++ b/tools/braccept/cases/scmp_invalid_segment_change.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_invalid_segment_change_local.go b/tools/braccept/cases/scmp_invalid_segment_change_local.go index 2b91e088d2..4fcd5ecbc1 100644 --- a/tools/braccept/cases/scmp_invalid_segment_change_local.go +++ b/tools/braccept/cases/scmp_invalid_segment_change_local.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/scmp_traceroute.go b/tools/braccept/cases/scmp_traceroute.go index 9f9493fac7..d2addabf0c 100644 --- a/tools/braccept/cases/scmp_traceroute.go +++ b/tools/braccept/cases/scmp_traceroute.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/drkey" diff --git a/tools/braccept/cases/scmp_unknown_hop.go b/tools/braccept/cases/scmp_unknown_hop.go index 855a159738..925049f741 100644 --- a/tools/braccept/cases/scmp_unknown_hop.go +++ b/tools/braccept/cases/scmp_unknown_hop.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/cases/svc.go b/tools/braccept/cases/svc.go index d77eafe960..45cadc765a 100644 --- a/tools/braccept/cases/svc.go +++ b/tools/braccept/cases/svc.go @@ -20,8 +20,8 @@ import ( "path/filepath" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/addr" "github.com/scionproto/scion/pkg/private/util" diff --git a/tools/braccept/main.go b/tools/braccept/main.go index ce857f498e..d0c8b71bf0 100644 --- a/tools/braccept/main.go +++ b/tools/braccept/main.go @@ -21,7 +21,7 @@ import ( "os" "path/filepath" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/log" "github.com/scionproto/scion/pkg/scrypto" diff --git a/tools/braccept/runner/BUILD.bazel b/tools/braccept/runner/BUILD.bazel index c3026c717f..58d31d959e 100644 --- a/tools/braccept/runner/BUILD.bazel +++ b/tools/braccept/runner/BUILD.bazel @@ -13,10 +13,10 @@ go_library( "//pkg/log:go_default_library", "//pkg/private/common:go_default_library", "//pkg/private/serrors:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//afpacket:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", - "@com_github_google_gopacket//pcapgo:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//afpacket:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//pcapgo:go_default_library", "@com_github_mattn_go_isatty//:go_default_library", "@com_github_sergi_go_diff//diffmatchpatch:go_default_library", ], @@ -33,7 +33,7 @@ go_test( "//pkg/slayers:go_default_library", "//pkg/slayers/path:go_default_library", "//pkg/slayers/path/scion:go_default_library", - "@com_github_google_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", "@com_github_stretchr_testify//assert:go_default_library", ], ) diff --git a/tools/braccept/runner/compare.go b/tools/braccept/runner/compare.go index 77971bc24a..3fa1d0efda 100644 --- a/tools/braccept/runner/compare.go +++ b/tools/braccept/runner/compare.go @@ -18,8 +18,8 @@ import ( "bytes" "fmt" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/private/serrors" ) diff --git a/tools/braccept/runner/compare_test.go b/tools/braccept/runner/compare_test.go index 088ca33f75..21f17103ec 100644 --- a/tools/braccept/runner/compare_test.go +++ b/tools/braccept/runner/compare_test.go @@ -18,7 +18,7 @@ import ( "testing" "time" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/stretchr/testify/assert" "github.com/scionproto/scion/pkg/addr" diff --git a/tools/braccept/runner/run.go b/tools/braccept/runner/run.go index 03e3993e19..adb38c6429 100644 --- a/tools/braccept/runner/run.go +++ b/tools/braccept/runner/run.go @@ -24,10 +24,10 @@ import ( "strings" "time" - "github.com/google/gopacket" - "github.com/google/gopacket/afpacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcapgo" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/afpacket" + "github.com/gopacket/gopacket/layers" + "github.com/gopacket/gopacket/pcapgo" "github.com/scionproto/scion/pkg/log" "github.com/scionproto/scion/pkg/private/common" diff --git a/tools/buildkite/buildkite.go b/tools/buildkite/buildkite.go index 8a82b86ff5..46d46370e3 100644 --- a/tools/buildkite/buildkite.go +++ b/tools/buildkite/buildkite.go @@ -158,13 +158,13 @@ func (d *Downloader) downloadArtifact(artifact buildkite.Artifact, file string) } -func (d *Downloader) info(format string, ctx ...interface{}) { +func (d *Downloader) info(format string, ctx ...any) { if d.StdOut != nil { fmt.Fprintf(d.StdOut, format, ctx...) } } -func (d *Downloader) error(format string, ctx ...interface{}) { +func (d *Downloader) error(format string, ctx ...any) { if d.StdErr != nil { fmt.Fprintf(d.StdErr, format, ctx...) } diff --git a/tools/integration/integration.go b/tools/integration/integration.go index b61d3e3e07..bf8daa2184 100644 --- a/tools/integration/integration.go +++ b/tools/integration/integration.go @@ -21,7 +21,7 @@ import ( "flag" "fmt" "io" - "math/rand" + "math/rand/v2" "net" "os" "path/filepath" @@ -267,7 +267,7 @@ func loadAddr(ia addr.IA) *snet.UDPAddr { // interface kept similar to go 1.10 func shuffle(n int, swap func(i, j int)) { for i := n - 1; i > 0; i-- { - j := rand.Intn(i + 1) + j := rand.IntN(i + 1) swap(i, j) } } diff --git a/tools/integration/integrationlib/common.go b/tools/integration/integrationlib/common.go index 15bb087f4f..b84877db40 100644 --- a/tools/integration/integrationlib/common.go +++ b/tools/integration/integrationlib/common.go @@ -185,7 +185,7 @@ func Done(src, dst addr.IA) { } // LogFatal logs a critical error and exits with 1 -func LogFatal(msg string, a ...interface{}) { +func LogFatal(msg string, a ...any) { log.Error(msg, a...) os.Exit(1) } diff --git a/tools/lint/lint.go b/tools/lint/lint.go index d5095cb4db..212871876a 100644 --- a/tools/lint/lint.go +++ b/tools/lint/lint.go @@ -59,7 +59,7 @@ func RenderList(fset *token.FileSet, list []ast.Expr) string { } // Render renders the the expression. -func Render(fset *token.FileSet, x interface{}) string { +func Render(fset *token.FileSet, x any) string { var buf bytes.Buffer if err := printer.Fprint(&buf, fset, x); err != nil { panic(err) diff --git a/tools/lint/log/log.go b/tools/lint/log/log.go index 1889cd6a91..ccc40fc9d4 100644 --- a/tools/lint/log/log.go +++ b/tools/lint/log/log.go @@ -36,7 +36,7 @@ var goCallFilter = []ast.Node{ (*ast.GoStmt)(nil), } -func run(pass *analysis.Pass) (interface{}, error) { +func run(pass *analysis.Pass) (any, error) { inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) inspect.Preorder(goCallFilter, func(n ast.Node) { goStmt := n.(*ast.GoStmt) diff --git a/tools/lint/logctxcheck/analyzer.go b/tools/lint/logctxcheck/analyzer.go index 4c10c929ec..c85439c457 100644 --- a/tools/lint/logctxcheck/analyzer.go +++ b/tools/lint/logctxcheck/analyzer.go @@ -35,7 +35,7 @@ var Analyzer = &analysis.Analyzer{ RunDespiteErrors: true, } -func run(pass *analysis.Pass) (interface{}, error) { +func run(pass *analysis.Pass) (any, error) { for _, file := range pass.Files { if _, ok := lint.FindPackageNames(file)[importPath]; !ok { continue diff --git a/tools/lint/maincheck/maincheck.go b/tools/lint/maincheck/maincheck.go index e657329d9a..bb1f173ab9 100644 --- a/tools/lint/maincheck/maincheck.go +++ b/tools/lint/maincheck/maincheck.go @@ -36,7 +36,7 @@ var Analyzer = &analysis.Analyzer{ RunDespiteErrors: true, } -func run(pass *analysis.Pass) (interface{}, error) { +func run(pass *analysis.Pass) (any, error) { for _, file := range pass.Files { // If this is not a main package, we can exit early. if file.Name.Name != "main" { diff --git a/tools/lint/serrorscheck/analyzer.go b/tools/lint/serrorscheck/analyzer.go index 8088423ae8..3a91d2e129 100644 --- a/tools/lint/serrorscheck/analyzer.go +++ b/tools/lint/serrorscheck/analyzer.go @@ -35,7 +35,7 @@ var Analyzer = &analysis.Analyzer{ RunDespiteErrors: true, } -func run(pass *analysis.Pass) (interface{}, error) { +func run(pass *analysis.Pass) (any, error) { for _, file := range pass.Files { _, ok := lint.FindPackageNames(file)[importPath] if !ok { diff --git a/tools/pktgen/BUILD.bazel b/tools/pktgen/BUILD.bazel index 2c7c6a746e..f0a76a5ec4 100644 --- a/tools/pktgen/BUILD.bazel +++ b/tools/pktgen/BUILD.bazel @@ -7,8 +7,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/private/serrors:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", - "@com_github_google_gopacket//pcapgo:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//pcapgo:go_default_library", ], ) diff --git a/tools/pktgen/cmd/pktgen/BUILD.bazel b/tools/pktgen/cmd/pktgen/BUILD.bazel index d03afafbc8..b59d0b72b1 100644 --- a/tools/pktgen/cmd/pktgen/BUILD.bazel +++ b/tools/pktgen/cmd/pktgen/BUILD.bazel @@ -24,8 +24,8 @@ go_library( "//private/app/command:go_default_library", "//private/app/path:go_default_library", "//tools/pktgen:go_default_library", - "@com_github_google_gopacket//:go_default_library", - "@com_github_google_gopacket//layers:go_default_library", + "@com_github_gopacket_gopacket//:go_default_library", + "@com_github_gopacket_gopacket//layers:go_default_library", "@com_github_spf13_cobra//:go_default_library", ], ) diff --git a/tools/pktgen/cmd/pktgen/config.go b/tools/pktgen/cmd/pktgen/config.go index 0f497bb5a9..ed37ce3de3 100644 --- a/tools/pktgen/cmd/pktgen/config.go +++ b/tools/pktgen/cmd/pktgen/config.go @@ -17,7 +17,7 @@ package main import ( "net" - "github.com/google/gopacket/layers" + "github.com/gopacket/gopacket/layers" "github.com/scionproto/scion/pkg/private/serrors" "github.com/scionproto/scion/pkg/slayers" diff --git a/tools/pktgen/cmd/pktgen/main.go b/tools/pktgen/cmd/pktgen/main.go index c92f5c233b..aea8ba6ffb 100644 --- a/tools/pktgen/cmd/pktgen/main.go +++ b/tools/pktgen/cmd/pktgen/main.go @@ -22,7 +22,7 @@ import ( "os" "path/filepath" - "github.com/google/gopacket" + "github.com/gopacket/gopacket" "github.com/spf13/cobra" "github.com/scionproto/scion/pkg/addr" diff --git a/tools/pktgen/pcap.go b/tools/pktgen/pcap.go index 1666de6318..99287eacd1 100644 --- a/tools/pktgen/pcap.go +++ b/tools/pktgen/pcap.go @@ -17,9 +17,9 @@ package pktgen import ( "os" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcapgo" + "github.com/gopacket/gopacket" + "github.com/gopacket/gopacket/layers" + "github.com/gopacket/gopacket/pcapgo" "github.com/scionproto/scion/pkg/private/serrors" )