From d143f9f83b9fb7094957069e2003d5cd58d5b8b6 Mon Sep 17 00:00:00 2001 From: Lukas Vogel <lukedirtwalker@gmail.com> Date: Fri, 20 Sep 2019 16:26:05 +0200 Subject: [PATCH 1/4] Use serrors.New instead of common.NewBasicError for simple errors without additional wrapping/context. This PR was generated by replacing `common.NewBasicError\(("[^"]+"), nil\)` with `serrors.New($1)` and running goimports afterwards. --- go/beacon_srv/internal/beacon/store.go | 3 ++- go/beacon_srv/internal/beaconing/extender.go | 9 +++++---- .../internal/beaconing/extender_config.go | 8 ++++---- go/beacon_srv/internal/beaconing/handler.go | 3 ++- .../internal/beaconing/handler_test.go | 5 +++-- .../internal/beaconing/originator.go | 3 ++- .../internal/beaconstorage/config.go | 3 ++- go/beacon_srv/internal/config/config.go | 19 ++++++++++--------- go/beacon_srv/internal/ifstate/ifstate.go | 3 ++- .../internal/ifstate/mock_ifstate/ifstate.go | 3 ++- go/beacon_srv/main.go | 3 ++- go/border/main.go | 3 ++- go/border/rpkt/extns.go | 3 ++- go/border/rpkt/path.go | 7 ++++--- go/border/rpkt/route.go | 3 ++- go/cert_srv/internal/config/config.go | 10 +++++----- go/cert_srv/internal/reiss/corepush_test.go | 3 ++- go/cert_srv/internal/reiss/handler.go | 9 +++++---- go/cert_srv/setup.go | 3 ++- go/examples/discovery_client/client.go | 5 +++-- go/godispatcher/internal/config/config.go | 10 +++++----- .../internal/registration/scmp_table.go | 3 ++- go/godispatcher/internal/respool/packet.go | 3 ++- go/godispatcher/main.go | 3 ++- go/godispatcher/network/scmp.go | 5 +++-- go/integration/cert_req/main.go | 5 +++-- go/integration/end2end/main.go | 3 ++- go/lib/ctrl/seg/seg.go | 5 +++-- go/lib/discovery/discovery.go | 3 ++- go/lib/discovery/discoverypool/pool.go | 5 +++-- go/lib/discovery/topofetcher/fetcher.go | 3 ++- go/lib/env/env.go | 5 +++-- go/lib/healthpool/pool.go | 3 ++- go/lib/hpkt/write.go | 3 ++- go/lib/infra/disp/common_test.go | 3 ++- go/lib/infra/disp/wtable.go | 9 +++++---- go/lib/infra/messenger/addr.go | 7 ++++--- .../infra/messenger/quic_response_writer.go | 4 ++-- go/lib/infra/modules/db/sqlite.go | 3 ++- go/lib/infra/modules/idiscovery/config.go | 7 ++++--- go/lib/infra/modules/idiscovery/idiscovery.go | 5 +++-- go/lib/infra/modules/itopo/itopo.go | 7 ++++--- go/lib/infra/modules/itopo/validate.go | 3 ++- .../modules/seghandler/seghandler_test.go | 14 +++++++------- go/lib/infra/modules/trust/signhelper.go | 3 ++- go/lib/infra/modules/trust/trust.go | 4 ++-- go/lib/infra/modules/trust/trust_test.go | 10 +++++----- .../modules/trust/trustdb/trustdbsqlite/db.go | 7 ++++--- go/lib/infra/rpc/rpc.go | 4 ++-- go/lib/layers/extensions_layer.go | 3 ++- go/lib/log/flags.go | 4 ++-- go/lib/overlay/addr.go | 3 ++- go/lib/overlay/conn/conn.go | 3 ++- go/lib/pathdb/sqlite/sqlite.go | 13 +++++++------ go/lib/pathpol/hop_pred.go | 3 ++- go/lib/pathstorage/pathstorage.go | 9 +++++---- go/lib/pktcls/json.go | 5 +++-- go/lib/revcache/util_test.go | 7 ++++--- go/lib/sciond/pathprobe/paths.go | 3 ++- go/lib/scmp/info.go | 3 ++- go/lib/scmp/info_traceroute.go | 3 ++- go/lib/scrypto/asym.go | 3 ++- go/lib/snet/conn.go | 10 +++++----- go/lib/snet/reader.go | 3 ++- go/lib/snet/router.go | 3 ++- go/lib/snet/snet.go | 13 +++++++------ go/lib/snet/squic/squic.go | 3 ++- go/lib/sock/reliable/reconnect/main_test.go | 6 +++--- .../sock/reliable/reconnect/network_test.go | 4 ++-- go/lib/sock/reliable/reliable.go | 5 +++-- go/lib/spath/path.go | 9 +++++---- go/lib/svc/svc_test.go | 3 ++- go/lib/topology/topology.go | 7 ++++--- go/lib/truststorage/truststorage.go | 3 ++- go/path_srv/internal/config/config.go | 4 ++-- go/path_srv/internal/handlers/common_test.go | 3 ++- go/path_srv/internal/segreq/provider.go | 3 ++- go/path_srv/internal/segsyncer/segsyncer.go | 3 ++- go/proto/cert_mgmt.capnp.go | 1 + go/proto/ctrl_pld.capnp.go | 1 + go/proto/drkey_mgmt.capnp.go | 1 + go/proto/path_mgmt.capnp.go | 1 + go/proto/sciond.capnp.go | 1 + go/proto/sig.capnp.go | 1 + go/proto/structs.gen.go | 3 +-- go/sciond/internal/config/config.go | 9 +++++---- go/sciond/internal/fetcher/fetcher.go | 3 ++- go/sciond/internal/servers/handlers.go | 4 ++-- go/sciond/internal/servers/server.go | 5 +++-- go/sig/internal/sigconfig/conf.go | 12 ++++++------ go/sig/main.go | 5 +++-- go/tools/scion-pki/internal/conf/isd.go | 3 ++- go/tools/scion-pki/internal/keys/gen.go | 3 ++- go/tools/scion-pki/internal/v2/conf/isd.go | 7 ++++--- go/tools/scion-pki/internal/v2/keys/gen.go | 3 ++- go/tools/scion-pki/internal/v2/trcs/sign.go | 3 ++- go/tools/scmp/cmn/common.go | 7 ++++--- 97 files changed, 277 insertions(+), 197 deletions(-) diff --git a/go/beacon_srv/internal/beacon/store.go b/go/beacon_srv/internal/beacon/store.go index ec9cd8e1b4..0f1f4aacc5 100644 --- a/go/beacon_srv/internal/beacon/store.go +++ b/go/beacon_srv/internal/beacon/store.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/proto" ) @@ -273,7 +274,7 @@ func (s *baseStore) DeleteExpiredRevocations(ctx context.Context) (int, error) { // UpdatePolicy updates the policy. Beacons that are filtered by all // policies after the update are removed. func (s *baseStore) UpdatePolicy(ctx context.Context, policy Policy) error { - return common.NewBasicError("policy update not supported", nil) + return serrors.New("policy update not supported") } // Close closes the store and the underlying database connection. diff --git a/go/beacon_srv/internal/beaconing/extender.go b/go/beacon_srv/internal/beaconing/extender.go index 25763c1b53..1310725462 100644 --- a/go/beacon_srv/internal/beaconing/extender.go +++ b/go/beacon_srv/internal/beaconing/extender.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/seg" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/lib/util" ) @@ -49,7 +50,7 @@ func (s *segExtender) extend(pseg *seg.PathSegment, inIfid, egIfid common.IFIDTy peers []common.IFIDType) error { if inIfid == 0 && egIfid == 0 { - return common.NewBasicError("Ingress and egress must not be both 0", nil) + return serrors.New("Ingress and egress must not be both 0") } infoF, err := pseg.InfoF() if err != nil { @@ -135,15 +136,15 @@ func (s *segExtender) remoteInfo(ifid common.IFIDType) ( } intf := s.cfg.Intfs.Get(ifid) if intf == nil { - return 0, 0, 0, common.NewBasicError("Interface not found", nil) + return 0, 0, 0, serrors.New("Interface not found") } state := intf.State() if state != ifstate.Active { - return 0, 0, 0, common.NewBasicError("Interface is not active", nil) + return 0, 0, 0, serrors.New("Interface is not active") } topoInfo := intf.TopoInfo() if topoInfo.RemoteIFID == 0 { - return 0, 0, 0, common.NewBasicError("Remote ifid is not set", nil) + return 0, 0, 0, serrors.New("Remote ifid is not set") } if topoInfo.ISD_AS.IsWildcard() { return 0, 0, 0, common.NewBasicError("Remote IA is wildcard", nil, "ia", topoInfo.ISD_AS) diff --git a/go/beacon_srv/internal/beaconing/extender_config.go b/go/beacon_srv/internal/beaconing/extender_config.go index d7b669b3d2..797d2091ca 100644 --- a/go/beacon_srv/internal/beaconing/extender_config.go +++ b/go/beacon_srv/internal/beaconing/extender_config.go @@ -18,8 +18,8 @@ import ( "hash" "github.com/scionproto/scion/go/beacon_srv/internal/ifstate" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/infra" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" ) @@ -56,13 +56,13 @@ func (cfg *ExtenderConf) InitDefaults() { // Validate checks that the config contains a signer. func (cfg *ExtenderConf) Validate() error { if cfg.Signer == nil { - return common.NewBasicError("Signer must be set", nil) + return serrors.New("Signer must be set") } if cfg.IfidSize == 0 { - return common.NewBasicError("IfidSize must be set", nil) + return serrors.New("IfidSize must be set") } if cfg.MTU == 0 { - return common.NewBasicError("MTU must be set", nil) + return serrors.New("MTU must be set") } return nil } diff --git a/go/beacon_srv/internal/beaconing/handler.go b/go/beacon_srv/internal/beaconing/handler.go index c36fad94d6..6df55a53b2 100644 --- a/go/beacon_srv/internal/beaconing/handler.go +++ b/go/beacon_srv/internal/beaconing/handler.go @@ -27,6 +27,7 @@ import ( "github.com/scionproto/scion/go/lib/infra/messenger" "github.com/scionproto/scion/go/lib/infra/modules/segverifier" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/proto" ) @@ -76,7 +77,7 @@ func (h *handler) Handle() *infra.HandlerResult { func (h *handler) handle(logger log.Logger) (*infra.HandlerResult, error) { rw, ok := infra.ResponseWriterFromContext(h.request.Context()) if !ok { - return infra.MetricsErrInternal, common.NewBasicError("No Messenger found", nil) + return infra.MetricsErrInternal, serrors.New("No Messenger found") } sendAck := messenger.SendAckHelper(h.request.Context(), rw) diff --git a/go/beacon_srv/internal/beaconing/handler_test.go b/go/beacon_srv/internal/beaconing/handler_test.go index 25b9abef2c..843f2a97e8 100644 --- a/go/beacon_srv/internal/beaconing/handler_test.go +++ b/go/beacon_srv/internal/beaconing/handler_test.go @@ -32,6 +32,7 @@ import ( "github.com/scionproto/scion/go/lib/infra" "github.com/scionproto/scion/go/lib/infra/mock_infra" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/lib/topology" @@ -166,7 +167,7 @@ func TestNewHandler(t *testing.T) { verifier.EXPECT().WithSrc(gomock.Any()).Return(verifier) verifier.EXPECT().WithServer(gomock.Any()).Return(verifier) verifier.EXPECT().Verify(gomock.Any(), gomock.Any(), - gomock.Any()).MaxTimes(2).Return(common.NewBasicError("failed", nil)) + gomock.Any()).MaxTimes(2).Return(serrors.New("failed")) handler := NewHandler(localIA, intfs, inserter, verifier) pseg := testBeacon(g, []common.IFIDType{graph.If_220_X_120_B, graph.If_120_A_110_X}).Segment @@ -177,7 +178,7 @@ func TestNewHandler(t *testing.T) { inserter := mock_beaconing.NewMockBeaconInserter(mctrl) inserter.EXPECT().PreFilter(gomock.Any()).Return(nil) inserter.EXPECT().InsertBeacon(gomock.Any(), - gomock.Any()).Return(beacon.InsertStats{}, common.NewBasicError("failed", nil)) + gomock.Any()).Return(beacon.InsertStats{}, serrors.New("failed")) verifier := mock_infra.NewMockVerifier(mctrl) verifier.EXPECT().WithServer(gomock.Any()).MaxTimes(2).Return(verifier) diff --git a/go/beacon_srv/internal/beaconing/originator.go b/go/beacon_srv/internal/beaconing/originator.go index a1a84d4396..fc7f2add85 100644 --- a/go/beacon_srv/internal/beaconing/originator.go +++ b/go/beacon_srv/internal/beaconing/originator.go @@ -25,6 +25,7 @@ import ( "github.com/scionproto/scion/go/lib/ctrl/seg" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/periodic" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/lib/util" "github.com/scionproto/scion/go/proto" @@ -164,7 +165,7 @@ func (o *beaconOriginator) originateBeacon(ctx context.Context) error { intf := o.cfg.Intfs.Get(o.ifId) if intf == nil { o.metrics.IncInternalErr() - return common.NewBasicError("Interface does not exist", nil) + return serrors.New("Interface does not exist") } topoInfo := intf.TopoInfo() ov := topoInfo.InternalAddrs.PublicOverlay(topoInfo.InternalAddrs.Overlay) diff --git a/go/beacon_srv/internal/beaconstorage/config.go b/go/beacon_srv/internal/beaconstorage/config.go index b4d471bc86..898e3f03e8 100644 --- a/go/beacon_srv/internal/beaconstorage/config.go +++ b/go/beacon_srv/internal/beaconstorage/config.go @@ -28,6 +28,7 @@ import ( "github.com/scionproto/scion/go/lib/config" "github.com/scionproto/scion/go/lib/infra/modules/db" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -102,7 +103,7 @@ func (cfg *BeaconDBConf) validateBackend() error { case BackendSqlite: return nil case backendNone: - return common.NewBasicError("No backend set", nil) + return serrors.New("No backend set") } return common.NewBasicError("Unsupported backend", nil, "backend", cfg.Backend()) } diff --git a/go/beacon_srv/internal/config/config.go b/go/beacon_srv/internal/config/config.go index d9ce321d81..8da6684782 100644 --- a/go/beacon_srv/internal/config/config.go +++ b/go/beacon_srv/internal/config/config.go @@ -25,6 +25,7 @@ import ( "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" "github.com/scionproto/scion/go/lib/env" "github.com/scionproto/scion/go/lib/infra/modules/idiscovery" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/truststorage" "github.com/scionproto/scion/go/lib/util" ) @@ -162,35 +163,35 @@ func (cfg *BSConfig) InitDefaults() { // Validate validates that all durations are set. func (cfg *BSConfig) Validate() error { if cfg.KeepaliveInterval.Duration == 0 { - return common.NewBasicError("KeepaliveInterval not set", nil) + return serrors.New("KeepaliveInterval not set") } if cfg.KeepaliveTimeout.Duration == 0 { - return common.NewBasicError("KeepaliveTimeout not set", nil) + return serrors.New("KeepaliveTimeout not set") } if cfg.OriginationInterval.Duration == 0 { - return common.NewBasicError("OriginationInterval not set", nil) + return serrors.New("OriginationInterval not set") } if cfg.PropagationInterval.Duration == 0 { - return common.NewBasicError("PropagationInterval not set", nil) + return serrors.New("PropagationInterval not set") } if cfg.RegistrationInterval.Duration == 0 { - return common.NewBasicError("RegistrationInterval not set", nil) + return serrors.New("RegistrationInterval not set") } if cfg.ExpiredCheckInterval.Duration == 0 { - return common.NewBasicError("ExpiredCheckInterval not set", nil) + return serrors.New("ExpiredCheckInterval not set") } if cfg.RevTTL.Duration == 0 { - return common.NewBasicError("RevTTL is not set", nil) + return serrors.New("RevTTL is not set") } if cfg.RevTTL.Duration < path_mgmt.MinRevTTL { return common.NewBasicError("RevTTL must be equal or greater than MinRevTTL", nil, "MinRevTTL", path_mgmt.MinRevTTL) } if cfg.RevOverlap.Duration == 0 { - return common.NewBasicError("RevOverlap not set", nil) + return serrors.New("RevOverlap not set") } if cfg.RevOverlap.Duration > cfg.RevTTL.Duration { - return common.NewBasicError("RevOverlap cannot be greater than RevTTL", nil) + return serrors.New("RevOverlap cannot be greater than RevTTL") } return nil } diff --git a/go/beacon_srv/internal/ifstate/ifstate.go b/go/beacon_srv/internal/ifstate/ifstate.go index a8d21b3c08..f6e25ee379 100644 --- a/go/beacon_srv/internal/ifstate/ifstate.go +++ b/go/beacon_srv/internal/ifstate/ifstate.go @@ -20,6 +20,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" ) @@ -184,7 +185,7 @@ func (intf *Interface) Revoke(rev *path_mgmt.SignedRevInfo) error { intf.mu.Lock() defer intf.mu.Unlock() if intf.state == Active { - return common.NewBasicError("Interface activated in the meantime", nil) + return serrors.New("Interface activated in the meantime") } intf.state = Revoked intf.revocation = rev diff --git a/go/beacon_srv/internal/ifstate/mock_ifstate/ifstate.go b/go/beacon_srv/internal/ifstate/mock_ifstate/ifstate.go index 03d829cac4..5debd320dd 100644 --- a/go/beacon_srv/internal/ifstate/mock_ifstate/ifstate.go +++ b/go/beacon_srv/internal/ifstate/mock_ifstate/ifstate.go @@ -6,9 +6,10 @@ package mock_ifstate import ( context "context" + reflect "reflect" + gomock "github.com/golang/mock/gomock" path_mgmt "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" - reflect "reflect" ) // MockRevInserter is a mock of RevInserter interface diff --git a/go/beacon_srv/main.go b/go/beacon_srv/main.go index 1c39c34a96..c3e6422c33 100644 --- a/go/beacon_srv/main.go +++ b/go/beacon_srv/main.go @@ -55,6 +55,7 @@ import ( "github.com/scionproto/scion/go/lib/periodic" "github.com/scionproto/scion/go/lib/prom" "github.com/scionproto/scion/go/lib/scrypto" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/sock/reliable" "github.com/scionproto/scion/go/lib/sock/reliable/reconnect" @@ -292,7 +293,7 @@ func (t *periodicTasks) Start() error { topo := t.topoProvider.Get() topoAddress := topo.BS.GetById(cfg.General.ID) if topoAddress == nil { - return common.NewBasicError("Unable to find topo address", nil) + return serrors.New("Unable to find topo address") } var err error if t.registrars, err = t.startSegRegRunners(); err != nil { diff --git a/go/border/main.go b/go/border/main.go index 9241ef12ca..13d1b35a52 100644 --- a/go/border/main.go +++ b/go/border/main.go @@ -36,6 +36,7 @@ import ( "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/profile" "github.com/scionproto/scion/go/lib/prom" + "github.com/scionproto/scion/go/lib/serrors" ) var ( @@ -133,7 +134,7 @@ func checkPerms() error { return common.NewBasicError("Error retrieving user", err) } if u.Uid == "0" { - return common.NewBasicError("Running as root is not allowed for security reasons", nil) + return serrors.New("Running as root is not allowed for security reasons") } return nil } diff --git a/go/border/rpkt/extns.go b/go/border/rpkt/extns.go index 411a848a30..b2d3396874 100644 --- a/go/border/rpkt/extns.go +++ b/go/border/rpkt/extns.go @@ -20,6 +20,7 @@ package rpkt import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" ) // rExtension extends common.ExtnBase, adding a method to retrieve the @@ -134,7 +135,7 @@ func (rp *RtrPkt) extnAddE2E(e common.Extension) error { // that extension, as well as a pointer to the nextHdr field of that extension. func (rp *RtrPkt) extnOffsetNew(isHBH bool) (int, *uint8, error) { if isHBH && len(rp.E2EExt) > 0 { - return 0, nil, common.NewBasicError("HBH extension illegal to add after E2E extension", nil) + return 0, nil, serrors.New("HBH extension illegal to add after E2E extension") } offset := rp.CmnHdr.HdrLenBytes() nextHdr := (*uint8)(&rp.CmnHdr.NextHdr) diff --git a/go/border/rpkt/path.go b/go/border/rpkt/path.go index 4afa9529d8..80cb653634 100644 --- a/go/border/rpkt/path.go +++ b/go/border/rpkt/path.go @@ -28,6 +28,7 @@ import ( "github.com/scionproto/scion/go/lib/assert" "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/proto" ) @@ -47,7 +48,7 @@ func (rp *RtrPkt) validatePath(dirFrom rcmn.Dir) error { if rp.infoF.Shortcut { currentLinkType := rp.Ctx.Conf.BR.IFs[*rp.ifCurr].LinkType if currentLinkType == proto.LinkType_core { - return common.NewBasicError("Shortcut not allowed on core segment", nil) + return serrors.New("Shortcut not allowed on core segment") } } // A verify-only Hop Field cannot be used for routing. @@ -82,7 +83,7 @@ func (rp *RtrPkt) validatePath(dirFrom rcmn.Dir) error { // destination is this router. func (rp *RtrPkt) validateLocalIF(ifid *common.IFIDType) error { if ifid == nil { - return common.NewBasicError("validateLocalIF: Interface is nil", nil) + return serrors.New("validateLocalIF: Interface is nil") } if _, ok := rp.Ctx.Conf.Topo.IFInfoMap[*ifid]; !ok { // No such interface. @@ -448,7 +449,7 @@ func (rp *RtrPkt) IFCurr() (*common.IFIDType, error) { // valid before setting the ifCurr field and returning the value. func (rp *RtrPkt) checkSetCurrIF(ifid *common.IFIDType) (*common.IFIDType, error) { if ifid == nil { - return nil, common.NewBasicError("No interface found", nil) + return nil, serrors.New("No interface found") } if _, ok := rp.Ctx.Conf.BR.IFs[*ifid]; !ok { return nil, common.NewBasicError("Unknown interface", nil, "ifid", *ifid) diff --git a/go/border/rpkt/route.go b/go/border/rpkt/route.go index 0d5985eb80..73b384332a 100644 --- a/go/border/rpkt/route.go +++ b/go/border/rpkt/route.go @@ -27,6 +27,7 @@ import ( "github.com/scionproto/scion/go/lib/overlay" "github.com/scionproto/scion/go/lib/ringbuf" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/proto" ) @@ -220,7 +221,7 @@ func (rp *RtrPkt) xoverFromExternal() error { } // Make sure we drop packets with shortcuts in core links. if rp.infoF.Shortcut && nextLink == proto.LinkType_core { - return common.NewBasicError("Shortcut not allowed on core segment", nil) + return serrors.New("Shortcut not allowed on core segment") } return nil } diff --git a/go/cert_srv/internal/config/config.go b/go/cert_srv/internal/config/config.go index 292f85bc02..5b2a7bd888 100644 --- a/go/cert_srv/internal/config/config.go +++ b/go/cert_srv/internal/config/config.go @@ -18,11 +18,11 @@ import ( "io" "time" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/config" "github.com/scionproto/scion/go/lib/env" "github.com/scionproto/scion/go/lib/infra/modules/idiscovery" "github.com/scionproto/scion/go/lib/scrypto/cert" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/truststorage" "github.com/scionproto/scion/go/lib/util" ) @@ -140,16 +140,16 @@ func (cfg *CSConfig) InitDefaults() { func (cfg *CSConfig) Validate() error { if cfg.LeafReissueLeadTime.Duration == 0 { - return common.NewBasicError("LeafReissueLeadTime must not be zero", nil) + return serrors.New("LeafReissueLeadTime must not be zero") } if cfg.IssuerReissueLeadTime.Duration == 0 { - return common.NewBasicError("IssuerReissueLeadTime must not be zero", nil) + return serrors.New("IssuerReissueLeadTime must not be zero") } if cfg.ReissueRate.Duration == 0 { - return common.NewBasicError("ReissueRate must not be zero", nil) + return serrors.New("ReissueRate must not be zero") } if cfg.ReissueTimeout.Duration == 0 { - return common.NewBasicError("ReissueTimeout must not be zero", nil) + return serrors.New("ReissueTimeout must not be zero") } return nil } diff --git a/go/cert_srv/internal/reiss/corepush_test.go b/go/cert_srv/internal/reiss/corepush_test.go index de85161e7e..e03c773889 100644 --- a/go/cert_srv/internal/reiss/corepush_test.go +++ b/go/cert_srv/internal/reiss/corepush_test.go @@ -30,6 +30,7 @@ import ( "github.com/scionproto/scion/go/lib/periodic" "github.com/scionproto/scion/go/lib/scrypto/cert" "github.com/scionproto/scion/go/lib/scrypto/trc" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/xtest" "github.com/scionproto/scion/go/lib/xtest/matchers" ) @@ -151,7 +152,7 @@ func TestErrDuringSendIsRetried(t *testing.T) { gomock.InOrder( msger.EXPECT().SendCertChain( gomock.Any(), matchesChain(rawChain), matchers.IsSnetAddrWithIA(core1_130), - gomock.Any()).Return(common.NewBasicError("test error", nil)), + gomock.Any()).Return(serrors.New("test error")), msger.EXPECT().GetCertChain( gomock.Any(), gomock.Any(), matchers.IsSnetAddrWithIA(core1_130), gomock.Any()).Return( emptyChainMsg, nil, diff --git a/go/cert_srv/internal/reiss/handler.go b/go/cert_srv/internal/reiss/handler.go index d39172f3c8..3a49c18a2e 100644 --- a/go/cert_srv/internal/reiss/handler.go +++ b/go/cert_srv/internal/reiss/handler.go @@ -30,6 +30,7 @@ import ( "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/scrypto" "github.com/scionproto/scion/go/lib/scrypto/cert" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/util" ) @@ -119,7 +120,7 @@ func (h *Handler) validateSign(ctx context.Context, addr *snet.Addr, signed *ctrl.SignedPld) (*cert.Chain, error) { if signed.Sign == nil { - return nil, common.NewBasicError("Sign is nil", nil) + return nil, serrors.New("Sign is nil") } src, err := ctrl.NewSignSrcDefFromRaw(signed.Sign.Src) if err != nil { @@ -160,10 +161,10 @@ func (h *Handler) validateReq(c *cert.Certificate, vKey common.RawBytes, c.Issuer, "expected", h.IA) } if c.CanIssue { - return common.NewBasicError("CanIssue not allowed to be true", nil) + return serrors.New("CanIssue not allowed to be true") } if !bytes.Equal(vKey, vChain.Leaf.SubjectSignKey) { - return common.NewBasicError("Request signed with wrong signing key", nil) + return serrors.New("Request signed with wrong signing key") } return nil } @@ -229,7 +230,7 @@ func (h *Handler) sendRep(ctx context.Context, addr net.Addr, chain *cert.Chain) } rw, ok := infra.ResponseWriterFromContext(ctx) if !ok { - return common.NewBasicError("Unable to send reply, no response writer found", nil) + return serrors.New("Unable to send reply, no response writer found") } log.Trace("[reiss.Handler] Sending reissued certificate chain", "chain", chain, "addr", addr) diff --git a/go/cert_srv/setup.go b/go/cert_srv/setup.go index 204b2a9f8a..3e1ffb811a 100644 --- a/go/cert_srv/setup.go +++ b/go/cert_srv/setup.go @@ -34,6 +34,7 @@ import ( "github.com/scionproto/scion/go/lib/infra/modules/trust/trustdb" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/prom" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/proto" @@ -167,7 +168,7 @@ func setMessenger(cfg *config.Config, router snet.Router) error { topo := itopo.Get() topoAddress := topo.CS.GetById(cfg.General.ID) if topoAddress == nil { - return common.NewBasicError("Unable to find topo address", nil) + return serrors.New("Unable to find topo address") } nc := infraenv.NetworkConfig{ IA: topo.ISD_AS, diff --git a/go/examples/discovery_client/client.go b/go/examples/discovery_client/client.go index 7e772faa13..7e7995e968 100644 --- a/go/examples/discovery_client/client.go +++ b/go/examples/discovery_client/client.go @@ -31,6 +31,7 @@ import ( "github.com/scionproto/scion/go/lib/discovery/topofetcher" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/periodic" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" ) @@ -113,10 +114,10 @@ func realMain() int { func validateFlags() error { if *topoPath == "" && *ds == "" { - return common.NewBasicError("Topology and discovery service address not specified", nil) + return serrors.New("Topology and discovery service address not specified") } if *ds != "" && *topoPath != "" { - return common.NewBasicError("Both topology and discovery service address specified", nil) + return serrors.New("Both topology and discovery service address specified") } if *ds != "" { host, port, err := net.SplitHostPort(*ds) diff --git a/go/godispatcher/internal/config/config.go b/go/godispatcher/internal/config/config.go index ccc9e06cce..190e8e2321 100644 --- a/go/godispatcher/internal/config/config.go +++ b/go/godispatcher/internal/config/config.go @@ -19,10 +19,10 @@ import ( "fmt" "io" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/config" "github.com/scionproto/scion/go/lib/env" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/sock/reliable" "github.com/scionproto/scion/go/lib/util" ) @@ -65,16 +65,16 @@ func (cfg *Config) InitDefaults() { func (cfg *Config) Validate() error { if cfg.Dispatcher.ApplicationSocket == "" { - return common.NewBasicError("ApplicationSocket must be set", nil) + return serrors.New("ApplicationSocket must be set") } if cfg.Dispatcher.SocketFileMode == 0 { - return common.NewBasicError("SocketFileMode must be set", nil) + return serrors.New("SocketFileMode must be set") } if cfg.Dispatcher.OverlayPort == 0 { - return common.NewBasicError("OverlayPort must be set", nil) + return serrors.New("OverlayPort must be set") } if cfg.Dispatcher.ID == "" { - return common.NewBasicError("ID must be set", nil) + return serrors.New("ID must be set") } return config.ValidateAll(&cfg.Logging, &cfg.Metrics) } diff --git a/go/godispatcher/internal/registration/scmp_table.go b/go/godispatcher/internal/registration/scmp_table.go index 244daf852d..eccc1a0dc0 100644 --- a/go/godispatcher/internal/registration/scmp_table.go +++ b/go/godispatcher/internal/registration/scmp_table.go @@ -16,6 +16,7 @@ package registration import ( "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) // SCMPTable tracks SCMP General class IDs. @@ -36,7 +37,7 @@ func (t *SCMPTable) Lookup(id uint64) (interface{}, bool) { func (t *SCMPTable) Register(id uint64, value interface{}) error { if value == nil { - return common.NewBasicError("cannot register nil value", nil) + return serrors.New("cannot register nil value") } if _, ok := t.m[id]; ok { return common.NewBasicError("id already registered", nil, "id", id) diff --git a/go/godispatcher/internal/respool/packet.go b/go/godispatcher/internal/respool/packet.go index fd33e322b9..ff6d8652ce 100644 --- a/go/godispatcher/internal/respool/packet.go +++ b/go/godispatcher/internal/respool/packet.go @@ -22,6 +22,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/hpkt" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spkt" ) @@ -116,7 +117,7 @@ func (pkt *Packet) DecodeFromReliableConn(conn net.PacketConn) error { pkt.buffer = pkt.buffer[:n] if readExtra == nil { - return common.NewBasicError("missing next-hop", nil) + return serrors.New("missing next-hop") } pkt.OverlayRemote = readExtra.(*overlay.OverlayAddr).ToUDPAddr() diff --git a/go/godispatcher/main.go b/go/godispatcher/main.go index c72aa67edf..7cf86994ae 100644 --- a/go/godispatcher/main.go +++ b/go/godispatcher/main.go @@ -32,6 +32,7 @@ import ( "github.com/scionproto/scion/go/lib/fatal" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/prom" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -172,7 +173,7 @@ func checkPerms() error { return common.NewBasicError("Error retrieving user", err) } if u.Uid == "0" { - return common.NewBasicError("Running as root is not allowed for security reasons", nil) + return serrors.New("Running as root is not allowed for security reasons") } return nil } diff --git a/go/godispatcher/network/scmp.go b/go/godispatcher/network/scmp.go index 3e1cccb661..e6c1248699 100644 --- a/go/godispatcher/network/scmp.go +++ b/go/godispatcher/network/scmp.go @@ -17,6 +17,7 @@ package network import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spkt" ) @@ -69,7 +70,7 @@ func getQuotedSCMPGeneralID(scmpPayload *scmp.Payload) (uint64, error) { quotedInfoStart := quotedSCMPHeader.L4Len() + common.LineLen quotedInfoEnd := quotedInfoStart + int(meta.InfoLen)*common.LineLen if len(scmpPayload.L4Hdr) < quotedInfoEnd { - return 0, common.NewBasicError("incomplete post-quoted SCMP header meta+info quote", nil) + return 0, serrors.New("incomplete post-quoted SCMP header meta+info quote") } info, err := scmp.ParseInfo(scmpPayload.L4Hdr[quotedInfoStart:quotedInfoEnd], scmp.ClassType{Class: quotedSCMPHeader.Class, Type: quotedSCMPHeader.Type}) @@ -78,7 +79,7 @@ func getQuotedSCMPGeneralID(scmpPayload *scmp.Payload) (uint64, error) { } id := extractID(quotedSCMPHeader.Type, info) if id == 0 { - return 0, common.NewBasicError("SCMP General ID is 0, cannot route error packet", nil) + return 0, serrors.New("SCMP General ID is 0, cannot route error packet") } return id, nil } diff --git a/go/integration/cert_req/main.go b/go/integration/cert_req/main.go index b295396d34..1930350fd3 100644 --- a/go/integration/cert_req/main.go +++ b/go/integration/cert_req/main.go @@ -31,6 +31,7 @@ import ( "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/scrypto" "github.com/scionproto/scion/go/lib/scrypto/cert" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/proto" ) @@ -121,7 +122,7 @@ func (c client) requestCert() (*cert.Chain, error) { return nil, common.NewBasicError("Unable to parse chain", err) } if chain == nil { - return nil, common.NewBasicError("Empty reply", nil) + return nil, serrors.New("Empty reply") } if !chain.Leaf.Subject.Equal(remoteIA) { return nil, common.NewBasicError("Invalid subject", nil, @@ -149,7 +150,7 @@ func (c client) requestTRC(chain *cert.Chain) error { return common.NewBasicError("Unable to parse trc", err) } if trc == nil { - return common.NewBasicError("Empty reply", nil) + return serrors.New("Empty reply") } if trc.ISD != remoteIA.I { return common.NewBasicError("Invalid ISD", nil, diff --git a/go/integration/end2end/main.go b/go/integration/end2end/main.go index c7f6df4c8f..6d0c350298 100644 --- a/go/integration/end2end/main.go +++ b/go/integration/end2end/main.go @@ -33,6 +33,7 @@ import ( "github.com/scionproto/scion/go/lib/overlay" "github.com/scionproto/scion/go/lib/pathmgr" "github.com/scionproto/scion/go/lib/sciond" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/sock/reliable" "github.com/scionproto/scion/go/lib/spath" @@ -241,7 +242,7 @@ func (c client) getRemote(ctx context.Context, n int) error { return common.NewBasicError("Error requesting paths", err) } if len(paths.Entries) == 0 { - return common.NewBasicError("No path entries found", nil) + return serrors.New("No path entries found") } pathEntry := paths.Entries[0] path := spath.New(pathEntry.Path.FwdPath) diff --git a/go/lib/ctrl/seg/seg.go b/go/lib/ctrl/seg/seg.go index 931e4d9312..2d37c6eadb 100644 --- a/go/lib/ctrl/seg/seg.go +++ b/go/lib/ctrl/seg/seg.go @@ -28,6 +28,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/lib/util" "github.com/scionproto/scion/go/proto" @@ -56,7 +57,7 @@ type Beacon struct { // Parse parses and validates the enclosed path segment. func (b *Beacon) Parse() error { if b.Segment == nil { - return common.NewBasicError("Beacon does not contain a segment", nil) + return serrors.New("Beacon does not contain a segment") } return b.Segment.ParseRaw(ValidateBeacon) } @@ -205,7 +206,7 @@ func (ps *PathSegment) Validate(validationMethod ValidationMethod) error { return err } if len(ps.RawASEntries) == 0 { - return common.NewBasicError("PathSegment has no AS Entries", nil) + return serrors.New("PathSegment has no AS Entries") } if len(ps.ASEntries) != len(ps.RawASEntries) { return common.NewBasicError( diff --git a/go/lib/discovery/discovery.go b/go/lib/discovery/discovery.go index f85df645c3..1087bf75d3 100644 --- a/go/lib/discovery/discovery.go +++ b/go/lib/discovery/discovery.go @@ -72,6 +72,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" ) @@ -155,7 +156,7 @@ func FetchTopoRaw(ctx context.Context, params FetchParams, ds *addr.AppAddr, // createURL builds the url to the topology file. func createURL(params FetchParams, ds *addr.AppAddr) (string, error) { if ds == nil { - return "", common.NewBasicError("Addr not set", nil) + return "", serrors.New("Addr not set") } protocol := "http" if params.Https { diff --git a/go/lib/discovery/discoverypool/pool.go b/go/lib/discovery/discoverypool/pool.go index 8e30fcc609..5d7d99ad00 100644 --- a/go/lib/discovery/discoverypool/pool.go +++ b/go/lib/discovery/discoverypool/pool.go @@ -21,6 +21,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/discovery" "github.com/scionproto/scion/go/lib/discovery/discoveryinfo" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" ) @@ -67,7 +68,7 @@ func (p *Pool) Update(svcInfo topology.IDAddrMap) error { } // Check that more than one DS remain. if len(del) == len(p.m) { - return common.NewBasicError("Unable to delete all discovery service instances", nil) + return serrors.New("Unable to delete all discovery service instances") } for _, k := range del { delete(p.m, k) @@ -90,7 +91,7 @@ func (p *Pool) Choose() (discovery.InstanceInfo, error) { } } if best == nil { - return nil, common.NewBasicError("Unable to find any discovery service instance", nil) + return nil, serrors.New("Unable to find any discovery service instance") } return best, nil } diff --git a/go/lib/discovery/topofetcher/fetcher.go b/go/lib/discovery/topofetcher/fetcher.go index 6f3add2b0a..ecd580bee0 100644 --- a/go/lib/discovery/topofetcher/fetcher.go +++ b/go/lib/discovery/topofetcher/fetcher.go @@ -21,6 +21,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/discovery" "github.com/scionproto/scion/go/lib/discovery/discoverypool" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" ) @@ -88,7 +89,7 @@ func (f *Fetcher) Run(ctx context.Context) { func (f *Fetcher) run(ctx context.Context) error { if f.Pool == nil { - return common.NewBasicError("Pool not initialized", nil) + return serrors.New("Pool not initialized") } // Choose a DS server. ds, err := f.Pool.Choose() diff --git a/go/lib/env/env.go b/go/lib/env/env.go index cc96efca83..9a8575d74e 100644 --- a/go/lib/env/env.go +++ b/go/lib/env/env.go @@ -43,6 +43,7 @@ import ( "github.com/scionproto/scion/go/lib/overlay" "github.com/scionproto/scion/go/lib/sciond" _ "github.com/scionproto/scion/go/lib/scrypto" // Make sure math/rand is seeded + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/lib/util" @@ -98,7 +99,7 @@ func (cfg *General) InitDefaults() { func (cfg *General) Validate() error { if cfg.ID == "" { - return common.NewBasicError("No element ID specified", nil) + return serrors.New("No element ID specified") } return cfg.checkDir() } @@ -147,7 +148,7 @@ func (cfg *SciondClient) InitDefaults() { func (cfg *SciondClient) Validate() error { if cfg.InitialConnectPeriod.Duration == 0 { - return common.NewBasicError("InitialConnectPeriod must not be zero", nil) + return serrors.New("InitialConnectPeriod must not be zero") } return nil } diff --git a/go/lib/healthpool/pool.go b/go/lib/healthpool/pool.go index ddd0747d98..dc1fe8c395 100644 --- a/go/lib/healthpool/pool.go +++ b/go/lib/healthpool/pool.go @@ -21,6 +21,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/periodic" + "github.com/scionproto/scion/go/lib/serrors" ) // ErrPoolClosed is the error returned when operations on a closed pool are @@ -120,7 +121,7 @@ func (p *Pool) chooseMinFails() (Info, error) { } } if best == nil { - return nil, common.NewBasicError("Unable to find an info instance", nil) + return nil, serrors.New("Unable to find an info instance") } return best, nil } diff --git a/go/lib/hpkt/write.go b/go/lib/hpkt/write.go index 5397ab2af0..f0ea8795c9 100644 --- a/go/lib/hpkt/write.go +++ b/go/lib/hpkt/write.go @@ -26,6 +26,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/l4" "github.com/scionproto/scion/go/lib/layers" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spkt" "github.com/scionproto/scion/go/lib/util" ) @@ -151,7 +152,7 @@ func writeExtensions(extensions []common.Extension, buffer gopacket.SerializeBuf case common.End2EndClass: buffer.PushLayer(layers.LayerTypeEndToEndExtension) default: - return common.NewBasicError("cannot push unknown layer", nil) + return serrors.New("cannot push unknown layer") } } return nil diff --git a/go/lib/infra/disp/common_test.go b/go/lib/infra/disp/common_test.go index 41882dad9b..f41af85623 100644 --- a/go/lib/infra/disp/common_test.go +++ b/go/lib/infra/disp/common_test.go @@ -20,6 +20,7 @@ import ( "strings" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/proto" ) @@ -40,7 +41,7 @@ func (t testAdapterT) MsgToRaw(msg proto.Cerealizable) (common.RawBytes, error) func (t testAdapterT) RawToMsg(b common.RawBytes) (proto.Cerealizable, error) { items := strings.Split(string(b), "-") if len(items) != 2 { - return nil, common.NewBasicError("Bad message", nil) + return nil, serrors.New("Bad message") } id, err := strconv.Atoi(items[0]) if err != nil { diff --git a/go/lib/infra/disp/wtable.go b/go/lib/infra/disp/wtable.go index 87bd6a1ccd..7e7640aace 100644 --- a/go/lib/infra/disp/wtable.go +++ b/go/lib/infra/disp/wtable.go @@ -19,6 +19,7 @@ import ( "sync" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/proto" ) @@ -40,7 +41,7 @@ func newWaitTable(keyF func(proto.Cerealizable) string) *waitTable { func (wt *waitTable) addRequest(object proto.Cerealizable) error { select { case <-wt.destroyChan: - return common.NewBasicError("Table destroyed", nil) + return serrors.New("Table destroyed") default: } replyChannel := make(chan proto.Cerealizable, 1) @@ -60,7 +61,7 @@ func (wt *waitTable) waitForReply(ctx context.Context, object proto.Cerealizable) (proto.Cerealizable, error) { select { case <-wt.destroyChan: - return nil, common.NewBasicError("Table destroyed", nil) + return nil, serrors.New("Table destroyed") default: } replyChannel, loaded := wt.replyMap.Load(wt.keyF(object)) @@ -73,7 +74,7 @@ func (wt *waitTable) waitForReply(ctx context.Context, case <-ctx.Done(): return nil, ctx.Err() case <-wt.destroyChan: - return nil, common.NewBasicError("Table destroyed", nil) + return nil, serrors.New("Table destroyed") } } @@ -83,7 +84,7 @@ func (wt *waitTable) waitForReply(ctx context.Context, func (wt *waitTable) reply(object proto.Cerealizable) (bool, error) { select { case <-wt.destroyChan: - return false, common.NewBasicError("Table destroyed", nil) + return false, serrors.New("Table destroyed") default: } replyChannel, ok := wt.replyMap.Load(wt.keyF(object)) diff --git a/go/lib/infra/messenger/addr.go b/go/lib/infra/messenger/addr.go index a5d9dcc273..6ed09e6486 100644 --- a/go/lib/infra/messenger/addr.go +++ b/go/lib/infra/messenger/addr.go @@ -24,6 +24,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/svc" "github.com/scionproto/scion/go/lib/topology" @@ -211,14 +212,14 @@ func (r AddressRewriter) resolutionCtx(ctx context.Context) (context.Context, co // found, an error is returned. func parseReply(reply *svc.Reply) (*addr.AppAddr, error) { if reply == nil { - return nil, common.NewBasicError("nil reply", nil) + return nil, serrors.New("nil reply") } if reply.Transports == nil { - return nil, common.NewBasicError("empty reply", nil) + return nil, serrors.New("empty reply") } addressStr, ok := reply.Transports[svc.QUIC] if !ok { - return nil, common.NewBasicError("QUIC server address not found", nil) + return nil, serrors.New("QUIC server address not found") } udpAddr, err := net.ResolveUDPAddr("udp", addressStr) if err != nil { diff --git a/go/lib/infra/messenger/quic_response_writer.go b/go/lib/infra/messenger/quic_response_writer.go index 0725ee541b..4928e4ed84 100644 --- a/go/lib/infra/messenger/quic_response_writer.go +++ b/go/lib/infra/messenger/quic_response_writer.go @@ -17,7 +17,6 @@ package messenger import ( "context" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl" "github.com/scionproto/scion/go/lib/ctrl/ack" "github.com/scionproto/scion/go/lib/ctrl/cert_mgmt" @@ -25,6 +24,7 @@ import ( "github.com/scionproto/scion/go/lib/infra" "github.com/scionproto/scion/go/lib/infra/rpc" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" ) var _ infra.ResponseWriter = (*QUICResponseWriter)(nil) @@ -106,7 +106,7 @@ func (rw *QUICResponseWriter) SendIfStateInfoReply(ctx context.Context, msg *path_mgmt.IFStateInfos) error { // FIXME(scrye): Use only UDP because the BR doesn't support QUIC. - return common.NewBasicError("IFStateInfos responses not supported in QUIC", nil) + return serrors.New("IFStateInfos responses not supported in QUIC") } func (rw *QUICResponseWriter) SendHPSegReply(ctx context.Context, msg *path_mgmt.HPSegReply) error { diff --git a/go/lib/infra/modules/db/sqlite.go b/go/lib/infra/modules/db/sqlite.go index 12a2cdacf9..0e6b8dcae1 100644 --- a/go/lib/infra/modules/db/sqlite.go +++ b/go/lib/infra/modules/db/sqlite.go @@ -19,6 +19,7 @@ import ( "fmt" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) // NewSqlite returns a new SQLite backend opening a database at the given path. If @@ -27,7 +28,7 @@ import ( func NewSqlite(path string, schema string, schemaVersion int) (*sql.DB, error) { var err error if path == "" { - return nil, common.NewBasicError("Empty path not allowed for sqlite", nil) + return nil, serrors.New("Empty path not allowed for sqlite") } db, err := open(path) if err != nil { diff --git a/go/lib/infra/modules/idiscovery/config.go b/go/lib/infra/modules/idiscovery/config.go index 1aa480b66c..d516175aa8 100644 --- a/go/lib/infra/modules/idiscovery/config.go +++ b/go/lib/infra/modules/idiscovery/config.go @@ -21,6 +21,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/config" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -120,10 +121,10 @@ func (cfg *FetchConfig) InitDefaults() { func (cfg *FetchConfig) Validate() error { if cfg.Interval.Duration == 0 { - return common.NewBasicError("Interval must not be zero", nil) + return serrors.New("Interval must not be zero") } if cfg.Timeout.Duration == 0 { - return common.NewBasicError("Timeout must not be zero", nil) + return serrors.New("Timeout must not be zero") } return cfg.Connect.Validate() } @@ -159,7 +160,7 @@ func (cfg *ConnectParams) InitDefaults() { func (cfg *ConnectParams) Validate() error { if cfg.InitialPeriod.Duration == 0 { - return common.NewBasicError("InitialPeriod must not be zero", nil) + return serrors.New("InitialPeriod must not be zero") } return cfg.FailAction.Validate() } diff --git a/go/lib/infra/modules/idiscovery/idiscovery.go b/go/lib/infra/modules/idiscovery/idiscovery.go index f9be2f5be6..23ea4f008d 100644 --- a/go/lib/infra/modules/idiscovery/idiscovery.go +++ b/go/lib/infra/modules/idiscovery/idiscovery.go @@ -48,6 +48,7 @@ import ( "github.com/scionproto/scion/go/lib/infra/modules/itopo" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/periodic" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/lib/util" ) @@ -241,7 +242,7 @@ func (r *Runner) execFailAction(fetcher *task, cfg FetchConfig) { log.Warn("[discovery] Unable to get a valid initial topology, ignoring") r.startRegularFetcher(fetcher, cfg) default: - fatal.Fatal(common.NewBasicError("Unable to get a valid initial topology", nil)) + fatal.Fatal(serrors.New("Unable to get a valid initial topology")) } } @@ -293,7 +294,7 @@ func NewFetcher(handler TopoHandler, params discovery.FetchParams, filename string, client *http.Client) (*task, error) { if handler == nil { - return nil, common.NewBasicError("handler must not be nil", nil) + return nil, serrors.New("handler must not be nil") } t := &task{ mode: params.Mode, diff --git a/go/lib/infra/modules/itopo/itopo.go b/go/lib/infra/modules/itopo/itopo.go index 9cd3ee9c73..919f21f656 100644 --- a/go/lib/infra/modules/itopo/itopo.go +++ b/go/lib/infra/modules/itopo/itopo.go @@ -25,6 +25,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/infra/modules/itopo/internal/metrics" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/proto" ) @@ -159,7 +160,7 @@ func (tx *Transaction) Commit() error { } if tx.staticAtTxStart != st.topo.static { incUpdateMetric(l.WithResult(metrics.ErrCommit)) - return common.NewBasicError("Static topology changed in the meantime", nil) + return serrors.New("Static topology changed in the meantime") } if !tx.IsUpdate() { incUpdateMetric(l.WithResult(metrics.OkIgnored)) @@ -269,10 +270,10 @@ func (s *state) beginSetDynamic(dynamic *topology.Topo) (Transaction, error) { func (s *state) dynamicPreCheck(dynamic *topology.Topo) error { if dynamic == nil { - return common.NewBasicError("Provided topology must not be nil", nil) + return serrors.New("Provided topology must not be nil") } if s.topo.static == nil { - return common.NewBasicError("Static topology must be set", nil) + return serrors.New("Static topology must be set") } now := time.Now() if !dynamic.Active(now) { diff --git a/go/lib/infra/modules/itopo/validate.go b/go/lib/infra/modules/itopo/validate.go index d2954d3f4f..45c622c570 100644 --- a/go/lib/infra/modules/itopo/validate.go +++ b/go/lib/infra/modules/itopo/validate.go @@ -18,6 +18,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/proto" ) @@ -89,7 +90,7 @@ type generalValidator struct{} func (v *generalValidator) General(topo *topology.Topo) error { if topo == nil { - return common.NewBasicError("Topo must not be nil", nil) + return serrors.New("Topo must not be nil") } return nil } diff --git a/go/lib/infra/modules/seghandler/seghandler_test.go b/go/lib/infra/modules/seghandler/seghandler_test.go index 56a8cbd1c1..adbba36574 100644 --- a/go/lib/infra/modules/seghandler/seghandler_test.go +++ b/go/lib/infra/modules/seghandler/seghandler_test.go @@ -22,7 +22,6 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" "github.com/scionproto/scion/go/lib/ctrl/seg" "github.com/scionproto/scion/go/lib/infra" @@ -30,6 +29,7 @@ import ( "github.com/scionproto/scion/go/lib/infra/modules/seghandler/mock_seghandler" "github.com/scionproto/scion/go/lib/infra/modules/segverifier" "github.com/scionproto/scion/go/lib/mocks/net/mock_net" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/xtest" "github.com/scionproto/scion/go/proto" ) @@ -82,10 +82,10 @@ func TestReplyHandlerErrors(t *testing.T) { verified := make(chan segverifier.UnitResult) verifyErrs := []error{ - common.NewBasicError("test err 1", nil), - common.NewBasicError("test err 2", nil), - common.NewBasicError("test err 3", nil), - common.NewBasicError("test err rev 1", nil), + serrors.New("test err 1"), + serrors.New("test err 2"), + serrors.New("test err 3"), + serrors.New("test err rev 1"), } rev1, err := path_mgmt.NewSignedRevInfo(&path_mgmt.RevInfo{}, infra.NullSigner) xtest.FailOnErr(t, err) @@ -282,7 +282,7 @@ func TestReplyHandlerEarlyTriggerStorageError(t *testing.T) { } seg1Store := storage.EXPECT().StoreSegs(gomock.Any(), gomock.Eq([]*seghandler.SegWithHP{seg1})). - Return(seghandler.SegStats{}, common.NewBasicError("Test error", nil)) + Return(seghandler.SegStats{}, serrors.New("Test error")) storage.EXPECT().StoreSegs(gomock.Any(), gomock.Eq([]*seghandler.SegWithHP{seg1, seg2})). Return(seghandler.SegStats{InsertedSegs: []string{"seg1", "seg2"}}, nil). @@ -339,7 +339,7 @@ func TestReplyHandlerStorageError(t *testing.T) { Storage: storage, Verifier: verifier, } - storageErr := common.NewBasicError("Test error", nil) + storageErr := serrors.New("Test error") storage.EXPECT().StoreSegs(gomock.Any(), gomock.Eq([]*seghandler.SegWithHP{seg1, seg2})). Return(seghandler.SegStats{}, storageErr) diff --git a/go/lib/infra/modules/trust/signhelper.go b/go/lib/infra/modules/trust/signhelper.go index bd9fcb3db8..81b331dbf1 100644 --- a/go/lib/infra/modules/trust/signhelper.go +++ b/go/lib/infra/modules/trust/signhelper.go @@ -27,6 +27,7 @@ import ( "github.com/scionproto/scion/go/lib/infra" "github.com/scionproto/scion/go/lib/infra/modules/trust/internal/metrics" "github.com/scionproto/scion/go/lib/scrypto" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" "github.com/scionproto/scion/go/proto" ) @@ -196,7 +197,7 @@ func (v *BasicVerifier) sanityChecks(sign *proto.SignS, isPldSignature bool) err l := metrics.VerificationLabels{Type: metrics.Signature, Result: metrics.ErrValidate} if sign == nil { metrics.Store.Verification(l).Inc() - return common.NewBasicError("SignS is unset", nil) + return serrors.New("SignS is unset") } if len(sign.Signature) == 0 { metrics.Store.Verification(l).Inc() diff --git a/go/lib/infra/modules/trust/trust.go b/go/lib/infra/modules/trust/trust.go index 70aa1a23be..15de8c0dd4 100644 --- a/go/lib/infra/modules/trust/trust.go +++ b/go/lib/infra/modules/trust/trust.go @@ -579,7 +579,7 @@ func (store *Store) LoadAuthoritativeTRC(dir string) error { // Unexpected error in trust store return common.NewBasicError("Failed to load TRC from store", err) case xerrors.Is(err, ErrNotFoundLocally) && fileTRC == nil: - return common.NewBasicError("No TRC found on disk or in trustdb", nil) + return serrors.New("No TRC found on disk or in trustdb") case xerrors.Is(err, ErrNotFoundLocally) && fileTRC != nil: if _, err := store.trustdb.InsertTRC(ctx, fileTRC); err != nil { return common.NewBasicError("Failed to insert TRC in trust db", err) @@ -635,7 +635,7 @@ func (store *Store) LoadAuthoritativeChain(dir string) error { // Unexpected error in trust store return err case xerrors.Is(err, ErrMissingAuthoritative) && fileChain == nil: - return common.NewBasicError("No chain found on disk or in trustdb", nil) + return serrors.New("No chain found on disk or in trustdb") case xerrors.Is(err, ErrMissingAuthoritative) && fileChain != nil: _, err := store.trustdb.InsertChain(ctx, fileChain) return err diff --git a/go/lib/infra/modules/trust/trust_test.go b/go/lib/infra/modules/trust/trust_test.go index a0290912fb..698e5f9e9a 100644 --- a/go/lib/infra/modules/trust/trust_test.go +++ b/go/lib/infra/modules/trust/trust_test.go @@ -28,7 +28,6 @@ import ( "github.com/stretchr/testify/require" "github.com/scionproto/scion/go/lib/addr" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/cert_mgmt" "github.com/scionproto/scion/go/lib/infra" "github.com/scionproto/scion/go/lib/infra/disp" @@ -39,6 +38,7 @@ import ( "github.com/scionproto/scion/go/lib/scrypto" "github.com/scionproto/scion/go/lib/scrypto/cert" "github.com/scionproto/scion/go/lib/scrypto/trc" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/lib/topology/topotestutil" @@ -91,12 +91,12 @@ func newMessengerMock(ctrl *gomock.Controller, trcObj, ok := trcs[msg.ISD] if !ok { - return nil, common.NewBasicError("TRC not found", nil) + return nil, serrors.New("TRC not found") } compressedTRC, err := trcObj.Compress() if err != nil { - return nil, common.NewBasicError("Unable to compress TRC", nil) + return nil, serrors.New("Unable to compress TRC") } return &cert_mgmt.TRC{RawTRC: compressedTRC}, nil }, @@ -107,12 +107,12 @@ func newMessengerMock(ctrl *gomock.Controller, chain, ok := chains[msg.IA()] if !ok { - return nil, common.NewBasicError("Chain not found", nil) + return nil, serrors.New("Chain not found") } compressedChain, err := chain.Compress() if err != nil { - return nil, common.NewBasicError("Unable to compress Chain", nil) + return nil, serrors.New("Unable to compress Chain") } return &cert_mgmt.Chain{RawChain: compressedChain}, nil }, diff --git a/go/lib/infra/modules/trust/trustdb/trustdbsqlite/db.go b/go/lib/infra/modules/trust/trustdb/trustdbsqlite/db.go index 37d3f0f79f..319acaa8c5 100644 --- a/go/lib/infra/modules/trust/trustdb/trustdbsqlite/db.go +++ b/go/lib/infra/modules/trust/trustdb/trustdbsqlite/db.go @@ -33,6 +33,7 @@ import ( "github.com/scionproto/scion/go/lib/scrypto" "github.com/scionproto/scion/go/lib/scrypto/cert" "github.com/scionproto/scion/go/lib/scrypto/trc" + "github.com/scionproto/scion/go/lib/serrors" ) const ( @@ -592,7 +593,7 @@ func (db *executor) InsertCustKey(ctx context.Context, key *trustdb.CustKey, oldVersion scrypto.Version) error { if key == nil { - return common.NewBasicError("Inserting nil key not allowed", nil) + return serrors.New("Inserting nil key not allowed") } if key.Version == oldVersion { return common.NewBasicError("Same version as oldVersion not allowed", @@ -636,7 +637,7 @@ func (db *transaction) Commit() error { db.Lock() defer db.Unlock() if db.tx == nil { - return common.NewBasicError("Transaction already done", nil) + return serrors.New("Transaction already done") } err := db.tx.Commit() if err != nil { @@ -650,7 +651,7 @@ func (db *transaction) Rollback() error { db.Lock() defer db.Unlock() if db.tx == nil { - return common.NewBasicError("Transaction already done", nil) + return serrors.New("Transaction already done") } err := db.tx.Rollback() db.tx = nil diff --git a/go/lib/infra/rpc/rpc.go b/go/lib/infra/rpc/rpc.go index c7a0157215..a892f59b3b 100644 --- a/go/lib/infra/rpc/rpc.go +++ b/go/lib/infra/rpc/rpc.go @@ -27,8 +27,8 @@ import ( quic "github.com/lucas-clemente/quic-go" capnp "zombiezen.com/go/capnproto2" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/proto" ) @@ -82,7 +82,7 @@ func (s *Server) initListener() error { defer s.mu.Unlock() if s.listener != nil { - return common.NewBasicError("cannot listen on same server twice", nil) + return serrors.New("cannot listen on same server twice") } listener, err := quic.Listen(s.Conn, s.TLSConfig, s.QUICConfig) if err != nil { diff --git a/go/lib/layers/extensions_layer.go b/go/lib/layers/extensions_layer.go index 57d40fc746..4ac12e5046 100644 --- a/go/lib/layers/extensions_layer.go +++ b/go/lib/layers/extensions_layer.go @@ -19,6 +19,7 @@ import ( "github.com/google/gopacket/layers" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -64,7 +65,7 @@ func (e *Extension) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) err expectedLength := int(data[1]) * common.LineLen if expectedLength <= 0 { df.SetTruncated() - return common.NewBasicError("Invalid SCION Extension header, length is zero", nil) + return serrors.New("Invalid SCION Extension header, length is zero") } if len(data) < expectedLength { diff --git a/go/lib/log/flags.go b/go/lib/log/flags.go index 5aae2de1aa..6c69ee507d 100644 --- a/go/lib/log/flags.go +++ b/go/lib/log/flags.go @@ -17,7 +17,7 @@ package log import ( "flag" - "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) var ( @@ -71,7 +71,7 @@ func SetupFromFlags(name string) error { // if name passed, the caller wants to setup a log file if name != "" { if logDir == "" { - return common.NewBasicError("Log dir flag not set", nil) + return serrors.New("Log dir flag not set") } err = SetupLogFile(name, logDir, logLevel, logSize, logAge, logBackups, logFlush) } diff --git a/go/lib/overlay/addr.go b/go/lib/overlay/addr.go index f85a62bf36..8ce1cb3df9 100644 --- a/go/lib/overlay/addr.go +++ b/go/lib/overlay/addr.go @@ -20,6 +20,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) type OverlayAddr struct { @@ -29,7 +30,7 @@ type OverlayAddr struct { func NewOverlayAddr(l3 addr.HostAddr, l4 addr.L4Info) (*OverlayAddr, error) { if l3 == nil { - return nil, common.NewBasicError("L3 required", nil) + return nil, serrors.New("L3 required") } switch l3.Type() { case addr.HostTypeIPv4, addr.HostTypeIPv6: diff --git a/go/lib/overlay/conn/conn.go b/go/lib/overlay/conn/conn.go index bcaf871b52..8629ca4425 100644 --- a/go/lib/overlay/conn/conn.go +++ b/go/lib/overlay/conn/conn.go @@ -32,6 +32,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/sockctrl" ) @@ -226,7 +227,7 @@ func (cc *connUDPBase) initConnUDP(network string, listen, remote *overlay.Overl var c *net.UDPConn var err error if listen == nil { - return common.NewBasicError("listen address must be specified", nil) + return serrors.New("listen address must be specified") } laddr = listen.ToUDPAddr() if laddr == nil { diff --git a/go/lib/pathdb/sqlite/sqlite.go b/go/lib/pathdb/sqlite/sqlite.go index 23384381e9..09d167f56e 100644 --- a/go/lib/pathdb/sqlite/sqlite.go +++ b/go/lib/pathdb/sqlite/sqlite.go @@ -35,6 +35,7 @@ import ( "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/pathdb" "github.com/scionproto/scion/go/lib/pathdb/query" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/proto" ) @@ -135,7 +136,7 @@ func (e *executor) InsertWithHPCfgIDs(ctx context.Context, segMeta *seg.Meta, e.Lock() defer e.Unlock() if e.db == nil { - return noInsertion, common.NewBasicError("No database open", nil) + return noInsertion, serrors.New("No database open") } pseg := segMeta.Segment // Check if we already have a path segment. @@ -390,7 +391,7 @@ func (e *executor) deleteInTx(ctx context.Context, e.Lock() defer e.Unlock() if e.db == nil { - return 0, common.NewBasicError("No database open", nil) + return 0, serrors.New("No database open") } return db.DeleteInTx(ctx, e.db, delFunc) } @@ -399,7 +400,7 @@ func (e *executor) Get(ctx context.Context, params *query.Params) (query.Results e.RLock() defer e.RUnlock() if e.db == nil { - return nil, common.NewBasicError("No database open", nil) + return nil, serrors.New("No database open") } stmt, args := e.buildQuery(params) rows, err := e.db.QueryContext(ctx, stmt, args...) @@ -537,7 +538,7 @@ func (e *executor) GetAll(ctx context.Context) (<-chan query.ResultOrErr, error) e.RLock() defer e.RUnlock() if e.db == nil { - return nil, common.NewBasicError("No database open", nil) + return nil, serrors.New("No database open") } stmt, args := e.buildQuery(nil) rows, err := e.db.QueryContext(ctx, stmt, args...) @@ -598,7 +599,7 @@ func (e *executor) InsertNextQuery(ctx context.Context, src, dst addr.IA, policy e.Lock() defer e.Unlock() if e.db == nil { - return false, common.NewBasicError("No database open", nil) + return false, serrors.New("No database open") } if policy == nil { policy = pathdb.NoPolicy @@ -633,7 +634,7 @@ func (e *executor) GetNextQuery(ctx context.Context, src, dst addr.IA, e.RLock() defer e.RUnlock() if e.db == nil { - return time.Time{}, common.NewBasicError("No database open", nil) + return time.Time{}, serrors.New("No database open") } if policy == nil { policy = pathdb.NoPolicy diff --git a/go/lib/pathpol/hop_pred.go b/go/lib/pathpol/hop_pred.go index 98d672ad6d..4fe5acfd3e 100644 --- a/go/lib/pathpol/hop_pred.go +++ b/go/lib/pathpol/hop_pred.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) // A HopPredicate specifies a hop in the ACL or Sequence of the path policy, @@ -155,7 +156,7 @@ func validateHopPredStr(str string) error { "dashes", dashes, "hashes", hashes, "commas", commas) } if dashes == 0 && (hashes > 0 || commas > 0) { - return common.NewBasicError("Can't specify IFIDs without AS", nil) + return serrors.New("Can't specify IFIDs without AS") } return nil } diff --git a/go/lib/pathstorage/pathstorage.go b/go/lib/pathstorage/pathstorage.go index 9bd6d0d0db..61877349e8 100644 --- a/go/lib/pathstorage/pathstorage.go +++ b/go/lib/pathstorage/pathstorage.go @@ -26,6 +26,7 @@ import ( sqlitepathdb "github.com/scionproto/scion/go/lib/pathdb/sqlite" "github.com/scionproto/scion/go/lib/revcache" "github.com/scionproto/scion/go/lib/revcache/memrevcache" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -102,14 +103,14 @@ func (cfg *PathDBConf) validateBackend() error { case BackendSqlite: return nil case BackendNone: - return common.NewBasicError("No backend set", nil) + return serrors.New("No backend set") } return common.NewBasicError("Unsupported backend", nil, "backend", cfg.Backend()) } func (cfg *PathDBConf) validateConnection() error { if cfg.Connection() == "" { - return common.NewBasicError("Empty connection not allowed", nil) + return serrors.New("Empty connection not allowed") } return nil } @@ -174,14 +175,14 @@ func (cfg *RevCacheConf) validateBackend() error { case BackendSqlite, BackendMem: return nil case BackendNone: - return common.NewBasicError("No backend set", nil) + return serrors.New("No backend set") } return common.NewBasicError("Unsupported backend", nil, "backend", cfg.Backend()) } func (cfg *RevCacheConf) validateConnection() error { if cfg.Backend() != BackendMem && cfg.Connection() == "" { - return common.NewBasicError("Empty connection not allowed", nil) + return serrors.New("Empty connection not allowed") } return nil } diff --git a/go/lib/pktcls/json.go b/go/lib/pktcls/json.go index 5670816bc5..55e08d0346 100644 --- a/go/lib/pktcls/json.go +++ b/go/lib/pktcls/json.go @@ -19,6 +19,7 @@ import ( "strconv" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) type Typer interface { @@ -126,7 +127,7 @@ func unmarshalCond(b []byte) (Cond, error) { } c, ok := t.(Cond) if !ok { - return nil, common.NewBasicError("Unable to extract Cond from interface", nil) + return nil, serrors.New("Unable to extract Cond from interface") } return c, nil } @@ -139,7 +140,7 @@ func unmarshalPredicate(b []byte) (IPv4Predicate, error) { } p, ok := t.(IPv4Predicate) if !ok { - return nil, common.NewBasicError("Unable to extract Cond from interface", nil) + return nil, serrors.New("Unable to extract Cond from interface") } return p, nil } diff --git a/go/lib/revcache/util_test.go b/go/lib/revcache/util_test.go index d1a25c8fe2..b45ec560c1 100644 --- a/go/lib/revcache/util_test.go +++ b/go/lib/revcache/util_test.go @@ -29,6 +29,7 @@ import ( "github.com/scionproto/scion/go/lib/infra" "github.com/scionproto/scion/go/lib/revcache" "github.com/scionproto/scion/go/lib/revcache/mock_revcache" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" "github.com/scionproto/scion/go/lib/xtest" "github.com/scionproto/scion/go/lib/xtest/graph" @@ -90,7 +91,7 @@ func TestFilterNew(t *testing.T) { SoMsg("Only new revocations should stay in map", rMap, ShouldResemble, expectedMap) }) Convey("Given a cache with an error", func() { - expectedErr := common.NewBasicError("TESTERR", nil) + expectedErr := serrors.New("TESTERR") revCache.EXPECT().Get(gomock.Any(), gomock.Any()).Return(nil, expectedErr) rMap, err := revcache.RevocationToMap([]*path_mgmt.SignedRevInfo{}) SoMsg("No error expected", err, ShouldBeNil) @@ -132,7 +133,7 @@ func TestNoRevokedHopIntf(t *testing.T) { }) Convey("Given an error in the revache it is propagated", func() { revCache.EXPECT().Get(gomock.Eq(ctx), gomock.Any()).Return( - nil, common.NewBasicError("TestError", nil), + nil, serrors.New("TestError"), ) _, err := revcache.NoRevokedHopIntf(ctx, revCache, seg210_222_1) SoMsg("Err expected", err, ShouldNotBeNil) @@ -157,7 +158,7 @@ func TestRelevantRevInfos(t *testing.T) { // TODO(lukedirtwalker): Add test with revocations Convey("Given an error in the revache it is propagated", func() { revCache.EXPECT().Get(gomock.Eq(ctx), gomock.Any()).Return( - nil, common.NewBasicError("TestError", nil), + nil, serrors.New("TestError"), ) _, err := revcache.RelevantRevInfos(ctx, revCache, segs) SoMsg("Err expected", err, ShouldNotBeNil) diff --git a/go/lib/sciond/pathprobe/paths.go b/go/lib/sciond/pathprobe/paths.go index 8d3efb20d8..a5d544ab38 100644 --- a/go/lib/sciond/pathprobe/paths.go +++ b/go/lib/sciond/pathprobe/paths.go @@ -28,6 +28,7 @@ import ( "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/sciond" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/sock/reliable" "github.com/scionproto/scion/go/lib/spath" @@ -87,7 +88,7 @@ func (p Prober) GetStatuses(ctx context.Context, deadline, ok := ctx.Deadline() if !ok { - return nil, common.NewBasicError("deadline required on ctx", nil) + return nil, serrors.New("deadline required on ctx") } // Check whether paths are alive. This is done by sending a packet // with invalid address via the path. The border router at the destination diff --git a/go/lib/scmp/info.go b/go/lib/scmp/info.go index a65ba686cd..ae9632a99d 100644 --- a/go/lib/scmp/info.go +++ b/go/lib/scmp/info.go @@ -21,6 +21,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -250,7 +251,7 @@ type InfoExtIdx struct { func InfoExtIdxFromRaw(b common.RawBytes) (*InfoExtIdx, error) { if len(b) == 0 { - return nil, common.NewBasicError("Unable to parse InfoExtIdx", nil) + return nil, serrors.New("Unable to parse InfoExtIdx") } return &InfoExtIdx{Idx: b[0]}, nil } diff --git a/go/lib/scmp/info_traceroute.go b/go/lib/scmp/info_traceroute.go index e00bfb3442..3933a91c35 100644 --- a/go/lib/scmp/info_traceroute.go +++ b/go/lib/scmp/info_traceroute.go @@ -19,6 +19,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -57,7 +58,7 @@ type InfoTraceRoute struct { func InfoTraceRouteFromRaw(b common.RawBytes) (*InfoTraceRoute, error) { if len(b) < traceRouteLen { - return nil, common.NewBasicError("Unable to parse InfoTraceRoute, small buffer size", nil) + return nil, serrors.New("Unable to parse InfoTraceRoute, small buffer size") } e := &InfoTraceRoute{} e.Id = common.Order.Uint64(b) diff --git a/go/lib/scrypto/asym.go b/go/lib/scrypto/asym.go index 8e84244865..f3b41e9e68 100644 --- a/go/lib/scrypto/asym.go +++ b/go/lib/scrypto/asym.go @@ -22,6 +22,7 @@ import ( "golang.org/x/crypto/nacl/box" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" ) // Available asymmetric crypto algorithms. The values must be lower case. @@ -77,7 +78,7 @@ func GetPubKey(privKey []byte, algo string) ([]byte, error) { case Ed25519: return ed25519.PrivateKey(privKey).Public().(ed25519.PublicKey), nil } - return nil, common.NewBasicError("unsupported key type", nil) + return nil, serrors.New("unsupported key type") } // Sign takes a signature input and a signing key to create a signature. Currently only diff --git a/go/lib/snet/conn.go b/go/lib/snet/conn.go index f5e2117c4d..22f62e3881 100644 --- a/go/lib/snet/conn.go +++ b/go/lib/snet/conn.go @@ -19,9 +19,9 @@ import ( "time" "github.com/scionproto/scion/go/lib/addr" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/pathmgr" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" ) const ( @@ -73,7 +73,7 @@ func newSCIONConn(base *scionConnBase, pr pathmgr.Resolver, conn PacketConn) *SC // context. func DialSCION(network string, laddr, raddr *Addr) (Conn, error) { if DefNetwork == nil { - return nil, common.NewBasicError("SCION network not initialized", nil) + return nil, serrors.New("SCION network not initialized") } return DefNetwork.DialSCION(network, laddr, raddr, 0) } @@ -83,7 +83,7 @@ func DialSCION(network string, laddr, raddr *Addr) (Conn, error) { func DialSCIONWithBindSVC(network string, laddr, raddr, baddr *Addr, svc addr.HostSVC) (Conn, error) { if DefNetwork == nil { - return nil, common.NewBasicError("SCION network not initialized", nil) + return nil, serrors.New("SCION network not initialized") } return DefNetwork.DialSCIONWithBindSVC(network, laddr, raddr, baddr, svc, 0) } @@ -92,7 +92,7 @@ func DialSCIONWithBindSVC(network string, laddr, raddr, baddr *Addr, // networking context. func ListenSCION(network string, laddr *Addr) (Conn, error) { if DefNetwork == nil { - return nil, common.NewBasicError("SCION network not initialized", nil) + return nil, serrors.New("SCION network not initialized") } return DefNetwork.ListenSCION(network, laddr, 0) } @@ -101,7 +101,7 @@ func ListenSCION(network string, laddr *Addr) (Conn, error) { // the default networking context. func ListenSCIONWithBindSVC(network string, laddr, baddr *Addr, svc addr.HostSVC) (Conn, error) { if DefNetwork == nil { - return nil, common.NewBasicError("SCION network not initialized", nil) + return nil, serrors.New("SCION network not initialized") } return DefNetwork.ListenSCIONWithBindSVC(network, laddr, baddr, svc, 0) } diff --git a/go/lib/snet/reader.go b/go/lib/snet/reader.go index 78d85d7117..43eaf760a8 100644 --- a/go/lib/snet/reader.go +++ b/go/lib/snet/reader.go @@ -24,6 +24,7 @@ import ( "github.com/scionproto/scion/go/lib/l4" "github.com/scionproto/scion/go/lib/overlay" "github.com/scionproto/scion/go/lib/scmp" + "github.com/scionproto/scion/go/lib/serrors" ) type scionConnReader struct { @@ -64,7 +65,7 @@ func (c *scionConnReader) Read(b []byte) (int, error) { // an error (if one occurred). func (c *scionConnReader) read(b []byte) (int, *Addr, error) { if c.base.scionNet == nil { - return 0, nil, common.NewBasicError("SCION network not initialized", nil) + return 0, nil, serrors.New("SCION network not initialized") } c.mtx.Lock() diff --git a/go/lib/snet/router.go b/go/lib/snet/router.go index d0a8faf3f6..e301c80391 100644 --- a/go/lib/snet/router.go +++ b/go/lib/snet/router.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/overlay" "github.com/scionproto/scion/go/lib/pathmgr" "github.com/scionproto/scion/go/lib/sciond" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/lib/spath/spathmeta" ) @@ -63,7 +64,7 @@ func (r *BaseRouter) Route(ctx context.Context, dst addr.IA) (Path, error) { } aps := r.PathResolver.Query(ctx, r.IA, dst, sciond.PathReqFlags{}) if len(aps) == 0 { - return nil, common.NewBasicError("unable to find paths", nil) + return nil, serrors.New("unable to find paths") } ap := aps.GetAppPath("") return r.appPathToPath(ap) diff --git a/go/lib/snet/snet.go b/go/lib/snet/snet.go index 3ce14bcc5a..da66046567 100644 --- a/go/lib/snet/snet.go +++ b/go/lib/snet/snet.go @@ -56,6 +56,7 @@ import ( "github.com/scionproto/scion/go/lib/overlay" "github.com/scionproto/scion/go/lib/pathmgr" "github.com/scionproto/scion/go/lib/sciond" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/sock/reliable" ) @@ -76,7 +77,7 @@ func Init(ia addr.IA, sciondPath string, dispatcher reliable.DispatcherService) // InitWithNetwork initializes snet with the provided SCION networking context. func InitWithNetwork(network *SCIONNetwork) error { if DefNetwork != nil { - return common.NewBasicError("Cannot initialize global SCION network twice", nil) + return serrors.New("Cannot initialize global SCION network twice") } DefNetwork = network return nil @@ -200,7 +201,7 @@ func (n *SCIONNetwork) DialSCIONWithBindSVC(network string, laddr, raddr, baddr svc addr.HostSVC, timeout time.Duration) (Conn, error) { if raddr == nil { - return nil, common.NewBasicError("Unable to dial to nil remote", nil) + return nil, serrors.New("Unable to dial to nil remote") } conn, err := n.ListenSCIONWithBindSVC(network, laddr, baddr, svc, timeout) if err != nil { @@ -251,20 +252,20 @@ func (n *SCIONNetwork) ListenSCIONWithBindSVC(network string, laddr, baddr *Addr return nil, common.NewBasicError("Network not implemented", nil, "net", network) } if laddr == nil { - return nil, common.NewBasicError("Nil laddr not supported", nil) + return nil, serrors.New("Nil laddr not supported") } if laddr.Host == nil { - return nil, common.NewBasicError("Nil Host laddr not supported", nil) + return nil, serrors.New("Nil Host laddr not supported") } if laddr.Host.L3 == nil { - return nil, common.NewBasicError("Nil Host L3 laddr not supported", nil) + return nil, serrors.New("Nil Host L3 laddr not supported") } if laddr.Host.L3.Type() != l3Type { return nil, common.NewBasicError("Supplied local address does not match network", nil, "expected L3", l3Type, "actual L3", laddr.Host.L3.Type()) } if laddr.Host.L3.IP().IsUnspecified() { - return nil, common.NewBasicError("Binding to unspecified address not supported", nil) + return nil, serrors.New("Binding to unspecified address not supported") } if laddr.Host.L4 == nil { // If no port has been specified, default to 0 to get a random port from the dispatcher diff --git a/go/lib/snet/squic/squic.go b/go/lib/snet/squic/squic.go index 51a9944d77..449c6f5447 100644 --- a/go/lib/snet/squic/squic.go +++ b/go/lib/snet/squic/squic.go @@ -22,6 +22,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" ) @@ -78,7 +79,7 @@ func ListenSCIONWithBindSVC(network *snet.SCIONNetwork, laddr, baddr *snet.Addr, svc addr.HostSVC, quicConfig *quic.Config) (quic.Listener, error) { if len(srvTlsCfg.Certificates) == 0 { - return nil, common.NewBasicError("squic: No server TLS certificate configured", nil) + return nil, serrors.New("squic: No server TLS certificate configured") } sconn, err := sListen(network, laddr, baddr, svc) if err != nil { diff --git a/go/lib/sock/reliable/reconnect/main_test.go b/go/lib/sock/reliable/reconnect/main_test.go index 3a16b0d763..8c16555ebe 100644 --- a/go/lib/sock/reliable/reconnect/main_test.go +++ b/go/lib/sock/reliable/reconnect/main_test.go @@ -25,9 +25,9 @@ import ( "github.com/golang/mock/gomock" "github.com/scionproto/scion/go/lib/addr" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/sock/reliable/reconnect" ) @@ -51,8 +51,8 @@ var ( var ( dispatcherError = &net.OpError{Err: os.NewSyscallError("write", syscall.ECONNRESET)} writeDispatcherError = &net.OpError{Err: os.NewSyscallError("write", syscall.EPIPE)} - writeNonDispatcherError = common.NewBasicError("Misc error", nil) - connectErrorFromDispatcher = common.NewBasicError("Port unavailable", nil) + writeNonDispatcherError = serrors.New("Misc error") + connectErrorFromDispatcher = serrors.New("Port unavailable") ) func MustParseSnet(str string) *snet.Addr { diff --git a/go/lib/sock/reliable/reconnect/network_test.go b/go/lib/sock/reliable/reconnect/network_test.go index 9851ba7d9a..2b7866e3a1 100644 --- a/go/lib/sock/reliable/reconnect/network_test.go +++ b/go/lib/sock/reliable/reconnect/network_test.go @@ -24,8 +24,8 @@ import ( . "github.com/smartystreets/goconvey/convey" "github.com/scionproto/scion/go/lib/addr" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/mocks/net/mock_net" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/sock/reliable/mock_reliable" "github.com/scionproto/scion/go/lib/sock/reliable/reconnect" ) @@ -60,7 +60,7 @@ func TestNetworkFatalError(t *testing.T) { Convey("Given a network running over an underlying mocked network", t, func() { ctrl := gomock.NewController(t) defer ctrl.Finish() - err := common.NewBasicError("Not dispatcher dead error, e.g., malformed register msg", nil) + err := serrors.New("Not dispatcher dead error, e.g., malformed register msg") mockNetwork := mock_reliable.NewMockDispatcherService(ctrl) network := reconnect.NewDispatcherService(mockNetwork) Convey("The network returns non-dispatcher dial errors from the mock", func() { diff --git a/go/lib/sock/reliable/reliable.go b/go/lib/sock/reliable/reliable.go index 3c4b06f3ae..69193062a0 100644 --- a/go/lib/sock/reliable/reliable.go +++ b/go/lib/sock/reliable/reliable.go @@ -70,6 +70,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" ) var ( @@ -270,7 +271,7 @@ func (conn *Conn) ReadFrom(buf []byte) (int, net.Addr, error) { } } if len(buf) < len(p.Payload) { - return 0, nil, common.NewBasicError("buffer too small", nil) + return 0, nil, serrors.New("buffer too small") } copy(buf, p.Payload) return len(p.Payload), overlayAddr, nil @@ -345,7 +346,7 @@ func (listener *Listener) String() string { func createUDPAddrFromAppAddr(address *addr.AppAddr) (*net.UDPAddr, error) { if address == nil || address.L3 == nil { - return nil, common.NewBasicError("nil application address", nil) + return nil, serrors.New("nil application address") } if address.L3.Type() != addr.HostTypeIPv4 && address.L3.Type() != addr.HostTypeIPv6 { return nil, common.NewBasicError("unsupported application address type", nil, diff --git a/go/lib/spath/path.go b/go/lib/spath/path.go index d9c0591913..7e40d0d671 100644 --- a/go/lib/spath/path.go +++ b/go/lib/spath/path.go @@ -22,6 +22,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -143,7 +144,7 @@ func (path *Path) InitOffsets() error { path.HopOff = common.LineLen // Cannot initialize an empty path if path.IsEmpty() { - return common.NewBasicError("Unable to initialize empty path", nil) + return serrors.New("Unable to initialize empty path") } // Skip Peer with Xover HF if infoF, err = path.GetInfoField(path.InfOff); err != nil { @@ -162,7 +163,7 @@ func (path *Path) InitOffsets() error { return err } if path.InfOff != 0 { - return common.NewBasicError("Unable to find routing Hop Field in first path segment", nil) + return serrors.New("Unable to find routing Hop Field in first path segment") } return nil } @@ -221,7 +222,7 @@ func (path *Path) GetInfoField(offset int) (*InfoField, error) { return nil, common.NewBasicError("Negative InfoF offset", nil, "offset", offset) } if path.IsEmpty() { - return nil, common.NewBasicError("Unable to get infoField from empty path", nil) + return nil, serrors.New("Unable to get infoField from empty path") } infoF, err := InfoFFromRaw(path.Raw[offset:]) if err != nil { @@ -235,7 +236,7 @@ func (path *Path) GetHopField(offset int) (*HopField, error) { return nil, common.NewBasicError("Negative HopF offset", nil, "offset", offset) } if path.IsEmpty() { - return nil, common.NewBasicError("Unable to get hopField from empty path", nil) + return nil, serrors.New("Unable to get hopField from empty path") } hopF, err := HopFFromRaw(path.Raw[offset:]) if err != nil { diff --git a/go/lib/svc/svc_test.go b/go/lib/svc/svc_test.go index 9e15486711..f9f4ec5bd2 100644 --- a/go/lib/svc/svc_test.go +++ b/go/lib/svc/svc_test.go @@ -26,6 +26,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/l4" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/snet/mock_snet" "github.com/scionproto/scion/go/lib/spath" @@ -124,7 +125,7 @@ func TestSVCResolutionServer(t *testing.T) { Convey("return from socket with error if next internal read fails", func() { mockPacketConn.EXPECT().ReadFrom(gomock.Any(), gomock.Any()).DoAndReturn( func(pkt *snet.SCIONPacket, ov *overlay.OverlayAddr) error { - return common.NewBasicError("forced exit", nil) + return serrors.New("forced exit") }, ) err := conn.ReadFrom(&pkt, &ov) diff --git a/go/lib/topology/topology.go b/go/lib/topology/topology.go index 1244a3e2ec..869de9ae05 100644 --- a/go/lib/topology/topology.go +++ b/go/lib/topology/topology.go @@ -24,6 +24,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/overlay" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/proto" ) @@ -44,7 +45,7 @@ type ServiceNames []string func (s ServiceNames) GetRandom() (string, error) { numServers := len(s) if numServers == 0 { - return "", common.NewBasicError("No names present", nil) + return "", serrors.New("No names present") } return s[rand.Intn(numServers)], nil } @@ -324,7 +325,7 @@ func (t *Topo) GetAllTopoAddrs(svc proto.ServiceType) ([]TopoAddr, error) { } topoAddrs := svcInfo.GetAllTopoAddrs() if topoAddrs == nil { - return nil, common.NewBasicError("Address not found", nil) + return nil, serrors.New("Address not found") } return topoAddrs, nil } @@ -332,7 +333,7 @@ func (t *Topo) GetAllTopoAddrs(svc proto.ServiceType) ([]TopoAddr, error) { func (t *Topo) GetSvcInfo(svc proto.ServiceType) (*SVCInfo, error) { switch svc { case proto.ServiceType_unset: - return nil, common.NewBasicError("Service type unset", nil) + return nil, serrors.New("Service type unset") case proto.ServiceType_bs: return &SVCInfo{overlay: t.Overlay, names: t.BSNames, idTopoAddrMap: t.BS}, nil case proto.ServiceType_ps: diff --git a/go/lib/truststorage/truststorage.go b/go/lib/truststorage/truststorage.go index ee99036a6b..d5732031cf 100644 --- a/go/lib/truststorage/truststorage.go +++ b/go/lib/truststorage/truststorage.go @@ -27,6 +27,7 @@ import ( "github.com/scionproto/scion/go/lib/infra/modules/trust/trustdb" "github.com/scionproto/scion/go/lib/infra/modules/trust/trustdb/trustdbsqlite" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" ) @@ -98,7 +99,7 @@ func (cfg *TrustDBConf) validateBackend() error { case BackendSqlite: return nil case BackendNone: - return common.NewBasicError("No backend set", nil) + return serrors.New("No backend set") } return common.NewBasicError("Unsupported backend", nil, "backend", cfg.Backend()) } diff --git a/go/path_srv/internal/config/config.go b/go/path_srv/internal/config/config.go index 9591b9a42e..3bd7a299b3 100644 --- a/go/path_srv/internal/config/config.go +++ b/go/path_srv/internal/config/config.go @@ -19,11 +19,11 @@ import ( "io" "time" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/config" "github.com/scionproto/scion/go/lib/env" "github.com/scionproto/scion/go/lib/infra/modules/idiscovery" "github.com/scionproto/scion/go/lib/pathstorage" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/truststorage" "github.com/scionproto/scion/go/lib/util" ) @@ -118,7 +118,7 @@ func (cfg *PSConfig) InitDefaults() { func (cfg *PSConfig) Validate() error { if cfg.QueryInterval.Duration == 0 { - return common.NewBasicError("QueryInterval must not be zero", nil) + return serrors.New("QueryInterval must not be zero") } return config.ValidateAll(&cfg.PathDB, &cfg.RevCache) } diff --git a/go/path_srv/internal/handlers/common_test.go b/go/path_srv/internal/handlers/common_test.go index b988649954..737bdd0f1c 100644 --- a/go/path_srv/internal/handlers/common_test.go +++ b/go/path_srv/internal/handlers/common_test.go @@ -29,6 +29,7 @@ import ( "github.com/scionproto/scion/go/lib/revcache" "github.com/scionproto/scion/go/lib/revcache/memrevcache" "github.com/scionproto/scion/go/lib/revcache/mock_revcache" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/xtest" "github.com/scionproto/scion/go/lib/xtest/graph" ) @@ -110,7 +111,7 @@ func TestFetchDB(t *testing.T) { mPathDB.EXPECT().Get(gomock.Any(), gomock.Any()).Return([]*query.Result{{ Seg: g.seg130_132, }}, nil) - expErr := common.NewBasicError("TestError", nil) + expErr := serrors.New("TestError") mRevCache.EXPECT().Get(gomock.Any(), gomock.Any()).AnyTimes().Return( nil, expErr, diff --git a/go/path_srv/internal/segreq/provider.go b/go/path_srv/internal/segreq/provider.go index b8f81effe4..d10ad675f1 100644 --- a/go/path_srv/internal/segreq/provider.go +++ b/go/path_srv/internal/segreq/provider.go @@ -28,6 +28,7 @@ import ( "github.com/scionproto/scion/go/lib/pathdb" "github.com/scionproto/scion/go/lib/pathdb/query" "github.com/scionproto/scion/go/lib/revcache" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet/addrutil" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/proto" @@ -59,7 +60,7 @@ func (s *SegSelector) SelectSeg(ctx context.Context, return nil, common.NewBasicError("failed to filter segments", err) } if len(segs) < 1 { - return nil, common.NewBasicError("no segments found", nil) + return nil, serrors.New("no segments found") } return segs[rand.Intn(len(segs))], nil } diff --git a/go/path_srv/internal/segsyncer/segsyncer.go b/go/path_srv/internal/segsyncer/segsyncer.go index 94a97bf81b..a3ad22aaba 100644 --- a/go/path_srv/internal/segsyncer/segsyncer.go +++ b/go/path_srv/internal/segsyncer/segsyncer.go @@ -32,6 +32,7 @@ import ( "github.com/scionproto/scion/go/lib/pathdb/query" "github.com/scionproto/scion/go/lib/periodic" "github.com/scionproto/scion/go/lib/revcache" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet/addrutil" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/path_srv/internal/handlers" @@ -117,7 +118,7 @@ func (s *SegSyncer) getDstAddr(ctx context.Context) (net.Addr, error) { return nil, common.NewBasicError("Failed to get core segs", err) } if len(coreSegs) < 1 { - return nil, common.NewBasicError("No core segments found!", nil) + return nil, serrors.New("No core segments found!") } var cPs net.Addr // select a seg to reach the dst diff --git a/go/proto/cert_mgmt.capnp.go b/go/proto/cert_mgmt.capnp.go index 0097da823f..54ffa59820 100644 --- a/go/proto/cert_mgmt.capnp.go +++ b/go/proto/cert_mgmt.capnp.go @@ -4,6 +4,7 @@ package proto import ( strconv "strconv" + capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/ctrl_pld.capnp.go b/go/proto/ctrl_pld.capnp.go index 3bb43e5811..3444ba1427 100644 --- a/go/proto/ctrl_pld.capnp.go +++ b/go/proto/ctrl_pld.capnp.go @@ -4,6 +4,7 @@ package proto import ( strconv "strconv" + capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/drkey_mgmt.capnp.go b/go/proto/drkey_mgmt.capnp.go index 344162dff8..c67722da46 100644 --- a/go/proto/drkey_mgmt.capnp.go +++ b/go/proto/drkey_mgmt.capnp.go @@ -4,6 +4,7 @@ package proto import ( strconv "strconv" + capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/path_mgmt.capnp.go b/go/proto/path_mgmt.capnp.go index 15446c469f..15de82ba81 100644 --- a/go/proto/path_mgmt.capnp.go +++ b/go/proto/path_mgmt.capnp.go @@ -4,6 +4,7 @@ package proto import ( strconv "strconv" + capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/sciond.capnp.go b/go/proto/sciond.capnp.go index 3c18142e3c..9776830bd9 100644 --- a/go/proto/sciond.capnp.go +++ b/go/proto/sciond.capnp.go @@ -4,6 +4,7 @@ package proto import ( strconv "strconv" + capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/sig.capnp.go b/go/proto/sig.capnp.go index 3f53f57636..e9b63f7153 100644 --- a/go/proto/sig.capnp.go +++ b/go/proto/sig.capnp.go @@ -4,6 +4,7 @@ package proto import ( strconv "strconv" + capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/structs.gen.go b/go/proto/structs.gen.go index dbcaa9a109..37ceb522c1 100644 --- a/go/proto/structs.gen.go +++ b/go/proto/structs.gen.go @@ -3,9 +3,8 @@ package proto import ( - "zombiezen.com/go/capnproto2" - "github.com/scionproto/scion/go/lib/common" + capnp "zombiezen.com/go/capnproto2" ) // NewRootStruct calls the appropriate NewRoot<x> function corresponding to the capnp proto type ID, diff --git a/go/sciond/internal/config/config.go b/go/sciond/internal/config/config.go index 053fb96973..08e94b5956 100644 --- a/go/sciond/internal/config/config.go +++ b/go/sciond/internal/config/config.go @@ -25,6 +25,7 @@ import ( "github.com/scionproto/scion/go/lib/infra/modules/idiscovery" "github.com/scionproto/scion/go/lib/pathstorage" "github.com/scionproto/scion/go/lib/sciond" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/truststorage" "github.com/scionproto/scion/go/lib/util" @@ -137,16 +138,16 @@ func (cfg *SDConfig) InitDefaults() { func (cfg *SDConfig) Validate() error { if cfg.Reliable == "" { - return common.NewBasicError("Reliable must be set", nil) + return serrors.New("Reliable must be set") } if cfg.Unix == "" { - return common.NewBasicError("Unix must be set", nil) + return serrors.New("Unix must be set") } if cfg.SocketFileMode == 0 { - return common.NewBasicError("SocketFileMode must be set", nil) + return serrors.New("SocketFileMode must be set") } if cfg.QueryInterval.Duration == 0 { - return common.NewBasicError("QueryInterval must not be zero", nil) + return serrors.New("QueryInterval must not be zero") } return config.ValidateAll(&cfg.PathDB, &cfg.RevCache) } diff --git a/go/sciond/internal/fetcher/fetcher.go b/go/sciond/internal/fetcher/fetcher.go index e5d4745126..1e592436c9 100644 --- a/go/sciond/internal/fetcher/fetcher.go +++ b/go/sciond/internal/fetcher/fetcher.go @@ -34,6 +34,7 @@ import ( "github.com/scionproto/scion/go/lib/pathdb/query" "github.com/scionproto/scion/go/lib/revcache" "github.com/scionproto/scion/go/lib/sciond" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/spath" "github.com/scionproto/scion/go/lib/topology" @@ -114,7 +115,7 @@ func (f *fetcherHandler) GetPaths(ctx context.Context, req *sciond.PathReq, req = req.Copy() // Check context if _, ok := ctx.Deadline(); !ok { - return nil, common.NewBasicError("Context must have deadline set", nil) + return nil, serrors.New("Context must have deadline set") } // Check source if req.Src.IA().IsZero() { diff --git a/go/sciond/internal/servers/handlers.go b/go/sciond/internal/servers/handlers.go index b1ad54cfc6..2827e6538f 100644 --- a/go/sciond/internal/servers/handlers.go +++ b/go/sciond/internal/servers/handlers.go @@ -20,7 +20,6 @@ import ( "net" "time" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/ctrl/path_mgmt" "github.com/scionproto/scion/go/lib/hostinfo" "github.com/scionproto/scion/go/lib/infra" @@ -30,6 +29,7 @@ import ( "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/revcache" "github.com/scionproto/scion/go/lib/sciond" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/topology" "github.com/scionproto/scion/go/proto" "github.com/scionproto/scion/go/sciond/internal/fetcher" @@ -300,7 +300,7 @@ func (h *RevNotificationHandler) verifySRevInfo(ctx context.Context, // Error out immediately if RevInfo is bad info, err := sRevInfo.RevInfo() if err != nil { - return nil, common.NewBasicError("Unable to extract RevInfo", nil) + return nil, serrors.New("Unable to extract RevInfo") } err = segverifier.VerifyRevInfo(ctx, h.VerifierFactory.NewVerifier(), nil, sRevInfo) return info, err diff --git a/go/sciond/internal/servers/server.go b/go/sciond/internal/servers/server.go index 37b018ca6b..726d141378 100644 --- a/go/sciond/internal/servers/server.go +++ b/go/sciond/internal/servers/server.go @@ -24,6 +24,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/sock/reliable" "github.com/scionproto/scion/go/proto" ) @@ -70,7 +71,7 @@ func (srv *Server) ListenAndServe() error { srv.mu.Lock() if srv.closeCalled { srv.mu.Unlock() - return common.NewBasicError("attempted to listen on server that was shut down", nil) + return serrors.New("attempted to listen on server that was shut down") } listener, err := srv.listen() if err != nil { @@ -135,7 +136,7 @@ func (srv *Server) Close() error { defer srv.mu.Unlock() if srv.listener == nil { - return common.NewBasicError("uninitialized server", nil) + return serrors.New("uninitialized server") } srv.closeCalled = true return srv.listener.Close() diff --git a/go/sig/internal/sigconfig/conf.go b/go/sig/internal/sigconfig/conf.go index f43264479a..c62fdb8c7f 100644 --- a/go/sig/internal/sigconfig/conf.go +++ b/go/sig/internal/sigconfig/conf.go @@ -20,9 +20,9 @@ import ( "net" "github.com/scionproto/scion/go/lib/addr" - "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/config" "github.com/scionproto/scion/go/lib/env" + "github.com/scionproto/scion/go/lib/serrors" ) const ( @@ -123,19 +123,19 @@ func (cfg *SigConf) InitDefaults() { // Validate validate the config and returns an error if a value is not valid. func (cfg *SigConf) Validate() error { if cfg.ID == "" { - return common.NewBasicError("ID must be set!", nil) + return serrors.New("ID must be set!") } if cfg.SIGConfig == "" { - return common.NewBasicError("Config must be set!", nil) + return serrors.New("Config must be set!") } if cfg.IA.IsZero() { - return common.NewBasicError("IA must be set", nil) + return serrors.New("IA must be set") } if cfg.IA.IsWildcard() { - return common.NewBasicError("Wildcard IA not allowed", nil) + return serrors.New("Wildcard IA not allowed") } if cfg.IP.IsUnspecified() { - return common.NewBasicError("IP must be set", nil) + return serrors.New("IP must be set") } return nil } diff --git a/go/sig/main.go b/go/sig/main.go index 6fb5639995..91684145ac 100644 --- a/go/sig/main.go +++ b/go/sig/main.go @@ -32,6 +32,7 @@ import ( "github.com/scionproto/scion/go/lib/fatal" "github.com/scionproto/scion/go/lib/log" "github.com/scionproto/scion/go/lib/prom" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/sig/base" "github.com/scionproto/scion/go/sig/config" "github.com/scionproto/scion/go/sig/disp" @@ -138,7 +139,7 @@ func validateConfig() error { func setupTun() (io.ReadWriteCloser, error) { if err := checkPerms(); err != nil { - return nil, common.NewBasicError("Permissions checks failed", nil) + return nil, serrors.New("Permissions checks failed") } tunLink, tunIO, err := xnet.ConnectTun(cfg.Sig.Tun) if err != nil { @@ -176,7 +177,7 @@ func checkPerms() error { return common.NewBasicError("Error retrieving user", err) } if u.Uid == "0" { - return common.NewBasicError("Running as root is not allowed for security reasons", nil) + return serrors.New("Running as root is not allowed for security reasons") } caps, err := capability.NewPid(0) if err != nil { diff --git a/go/tools/scion-pki/internal/conf/isd.go b/go/tools/scion-pki/internal/conf/isd.go index 7d295ee09b..6aaaf23365 100644 --- a/go/tools/scion-pki/internal/conf/isd.go +++ b/go/tools/scion-pki/internal/conf/isd.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" "github.com/scionproto/scion/go/tools/scion-pki/internal/pkicmn" ) @@ -55,7 +56,7 @@ func LoadIsdConf(dir string) (*Isd, error) { return nil, err } if len(i.Trc.RawCoreIAs) == 0 { - return nil, common.NewBasicError("CoreASes missing", nil) + return nil, serrors.New("CoreASes missing") } // Parse core ASes into addr.IAs for _, raw := range i.Trc.RawCoreIAs { diff --git a/go/tools/scion-pki/internal/keys/gen.go b/go/tools/scion-pki/internal/keys/gen.go index 70203f7847..bc123e38bd 100644 --- a/go/tools/scion-pki/internal/keys/gen.go +++ b/go/tools/scion-pki/internal/keys/gen.go @@ -27,6 +27,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/keyconf" "github.com/scionproto/scion/go/lib/scrypto" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/tools/scion-pki/internal/conf" "github.com/scionproto/scion/go/tools/scion-pki/internal/pkicmn" ) @@ -137,7 +138,7 @@ func genMasterKey(rand io.Reader) ([]byte, error) { return nil, err } if n != 16 { - return nil, common.NewBasicError("Not enough random bytes", nil) + return nil, serrors.New("Not enough random bytes") } return key, nil } diff --git a/go/tools/scion-pki/internal/v2/conf/isd.go b/go/tools/scion-pki/internal/v2/conf/isd.go index dc11418da2..9afc777505 100644 --- a/go/tools/scion-pki/internal/v2/conf/isd.go +++ b/go/tools/scion-pki/internal/v2/conf/isd.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/addr" "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/util" "github.com/scionproto/scion/go/tools/scion-pki/internal/pkicmn" ) @@ -67,7 +68,7 @@ func LoadISDCfg(dir string) (*ISDCfg, error) { return nil, err } if len(i.Desc) == 0 { - return nil, common.NewBasicError("description not set", nil) + return nil, serrors.New("description not set") } if err = i.TRC.Validate(); err != nil { return nil, err @@ -180,7 +181,7 @@ func (t *TRC) parsePrimaries() error { func (t *TRC) parsePrimary(raw []string) ([]addr.AS, error) { var ases []addr.AS if len(raw) == 0 { - return nil, common.NewBasicError("section not set", nil) + return nil, serrors.New("section not set") } for _, raw := range raw { as, err := addr.ASFromString(raw) @@ -200,7 +201,7 @@ func (t *TRC) checkValuesSet() error { return common.NewBasicError(ErrTrcVersionNotSet, nil) } if t.BaseVersion != t.Version { - return common.NewBasicError("only base TRCs supported currently", nil) + return serrors.New("only base TRCs supported currently") } if t.VotingQuorum == 0 { return common.NewBasicError(ErrVotingQuorumNotSet, nil) diff --git a/go/tools/scion-pki/internal/v2/keys/gen.go b/go/tools/scion-pki/internal/v2/keys/gen.go index 512e8b721f..1236532c56 100644 --- a/go/tools/scion-pki/internal/v2/keys/gen.go +++ b/go/tools/scion-pki/internal/v2/keys/gen.go @@ -26,6 +26,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/keyconf" "github.com/scionproto/scion/go/lib/scrypto" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/tools/scion-pki/internal/pkicmn" "github.com/scionproto/scion/go/tools/scion-pki/internal/v2/conf" ) @@ -143,7 +144,7 @@ func genMasterKey() ([]byte, error) { return nil, err } if n != 16 { - return nil, common.NewBasicError("not enough random bytes", nil) + return nil, serrors.New("not enough random bytes") } return key, nil } diff --git a/go/tools/scion-pki/internal/v2/trcs/sign.go b/go/tools/scion-pki/internal/v2/trcs/sign.go index 665b28c988..596f1ddfd4 100644 --- a/go/tools/scion-pki/internal/v2/trcs/sign.go +++ b/go/tools/scion-pki/internal/v2/trcs/sign.go @@ -23,6 +23,7 @@ import ( "github.com/scionproto/scion/go/lib/common" "github.com/scionproto/scion/go/lib/scrypto" "github.com/scionproto/scion/go/lib/scrypto/trc/v2" + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/tools/scion-pki/internal/pkicmn" "github.com/scionproto/scion/go/tools/scion-pki/internal/v2/conf" ) @@ -140,7 +141,7 @@ func signTRC(t *trc.TRC, encoded trc.Encoded, primaryASes map[addr.AS]*asCfg) ( } } if len(signatures) == 0 { - return nil, common.NewBasicError("no signature generated", nil) + return nil, serrors.New("no signature generated") } signed := &trc.Signed{ EncodedTRC: encoded, diff --git a/go/tools/scmp/cmn/common.go b/go/tools/scmp/cmn/common.go index f76381e745..39f5567245 100644 --- a/go/tools/scmp/cmn/common.go +++ b/go/tools/scmp/cmn/common.go @@ -34,6 +34,7 @@ import ( "github.com/scionproto/scion/go/lib/sciond" "github.com/scionproto/scion/go/lib/scmp" _ "github.com/scionproto/scion/go/lib/scrypto" // Make sure math/rand is seeded + "github.com/scionproto/scion/go/lib/serrors" "github.com/scionproto/scion/go/lib/snet" "github.com/scionproto/scion/go/lib/sock/reliable" "github.com/scionproto/scion/go/lib/spkt" @@ -200,17 +201,17 @@ func Validate(pkt *spkt.ScnPkt) (*scmp.Hdr, *scmp.Payload, error) { infoRev, ok := scmpPld.Info.(*scmp.InfoRevocation) if !ok { return scmpHdr, scmpPld, - common.NewBasicError("Failed to parse SCMP revocation Info", nil) + serrors.New("Failed to parse SCMP revocation Info") } signedRevInfo, err := path_mgmt.NewSignedRevInfoFromRaw(infoRev.RawSRev) if err != nil { return scmpHdr, scmpPld, - common.NewBasicError("Failed to decode SCMP signed revocation Info", nil) + serrors.New("Failed to decode SCMP signed revocation Info") } ri, err := signedRevInfo.RevInfo() if err != nil { return scmpHdr, scmpPld, - common.NewBasicError("Failed to decode SCMP revocation Info", nil) + serrors.New("Failed to decode SCMP revocation Info") } return scmpHdr, scmpPld, common.NewBasicError("", nil, "Revocation", ri) } From 1a7cdf45b5784d7d2950f915778d9f553849b2e9 Mon Sep 17 00:00:00 2001 From: Lukas Vogel <lukedirtwalker@gmail.com> Date: Mon, 7 Oct 2019 08:47:34 +0200 Subject: [PATCH 2/4] lint fixes --- go/beacon_srv/BUILD.bazel | 1 + go/beacon_srv/internal/beacon/BUILD.bazel | 1 + go/beacon_srv/internal/beaconing/BUILD.bazel | 2 + .../internal/beaconing/handler_test.go | 4 +- .../internal/beaconstorage/BUILD.bazel | 1 + go/beacon_srv/internal/config/BUILD.bazel | 1 + go/beacon_srv/internal/ifstate/BUILD.bazel | 1 + go/border/BUILD.bazel | 1 + go/cert_srv/BUILD.bazel | 1 + go/cert_srv/internal/config/BUILD.bazel | 1 + go/cert_srv/internal/reiss/BUILD.bazel | 2 + go/examples/discovery_client/BUILD.bazel | 1 + go/godispatcher/BUILD.bazel | 1 + go/godispatcher/internal/config/BUILD.bazel | 2 +- .../internal/registration/BUILD.bazel | 1 + go/godispatcher/internal/respool/BUILD.bazel | 1 + go/godispatcher/network/BUILD.bazel | 1 + go/integration/cert_req/BUILD.bazel | 1 + go/integration/end2end/BUILD.bazel | 1 + go/lib/ctrl/seg/BUILD.bazel | 1 + go/lib/discovery/BUILD.bazel | 1 + go/lib/discovery/discoverypool/BUILD.bazel | 1 + go/lib/discovery/topofetcher/BUILD.bazel | 1 + go/lib/env/BUILD.bazel | 1 + go/lib/healthpool/BUILD.bazel | 1 + go/lib/hpkt/BUILD.bazel | 1 + go/lib/infra/disp/BUILD.bazel | 2 + go/lib/infra/messenger/BUILD.bazel | 1 + go/lib/infra/modules/idiscovery/BUILD.bazel | 1 + go/lib/infra/modules/itopo/BUILD.bazel | 1 + go/lib/infra/modules/itopo/itopo.go.orig | 372 ++++++++++++++++++ go/lib/infra/modules/seghandler/BUILD.bazel | 1 + go/lib/infra/modules/trust/BUILD.bazel | 2 +- .../trust/trustdb/trustdbsqlite/BUILD.bazel | 1 + go/lib/infra/rpc/BUILD.bazel | 2 +- go/lib/layers/BUILD.bazel | 1 + go/lib/log/BUILD.bazel | 1 + go/lib/overlay/BUILD.bazel | 1 + go/lib/overlay/conn/BUILD.bazel | 1 + go/lib/pathdb/sqlite/BUILD.bazel | 1 + go/lib/pathpol/BUILD.bazel | 1 + go/lib/pathstorage/BUILD.bazel | 1 + go/lib/pktcls/BUILD.bazel | 1 + go/lib/revcache/BUILD.bazel | 1 + go/lib/sciond/pathprobe/BUILD.bazel | 1 + go/lib/scmp/BUILD.bazel | 1 + go/lib/scrypto/BUILD.bazel | 1 + go/lib/snet/BUILD.bazel | 1 + go/lib/snet/squic/BUILD.bazel | 1 + go/lib/sock/reliable/BUILD.bazel | 1 + go/lib/sock/reliable/reconnect/BUILD.bazel | 1 + go/lib/svc/BUILD.bazel | 1 + go/lib/topology/BUILD.bazel | 1 + go/lib/truststorage/BUILD.bazel | 1 + go/path_srv/internal/config/BUILD.bazel | 2 +- go/path_srv/internal/handlers/BUILD.bazel | 1 + go/path_srv/internal/segreq/BUILD.bazel | 1 + go/path_srv/internal/segsyncer/BUILD.bazel | 1 + go/protobuf/BUILD.bazel | 16 + go/sciond/internal/config/BUILD.bazel | 1 + go/sciond/internal/fetcher/BUILD.bazel | 1 + go/sciond/internal/servers/BUILD.bazel | 1 + go/sig/BUILD.bazel | 1 + go/sig/internal/sigconfig/BUILD.bazel | 2 +- go/tools/scion-pki/internal/conf/BUILD.bazel | 1 + go/tools/scion-pki/internal/keys/BUILD.bazel | 1 + .../scion-pki/internal/v2/keys/BUILD.bazel | 1 + .../scion-pki/internal/v2/trcs/BUILD.bazel | 1 + go/tools/scmp/cmn/BUILD.bazel | 1 + 69 files changed, 459 insertions(+), 7 deletions(-) create mode 100644 go/lib/infra/modules/itopo/itopo.go.orig create mode 100644 go/protobuf/BUILD.bazel diff --git a/go/beacon_srv/BUILD.bazel b/go/beacon_srv/BUILD.bazel index 6cadeb9f49..76d17bc558 100644 --- a/go/beacon_srv/BUILD.bazel +++ b/go/beacon_srv/BUILD.bazel @@ -32,6 +32,7 @@ go_library( "//go/lib/periodic:go_default_library", "//go/lib/prom:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/sock/reliable/reconnect:go_default_library", diff --git a/go/beacon_srv/internal/beacon/BUILD.bazel b/go/beacon_srv/internal/beacon/BUILD.bazel index 209d78a993..ec05bf197a 100644 --- a/go/beacon_srv/internal/beacon/BUILD.bazel +++ b/go/beacon_srv/internal/beacon/BUILD.bazel @@ -22,6 +22,7 @@ go_library( "//go/lib/infra/modules/db:go_default_library", "//go/lib/log:go_default_library", "//go/lib/prom:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/spath:go_default_library", "//go/lib/util:go_default_library", "//go/proto:go_default_library", diff --git a/go/beacon_srv/internal/beaconing/BUILD.bazel b/go/beacon_srv/internal/beaconing/BUILD.bazel index 663ec3fb39..ca7b5886e6 100644 --- a/go/beacon_srv/internal/beaconing/BUILD.bazel +++ b/go/beacon_srv/internal/beaconing/BUILD.bazel @@ -31,6 +31,7 @@ go_library( "//go/lib/infra/modules/segverifier:go_default_library", "//go/lib/log:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/snet/addrutil:go_default_library", "//go/lib/spath:go_default_library", @@ -67,6 +68,7 @@ go_test( "//go/lib/log:go_default_library", "//go/lib/overlay:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/snet/mock_snet:go_default_library", "//go/lib/spath:go_default_library", diff --git a/go/beacon_srv/internal/beaconing/handler_test.go b/go/beacon_srv/internal/beaconing/handler_test.go index 843f2a97e8..833c9afba8 100644 --- a/go/beacon_srv/internal/beaconing/handler_test.go +++ b/go/beacon_srv/internal/beaconing/handler_test.go @@ -167,7 +167,7 @@ func TestNewHandler(t *testing.T) { verifier.EXPECT().WithSrc(gomock.Any()).Return(verifier) verifier.EXPECT().WithServer(gomock.Any()).Return(verifier) verifier.EXPECT().Verify(gomock.Any(), gomock.Any(), - gomock.Any()).MaxTimes(2).Return(serrors.New("failed")) + gomock.Any()).MaxTimes(2).Return(serrors.New("failed")) handler := NewHandler(localIA, intfs, inserter, verifier) pseg := testBeacon(g, []common.IFIDType{graph.If_220_X_120_B, graph.If_120_A_110_X}).Segment @@ -178,7 +178,7 @@ func TestNewHandler(t *testing.T) { inserter := mock_beaconing.NewMockBeaconInserter(mctrl) inserter.EXPECT().PreFilter(gomock.Any()).Return(nil) inserter.EXPECT().InsertBeacon(gomock.Any(), - gomock.Any()).Return(beacon.InsertStats{}, serrors.New("failed")) + gomock.Any()).Return(beacon.InsertStats{}, serrors.New("failed")) verifier := mock_infra.NewMockVerifier(mctrl) verifier.EXPECT().WithServer(gomock.Any()).MaxTimes(2).Return(verifier) diff --git a/go/beacon_srv/internal/beaconstorage/BUILD.bazel b/go/beacon_srv/internal/beaconstorage/BUILD.bazel index 738bf09a6b..b4c05ed7fb 100644 --- a/go/beacon_srv/internal/beaconstorage/BUILD.bazel +++ b/go/beacon_srv/internal/beaconstorage/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//go/lib/infra/modules/cleaner:go_default_library", "//go/lib/infra/modules/db:go_default_library", "//go/lib/log:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/spath:go_default_library", "//go/lib/util:go_default_library", "//go/proto:go_default_library", diff --git a/go/beacon_srv/internal/config/BUILD.bazel b/go/beacon_srv/internal/config/BUILD.bazel index 467b0c2b14..f6c58211f6 100644 --- a/go/beacon_srv/internal/config/BUILD.bazel +++ b/go/beacon_srv/internal/config/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//go/lib/ctrl/path_mgmt:go_default_library", "//go/lib/env:go_default_library", "//go/lib/infra/modules/idiscovery:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/truststorage:go_default_library", "//go/lib/util:go_default_library", ], diff --git a/go/beacon_srv/internal/ifstate/BUILD.bazel b/go/beacon_srv/internal/ifstate/BUILD.bazel index 6b61770a98..8bc74a92af 100644 --- a/go/beacon_srv/internal/ifstate/BUILD.bazel +++ b/go/beacon_srv/internal/ifstate/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//go/lib/infra/messenger:go_default_library", "//go/lib/log:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/topology:go_default_library", "//go/lib/util:go_default_library", diff --git a/go/border/BUILD.bazel b/go/border/BUILD.bazel index 20e7f2932f..1fef910b37 100644 --- a/go/border/BUILD.bazel +++ b/go/border/BUILD.bazel @@ -37,6 +37,7 @@ go_library( "//go/lib/ringbuf:go_default_library", "//go/lib/scmp:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", "//go/proto:go_default_library", "@com_github_burntsushi_toml//:go_default_library", diff --git a/go/cert_srv/BUILD.bazel b/go/cert_srv/BUILD.bazel index 79f9d13f3a..92a9d32e9c 100644 --- a/go/cert_srv/BUILD.bazel +++ b/go/cert_srv/BUILD.bazel @@ -27,6 +27,7 @@ go_library( "//go/lib/log:go_default_library", "//go/lib/periodic:go_default_library", "//go/lib/prom:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/topology:go_default_library", "//go/proto:go_default_library", diff --git a/go/cert_srv/internal/config/BUILD.bazel b/go/cert_srv/internal/config/BUILD.bazel index 0671d972c8..50805c5676 100644 --- a/go/cert_srv/internal/config/BUILD.bazel +++ b/go/cert_srv/internal/config/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//go/lib/infra/modules/trust/trustdb:go_default_library", "//go/lib/keyconf:go_default_library", "//go/lib/scrypto/cert:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/truststorage:go_default_library", "//go/lib/util:go_default_library", ], diff --git a/go/cert_srv/internal/reiss/BUILD.bazel b/go/cert_srv/internal/reiss/BUILD.bazel index 38c41959f4..e67e41301a 100644 --- a/go/cert_srv/internal/reiss/BUILD.bazel +++ b/go/cert_srv/internal/reiss/BUILD.bazel @@ -25,6 +25,7 @@ go_library( "//go/lib/scrypto:go_default_library", "//go/lib/scrypto/cert:go_default_library", "//go/lib/scrypto/trc:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/util:go_default_library", "@org_golang_x_crypto//ed25519:go_default_library", @@ -44,6 +45,7 @@ go_test( "//go/lib/periodic:go_default_library", "//go/lib/scrypto/cert:go_default_library", "//go/lib/scrypto/trc:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/xtest:go_default_library", "//go/lib/xtest/matchers:go_default_library", "@com_github_golang_mock//gomock:go_default_library", diff --git a/go/examples/discovery_client/BUILD.bazel b/go/examples/discovery_client/BUILD.bazel index 5ff7e47c2b..2b9bf31cde 100644 --- a/go/examples/discovery_client/BUILD.bazel +++ b/go/examples/discovery_client/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//go/lib/discovery/topofetcher:go_default_library", "//go/lib/log:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", ], ) diff --git a/go/godispatcher/BUILD.bazel b/go/godispatcher/BUILD.bazel index e95561fa77..03472ecb02 100644 --- a/go/godispatcher/BUILD.bazel +++ b/go/godispatcher/BUILD.bazel @@ -14,6 +14,7 @@ go_library( "//go/lib/fatal:go_default_library", "//go/lib/log:go_default_library", "//go/lib/prom:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "@com_github_burntsushi_toml//:go_default_library", ], diff --git a/go/godispatcher/internal/config/BUILD.bazel b/go/godispatcher/internal/config/BUILD.bazel index b4c2373ea7..0fb47d71c6 100644 --- a/go/godispatcher/internal/config/BUILD.bazel +++ b/go/godispatcher/internal/config/BUILD.bazel @@ -9,10 +9,10 @@ go_library( importpath = "github.com/scionproto/scion/go/godispatcher/internal/config", visibility = ["//go/godispatcher:__subpackages__"], deps = [ - "//go/lib/common:go_default_library", "//go/lib/config:go_default_library", "//go/lib/env:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/util:go_default_library", ], diff --git a/go/godispatcher/internal/registration/BUILD.bazel b/go/godispatcher/internal/registration/BUILD.bazel index 9d3b89507c..4957c98808 100644 --- a/go/godispatcher/internal/registration/BUILD.bazel +++ b/go/godispatcher/internal/registration/BUILD.bazel @@ -16,6 +16,7 @@ go_library( deps = [ "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", ], ) diff --git a/go/godispatcher/internal/respool/BUILD.bazel b/go/godispatcher/internal/respool/BUILD.bazel index 04fc2b7195..83703f89bd 100644 --- a/go/godispatcher/internal/respool/BUILD.bazel +++ b/go/godispatcher/internal/respool/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/hpkt:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/spkt:go_default_library", ], ) diff --git a/go/godispatcher/network/BUILD.bazel b/go/godispatcher/network/BUILD.bazel index 0a4ac07016..42db93721b 100644 --- a/go/godispatcher/network/BUILD.bazel +++ b/go/godispatcher/network/BUILD.bazel @@ -25,6 +25,7 @@ go_library( "//go/lib/overlay/conn:go_default_library", "//go/lib/ringbuf:go_default_library", "//go/lib/scmp:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/spkt:go_default_library", ], diff --git a/go/integration/cert_req/BUILD.bazel b/go/integration/cert_req/BUILD.bazel index 2cd5b2f43c..ef7e6361c8 100644 --- a/go/integration/cert_req/BUILD.bazel +++ b/go/integration/cert_req/BUILD.bazel @@ -18,6 +18,7 @@ go_library( "//go/lib/log:go_default_library", "//go/lib/scrypto:go_default_library", "//go/lib/scrypto/cert:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/proto:go_default_library", ], diff --git a/go/integration/end2end/BUILD.bazel b/go/integration/end2end/BUILD.bazel index 4e1ebc020c..874b841783 100644 --- a/go/integration/end2end/BUILD.bazel +++ b/go/integration/end2end/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//go/lib/overlay:go_default_library", "//go/lib/pathmgr:go_default_library", "//go/lib/sciond:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/spath:go_default_library", diff --git a/go/lib/ctrl/seg/BUILD.bazel b/go/lib/ctrl/seg/BUILD.bazel index d546136d1d..8fd5507611 100644 --- a/go/lib/ctrl/seg/BUILD.bazel +++ b/go/lib/ctrl/seg/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/spath:go_default_library", "//go/lib/util:go_default_library", "//go/proto:go_default_library", diff --git a/go/lib/discovery/BUILD.bazel b/go/lib/discovery/BUILD.bazel index 2ba035e3e8..9fa8db7205 100644 --- a/go/lib/discovery/BUILD.bazel +++ b/go/lib/discovery/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", "@org_golang_x_net//context/ctxhttp:go_default_library", ], diff --git a/go/lib/discovery/discoverypool/BUILD.bazel b/go/lib/discovery/discoverypool/BUILD.bazel index d7f488b8a7..a97583b93c 100644 --- a/go/lib/discovery/discoverypool/BUILD.bazel +++ b/go/lib/discovery/discoverypool/BUILD.bazel @@ -9,6 +9,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/discovery:go_default_library", "//go/lib/discovery/discoveryinfo:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", ], ) diff --git a/go/lib/discovery/topofetcher/BUILD.bazel b/go/lib/discovery/topofetcher/BUILD.bazel index c5fb26b7c8..742324c1b8 100644 --- a/go/lib/discovery/topofetcher/BUILD.bazel +++ b/go/lib/discovery/topofetcher/BUILD.bazel @@ -9,6 +9,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/discovery:go_default_library", "//go/lib/discovery/discoverypool:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", ], ) diff --git a/go/lib/env/BUILD.bazel b/go/lib/env/BUILD.bazel index 24fe5bc73f..00ca7a3e26 100644 --- a/go/lib/env/BUILD.bazel +++ b/go/lib/env/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//go/lib/overlay:go_default_library", "//go/lib/sciond:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/topology:go_default_library", "//go/lib/util:go_default_library", diff --git a/go/lib/healthpool/BUILD.bazel b/go/lib/healthpool/BUILD.bazel index b2c98cb548..6d059dc140 100644 --- a/go/lib/healthpool/BUILD.bazel +++ b/go/lib/healthpool/BUILD.bazel @@ -13,6 +13,7 @@ go_library( deps = [ "//go/lib/common:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", ], ) diff --git a/go/lib/hpkt/BUILD.bazel b/go/lib/hpkt/BUILD.bazel index 4199d63722..51e3048b7f 100644 --- a/go/lib/hpkt/BUILD.bazel +++ b/go/lib/hpkt/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//go/lib/l4:go_default_library", "//go/lib/layers:go_default_library", "//go/lib/scmp:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/spath:go_default_library", "//go/lib/spkt:go_default_library", "//go/lib/util:go_default_library", diff --git a/go/lib/infra/disp/BUILD.bazel b/go/lib/infra/disp/BUILD.bazel index 78dc045a6f..eedbc3cc88 100644 --- a/go/lib/infra/disp/BUILD.bazel +++ b/go/lib/infra/disp/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/infra:go_default_library", "//go/lib/log:go_default_library", + "//go/lib/serrors:go_default_library", "//go/proto:go_default_library", ], ) @@ -28,6 +29,7 @@ go_test( deps = [ "//go/lib/common:go_default_library", "//go/lib/log:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/xtest:go_default_library", "//go/lib/xtest/p2p:go_default_library", "//go/proto:go_default_library", diff --git a/go/lib/infra/messenger/BUILD.bazel b/go/lib/infra/messenger/BUILD.bazel index a311bd30df..0a5a887308 100644 --- a/go/lib/infra/messenger/BUILD.bazel +++ b/go/lib/infra/messenger/BUILD.bazel @@ -33,6 +33,7 @@ go_library( "//go/lib/overlay:go_default_library", "//go/lib/prom:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/svc:go_default_library", "//go/lib/topology:go_default_library", diff --git a/go/lib/infra/modules/idiscovery/BUILD.bazel b/go/lib/infra/modules/idiscovery/BUILD.bazel index aa87cca07f..b2bcb4d5e9 100644 --- a/go/lib/infra/modules/idiscovery/BUILD.bazel +++ b/go/lib/infra/modules/idiscovery/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//go/lib/infra/modules/itopo:go_default_library", "//go/lib/log:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", "//go/lib/util:go_default_library", ], diff --git a/go/lib/infra/modules/itopo/BUILD.bazel b/go/lib/infra/modules/itopo/BUILD.bazel index 4fb350a3e2..86586f882a 100644 --- a/go/lib/infra/modules/itopo/BUILD.bazel +++ b/go/lib/infra/modules/itopo/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//go/lib/infra/modules/itopo/internal/metrics:go_default_library", "//go/lib/log:go_default_library", "//go/lib/periodic:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/topology:go_default_library", "//go/proto:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", diff --git a/go/lib/infra/modules/itopo/itopo.go.orig b/go/lib/infra/modules/itopo/itopo.go.orig new file mode 100644 index 0000000000..2175b877b7 --- /dev/null +++ b/go/lib/infra/modules/itopo/itopo.go.orig @@ -0,0 +1,372 @@ +// 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 itopo + +import ( + "sync" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + + "github.com/scionproto/scion/go/lib/common" + "github.com/scionproto/scion/go/lib/infra/modules/itopo/internal/metrics" + "github.com/scionproto/scion/go/lib/log" + "github.com/scionproto/scion/go/lib/serrors" + "github.com/scionproto/scion/go/lib/topology" + "github.com/scionproto/scion/go/proto" +) + +var st *state + +// Callbacks are callbacks to respond to specific topology update events. +type Callbacks struct { + // CleanDynamic is called whenever dynamic topology is dropped due to expiration. + CleanDynamic func() + // DropDynamic is called whenever dynamic topology is dropped due to static update. + DropDynamic func() + // UpdateStatic is called whenever the pointer to static topology is updated. + UpdateStatic func() +} + +// providerFunc wraps the Get call as a topology provider. +type providerFunc func() *topology.Topo + +// Provider returns a topology provider that calls Get internally. +func Provider() topology.Provider { + st.RLock() + defer st.RUnlock() + if st.topo.static == nil { + panic("static topology not found") + } + return providerFunc(Get) +} + +func (f providerFunc) Get() *topology.Topo { + return f() +} + +// Init initializes itopo with the particular validator. A topology must be +// initialized by calling SetStatic. +func Init(id string, svc proto.ServiceType, clbks Callbacks) { + if st != nil { + panic("Must not re-initialize itopo") + } + st = newState(id, svc, clbks) +} + +// Get atomically gets the pointer to the current topology. +func Get() *topology.Topo { + st.RLock() + defer st.RUnlock() + return st.topo.Get() +} + +// SetDynamic atomically sets the dynamic topology. The returned topology is a pointer +// to the currently active topology at the end of the function call. It might differ from +// the input topology. The second return value indicates whether the in-memory +// copy of the dynamic topology has been updated. +func SetDynamic(dynamic *topology.Topo) (*topology.Topo, bool, error) { + l := metrics.UpdateLabels{Type: metrics.Dynamic} + topo, updated, err := st.setDynamic(dynamic) + switch { + case err != nil: + l.Result = metrics.ErrValidate + case updated: + l.Result = metrics.Success + default: + l.Result = metrics.OkIgnored + } + incUpdateMetric(l) + return topo, updated, err +} + +// BeginSetDynamic checks whether setting the dynamic topology is permissible. The returned +// transaction provides a view on which topology would be active, if committed. +func BeginSetDynamic(dynamic *topology.Topo) (Transaction, error) { + tx, err := st.beginSetDynamic(dynamic) + if err != nil { + incUpdateMetric(metrics.UpdateLabels{Type: metrics.Dynamic, Result: metrics.ErrValidate}) + } + return tx, err +} + +// SetStatic atomically sets the static topology. Whether semi-mutable fields are +// allowed to change can be specified using semiMutAllowed. The returned +// topology is a pointer to the currently active topology at the end of the function call. +// It might differ from the input topology (same contents as existing static, +// or dynamic set and still valid). The second return value indicates whether the in-memory +// copy of the static topology has been updated. +func SetStatic(static *topology.Topo, semiMutAllowed bool) (*topology.Topo, bool, error) { + l := metrics.UpdateLabels{Type: metrics.Static} + topo, updated, err := st.setStatic(static, semiMutAllowed) + switch { + case err != nil: + l.Result = metrics.ErrValidate + case updated: + l.Result = metrics.Success + default: + l.Result = metrics.OkIgnored + } + incUpdateMetric(l) + return topo, updated, err +} + +// BeginSetStatic checks whether setting the static topology is permissible. The returned +// transaction provides a view on which topology would be active, if committed. +func BeginSetStatic(static *topology.Topo, semiMutAllowed bool) (Transaction, error) { + tx, err := st.beginSetStatic(static, semiMutAllowed) + if err != nil { + incUpdateMetric(metrics.UpdateLabels{Type: metrics.Static, Result: metrics.ErrValidate}) + } + return tx, err +} + +// Transaction allows to get a view on which topology will be active without committing +// to the topology update yet. +type Transaction struct { + // candidateTopo contains the view of what the static and dynamic topologies + // will be when the transaction is successfully committed. + candidateTopo topo + // staticAtTxStart stores a snapshot of the currently active static + // topology at transaction start. + staticAtTxStart *topology.Topo + // inputStatic stores the provided static topology. + inputStatic *topology.Topo + // inputDynamic stores the provided dynamic topology. + inputDynamic *topology.Topo +} + +// Commit commits the change. An error is returned, if the static topology changed in the meantime. +func (tx *Transaction) Commit() error { + st.Lock() + defer st.Unlock() + l := metrics.UpdateLabels{Type: metrics.Dynamic} + if tx.inputStatic != nil { + l.Type = metrics.Static + } + if tx.staticAtTxStart != st.topo.static { +<<<<<<< 219ddaa7f3728ece29edf1de726456d18c30fb43 + incUpdateMetric(l.WithResult(metrics.ErrCommit)) + return common.NewBasicError("Static topology changed in the meantime", nil) +======= + return serrors.New("Static topology changed in the meantime") +>>>>>>> Use serrors.New instead of common.NewBasicError + } + if !tx.IsUpdate() { + incUpdateMetric(l.WithResult(metrics.OkIgnored)) + return nil + } + // Do transaction for static topology updated. + if tx.inputStatic != nil { + st.updateStatic(tx.inputStatic) + incUpdateMetric(l.WithResult(metrics.Success)) + return nil + } + // Do transaction from dynamic topology update. + st.updateDynamic(tx.inputDynamic) + incUpdateMetric(l.WithResult(metrics.Success)) + return nil +} + +// Get returns the topology that will be active if the transaction is committed. +func (tx *Transaction) Get() *topology.Topo { + return tx.candidateTopo.Get() +} + +// IsUpdate indicates whether the transaction will cause an update. +func (tx *Transaction) IsUpdate() bool { + if tx.inputStatic != nil { + return tx.candidateTopo.static == tx.inputStatic + } + return tx.candidateTopo.dynamic == tx.inputDynamic +} + +// topo stores the currently active static and dynamic topologies. +type topo struct { + static *topology.Topo + dynamic *topology.Topo +} + +// Get returns the dynamic topology if it is set and has not expired. Otherwise, +// the static topology is returned. +func (t *topo) Get() *topology.Topo { + if t.dynamic != nil && t.dynamic.Active(time.Now()) { + return t.dynamic + } + return t.static +} + +// state keeps track of the active topologies and enforces update rules. +type state struct { + sync.RWMutex + topo topo + validator validator + clbks Callbacks +} + +func newState(id string, svc proto.ServiceType, clbks Callbacks) *state { + s := &state{ + validator: validatorFactory(id, svc), + clbks: clbks, + } + return s +} + +// setDynamic atomically sets the dynamic topology. +func (s *state) setDynamic(dynamic *topology.Topo) (*topology.Topo, bool, error) { + s.Lock() + defer s.Unlock() + if err := s.dynamicPreCheck(dynamic); err != nil { + return nil, false, err + } + if err := s.validator.Validate(dynamic, s.topo.static, false); err != nil { + return nil, false, err + } + if keepOld(dynamic, s.topo.dynamic) { + return s.topo.Get(), false, nil + } + s.updateDynamic(dynamic) + return s.topo.Get(), true, nil +} + +func (s *state) updateDynamic(dynamic *topology.Topo) { + s.topo.dynamic = dynamic + cl := metrics.CurrentLabels{Type: metrics.Dynamic} + metrics.Current.Active().Set(1) + metrics.Current.Timestamp(cl).Set(metrics.Timestamp(dynamic.Timestamp)) + metrics.Current.Expiry(cl).Set(metrics.Expiry(dynamic.Expiry())) +} + +func (s *state) beginSetDynamic(dynamic *topology.Topo) (Transaction, error) { + s.Lock() + defer s.Unlock() + if err := s.dynamicPreCheck(dynamic); err != nil { + return Transaction{}, err + } + if err := s.validator.Validate(dynamic, s.topo.static, false); err != nil { + return Transaction{}, err + } + tx := Transaction{ + candidateTopo: s.topo, + staticAtTxStart: s.topo.static, + inputDynamic: dynamic, + } + if !keepOld(tx.inputDynamic, tx.candidateTopo.dynamic) { + // The dynamic topology is only updated if it differs and is valid longer. + tx.candidateTopo.dynamic = dynamic + } + return tx, nil +} + +func (s *state) dynamicPreCheck(dynamic *topology.Topo) error { + if dynamic == nil { + return serrors.New("Provided topology must not be nil") + } + if s.topo.static == nil { + return serrors.New("Static topology must be set") + } + now := time.Now() + if !dynamic.Active(now) { + return common.NewBasicError("Dynamic topology must be active", nil, + "ts", dynamic.Timestamp, "now", now, "expiry", dynamic.Expiry()) + } + return nil +} + +// setStatic atomically sets the static topology. +func (s *state) setStatic(static *topology.Topo, allowed bool) (*topology.Topo, bool, error) { + s.Lock() + defer s.Unlock() + if err := s.validator.Validate(static, s.topo.static, allowed); err != nil { + return nil, false, err + } + // Only update static topology if the new one is different or valid for longer. + if keepOld(static, s.topo.static) { + return s.topo.Get(), false, nil + } + s.updateStatic(static) + return s.topo.Get(), true, nil +} + +func (s *state) beginSetStatic(static *topology.Topo, allowed bool) (Transaction, error) { + s.Lock() + defer s.Unlock() + if err := s.validator.Validate(static, s.topo.static, allowed); err != nil { + return Transaction{}, err + } + tx := Transaction{ + candidateTopo: s.topo, + staticAtTxStart: s.topo.static, + inputStatic: static, + } + if keepOld(tx.inputStatic, tx.staticAtTxStart) { + return tx, nil + } + // Drop dynamic from candidate topo if it will be dropped when committing the transaction. + if s.validator.MustDropDynamic(tx.inputStatic, tx.staticAtTxStart) { + tx.candidateTopo.dynamic = nil + } + tx.candidateTopo.static = static + return tx, nil +} + +// updateStatic updates the static topology, if necessary, and calls the corresponding callbacks. +func (s *state) updateStatic(static *topology.Topo) { + // Drop dynamic topology if necessary. + if s.validator.MustDropDynamic(static, s.topo.static) && s.topo.dynamic != nil { + s.topo.dynamic = nil + call(s.clbks.DropDynamic) + metrics.Current.Active().Set(0) + } + s.topo.static = static + call(s.clbks.UpdateStatic) + cl := metrics.CurrentLabels{Type: metrics.Static} + metrics.Current.Timestamp(cl).Set(metrics.Timestamp(static.Timestamp)) + metrics.Current.Expiry(cl).Set(metrics.Expiry(static.Expiry())) +} + +func keepOld(newTopo, oldTopo *topology.Topo) bool { + return topoEq(newTopo, oldTopo) && !expiresLater(newTopo, oldTopo) +} + +func topoEq(newTopo, oldTopo *topology.Topo) bool { + return cmp.Equal(newTopo, oldTopo, cmpopts.IgnoreFields( + topology.Topo{}, "Timestamp", "TimestampHuman", "TTL")) +} + +func expiresLater(newTopo, oldTopo *topology.Topo) bool { + if oldTopo == nil { + return true + } + newExpiry := newTopo.Expiry() + oldExpiry := oldTopo.Expiry() + return !oldExpiry.IsZero() && (newExpiry.IsZero() || newExpiry.After(oldExpiry)) +} + +func call(clbk func()) { + if clbk != nil { + go func() { + defer log.LogPanicAndExit() + clbk() + }() + } +} + +func incUpdateMetric(l metrics.UpdateLabels) { + metrics.Updates.Last(l).SetToCurrentTime() + metrics.Updates.Total(l).Inc() +} diff --git a/go/lib/infra/modules/seghandler/BUILD.bazel b/go/lib/infra/modules/seghandler/BUILD.bazel index c5e0793c8c..7169e340ce 100644 --- a/go/lib/infra/modules/seghandler/BUILD.bazel +++ b/go/lib/infra/modules/seghandler/BUILD.bazel @@ -42,6 +42,7 @@ go_test( "//go/lib/mocks/net/mock_net:go_default_library", "//go/lib/pathdb:go_default_library", "//go/lib/pathdb/mock_pathdb:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/xtest:go_default_library", "//go/lib/xtest/graph:go_default_library", "//go/proto:go_default_library", diff --git a/go/lib/infra/modules/trust/BUILD.bazel b/go/lib/infra/modules/trust/BUILD.bazel index 8a6e6d461a..51c768e664 100644 --- a/go/lib/infra/modules/trust/BUILD.bazel +++ b/go/lib/infra/modules/trust/BUILD.bazel @@ -49,7 +49,6 @@ go_test( embed = [":go_default_library"], deps = [ "//go/lib/addr:go_default_library", - "//go/lib/common:go_default_library", "//go/lib/ctrl:go_default_library", "//go/lib/ctrl/cert_mgmt:go_default_library", "//go/lib/infra:go_default_library", @@ -61,6 +60,7 @@ go_test( "//go/lib/scrypto:go_default_library", "//go/lib/scrypto/cert:go_default_library", "//go/lib/scrypto/trc:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/topology:go_default_library", "//go/lib/topology/topotestutil:go_default_library", diff --git a/go/lib/infra/modules/trust/trustdb/trustdbsqlite/BUILD.bazel b/go/lib/infra/modules/trust/trustdb/trustdbsqlite/BUILD.bazel index 9de9d4ce80..0427097b5d 100644 --- a/go/lib/infra/modules/trust/trustdb/trustdbsqlite/BUILD.bazel +++ b/go/lib/infra/modules/trust/trustdb/trustdbsqlite/BUILD.bazel @@ -14,6 +14,7 @@ go_library( "//go/lib/scrypto:go_default_library", "//go/lib/scrypto/cert:go_default_library", "//go/lib/scrypto/trc:go_default_library", + "//go/lib/serrors:go_default_library", "@com_github_mattn_go_sqlite3//:go_default_library", ], ) diff --git a/go/lib/infra/rpc/BUILD.bazel b/go/lib/infra/rpc/BUILD.bazel index f90a146442..807c89e9f2 100644 --- a/go/lib/infra/rpc/BUILD.bazel +++ b/go/lib/infra/rpc/BUILD.bazel @@ -9,8 +9,8 @@ go_library( importpath = "github.com/scionproto/scion/go/lib/infra/rpc", visibility = ["//visibility:public"], deps = [ - "//go/lib/common:go_default_library", "//go/lib/log:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/proto:go_default_library", "@com_github_lucas_clemente_quic_go//:go_default_library", diff --git a/go/lib/layers/BUILD.bazel b/go/lib/layers/BUILD.bazel index e5243dc2ad..35870e990f 100644 --- a/go/lib/layers/BUILD.bazel +++ b/go/lib/layers/BUILD.bazel @@ -11,6 +11,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "@com_github_google_gopacket//:go_default_library", "@com_github_google_gopacket//layers:go_default_library", diff --git a/go/lib/log/BUILD.bazel b/go/lib/log/BUILD.bazel index 1016e920af..c16f6c7be7 100644 --- a/go/lib/log/BUILD.bazel +++ b/go/lib/log/BUILD.bazel @@ -13,6 +13,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", "@com_github_inconshreveable_log15//:go_default_library", "@com_github_inconshreveable_log15//ext:go_default_library", #"@com_github_inconshreveable_log15_ext//:go_default_library", diff --git a/go/lib/overlay/BUILD.bazel b/go/lib/overlay/BUILD.bazel index ceade32c5c..2bdeec305a 100644 --- a/go/lib/overlay/BUILD.bazel +++ b/go/lib/overlay/BUILD.bazel @@ -11,5 +11,6 @@ go_library( deps = [ "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", ], ) diff --git a/go/lib/overlay/conn/BUILD.bazel b/go/lib/overlay/conn/BUILD.bazel index f8d48af29c..7b9ca2c0f5 100644 --- a/go/lib/overlay/conn/BUILD.bazel +++ b/go/lib/overlay/conn/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/log:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/sockctrl:go_default_library", "@org_golang_x_net//ipv4:go_default_library", "@org_golang_x_net//ipv6:go_default_library", diff --git a/go/lib/pathdb/sqlite/BUILD.bazel b/go/lib/pathdb/sqlite/BUILD.bazel index d12b618729..f8ce4b7a2c 100644 --- a/go/lib/pathdb/sqlite/BUILD.bazel +++ b/go/lib/pathdb/sqlite/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//go/lib/log:go_default_library", "//go/lib/pathdb:go_default_library", "//go/lib/pathdb/query:go_default_library", + "//go/lib/serrors:go_default_library", "//go/proto:go_default_library", "@com_github_mattn_go_sqlite3//:go_default_library", ], diff --git a/go/lib/pathpol/BUILD.bazel b/go/lib/pathpol/BUILD.bazel index 8f21aeae8b..cb5e759b45 100644 --- a/go/lib/pathpol/BUILD.bazel +++ b/go/lib/pathpol/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/log:go_default_library", "//go/lib/pathpol/sequence:go_default_library", + "//go/lib/serrors:go_default_library", "@com_github_antlr_antlr4//runtime/Go/antlr:go_default_library", ], ) diff --git a/go/lib/pathstorage/BUILD.bazel b/go/lib/pathstorage/BUILD.bazel index e7c0f728f6..325732cfa1 100644 --- a/go/lib/pathstorage/BUILD.bazel +++ b/go/lib/pathstorage/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//go/lib/pathdb/sqlite:go_default_library", "//go/lib/revcache:go_default_library", "//go/lib/revcache/memrevcache:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", ], ) diff --git a/go/lib/pktcls/BUILD.bazel b/go/lib/pktcls/BUILD.bazel index ec38b2eb20..780cb29e46 100644 --- a/go/lib/pktcls/BUILD.bazel +++ b/go/lib/pktcls/BUILD.bazel @@ -14,6 +14,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", "@com_github_google_gopacket//:go_default_library", "@com_github_google_gopacket//layers:go_default_library", ], diff --git a/go/lib/revcache/BUILD.bazel b/go/lib/revcache/BUILD.bazel index ef32a9cd82..d7a109c831 100644 --- a/go/lib/revcache/BUILD.bazel +++ b/go/lib/revcache/BUILD.bazel @@ -29,6 +29,7 @@ go_test( "//go/lib/ctrl/seg:go_default_library", "//go/lib/infra:go_default_library", "//go/lib/revcache/mock_revcache:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "//go/lib/xtest:go_default_library", "//go/lib/xtest/graph:go_default_library", diff --git a/go/lib/sciond/pathprobe/BUILD.bazel b/go/lib/sciond/pathprobe/BUILD.bazel index 4a3d46edd0..a03da74669 100644 --- a/go/lib/sciond/pathprobe/BUILD.bazel +++ b/go/lib/sciond/pathprobe/BUILD.bazel @@ -11,6 +11,7 @@ go_library( "//go/lib/log:go_default_library", "//go/lib/sciond:go_default_library", "//go/lib/scmp:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/spath:go_default_library", diff --git a/go/lib/scmp/BUILD.bazel b/go/lib/scmp/BUILD.bazel index 0cc05ca1b4..9d9d7a2d98 100644 --- a/go/lib/scmp/BUILD.bazel +++ b/go/lib/scmp/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/ctrl/path_mgmt:go_default_library", "//go/lib/l4:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "@in_gopkg_restruct_v1//:go_default_library", ], diff --git a/go/lib/scrypto/BUILD.bazel b/go/lib/scrypto/BUILD.bazel index c2c059e9ab..edafa74da2 100644 --- a/go/lib/scrypto/BUILD.bazel +++ b/go/lib/scrypto/BUILD.bazel @@ -15,6 +15,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "@com_github_dchest_cmac//:go_default_library", "@org_golang_x_crypto//ed25519:go_default_library", diff --git a/go/lib/snet/BUILD.bazel b/go/lib/snet/BUILD.bazel index 9a16248cd7..0372322a29 100644 --- a/go/lib/snet/BUILD.bazel +++ b/go/lib/snet/BUILD.bazel @@ -26,6 +26,7 @@ go_library( "//go/lib/pathmgr:go_default_library", "//go/lib/sciond:go_default_library", "//go/lib/scmp:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet/internal/ctxmonitor:go_default_library", "//go/lib/snet/internal/pathsource:go_default_library", "//go/lib/sock/reliable:go_default_library", diff --git a/go/lib/snet/squic/BUILD.bazel b/go/lib/snet/squic/BUILD.bazel index 893856705c..c45f3bb8c2 100644 --- a/go/lib/snet/squic/BUILD.bazel +++ b/go/lib/snet/squic/BUILD.bazel @@ -8,6 +8,7 @@ go_library( deps = [ "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "@com_github_lucas_clemente_quic_go//:go_default_library", ], diff --git a/go/lib/sock/reliable/BUILD.bazel b/go/lib/sock/reliable/BUILD.bazel index ad4b3c4bc1..3933319f55 100644 --- a/go/lib/sock/reliable/BUILD.bazel +++ b/go/lib/sock/reliable/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", ], ) diff --git a/go/lib/sock/reliable/reconnect/BUILD.bazel b/go/lib/sock/reliable/reconnect/BUILD.bazel index 57e1c97ef0..14d28cf838 100644 --- a/go/lib/sock/reliable/reconnect/BUILD.bazel +++ b/go/lib/sock/reliable/reconnect/BUILD.bazel @@ -38,6 +38,7 @@ go_test( "//go/lib/log:go_default_library", "//go/lib/mocks/net/mock_net:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/sock/reliable/mock_reliable:go_default_library", "//go/lib/sock/reliable/reconnect/mock_reconnect:go_default_library", diff --git a/go/lib/svc/BUILD.bazel b/go/lib/svc/BUILD.bazel index c683518960..fdac246642 100644 --- a/go/lib/svc/BUILD.bazel +++ b/go/lib/svc/BUILD.bazel @@ -36,6 +36,7 @@ go_test( "//go/lib/ctrl:go_default_library", "//go/lib/l4:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/snet/mock_snet:go_default_library", "//go/lib/spath:go_default_library", diff --git a/go/lib/topology/BUILD.bazel b/go/lib/topology/BUILD.bazel index 2400b1a1d2..8d8074d474 100644 --- a/go/lib/topology/BUILD.bazel +++ b/go/lib/topology/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", "//go/lib/overlay:go_default_library", + "//go/lib/serrors:go_default_library", "//go/proto:go_default_library", ], ) diff --git a/go/lib/truststorage/BUILD.bazel b/go/lib/truststorage/BUILD.bazel index f59dcccc7b..788a653478 100644 --- a/go/lib/truststorage/BUILD.bazel +++ b/go/lib/truststorage/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//go/lib/infra/modules/trust/trustdb:go_default_library", "//go/lib/infra/modules/trust/trustdb/trustdbsqlite:go_default_library", "//go/lib/log:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", ], ) diff --git a/go/path_srv/internal/config/BUILD.bazel b/go/path_srv/internal/config/BUILD.bazel index cc6a2d2594..2413fd7505 100644 --- a/go/path_srv/internal/config/BUILD.bazel +++ b/go/path_srv/internal/config/BUILD.bazel @@ -9,11 +9,11 @@ go_library( importpath = "github.com/scionproto/scion/go/path_srv/internal/config", visibility = ["//go/path_srv:__subpackages__"], deps = [ - "//go/lib/common:go_default_library", "//go/lib/config:go_default_library", "//go/lib/env:go_default_library", "//go/lib/infra/modules/idiscovery:go_default_library", "//go/lib/pathstorage:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/truststorage:go_default_library", "//go/lib/util:go_default_library", ], diff --git a/go/path_srv/internal/handlers/BUILD.bazel b/go/path_srv/internal/handlers/BUILD.bazel index 8e1dfff672..7d9566ccf3 100644 --- a/go/path_srv/internal/handlers/BUILD.bazel +++ b/go/path_srv/internal/handlers/BUILD.bazel @@ -48,6 +48,7 @@ go_test( "//go/lib/revcache:go_default_library", "//go/lib/revcache/memrevcache:go_default_library", "//go/lib/revcache/mock_revcache:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/xtest:go_default_library", "//go/lib/xtest/graph:go_default_library", "@com_github_golang_mock//gomock:go_default_library", diff --git a/go/path_srv/internal/segreq/BUILD.bazel b/go/path_srv/internal/segreq/BUILD.bazel index 3cc5a6ee5e..8828e43fe0 100644 --- a/go/path_srv/internal/segreq/BUILD.bazel +++ b/go/path_srv/internal/segreq/BUILD.bazel @@ -25,6 +25,7 @@ go_library( "//go/lib/pathdb:go_default_library", "//go/lib/pathdb/query:go_default_library", "//go/lib/revcache:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet/addrutil:go_default_library", "//go/lib/topology:go_default_library", "//go/path_srv/internal/handlers:go_default_library", diff --git a/go/path_srv/internal/segsyncer/BUILD.bazel b/go/path_srv/internal/segsyncer/BUILD.bazel index 2a428670ea..ecc025b1dd 100644 --- a/go/path_srv/internal/segsyncer/BUILD.bazel +++ b/go/path_srv/internal/segsyncer/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//go/lib/pathdb/query:go_default_library", "//go/lib/periodic:go_default_library", "//go/lib/revcache:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet/addrutil:go_default_library", "//go/lib/topology:go_default_library", "//go/path_srv/internal/handlers:go_default_library", diff --git a/go/protobuf/BUILD.bazel b/go/protobuf/BUILD.bazel new file mode 100644 index 0000000000..fe9a5b973d --- /dev/null +++ b/go/protobuf/BUILD.bazel @@ -0,0 +1,16 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "common.pb.go", + "conf_agent.pb.go", + "sig_mgmt.pb.go", + ], + importpath = "github.com/scionproto/scion/go/protobuf", + visibility = ["//visibility:public"], + deps = [ + "@com_github_golang_protobuf//proto:go_default_library", + "@org_golang_google_grpc//:go_default_library", + ], +) diff --git a/go/sciond/internal/config/BUILD.bazel b/go/sciond/internal/config/BUILD.bazel index fc5130ac74..95d19c9e3f 100644 --- a/go/sciond/internal/config/BUILD.bazel +++ b/go/sciond/internal/config/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//go/lib/infra/modules/idiscovery:go_default_library", "//go/lib/pathstorage:go_default_library", "//go/lib/sciond:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/truststorage:go_default_library", "//go/lib/util:go_default_library", diff --git a/go/sciond/internal/fetcher/BUILD.bazel b/go/sciond/internal/fetcher/BUILD.bazel index eb196ad3f4..8e41b79408 100644 --- a/go/sciond/internal/fetcher/BUILD.bazel +++ b/go/sciond/internal/fetcher/BUILD.bazel @@ -23,6 +23,7 @@ go_library( "//go/lib/pathpol:go_default_library", "//go/lib/revcache:go_default_library", "//go/lib/sciond:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/spath:go_default_library", "//go/lib/topology:go_default_library", diff --git a/go/sciond/internal/servers/BUILD.bazel b/go/sciond/internal/servers/BUILD.bazel index cbdaef5be1..ad5673cc80 100644 --- a/go/sciond/internal/servers/BUILD.bazel +++ b/go/sciond/internal/servers/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//go/lib/log:go_default_library", "//go/lib/revcache:go_default_library", "//go/lib/sciond:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/topology:go_default_library", "//go/lib/tracing:go_default_library", diff --git a/go/sig/BUILD.bazel b/go/sig/BUILD.bazel index e96b8af424..f23dde1a1e 100644 --- a/go/sig/BUILD.bazel +++ b/go/sig/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/lib/fatal:go_default_library", "//go/lib/log:go_default_library", "//go/lib/prom:go_default_library", + "//go/lib/serrors:go_default_library", "//go/sig/base:go_default_library", "//go/sig/config:go_default_library", "//go/sig/disp:go_default_library", diff --git a/go/sig/internal/sigconfig/BUILD.bazel b/go/sig/internal/sigconfig/BUILD.bazel index 800afa33af..3989b87c1d 100644 --- a/go/sig/internal/sigconfig/BUILD.bazel +++ b/go/sig/internal/sigconfig/BUILD.bazel @@ -10,9 +10,9 @@ go_library( visibility = ["//go/sig:__subpackages__"], deps = [ "//go/lib/addr:go_default_library", - "//go/lib/common:go_default_library", "//go/lib/config:go_default_library", "//go/lib/env:go_default_library", + "//go/lib/serrors:go_default_library", ], ) diff --git a/go/tools/scion-pki/internal/conf/BUILD.bazel b/go/tools/scion-pki/internal/conf/BUILD.bazel index 85ac391ac1..aefb5627fb 100644 --- a/go/tools/scion-pki/internal/conf/BUILD.bazel +++ b/go/tools/scion-pki/internal/conf/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/lib/addr:go_default_library", "//go/lib/common:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "//go/tools/scion-pki/internal/pkicmn:go_default_library", "@com_github_go_ini_ini//:go_default_library", diff --git a/go/tools/scion-pki/internal/keys/BUILD.bazel b/go/tools/scion-pki/internal/keys/BUILD.bazel index 6b5014123b..087967902f 100644 --- a/go/tools/scion-pki/internal/keys/BUILD.bazel +++ b/go/tools/scion-pki/internal/keys/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/keyconf:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/tools/scion-pki/internal/conf:go_default_library", "//go/tools/scion-pki/internal/pkicmn:go_default_library", "@com_github_spf13_cobra//:go_default_library", diff --git a/go/tools/scion-pki/internal/v2/keys/BUILD.bazel b/go/tools/scion-pki/internal/v2/keys/BUILD.bazel index e71a2866a9..cfe07180e8 100644 --- a/go/tools/scion-pki/internal/v2/keys/BUILD.bazel +++ b/go/tools/scion-pki/internal/v2/keys/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/lib/common:go_default_library", "//go/lib/keyconf:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/tools/scion-pki/internal/pkicmn:go_default_library", "//go/tools/scion-pki/internal/v2/conf:go_default_library", "@com_github_spf13_cobra//:go_default_library", diff --git a/go/tools/scion-pki/internal/v2/trcs/BUILD.bazel b/go/tools/scion-pki/internal/v2/trcs/BUILD.bazel index bca8c3e9d8..494d8c4330 100644 --- a/go/tools/scion-pki/internal/v2/trcs/BUILD.bazel +++ b/go/tools/scion-pki/internal/v2/trcs/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//go/lib/keyconf:go_default_library", "//go/lib/scrypto:go_default_library", "//go/lib/scrypto/trc/v2:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/util:go_default_library", "//go/tools/scion-pki/internal/pkicmn:go_default_library", "//go/tools/scion-pki/internal/v2/conf:go_default_library", diff --git a/go/tools/scmp/cmn/BUILD.bazel b/go/tools/scmp/cmn/BUILD.bazel index 637bca494f..c9e221850c 100644 --- a/go/tools/scmp/cmn/BUILD.bazel +++ b/go/tools/scmp/cmn/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//go/lib/sciond:go_default_library", "//go/lib/scmp:go_default_library", "//go/lib/scrypto:go_default_library", + "//go/lib/serrors:go_default_library", "//go/lib/snet:go_default_library", "//go/lib/sock/reliable:go_default_library", "//go/lib/spkt:go_default_library", From c8f8d18f1459735fc31b58c951d3cef90ab0a564 Mon Sep 17 00:00:00 2001 From: Lukas Vogel <lukedirtwalker@gmail.com> Date: Mon, 7 Oct 2019 09:44:25 +0200 Subject: [PATCH 3/4] fix lint & test --- go/lib/infra/modules/itopo/itopo.go.orig | 372 ----------------------- go/proto/cert_mgmt.capnp.go | 1 - go/proto/ctrl_pld.capnp.go | 1 - go/proto/drkey_mgmt.capnp.go | 1 - go/proto/path_mgmt.capnp.go | 1 - go/proto/sciond.capnp.go | 1 - go/proto/sig.capnp.go | 1 - go/protobuf/BUILD.bazel | 16 - 8 files changed, 394 deletions(-) delete mode 100644 go/lib/infra/modules/itopo/itopo.go.orig delete mode 100644 go/protobuf/BUILD.bazel diff --git a/go/lib/infra/modules/itopo/itopo.go.orig b/go/lib/infra/modules/itopo/itopo.go.orig deleted file mode 100644 index 2175b877b7..0000000000 --- a/go/lib/infra/modules/itopo/itopo.go.orig +++ /dev/null @@ -1,372 +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 itopo - -import ( - "sync" - "time" - - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" - - "github.com/scionproto/scion/go/lib/common" - "github.com/scionproto/scion/go/lib/infra/modules/itopo/internal/metrics" - "github.com/scionproto/scion/go/lib/log" - "github.com/scionproto/scion/go/lib/serrors" - "github.com/scionproto/scion/go/lib/topology" - "github.com/scionproto/scion/go/proto" -) - -var st *state - -// Callbacks are callbacks to respond to specific topology update events. -type Callbacks struct { - // CleanDynamic is called whenever dynamic topology is dropped due to expiration. - CleanDynamic func() - // DropDynamic is called whenever dynamic topology is dropped due to static update. - DropDynamic func() - // UpdateStatic is called whenever the pointer to static topology is updated. - UpdateStatic func() -} - -// providerFunc wraps the Get call as a topology provider. -type providerFunc func() *topology.Topo - -// Provider returns a topology provider that calls Get internally. -func Provider() topology.Provider { - st.RLock() - defer st.RUnlock() - if st.topo.static == nil { - panic("static topology not found") - } - return providerFunc(Get) -} - -func (f providerFunc) Get() *topology.Topo { - return f() -} - -// Init initializes itopo with the particular validator. A topology must be -// initialized by calling SetStatic. -func Init(id string, svc proto.ServiceType, clbks Callbacks) { - if st != nil { - panic("Must not re-initialize itopo") - } - st = newState(id, svc, clbks) -} - -// Get atomically gets the pointer to the current topology. -func Get() *topology.Topo { - st.RLock() - defer st.RUnlock() - return st.topo.Get() -} - -// SetDynamic atomically sets the dynamic topology. The returned topology is a pointer -// to the currently active topology at the end of the function call. It might differ from -// the input topology. The second return value indicates whether the in-memory -// copy of the dynamic topology has been updated. -func SetDynamic(dynamic *topology.Topo) (*topology.Topo, bool, error) { - l := metrics.UpdateLabels{Type: metrics.Dynamic} - topo, updated, err := st.setDynamic(dynamic) - switch { - case err != nil: - l.Result = metrics.ErrValidate - case updated: - l.Result = metrics.Success - default: - l.Result = metrics.OkIgnored - } - incUpdateMetric(l) - return topo, updated, err -} - -// BeginSetDynamic checks whether setting the dynamic topology is permissible. The returned -// transaction provides a view on which topology would be active, if committed. -func BeginSetDynamic(dynamic *topology.Topo) (Transaction, error) { - tx, err := st.beginSetDynamic(dynamic) - if err != nil { - incUpdateMetric(metrics.UpdateLabels{Type: metrics.Dynamic, Result: metrics.ErrValidate}) - } - return tx, err -} - -// SetStatic atomically sets the static topology. Whether semi-mutable fields are -// allowed to change can be specified using semiMutAllowed. The returned -// topology is a pointer to the currently active topology at the end of the function call. -// It might differ from the input topology (same contents as existing static, -// or dynamic set and still valid). The second return value indicates whether the in-memory -// copy of the static topology has been updated. -func SetStatic(static *topology.Topo, semiMutAllowed bool) (*topology.Topo, bool, error) { - l := metrics.UpdateLabels{Type: metrics.Static} - topo, updated, err := st.setStatic(static, semiMutAllowed) - switch { - case err != nil: - l.Result = metrics.ErrValidate - case updated: - l.Result = metrics.Success - default: - l.Result = metrics.OkIgnored - } - incUpdateMetric(l) - return topo, updated, err -} - -// BeginSetStatic checks whether setting the static topology is permissible. The returned -// transaction provides a view on which topology would be active, if committed. -func BeginSetStatic(static *topology.Topo, semiMutAllowed bool) (Transaction, error) { - tx, err := st.beginSetStatic(static, semiMutAllowed) - if err != nil { - incUpdateMetric(metrics.UpdateLabels{Type: metrics.Static, Result: metrics.ErrValidate}) - } - return tx, err -} - -// Transaction allows to get a view on which topology will be active without committing -// to the topology update yet. -type Transaction struct { - // candidateTopo contains the view of what the static and dynamic topologies - // will be when the transaction is successfully committed. - candidateTopo topo - // staticAtTxStart stores a snapshot of the currently active static - // topology at transaction start. - staticAtTxStart *topology.Topo - // inputStatic stores the provided static topology. - inputStatic *topology.Topo - // inputDynamic stores the provided dynamic topology. - inputDynamic *topology.Topo -} - -// Commit commits the change. An error is returned, if the static topology changed in the meantime. -func (tx *Transaction) Commit() error { - st.Lock() - defer st.Unlock() - l := metrics.UpdateLabels{Type: metrics.Dynamic} - if tx.inputStatic != nil { - l.Type = metrics.Static - } - if tx.staticAtTxStart != st.topo.static { -<<<<<<< 219ddaa7f3728ece29edf1de726456d18c30fb43 - incUpdateMetric(l.WithResult(metrics.ErrCommit)) - return common.NewBasicError("Static topology changed in the meantime", nil) -======= - return serrors.New("Static topology changed in the meantime") ->>>>>>> Use serrors.New instead of common.NewBasicError - } - if !tx.IsUpdate() { - incUpdateMetric(l.WithResult(metrics.OkIgnored)) - return nil - } - // Do transaction for static topology updated. - if tx.inputStatic != nil { - st.updateStatic(tx.inputStatic) - incUpdateMetric(l.WithResult(metrics.Success)) - return nil - } - // Do transaction from dynamic topology update. - st.updateDynamic(tx.inputDynamic) - incUpdateMetric(l.WithResult(metrics.Success)) - return nil -} - -// Get returns the topology that will be active if the transaction is committed. -func (tx *Transaction) Get() *topology.Topo { - return tx.candidateTopo.Get() -} - -// IsUpdate indicates whether the transaction will cause an update. -func (tx *Transaction) IsUpdate() bool { - if tx.inputStatic != nil { - return tx.candidateTopo.static == tx.inputStatic - } - return tx.candidateTopo.dynamic == tx.inputDynamic -} - -// topo stores the currently active static and dynamic topologies. -type topo struct { - static *topology.Topo - dynamic *topology.Topo -} - -// Get returns the dynamic topology if it is set and has not expired. Otherwise, -// the static topology is returned. -func (t *topo) Get() *topology.Topo { - if t.dynamic != nil && t.dynamic.Active(time.Now()) { - return t.dynamic - } - return t.static -} - -// state keeps track of the active topologies and enforces update rules. -type state struct { - sync.RWMutex - topo topo - validator validator - clbks Callbacks -} - -func newState(id string, svc proto.ServiceType, clbks Callbacks) *state { - s := &state{ - validator: validatorFactory(id, svc), - clbks: clbks, - } - return s -} - -// setDynamic atomically sets the dynamic topology. -func (s *state) setDynamic(dynamic *topology.Topo) (*topology.Topo, bool, error) { - s.Lock() - defer s.Unlock() - if err := s.dynamicPreCheck(dynamic); err != nil { - return nil, false, err - } - if err := s.validator.Validate(dynamic, s.topo.static, false); err != nil { - return nil, false, err - } - if keepOld(dynamic, s.topo.dynamic) { - return s.topo.Get(), false, nil - } - s.updateDynamic(dynamic) - return s.topo.Get(), true, nil -} - -func (s *state) updateDynamic(dynamic *topology.Topo) { - s.topo.dynamic = dynamic - cl := metrics.CurrentLabels{Type: metrics.Dynamic} - metrics.Current.Active().Set(1) - metrics.Current.Timestamp(cl).Set(metrics.Timestamp(dynamic.Timestamp)) - metrics.Current.Expiry(cl).Set(metrics.Expiry(dynamic.Expiry())) -} - -func (s *state) beginSetDynamic(dynamic *topology.Topo) (Transaction, error) { - s.Lock() - defer s.Unlock() - if err := s.dynamicPreCheck(dynamic); err != nil { - return Transaction{}, err - } - if err := s.validator.Validate(dynamic, s.topo.static, false); err != nil { - return Transaction{}, err - } - tx := Transaction{ - candidateTopo: s.topo, - staticAtTxStart: s.topo.static, - inputDynamic: dynamic, - } - if !keepOld(tx.inputDynamic, tx.candidateTopo.dynamic) { - // The dynamic topology is only updated if it differs and is valid longer. - tx.candidateTopo.dynamic = dynamic - } - return tx, nil -} - -func (s *state) dynamicPreCheck(dynamic *topology.Topo) error { - if dynamic == nil { - return serrors.New("Provided topology must not be nil") - } - if s.topo.static == nil { - return serrors.New("Static topology must be set") - } - now := time.Now() - if !dynamic.Active(now) { - return common.NewBasicError("Dynamic topology must be active", nil, - "ts", dynamic.Timestamp, "now", now, "expiry", dynamic.Expiry()) - } - return nil -} - -// setStatic atomically sets the static topology. -func (s *state) setStatic(static *topology.Topo, allowed bool) (*topology.Topo, bool, error) { - s.Lock() - defer s.Unlock() - if err := s.validator.Validate(static, s.topo.static, allowed); err != nil { - return nil, false, err - } - // Only update static topology if the new one is different or valid for longer. - if keepOld(static, s.topo.static) { - return s.topo.Get(), false, nil - } - s.updateStatic(static) - return s.topo.Get(), true, nil -} - -func (s *state) beginSetStatic(static *topology.Topo, allowed bool) (Transaction, error) { - s.Lock() - defer s.Unlock() - if err := s.validator.Validate(static, s.topo.static, allowed); err != nil { - return Transaction{}, err - } - tx := Transaction{ - candidateTopo: s.topo, - staticAtTxStart: s.topo.static, - inputStatic: static, - } - if keepOld(tx.inputStatic, tx.staticAtTxStart) { - return tx, nil - } - // Drop dynamic from candidate topo if it will be dropped when committing the transaction. - if s.validator.MustDropDynamic(tx.inputStatic, tx.staticAtTxStart) { - tx.candidateTopo.dynamic = nil - } - tx.candidateTopo.static = static - return tx, nil -} - -// updateStatic updates the static topology, if necessary, and calls the corresponding callbacks. -func (s *state) updateStatic(static *topology.Topo) { - // Drop dynamic topology if necessary. - if s.validator.MustDropDynamic(static, s.topo.static) && s.topo.dynamic != nil { - s.topo.dynamic = nil - call(s.clbks.DropDynamic) - metrics.Current.Active().Set(0) - } - s.topo.static = static - call(s.clbks.UpdateStatic) - cl := metrics.CurrentLabels{Type: metrics.Static} - metrics.Current.Timestamp(cl).Set(metrics.Timestamp(static.Timestamp)) - metrics.Current.Expiry(cl).Set(metrics.Expiry(static.Expiry())) -} - -func keepOld(newTopo, oldTopo *topology.Topo) bool { - return topoEq(newTopo, oldTopo) && !expiresLater(newTopo, oldTopo) -} - -func topoEq(newTopo, oldTopo *topology.Topo) bool { - return cmp.Equal(newTopo, oldTopo, cmpopts.IgnoreFields( - topology.Topo{}, "Timestamp", "TimestampHuman", "TTL")) -} - -func expiresLater(newTopo, oldTopo *topology.Topo) bool { - if oldTopo == nil { - return true - } - newExpiry := newTopo.Expiry() - oldExpiry := oldTopo.Expiry() - return !oldExpiry.IsZero() && (newExpiry.IsZero() || newExpiry.After(oldExpiry)) -} - -func call(clbk func()) { - if clbk != nil { - go func() { - defer log.LogPanicAndExit() - clbk() - }() - } -} - -func incUpdateMetric(l metrics.UpdateLabels) { - metrics.Updates.Last(l).SetToCurrentTime() - metrics.Updates.Total(l).Inc() -} diff --git a/go/proto/cert_mgmt.capnp.go b/go/proto/cert_mgmt.capnp.go index 54ffa59820..0097da823f 100644 --- a/go/proto/cert_mgmt.capnp.go +++ b/go/proto/cert_mgmt.capnp.go @@ -4,7 +4,6 @@ package proto import ( strconv "strconv" - capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/ctrl_pld.capnp.go b/go/proto/ctrl_pld.capnp.go index 3444ba1427..3bb43e5811 100644 --- a/go/proto/ctrl_pld.capnp.go +++ b/go/proto/ctrl_pld.capnp.go @@ -4,7 +4,6 @@ package proto import ( strconv "strconv" - capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/drkey_mgmt.capnp.go b/go/proto/drkey_mgmt.capnp.go index c67722da46..344162dff8 100644 --- a/go/proto/drkey_mgmt.capnp.go +++ b/go/proto/drkey_mgmt.capnp.go @@ -4,7 +4,6 @@ package proto import ( strconv "strconv" - capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/path_mgmt.capnp.go b/go/proto/path_mgmt.capnp.go index 15de82ba81..15446c469f 100644 --- a/go/proto/path_mgmt.capnp.go +++ b/go/proto/path_mgmt.capnp.go @@ -4,7 +4,6 @@ package proto import ( strconv "strconv" - capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/sciond.capnp.go b/go/proto/sciond.capnp.go index 9776830bd9..3c18142e3c 100644 --- a/go/proto/sciond.capnp.go +++ b/go/proto/sciond.capnp.go @@ -4,7 +4,6 @@ package proto import ( strconv "strconv" - capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/proto/sig.capnp.go b/go/proto/sig.capnp.go index e9b63f7153..3f53f57636 100644 --- a/go/proto/sig.capnp.go +++ b/go/proto/sig.capnp.go @@ -4,7 +4,6 @@ package proto import ( strconv "strconv" - capnp "zombiezen.com/go/capnproto2" text "zombiezen.com/go/capnproto2/encoding/text" schemas "zombiezen.com/go/capnproto2/schemas" diff --git a/go/protobuf/BUILD.bazel b/go/protobuf/BUILD.bazel deleted file mode 100644 index fe9a5b973d..0000000000 --- a/go/protobuf/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common.pb.go", - "conf_agent.pb.go", - "sig_mgmt.pb.go", - ], - importpath = "github.com/scionproto/scion/go/protobuf", - visibility = ["//visibility:public"], - deps = [ - "@com_github_golang_protobuf//proto:go_default_library", - "@org_golang_google_grpc//:go_default_library", - ], -) From 4945f055d3fcbe2f5f6abf977e8392bbcb9db0e1 Mon Sep 17 00:00:00 2001 From: Lukas Vogel <lukedirtwalker@gmail.com> Date: Mon, 7 Oct 2019 10:02:05 +0200 Subject: [PATCH 4/4] ignore gen file --- scion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scion.sh b/scion.sh index e099687de6..d2c331b1c1 100755 --- a/scion.sh +++ b/scion.sh @@ -330,7 +330,7 @@ go_lint() { local ret=0 lint_step "impi" # Skip CGO (https://github.com/pavius/impi/issues/5) files. - $TMPDIR/impi --local github.com/scionproto/scion --scheme stdThirdPartyLocal --skip '/c\.go$' --skip 'mock_' --skip 'go/proto/.*\.capnp\.go' ./go/... || ret=1 + $TMPDIR/impi --local github.com/scionproto/scion --scheme stdThirdPartyLocal --skip '/c\.go$' --skip 'mock_' --skip 'go/proto/.*\.capnp\.go' --skip 'go/proto/structs.gen.go' ./go/... || ret=1 lint_step "gofmt" # TODO(sustrik): At the moment there are no bazel rules for gofmt. # See: https://github.com/bazelbuild/rules_go/issues/511