Repository: scionproto/scion
Pull request #3684 (2020-03-10 08:02:26)

toml: use snake_case remove unused properties
Remove all currently unused configuration options.
Change all config options to snake_case.

Fixes scionproto/scion#2412

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/scionproto/scion/3684)
<!-- Reviewable:end -->



Patch:
diff --git a/acceptance/brutil/common.sh b/acceptance/brutil/common.sh
index a5bc54b6d..26b304a4b 100644
--- a/acceptance/brutil/common.sh
+++ b/acceptance/brutil/common.sh
@@ -57,7 +57,7 @@ test_config() {
     cp -Lr "acceptance/${TEST_DIR}/conf/." "$TEST_ARTIFACTS_DIR/conf"
 
     # Replace BR ID
-    sed -i "s/ID = .*$/ID = \"${BRID}\"/g" "$BR_TOML"
+    sed -i "s/id = .*$/id = \"${BRID}\"/g" "$BR_TOML"
     sed -i "s/path = .*$/path = \"\/share\/logs\/${BRID}.log\"/g" "$BR_TOML"
 }
 
diff --git a/acceptance/brutil/conf/br.toml b/acceptance/brutil/conf/br.toml
index f8514589e..25208f567 100644
--- a/acceptance/brutil/conf/br.toml
+++ b/acceptance/brutil/conf/br.toml
@@ -1,6 +1,6 @@
 [general]
-ConfigDir = "/share/conf"
-ID = <AUTOFILLED>
+config_dir = "/share/conf"
+id = <AUTOFILLED>
 
 [log.file]
 level = "debug"
diff --git a/acceptance/brutil/conf/disp.toml b/acceptance/brutil/conf/disp.toml
index 23051195f..66b7de370 100644
--- a/acceptance/brutil/conf/disp.toml
+++ b/acceptance/brutil/conf/disp.toml
@@ -1,5 +1,5 @@
 [dispatcher]
-ID = "dispatcher"
+id = "dispatcher"
 
 [log.file]
 level = "debug"
diff --git a/acceptance/topo_cs_reload/BUILD.bazel b/acceptance/topo_cs_reload/BUILD.bazel
index 3d2180e93..f7b1ac1ea 100644
--- a/acceptance/topo_cs_reload/BUILD.bazel
+++ b/acceptance/topo_cs_reload/BUILD.bazel
@@ -30,7 +30,6 @@ container_image(
         "-config",
         "/disp.toml",
     ],
-    stamp = True,
 )
 
 container_image(
@@ -50,7 +49,6 @@ container_image(
         "-config",
         "/cs.toml",
     ],
-    stamp = True,
 )
 
 genrule(
diff --git a/acceptance/topo_sd_reload/BUILD.bazel b/acceptance/topo_sd_reload/BUILD.bazel
index 00f3d83ac..2f1e6105e 100644
--- a/acceptance/topo_sd_reload/BUILD.bazel
+++ b/acceptance/topo_sd_reload/BUILD.bazel
@@ -28,7 +28,6 @@ container_image(
         "-config",
         "/disp.toml",
     ],
-    stamp = True,
 )
 
 container_image(
@@ -45,5 +44,4 @@ container_image(
         "-config",
         "/sd.toml",
     ],
-    stamp = True,
 )
diff --git a/go/border/BUILD.bazel b/go/border/BUILD.bazel
index bdb81407c..93f34edf0 100644
--- a/go/border/BUILD.bazel
+++ b/go/border/BUILD.bazel
@@ -30,7 +30,6 @@ go_library(
         "//go/lib/layers:go_default_library",
         "//go/lib/log:go_default_library",
         "//go/lib/overlay/conn:go_default_library",
-        "//go/lib/profile:go_default_library",
         "//go/lib/prom:go_default_library",
         "//go/lib/ringbuf:go_default_library",
         "//go/lib/scmp:go_default_library",
diff --git a/go/border/brconf/params.go b/go/border/brconf/params.go
index 13134fefb..d2b4ed43e 100644
--- a/go/border/brconf/params.go
+++ b/go/border/brconf/params.go
@@ -16,6 +16,7 @@ package brconf
 
 import (
 	"io"
+	"strings"
 
 	"github.com/scionproto/scion/go/lib/common"
 	"github.com/scionproto/scion/go/lib/config"
@@ -27,11 +28,11 @@ var _ config.Config = (*Config)(nil)
 
 // Config is the border router configuration that is loaded from file.
 type Config struct {
-	General  env.General
-	Features env.Features
-	Logging  log.Config `toml:"log,omitempty"`
-	Metrics  env.Metrics
-	BR       BR
+	General  env.General  `toml:"general,omitempty"`
+	Features env.Features `toml:"features,omitempty"`
+	Logging  log.Config   `toml:"log,omitempty"`
+	Metrics  env.Metrics  `toml:"metrics,omitempty"`
+	BR       BR           `toml:"br,omitempty"`
 }
 
 func (cfg *Config) InitDefaults() {
@@ -72,11 +73,9 @@ var _ config.Config = (*BR)(nil)
 
 // BR contains the border router specific parts of the configuration.
 type BR struct {
-	// Profile enables cpu and memory profiling.
-	Profile bool
 	// RollbackFailAction indicates the action that should be taken
 	// if the rollback fails.
-	RollbackFailAction FailAction
+	RollbackFailAction FailAction `toml:"rollback_fail_action,omitempty"`
 }
 
 func (cfg *BR) InitDefaults() {
@@ -101,9 +100,9 @@ type FailAction string
 
 const (
 	// FailActionFatal indicates that the process exits on error.
-	FailActionFatal FailAction = "Fatal"
+	FailActionFatal FailAction = "fatal"
 	// FailActionContinue indicates that the process continues on error.
-	FailActionContinue FailAction = "Continue"
+	FailActionContinue FailAction = "continue"
 )
 
 func (f *FailAction) Validate() error {
@@ -116,7 +115,7 @@ func (f *FailAction) Validate() error {
 }
 
 func (f *FailAction) UnmarshalText(text []byte) error {
-	switch FailAction(text) {
+	switch FailAction(strings.ToLower(string(text))) {
 	case FailActionFatal:
 		*f = FailActionFatal
 	case FailActionContinue:
diff --git a/go/border/brconf/sample.go b/go/border/brconf/sample.go
index bae3c6fb6..34e182bcb 100644
--- a/go/border/brconf/sample.go
+++ b/go/border/brconf/sample.go
@@ -17,10 +17,7 @@ package brconf
 const idSample = "br-1"
 
 const brSample = `
-# Enable cpu and memory profiling. (default false)
-Profile = false
-
 # Action that should be taken when an error occurs during a context rollback.
-# (Fatal | Continue) (default Fatal)
-RollbackFailAction = "Fatal"
+# (fatal | continue) (default fatal)
+rollback_fail_action = "fatal"
 `
diff --git a/go/border/main.go b/go/border/main.go
index 19f626f97..d4ffaefcd 100644
--- a/go/border/main.go
+++ b/go/border/main.go
@@ -37,7 +37,6 @@ import (
 	"github.com/scionproto/scion/go/lib/fatal"
 	"github.com/scionproto/scion/go/lib/infra/modules/itopo"
 	"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"
 )
@@ -80,10 +79,6 @@ func realMain() int {
 		log.Crit("Permissions checks failed", "err", err)
 		return 1
 	}
-	if cfg.BR.Profile {
-		// Start profiling if requested.
-		profile.Start(cfg.General.ID)
-	}
 	var err error
 	if r, err = NewRouter(cfg.General.ID, cfg.General.ConfigDir); err != nil {
 		log.Crit("Startup failed", "err", err)
diff --git a/go/cs/beaconstorage/config.go b/go/cs/beaconstorage/config.go
index 150a07192..4fae46edc 100644
--- a/go/cs/beaconstorage/config.go
+++ b/go/cs/beaconstorage/config.go
@@ -122,7 +122,7 @@ func (cfg *BeaconDBConf) Sample(dst io.Writer, path config.Path, ctx config.CtxM
 
 // ConfigName is the key in the toml file.
 func (cfg *BeaconDBConf) ConfigName() string {
-	return "beaconDB"
+	return "beacon_db"
 }
 
 // New creates a BeaconDB from the config.
diff --git a/go/cs/config/BUILD.bazel b/go/cs/config/BUILD.bazel
index 797ee1542..59ad1cd40 100644
--- a/go/cs/config/BUILD.bazel
+++ b/go/cs/config/BUILD.bazel
@@ -5,8 +5,7 @@ go_library(
     srcs = [
         "bs_sample.go",
         "config.go",
-        "cs_sample.go",
-        "ps_sample.go",
+        "sample.go",
     ],
     importpath = "github.com/scionproto/scion/go/cs/config",
     visibility = ["//visibility:public"],
diff --git a/go/cs/config/bs_sample.go b/go/cs/config/bs_sample.go
index cc987b793..1291720ac 100644
--- a/go/cs/config/bs_sample.go
+++ b/go/cs/config/bs_sample.go
@@ -14,58 +14,58 @@
 
 package config
 
-const BSSample = `
+const bsSample = `
 # The interval between sending interface keepalives. (default 1s)
-KeepaliveInterval = "1s"
+keepalive_interval = "1s"
 
 # The timeout until an interface that has not received keepalives
 # is considered expired. (default 3s)
-KeepaliveTimeout = "3s"
+keepalive_timeout = "3s"
 
 # The interval between originating beacons. (default 5s)
-OriginationInterval = "5s"
+origination_interval = "5s"
 
 # The interval between propagating beacons. (default 5s)
-PropagationInterval = "5s"
+propagation_interval = "5s"
 
 # The interval between registering beacons. (default 5s)
-RegistrationInterval = "5s"
+registration_interval = "5s"
 
 # The interval between checking for expired interfaces to revoke. (default 200ms)
-ExpiredCheckInterval = "200ms"
+expired_check_interval = "200ms"
 
 # The revocation TTL. (default 10s)
-RevTTL = "10s"
+rev_ttl = "10s"
 
 # The amount of time before the expiry of an existing revocation where the revoker can reissue a
 # new revocation. (default 5s)
-RevOverlap = "5s"
+rev_overlap = "5s"
 `
 
-const PoliciesSample = `
+const policiesSample = `
 # Output a sample policy file by providing the -help-policy flag.
 
 # The file path for the propagation policy. In case of the empty string,
 # the default policy is used. (default "")
-Propagation = ""
+propagation = ""
 
 # The file path for the core registration policy. In case of the empty string,
 # the default policy is used. In a non-core beacon server, this field is ignored.
 # (default "")
-CoreRegistration = ""
+core_registration = ""
 
 # The file path for the up registration policy. In case of the empty string,
 # the default policy is used. In a core beacon server, this field is ignored.
 # (default "")
-UpRegistration = ""
+up_registration = ""
 
 # The file path for the down registration policy. In case of the empty string,
 # the default policy is used. In a core beacon server, this field is ignored.
 # (default "")
-DownRegistration = ""
+down_registration = ""
 
 # The file path for the hidden path registration policy. In case of the empty string,
 # no hidden path functionality is used.
 # (default "")
-HiddenPathRegistration = ""
+hidden_path_registration = ""
 `
diff --git a/go/cs/config/config.go b/go/cs/config/config.go
index 697a34bf8..f90b9f2b8 100644
--- a/go/cs/config/config.go
+++ b/go/cs/config/config.go
@@ -53,22 +53,9 @@ const (
 	// DefaultRevOverlap specifies the default for how long before the expiry of an existing
 	// revocation the revoker can reissue a new revocation.
 	DefaultRevOverlap = DefaultRevTTL / 2
-
-	// LeafReissTime is the default value for CSConf.LeafReissTime. It is set to
-	// the default path segment TTL to provide optimal coverage.
-	LeafReissTime = 6 * time.Hour
-	// IssuerReissTime is the default value for CSConf.IssuerReissTime. It is larger
-	// than the leaf certificate validity period in order to provide optimal coverage.
-	IssuerReissTime = (3*24 + 1) * time.Hour
-	// ReissReqRate is the default interval between two consecutive reissue requests.
-	ReissReqRate = 10 * time.Second
-	// ReissueReqTimeout is the default timeout of a reissue request.
-	ReissueReqTimeout = 5 * time.Second
-)
-
-var (
-	DefaultQueryInterval      = 5 * time.Minute
-	DefaultCryptoSyncInterval = 30 * time.Second
+	// DefaultQueryInterval is the default interval after which the segment
+	// cache expires.
+	DefaultQueryInterval = 5 * time.Minute
 )
 
 // Error values
@@ -81,17 +68,17 @@ var _ config.Config = (*Config)(nil)
 
 // Config is the beacon server configuration.
 type Config struct {
-	General  env.General
-	Features env.Features
-	Logging  log.Config `toml:"log,omitempty"`
-	Metrics  env.Metrics
-	Tracing  env.Tracing
-	QUIC     env.QUIC `toml:"quic"`
-	TrustDB  truststorage.TrustDBConf
-	BeaconDB beaconstorage.BeaconDBConf
-	BS       BSConfig
-	CS       CSConfig
-	PS       PSConfig
+	General  env.General                `toml:"general,omitempty"`
+	Features env.Features               `toml:"features,omitempty"`
+	Logging  log.Config                 `toml:"log,omitempty"`
+	Metrics  env.Metrics                `toml:"metrics,omitempty"`
+	Tracing  env.Tracing                `toml:"tracing,omitempty"`
+	QUIC     env.QUIC                   `toml:"quic,omitempty"`
+	BeaconDB beaconstorage.BeaconDBConf `toml:"beacon_db,omitempty"`
+	TrustDB  truststorage.TrustDBConf   `toml:"trust_db,omitempty"`
+	PathDB   pathstorage.PathDBConf     `toml:"path_db,omitempty"`
+	BS       BSConfig                   `toml:"beaconing,omitempty"`
+	PS       PSConfig                   `toml:"path,omitempty"`
 }
 
 // InitDefaults initializes the default values for all parts of the config.
@@ -102,10 +89,10 @@ func (cfg *Config) InitDefaults() {
 		&cfg.Logging,
 		&cfg.Metrics,
 		&cfg.Tracing,
-		&cfg.TrustDB,
 		&cfg.BeaconDB,
+		&cfg.TrustDB,
+		&cfg.PathDB,
 		&cfg.BS,
-		&cfg.CS,
 		&cfg.PS,
 	)
 }
@@ -117,10 +104,10 @@ func (cfg *Config) Validate() error {
 		&cfg.Features,
 		&cfg.Logging,
 		&cfg.Metrics,
-		&cfg.TrustDB,
 		&cfg.BeaconDB,
+		&cfg.TrustDB,
+		&cfg.PathDB,
 		&cfg.BS,
-		&cfg.CS,
 		&cfg.PS,
 	)
 }
@@ -134,10 +121,10 @@ func (cfg *Config) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
 		&cfg.Metrics,
 		&cfg.Tracing,
 		&cfg.QUIC,
-		&cfg.TrustDB,
 		&cfg.BeaconDB,
+		&cfg.TrustDB,
+		&cfg.PathDB,
 		&cfg.BS,
-		&cfg.CS,
 		&cfg.PS,
 	)
 }
@@ -152,85 +139,77 @@ var _ config.Config = (*BSConfig)(nil)
 // BSConfig holds the configuration specific to the beacon server.
 type BSConfig struct {
 	// KeepaliveInterval is the interval between sending interface keepalives.
-	KeepaliveInterval util.DurWrap
+	KeepaliveInterval util.DurWrap `toml:"keepalive_interval,omitempty"`
 	// KeepaliveTimeout is the timeout indicating how long an interface can
 	// receive no keepalive until it is considered expired.
-	KeepaliveTimeout util.DurWrap
+	KeepaliveTimeout util.DurWrap `toml:"keepalive_timeout,omitempty"`
 	// OriginationInterval is the interval between originating beacons in a core BS.
-	OriginationInterval util.DurWrap
+	OriginationInterval util.DurWrap `toml:"origination_interval,omitempty"`
 	// PropagationInterval is the interval between propagating beacons.
-	PropagationInterval util.DurWrap
+	PropagationInterval util.DurWrap `toml:"propagation_interval,omitempty"`
 	// RegistrationInterval is the interval between registering segments.
-	RegistrationInterval util.DurWrap
+	RegistrationInterval util.DurWrap `toml:"registration_interval,omitempty"`
 	// ExpiredCheckInterval is the interval between checking whether interfaces
 	// have expired and should be revoked.
-	ExpiredCheckInterval util.DurWrap
+	ExpiredCheckInterval util.DurWrap `toml:"expired_check_interval,omitempty"`
 	// RevTTL is the revocation TTL. (default 10s)
-	RevTTL util.DurWrap
+	RevTTL util.DurWrap `toml:"rev_ttl,omitempty"`
 	// RevOverlap specifies for how long before the expiry of an existing revocation the revoker
 	// can reissue a new revocation. (default 5s)
-	RevOverlap util.DurWrap
+	RevOverlap util.DurWrap `toml:"rev_overlap,omitempty"`
 	// Policies contains the policy files.
-	Policies Policies
+	Policies Policies `toml:"policies,omitempty"`
 }
 
 // InitDefaults the default values for the durations that are equal to zero.
 func (cfg *BSConfig) InitDefaults() {
-	initDurWrap(&cfg.KeepaliveInterval, DefaultKeepaliveInterval)
-	initDurWrap(&cfg.KeepaliveTimeout, DefaultKeepaliveTimeout)
-	initDurWrap(&cfg.OriginationInterval, DefaultOriginationInterval)
-	initDurWrap(&cfg.PropagationInterval, DefaultPropagationInterval)
-	initDurWrap(&cfg.RegistrationInterval, DefaultRegistrationInterval)
-	initDurWrap(&cfg.ExpiredCheckInterval, DefaultExpiredCheckInterval)
-	initDurWrap(&cfg.RevTTL, DefaultRevTTL)
-	initDurWrap(&cfg.RevOverlap, DefaultRevOverlap)
 }
 
 // Validate validates that all durations are set.
 func (cfg *BSConfig) Validate() error {
 	if cfg.KeepaliveInterval.Duration == 0 {
-		return serrors.New("KeepaliveInterval not set")
+		initDurWrap(&cfg.KeepaliveInterval, DefaultKeepaliveInterval)
 	}
 	if cfg.KeepaliveTimeout.Duration == 0 {
-		return serrors.New("KeepaliveTimeout not set")
+		initDurWrap(&cfg.KeepaliveTimeout, DefaultKeepaliveTimeout)
 	}
 	if cfg.OriginationInterval.Duration == 0 {
-		return serrors.New("OriginationInterval not set")
+		initDurWrap(&cfg.OriginationInterval, DefaultOriginationInterval)
 	}
 	if cfg.PropagationInterval.Duration == 0 {
-		return serrors.New("PropagationInterval not set")
+		initDurWrap(&cfg.PropagationInterval, DefaultPropagationInterval)
 	}
 	if cfg.RegistrationInterval.Duration == 0 {
-		return serrors.New("RegistrationInterval not set")
+		initDurWrap(&cfg.RegistrationInterval, DefaultRegistrationInterval)
 	}
 	if cfg.ExpiredCheckInterval.Duration == 0 {
-		return serrors.New("ExpiredCheckInterval not set")
+		initDurWrap(&cfg.ExpiredCheckInterval, DefaultExpiredCheckInterval)
 	}
 	if cfg.RevTTL.Duration == 0 {
-		return serrors.New("RevTTL is not set")
+		initDurWrap(&cfg.RevTTL, DefaultRevTTL)
 	}
 	if cfg.RevTTL.Duration < path_mgmt.MinRevTTL {
-		return common.NewBasicError("RevTTL must be equal or greater than MinRevTTL", nil,
+		return common.NewBasicError("rev_ttl must be equal or greater than MinRevTTL", nil,
 			"MinRevTTL", path_mgmt.MinRevTTL)
 	}
 	if cfg.RevOverlap.Duration == 0 {
-		return serrors.New("RevOverlap not set")
+		initDurWrap(&cfg.RevOverlap, DefaultRevOverlap)
 	}
 	if cfg.RevOverlap.Duration > cfg.RevTTL.Duration {
-		return serrors.New("RevOverlap cannot be greater than RevTTL")
+		return serrors.New("rev_overlap cannot be greater than rev_ttl")
 	}
 	return nil
 }
 
 // Sample generates a sample for the beacon server specific configuration.
 func (cfg *BSConfig) Sample(dst io.Writer, path config.Path, ctx config.CtxMap) {
-	config.WriteString(dst, BSSample)
+	config.WriteString(dst, bsSample)
 	config.WriteSample(dst, path, ctx, &cfg.Policies)
 }
 
 // ConfigName is the toml key for the beacon server specific configuration.
 func (cfg *BSConfig) ConfigName() string {
-	return "bs"
+	return "beaconing"
 }
 
 func initDurWrap(w *util.DurWrap, def time.Duration) {
@@ -239,104 +218,33 @@ func initDurWrap(w *util.DurWrap, def time.Duration) {
 	}
 }
 
-var _ config.Config = (*CSConfig)(nil)
-
-type CSConfig struct {
-	// LeafReissueLeadTime indicates how long in advance of leaf cert expiration
-	// the reissuance process starts.
-	LeafReissueLeadTime util.DurWrap
-	// IssuerReissueLeadTime indicates how long in advance core cert expiration
-	// the self reissuance process starts.
-	IssuerReissueLeadTime util.DurWrap
-	// ReissueRate is the interval between two consecutive reissue requests.
-	ReissueRate util.DurWrap
-	// ReissueTimeout is the timeout for resissue request.
-	ReissueTimeout util.DurWrap
-	// AutomaticRenewal whether automatic reissuing is enabled.
-	AutomaticRenewal bool
-	// DisableCorePush disables the core pusher task.
-	DisableCorePush bool
-}
-
-func (cfg *CSConfig) InitDefaults() {
-	if cfg.LeafReissueLeadTime.Duration == 0 {
-		cfg.LeafReissueLeadTime.Duration = LeafReissTime
-	}
-	if cfg.IssuerReissueLeadTime.Duration == 0 {
-		cfg.IssuerReissueLeadTime.Duration = IssuerReissTime
-	}
-	if cfg.ReissueRate.Duration == 0 {
-		cfg.ReissueRate.Duration = ReissReqRate
-	}
-	if cfg.ReissueTimeout.Duration == 0 {
-		cfg.ReissueTimeout.Duration = ReissueReqTimeout
-	}
-}
-
-func (cfg *CSConfig) Validate() error {
-	if cfg.LeafReissueLeadTime.Duration == 0 {
-		return serrors.New("LeafReissueLeadTime must not be zero")
-	}
-	if cfg.IssuerReissueLeadTime.Duration == 0 {
-		return serrors.New("IssuerReissueLeadTime must not be zero")
-	}
-	if cfg.ReissueRate.Duration == 0 {
-		return serrors.New("ReissueRate must not be zero")
-	}
-	if cfg.ReissueTimeout.Duration == 0 {
-		return serrors.New("ReissueTimeout must not be zero")
-	}
-	return nil
-}
-
-func (cfg *CSConfig) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
-	config.WriteString(dst, CSSample)
-}
-
-func (cfg *CSConfig) ConfigName() string {
-	return "cs"
-}
-
 var _ config.Config = (*PSConfig)(nil)
 
 type PSConfig struct {
-	// SegSync enables the "old" replication of down segments between cores,
-	// using SegSync messages.
-	SegSync  bool
-	PathDB   pathstorage.PathDBConf
-	RevCache pathstorage.RevCacheConf
 	// QueryInterval specifies after how much time segments
 	// for a destination should be refetched.
-	QueryInterval util.DurWrap
-	// CryptoSyncInterval specifies the interval of crypto pushes towards
-	// the local CS.
-	CryptoSyncInterval util.DurWrap
+	QueryInterval util.DurWrap `toml:"query_interval,omitempty"`
 }
 
 func (cfg *PSConfig) InitDefaults() {
 	if cfg.QueryInterval.Duration == 0 {
 		cfg.QueryInterval.Duration = DefaultQueryInterval
 	}
-	if cfg.CryptoSyncInterval.Duration == 0 {
-		cfg.CryptoSyncInterval.Duration = DefaultCryptoSyncInterval
-	}
-	config.InitAll(&cfg.PathDB, &cfg.RevCache)
 }
 
 func (cfg *PSConfig) Validate() error {
 	if cfg.QueryInterval.Duration == 0 {
-		return serrors.New("QueryInterval must not be zero")
+		return serrors.New("query_interval must not be zero")
 	}
-	return config.ValidateAll(&cfg.PathDB, &cfg.RevCache)
+	return nil
 }
 
 func (cfg *PSConfig) Sample(dst io.Writer, path config.Path, ctx config.CtxMap) {
-	config.WriteString(dst, PSSample)
-	config.WriteSample(dst, path, ctx, &cfg.PathDB, &cfg.RevCache)
+	config.WriteString(dst, psSample)
 }
 
 func (cfg *PSConfig) ConfigName() string {
-	return "ps"
+	return "path"
 }
 
 var _ config.Config = (*Policies)(nil)
@@ -347,28 +255,28 @@ type Policies struct {
 	config.NoValidator
 	// Propagation contains the file path for the propagation policy. If this
 	// is the empty string, the default policy is used.
-	Propagation string
+	Propagation string `toml:"propagation,omitempty"`
 	// CoreRegistration contains the file path for the core registration
 	// policy. If this is the empty string, the default policy is used. In a
 	// non-core beacon server, this field is ignored.
-	CoreRegistration string
+	CoreRegistration string `toml:"core_registration,omitempty"`
 	// UpRegistration contains the file path for the up registration policy. If
 	// this is the empty string, the default policy is used. In a core beacon
 	// server, this field is ignored.
-	UpRegistration string
+	UpRegistration string `toml:"up_registration,omitempty"`
 	// DownRegistration contains the file path for the down registration policy.
 	// If this is the empty string, the default policy is used. In a core beacon
 	// server, this field is ignored.
-	DownRegistration string
+	DownRegistration string `toml:"down_registration,omitempty"`
 	// HiddenPathRegistration contains the file path for the hidden path registration policy
 	// and the corresponding hidden path groups.
 	// If this is the empty string, no hidden path functionality is used.
-	HiddenPathRegistration string
+	HiddenPathRegistration string `toml:"hidden_path_registration,omitempty"`
 }
 
 // Sample generates a sample for the beacon server specific configuration.
 func (cfg *Policies) Sample(dst io.Writer, _ config.Path, _ config.CtxMap) {
-	config.WriteString(dst, PoliciesSample)
+	config.WriteString(dst, policiesSample)
 }
 
 // ConfigName is the toml key for the beacon server specific configuration.
diff --git a/go/cs/config/cs_sample.go b/go/cs/config/cs_sample.go
deleted file mode 100644
index b36d6dcc3..000000000
--- a/go/cs/config/cs_sample.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018 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 config
-
-const idSample = "cs-1"
-
-const CSSample = `
-# Time between starting reissue requests and leaf cert expiration. If not
-# specified, this is set to default PathSegmentTTL. (default 6h)
-LeafReissueLeadTime = "6h"
-
-# Time between self issuing core cert and core cert expiration. If not
-# specified, this is set to the default leaf certificate validity time
-# plus 1 hour. (default 73h)
-IssuerReissueLeadTime = "73h"
-
-# Interval between two consecutive reissue requests. (default 10s)
-ReissueRate = "10s"
-
-# Timeout for resissue request. (default 5s)
-ReissueTimeout = "5s"
-
-# Whether automatic reissuing is enabled. (default false)
-AutomaticRenewal = false
-
-# Disable the core pushing. (default false)
-DisableCorePush = false
-`
diff --git a/go/cs/config/ps_sample.go b/go/cs/config/sample.go
similarity index 69%
rename from go/cs/config/ps_sample.go
rename to go/cs/config/sample.go
index 72ea14783..f1a313fab 100644
--- a/go/cs/config/ps_sample.go
+++ b/go/cs/config/sample.go
@@ -1,4 +1,4 @@
-// Copyright 2018 Anapaya Systems
+// Copyright 2020 Anapaya Systems
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,14 +14,9 @@
 
 package config
 
-const PSSample = `
-# Enable the "old" replication of down segments between cores using SegSync
-# messages. (default false)
-SegSync = false
+const idSample = "cs-1"
 
+const psSample = `
 # The time after which segments for a destination are refetched. (default 5m)
-QueryInterval = "5m"
-
-# The interval of crypto pushes towards the local CS. (default 30s)
-CryptoSyncInterval = "30s"
+query_interval = "5m"
 `
diff --git a/go/cs/main.go b/go/cs/main.go
index 4484b70e3..5d8725eda 100644
--- a/go/cs/main.go
+++ b/go/cs/main.go
@@ -115,13 +115,13 @@ func realMain() int {
 	metrics.InitBSMetrics()
 	metrics.InitPSMetrics()
 
-	pathDB, revCache, err := pathstorage.NewPathStorage(cfg.PS.PathDB, cfg.PS.RevCache)
+	pathDB, revCache, err := pathstorage.NewPathStorage(cfg.PathDB)
 	if err != nil {
 		log.Crit("Unable to initialize path storage", "err", err)
 		return 1
 	}
 	defer revCache.Close()
-	pathDB = pathdb.WithMetrics(string(cfg.PS.PathDB.Backend()), pathDB)
+	pathDB = pathdb.WithMetrics(string(cfg.PathDB.Backend()), pathDB)
 	defer pathDB.Close()
 
 	topo := itopo.Get()
@@ -283,7 +283,7 @@ func realMain() int {
 	segReqHandler := segreq.NewHandler(args)
 	msgr.AddHandler(infra.SegRequest, segReqHandler)
 	msgr.AddHandler(infra.SegReg, handlers.NewSegRegHandler(args))
-	if cfg.PS.SegSync && topo.Core() {
+	if topo.Core() {
 		// Old down segment sync mechanism
 		msgr.AddHandler(infra.SegSync, handlers.NewSyncHandler(args))
 	}
@@ -460,7 +460,7 @@ func (t *periodicTasks) Start() error {
 	// t.corePusher = t.startCorePusher()
 	// t.reissuance = t.startReissuance(t.corePusher)
 
-	if cfg.PS.SegSync && itopo.Get().Core() {
+	if itopo.Get().Core() {
 		t.segSyncers, err = segsyncer.StartAll(t.args, t.msgr)
 		if err != nil {
 			return common.NewBasicError("Unable to start seg syncer", err)
@@ -715,7 +715,7 @@ func setup() error {
 	if err := cfg.Validate(); err != nil {
 		return common.NewBasicError("Unable to validate config", err)
 	}
-	topo, err := topology.FromJSONFile(cfg.General.Topology)
+	topo, err := topology.FromJSONFile(cfg.General.Topology())
 	if err != nil {
 		return common.NewBasicError("Unable to load topology", err)
 	}
@@ -741,7 +741,7 @@ func initTopo(topo topology.Topology) error {
 	if err := itopo.Update(topo); err != nil {
 		return serrors.WrapStr("Unable to set initial static topology", err)
 	}
-	infraenv.InitInfraEnvironment(cfg.General.Topology)
+	infraenv.InitInfraEnvironment(cfg.General.Topology())
 	return nil
 }
 
diff --git a/go/godispatcher/internal/config/config.go b/go/godispatcher/internal/config/config.go
index ac545bd2d..9b227efd7 100644
--- a/go/godispatcher/internal/config/config.go
+++ b/go/godispatcher/internal/config/config.go
@@ -32,51 +32,42 @@ import (
 var _ config.Config = (*Config)(nil)
 
 type Config struct {
-	Features   env.Features
-	Logging    log.Config `toml:"log,omitempty"`
-	Metrics    env.Metrics
-	Dispatcher struct {
-		// ID of the Dispatcher (required)
-		ID string
-		// ApplicationSocket is the local API socket (default /run/shm/dispatcher/default.sock)
-		ApplicationSocket string
-		// Socket file permissions when created; read from octal. (default 0770)
-		SocketFileMode util.FileMode
-		// OverlayPort is the native port opened by the dispatcher (default 30041)
-		OverlayPort int
-		// PerfData starts the pprof HTTP server on the specified address. If not set,
-		// the server is not started.
-		PerfData string
-		// DeleteSocket specifies whether the dispatcher should delete the
-		// socket file prior to attempting to create a new one.
-		DeleteSocket bool
-	}
+	Features   env.Features `toml:"features,omitempty"`
+	Logging    log.Config   `toml:"log,omitempty"`
+	Metrics    env.Metrics  `toml:"metrics,omitempty"`
+	Dispatcher Dispatcher   `toml:"dispatcher,omitempty"`
+}
+
+// Dispatcher contains the dispatcher specific confing
+type Dispatcher struct {
+	// ID of the Dispatcher (required)
+	ID string `toml:"id,omitempty"`
+	// ApplicationSocket is the local API socket (default /run/shm/dispatcher/default.sock)
+	ApplicationSocket string `toml:"application_socket,omitempty"`
+	// Socket file permissions when created; read from octal. (default 0770)
+	SocketFileMode util.FileMode `toml:"socket_file_mode,omitempty"`
+	// OverlayPort is the native port opened by the dispatcher (default 30041)
+	OverlayPort int `toml:"underlay_port,omitempty"`
+	// DeleteSocket specifies whether the dispatcher should delete the
+	// socket file prior to attempting to create a new one.
+	DeleteSocket bool `toml:"delete_socket,omitempty"`
 }
 
 func (cfg *Config) InitDefaults() {
-	if cfg.Dispatcher.ApplicationSocket == "" {
-		cfg.Dispatcher.ApplicationSocket = reliable.DefaultDispPath
-	}
-	if cfg.Dispatcher.SocketFileMode == 0 {
-		cfg.Dispatcher.SocketFileMode = reliable.DefaultDispSocketFileMode
-	}
-	if cfg.Dispatcher.OverlayPort == 0 {
-		cfg.Dispatcher.OverlayPort = topology.EndhostPort
-	}
 }
 
 func (cfg *Config) Validate() error {
 	if cfg.Dispatcher.ApplicationSocket == "" {
-		return serrors.New("ApplicationSocket must be set")
+		cfg.Dispatcher.ApplicationSocket = reliable.DefaultDispPath
 	}
 	if cfg.Dispatcher.SocketFileMode == 0 {
-		return serrors.New("SocketFileMode must be set")
+		cfg.Dispatcher.SocketFileMode = reliable.DefaultDispSocketFileMode
 	}
 	if cfg.Dispatcher.OverlayPort == 0 {
-		return serrors.New("OverlayPort must be set")
+		cfg.Dispatcher.OverlayPort = topology.EndhostPort
 	}
 	if cfg.Dispatcher.ID == "" {
-		return serrors.New("ID must be set")
+		return serrors.New("id must be set")
 	}
 	return config.ValidateAll(&cfg.Logging, &cfg.Metrics)
 }
diff --git a/go/godispatcher/internal/config/sample.go b/go/godispatcher/internal/config/sample.go
index 565f04c3e..e105927c6 100644
--- a/go/godispatcher/internal/config/sample.go
+++ b/go/godispatcher/internal/config/sample.go
@@ -1,4 +1,5 @@
 // Copyright 2018 ETH Zurich
+// Copyright 2020 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.
@@ -18,22 +19,17 @@ const idSample = "dispatcher"
 
 const dispSample = `
 # ID of the Dispatcher. (required)
-ID = "%s"
+id = "%s"
 
-# ApplicationSocket is the local API socket. (default /run/shm/dispatcher/default.sock)
-ApplicationSocket = "/run/shm/dispatcher/default.sock"
+# The local API socket. (default /run/shm/dispatcher/default.sock)
+application_socket = "/run/shm/dispatcher/default.sock"
 
 # File permissions of the ApplicationSocket socket file, in octal. (default "0770")
-SocketFileMode = "0770"
+socket_file_mode = "0770"
 
-# OverlayPort is the native port opened by the dispatcher. (default 30041)
-OverlayPort = 30041
+# The native port opened by the dispatcher. (default 30041)
+underlay_port = 30041
 
-# PerfData starts the pprof HTTP server on the specified address.
-# (host:port or ip:port or :port) If not set, the server is not started.
-PerfData = ""
-
-# Set DeleteSock to true to have the Dispatcher remove the socket file (if it
-# exists) on start. (default false)
-DeleteSocket = false
+# Remove the socket file (if it exists) on start. (default false)
+delete_socket = false
 `
diff --git a/go/godispatcher/main.go b/go/godispatcher/main.go
index 1361f2b70..40d072e04 100644
--- a/go/godispatcher/main.go
+++ b/go/godispatcher/main.go
@@ -86,15 +86,6 @@ func realMain() int {
 			fatal.Fatal(err)
 		}
 	}()
-	if cfg.Dispatcher.PerfData != "" {
-		go func() {
-			defer log.HandlePanic()
-			err := http.ListenAndServe(cfg.Dispatcher.PerfData, nil)
-			if err != nil {
-				fatal.Fatal(err)
-			}
-		}()
-	}
 
 	env.SetupEnv(nil)
 	http.HandleFunc("/config", configHandler)
diff --git a/go/lib/env/BUILD.bazel b/go/lib/env/BUILD.bazel
index a07ad9ba4..d47154679 100644
--- a/go/lib/env/BUILD.bazel
+++ b/go/lib/env/BUILD.bazel
@@ -32,7 +32,6 @@ go_library(
 go_test(
     name = "go_default_test",
     srcs = ["features_test.go"],
-    data = glob(["testdata/**"]),
     embed = [":go_default_library"],
     deps = ["@com_github_stretchr_testify//assert:go_default_library"],
 )
diff --git a/go/lib/env/env.go b/go/lib/env/env.go
index 809f4e88b..d9bff991a 100644
--- a/go/lib/env/env.go
+++ b/go/lib/env/env.go
@@ -34,7 +34,6 @@ import (
 	"github.com/uber/jaeger-client-go"
 	jaegercfg "github.com/uber/jaeger-client-go/config"
 
-	"github.com/scionproto/scion/go/lib/common"
 	"github.com/scionproto/scion/go/lib/config"
 	"github.com/scionproto/scion/go/lib/fatal"
 	"github.com/scionproto/scion/go/lib/infra/modules/itopo"
@@ -47,13 +46,8 @@ import (
 )
 
 const (
-	DefaultLoggingLevel = "info"
-	// Default max size of log files in MiB
-	DefaultLoggingFileSize = 50
-	// Default max age of log file in days
-	DefaultLoggingFileMaxAge = 7
-	// Default file name for topology file (only the last element of the path)
-	DefaultTopologyPath = "topology.json"
+	// TopologyFile is the file name for the topology file.
+	TopologyFile = "topology.json"
 
 	// SciondInitConnectPeriod is the default total amount of time spent
 	// attempting to connect to sciond on start.
@@ -77,26 +71,21 @@ var _ config.Config = (*General)(nil)
 type General struct {
 	// ID is the SCION element ID. This is used to choose the relevant
 	// portion of the topology file for some services.
-	ID string
+	ID string `toml:"id,omitempty"`
 	// ConfigDir for loading extra files (currently, only topology.json)
-	ConfigDir string
-	// Topology is the file path for the local topology JSON file.
-	Topology string
+	ConfigDir string `toml:"config_dir,omitempty"`
 	// ReconnectToDispatcher can be set to true to enable transparent dispatcher
 	// reconnects.
-	ReconnectToDispatcher bool
+	ReconnectToDispatcher bool `toml:"reconnect_to_dispatcher,omitempty"`
 }
 
 // InitDefaults sets the default value for Topology if not already set.
 func (cfg *General) InitDefaults() {
-	if cfg.Topology == "" {
-		cfg.Topology = filepath.Join(cfg.ConfigDir, DefaultTopologyPath)
-	}
 }
 
 func (cfg *General) Validate() error {
 	if cfg.ID == "" {
-		return serrors.New("No element ID specified")
+		return serrors.New("no element id specified")
 	}
 	return cfg.checkDir()
 }
@@ -109,7 +98,7 @@ func (cfg *General) checkDir() error {
 			return err
 		}
 		if !info.IsDir() {
-			return common.NewBasicError("Not a directory", nil, "dir", cfg.ConfigDir)
+			return serrors.New("config_dir is not a directory", "dir", cfg.ConfigDir)
 		}
 	}
 	return nil
@@ -123,21 +112,26 @@ func (cfg *General) ConfigName() string {
 	return "general"
 }
 
+// Topology returns the path to the topology file
+func (cfg *General) Topology() string {
+	return filepath.Join(cfg.ConfigDir, TopologyFile)
+}
+
 var _ config.Config = (*SCIONDClient)(nil)
 
 // SCIONDClient contains information for running snet with sciond.
 type SCIONDClient struct {
 	// Address of the SCIOND server the client should connect to. Defaults to
 	// 127.0.0.1:30255.
-	Address string
+	Address string `toml:"address,omitempty"`
 	// InitialConnectPeriod is the maximum amount of time spent attempting to
 	// connect to sciond on start.
-	InitialConnectPeriod util.DurWrap
+	InitialConnectPeriod util.DurWrap `toml:"initial_connect_period,omitempty"`
 	// FakeData can be used to replace the local SCIOND with a fake data source.
 	// It must point to a fake SCIOND configuration file.
-	FakeData string
+	FakeData string `toml:"fake_data,omitempty"`
 	// PathCount is the maximum number of paths returned to the user.
-	PathCount uint16
+	PathCount uint16 `toml:"path_count,omitempty"`
 }
 
 func (cfg *SCIONDClient) InitDefaults() {
@@ -161,7 +155,7 @@ func (cfg *SCIONDClient) Sample(dst io.Writer, path config.Path, _ config.CtxMap
 }
 
 func (cfg *SCIONDClient) ConfigName() string {
-	return "sd_client"
+	return "sciond_connection"
 }
 
 // SetupEnv initializes a basic environment for applications. If reloadF is not
@@ -215,7 +209,7 @@ type Metrics struct {
 	config.NoValidator
 	// Prometheus contains the address to export prometheus metrics on. If
 	// not set, metrics are not exported.
-	Prometheus string
+	Prometheus string `toml:"prometheus,omitempty"`
 }
 
 func (cfg *Metrics) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
@@ -234,7 +228,7 @@ func (cfg *Metrics) StartPrometheus() {
 		go func() {
 			defer log.HandlePanic()
 			if err := http.ListenAndServe(cfg.Prometheus, nil); err != nil {
-				fatal.Fatal(common.NewBasicError("HTTP ListenAndServe error", err))
+				fatal.Fatal(serrors.WrapStr("HTTP ListenAndServe error", err))
 			}
 		}()
 	}
@@ -243,12 +237,12 @@ func (cfg *Metrics) StartPrometheus() {
 // Tracing contains configuration for tracing.
 type Tracing struct {
 	// Enabled enables tracing for this service.
-	Enabled bool
+	Enabled bool `toml:"enabled,omitempty"`
 	// Enable debug mode.
-	Debug bool
+	Debug bool `toml:"debug,omitempty"`
 	// Agent is the address of the local agent that handles the reported
 	// traces. (default: localhost:6831)
-	Agent string
+	Agent string `toml:"agent,omitempty"`
 }
 
 func (cfg *Tracing) InitDefaults() {
@@ -290,10 +284,10 @@ func (cfg *Tracing) NewTracer(id string) (opentracing.Tracer, io.Closer, error)
 
 // QUIC contains configuration for control-plane speakers.
 type QUIC struct {
-	ResolutionFraction float64
-	Address            string
-	CertFile           string
-	KeyFile            string
+	ResolutionFraction float64 `toml:"resolution_fraction,omitempty"`
+	Address            string  `toml:"address,omitempty"`
+	CertFile           string  `toml:"cert_file,omitempty"`
+	KeyFile            string  `toml:"key_file,omitempty"`
 }
 
 func (cfg *QUIC) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
diff --git a/go/lib/env/features.go b/go/lib/env/features.go
index 154c4a0f7..5dbf0df72 100644
--- a/go/lib/env/features.go
+++ b/go/lib/env/features.go
@@ -22,10 +22,11 @@ import (
 
 var _ config.Config = (*Features)(nil)
 
-// Add feature flags to this structure as needed.
-// Feature flags are always boolean. Don't use any other types here!
+// Features contains all feautre flags. Add feature flags to this structure as
+// needed. Feature flags are always boolean. Don't use any other types here!
 type Features struct {
-	AllowRunAsRoot bool
+	AllowRunAsRoot bool `toml:"allow_run_as_root,omitempty"`
+	UseSIGEgress2  bool `toml:"sig_egress_v2,omitempty"`
 }
 
 func (cfg *Features) InitDefaults() {
diff --git a/go/lib/env/sample.go b/go/lib/env/sample.go
index 5de2352ac..eb0e90ef8 100644
--- a/go/lib/env/sample.go
+++ b/go/lib/env/sample.go
@@ -16,17 +16,13 @@ package env
 
 const generalSample = `
 # The ID of the service. (required)
-ID = "%s"
+id = "%s"
 
 # Directory for loading AS information, certs, keys, path policy, topology.
-ConfigDir = "/etc/scion"
-
-# Topology file. If not specified, it is loaded from the config directory.
-# (default ConfigDir/topology.json)
-Topology = "/etc/scion/topology.json"
+config_dir = "/etc/scion"
 
 # Enable the snetproxy reconnecter. (default false)
-ReconnectToDispatcher = false
+reconnect_to_dispatcher = false
 `
 
 const featuresSample = `
@@ -35,71 +31,46 @@ const featuresSample = `
 
 const sciondClientSample = `
 # Address of the SCIOND server the client should connect to.
-Address = "127.0.0.1:30255"
+address = "127.0.0.1:30255"
 
 # Maximum time spent attempting to connect to sciond on start. (default 20s)
-InitialConnectPeriod = "20s"
+initial_connect_period = "20s"
 
 # Maximum numer of paths provided by SCIOND.
 # Zero means that all the paths should be provided. (default 0)
-PathCount = 0
-`
-
-const loggingFileSample = `
-# Location of the logging file. If not specified, logging to file is disabled.
-Path = "/var/log/scion/%s.log"
-
-# File logging level. (trace|debug|info|warn|error|crit) (default debug)
-Level = "debug"
-
-# Max size of log file in MiB. (default 50)
-Size = 50
-
-# Max age of log file in days. (default 7)
-MaxAge = 7
-
-# Maximum number of log files to retain. (default 10)
-MaxBackups = 10
-
-# How frequently to flush to the log file, in seconds. If 0, all messages
-# are immediately flushed. If negative, messages are never flushed
-# automatically. (default 5)
-FlushInterval = 5
-`
-
-const loggingConsoleSample = `
-# Console logging level (trace|debug|info|warn|error|crit) (default crit)
-Level = "crit"
+path_count = 0
 `
 
 const metricsSample = `
 # The address to export prometheus metrics on (host:port or ip:port or :port).
+# The prometheus metrics can be found under /metrics, furthermore pprof
+# endpoints are exposed see (https://golang.org/pkg/net/http/pprof/).
 # If not set, metrics are not exported. (default "")
-Prometheus = ""
+prometheus = ""
 `
 
 const tracingSample = `
 # Enable the tracing. (default false)
-Enabled = false
+enabled = false
 # Enable debug mode. (default false)
-Debug = false
+debug = false
 # Address of the local agent that handles the reported traces.
 # (default: localhost:6831)
-Agent = "localhost:6831"
+agent = "localhost:6831"
 `
 
 const quicSample = `
 # The address to start a QUIC server on (ip:port). If not set, a QUIC server is
 # not started. (default "")
-Address = ""
+address = ""
 
 # Certificate file to use for authenticating QUIC connections.
-CertFile = "/etc/scion/quic/tls.pem"
+cert_file = "/etc/scion/quic/tls.pem"
 
 # Key file to use for authenticating QUIC connections.
-KeyFile = "/etc/scion/quic/tls.key"
+key_file = "/etc/scion/quic/tls.key"
 
-# SVCResolutionFraction enables SVC resolution for traffic to SVC
+# Enables SVC resolution for traffic to SVC
 # destinations in a way that is also compatible with control plane servers
 # that do not implement the SVC Resolution Mechanism. The value represents
 # the percentage of time, out of the total available context timeout,
@@ -111,5 +82,5 @@ KeyFile = "/etc/scion/quic/tls.key"
 # destination. If the value is 1 or more, then legacy behavior is
 # disabled, and data packets are never sent to SVC destinations unless the
 # resolution step is successful.
-ResolutionFraction = 0.0
+resolution_fraction = 0.0
 `
diff --git a/go/lib/pathstorage/pathstorage.go b/go/lib/pathstorage/pathstorage.go
index 61877349e..d6dc92a1e 100644
--- a/go/lib/pathstorage/pathstorage.go
+++ b/go/lib/pathstorage/pathstorage.go
@@ -81,7 +81,7 @@ func (cfg *PathDBConf) Sample(dst io.Writer, _ config.Path, ctx config.CtxMap) {
 }
 
 func (cfg *PathDBConf) ConfigName() string {
-	return "pathDB"
+	return "path_db"
 }
 
 // Validate validates the configuration, should be called after InitDefaults.
@@ -167,7 +167,7 @@ func (cfg *RevCacheConf) Sample(dst io.Writer, _ config.Path, _ config.CtxMap) {
 }
 
 func (cfg *RevCacheConf) ConfigName() string {
-	return "revCache"
+	return "rev_cache"
 }
 
 func (cfg *RevCacheConf) validateBackend() error {
@@ -190,39 +190,22 @@ func (cfg *RevCacheConf) validateConnection() error {
 // NewPathStorage creates a PathStorage from the given configs. Periodic
 // cleaners for the given databases have to be manually created and started
 // (see cleaner package).
-func NewPathStorage(pdbConf PathDBConf,
-	rcConf RevCacheConf) (pathdb.PathDB, revcache.RevCache, error) {
+func NewPathStorage(pdbConf PathDBConf) (pathdb.PathDB, revcache.RevCache, error) {
 
-	if sameBackend(pdbConf, rcConf) {
-		return newCombinedBackend(pdbConf, rcConf)
-	}
 	if err := pdbConf.Validate(); err != nil {
 		return nil, nil, common.NewBasicError("Invalid pathdb config", err)
 	}
-	if err := rcConf.Validate(); err != nil {
-		return nil, nil, common.NewBasicError("Invalid revcache config", err)
-	}
 	pdb, err := newPathDB(pdbConf)
 	if err != nil {
 		return nil, nil, err
 	}
-	rc, err := newRevCache(rcConf)
+	rc, err := newRevCache(pdbConf)
 	if err != nil {
 		return nil, nil, err
 	}
 	return pdb, rc, nil
 }
 
-func sameBackend(pdbConf PathDBConf, rcConf RevCacheConf) bool {
-	return pdbConf.Backend() == rcConf.Backend() && pdbConf.Backend() != BackendNone
-}
-
-func newCombinedBackend(pdbConf PathDBConf,
-	rcConf RevCacheConf) (pathdb.PathDB, revcache.RevCache, error) {
-
-	panic("Combined backend not supported")
-}
-
 func newPathDB(conf PathDBConf) (pathdb.PathDB, error) {
 	log.Info("Connecting PathDB", "backend", conf.Backend(), "connection", conf.Connection())
 	var err error
@@ -244,13 +227,11 @@ func newPathDB(conf PathDBConf) (pathdb.PathDB, error) {
 	return pdb, nil
 }
 
-func newRevCache(conf RevCacheConf) (revcache.RevCache, error) {
-	log.Info("Connecting RevCache", "backend", conf.Backend(), "connection", conf.Connection())
+func newRevCache(conf PathDBConf) (revcache.RevCache, error) {
 	switch conf.Backend() {
-	case BackendMem:
+	case BackendSqlite:
+		log.Info("Connecting RevCache", "backend", "memory")
 		return memrevcache.New(), nil
-	case BackendNone:
-		return nil, nil
 	default:
 		return nil, common.NewBasicError("Unsupported backend", nil, "backend", conf.Backend())
 	}
diff --git a/go/lib/profile/BUILD.bazel b/go/lib/profile/BUILD.bazel
deleted file mode 100644
index 6154a9a9b..000000000
--- a/go/lib/profile/BUILD.bazel
+++ /dev/null
@@ -1,9 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
-
-go_library(
-    name = "go_default_library",
-    srcs = ["profile.go"],
-    importpath = "github.com/scionproto/scion/go/lib/profile",
-    visibility = ["//visibility:public"],
-    deps = ["//go/lib/log:go_default_library"],
-)
diff --git a/go/lib/profile/profile.go b/go/lib/profile/profile.go
deleted file mode 100644
index 7471d61ae..000000000
--- a/go/lib/profile/profile.go
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2016 ETH Zurich
-//
-// 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 profile handles CPU and memory profiling. It should only be used for testing purposes,
-// and not generally enabled in production.
-package profile
-
-import (
-	"fmt"
-	"os"
-	"runtime"
-	"runtime/pprof"
-
-	"github.com/scionproto/scion/go/lib/log"
-)
-
-var cpuF, memF *os.File
-
-func Start(name string) {
-	startCpu(name)
-	startMem(name)
-}
-
-func startCpu(name string) {
-	var err error
-	path := fmt.Sprintf("%s.cpu.pprof", name)
-	cpuF, err = os.Create(path)
-	if err != nil {
-		panic(fmt.Sprintf("Could not create CPU profile: %v", err))
-	}
-	if err := pprof.StartCPUProfile(cpuF); err != nil {
-		panic(fmt.Sprintf("Could not start CPU profile: %v", err))
-	}
-	log.Info("CPU profiling started", "path", path)
-}
-
-func startMem(name string) {
-	var err error
-	path := fmt.Sprintf("%s.mem.pprof", name)
-	memF, err = os.Create(path)
-	if err != nil {
-		panic(fmt.Sprintf("Could not create Mem profile: %v", err))
-	}
-	log.Info("Mem profiling started", "rate", runtime.MemProfileRate)
-}
-
-func Stop() {
-	if cpuF != nil {
-		pprof.StopCPUProfile()
-		cpuF.Close()
-		log.Info("CPU profiling stopped")
-	}
-	if memF != nil {
-		runtime.GC()
-		if err := pprof.WriteHeapProfile(memF); err != nil {
-			panic(fmt.Sprintf("Could not write memory profile: %v", err))
-		}
-		memF.Close()
-		log.Info("Mem profiling stopped")
-	}
-}
diff --git a/go/lib/truststorage/truststorage.go b/go/lib/truststorage/truststorage.go
index 6240bf421..8bf168b46 100644
--- a/go/lib/truststorage/truststorage.go
+++ b/go/lib/truststorage/truststorage.go
@@ -81,7 +81,7 @@ func (cfg *TrustDBConf) Sample(dst io.Writer, path config.Path, ctx config.CtxMa
 }
 
 func (cfg *TrustDBConf) ConfigName() string {
-	return "trustDB"
+	return "trust_db"
 }
 
 func (cfg *TrustDBConf) Validate() error {
diff --git a/go/sciond/internal/config/config.go b/go/sciond/internal/config/config.go
index ad8e1d53a..2b568228a 100644
--- a/go/sciond/internal/config/config.go
+++ b/go/sciond/internal/config/config.go
@@ -36,13 +36,15 @@ var (
 var _ config.Config = (*Config)(nil)
 
 type Config struct {
-	General  env.General
-	Features env.Features
-	Logging  log.Config `toml:"log,omitempty"`
-	Metrics  env.Metrics
-	Tracing  env.Tracing
-	TrustDB  truststorage.TrustDBConf
-	SD       SDConfig
+	General  env.General              `toml:"general,omitempty"`
+	Features env.Features             `toml:"features,omitempty"`
+	Logging  log.Config               `toml:"log,omitempty"`
+	Metrics  env.Metrics              `toml:"metrics,omitempty"`
+	Tracing  env.Tracing              `toml:"tracing,omitempty"`
+	TrustDB  truststorage.TrustDBConf `toml:"trust_db,omitempty"`
+	// PathDB contains the configuration for the PathDB connection.
+	PathDB pathstorage.PathDBConf `toml:"path_db,omitempty"`
+	SD     SDConfig               `toml:"sd,omitempty"`
 }
 
 func (cfg *Config) InitDefaults() {
@@ -53,6 +55,7 @@ func (cfg *Config) InitDefaults() {
 		&cfg.Metrics,
 		&cfg.Tracing,
 		&cfg.TrustDB,
+		&cfg.PathDB,
 		&cfg.SD,
 	)
 }
@@ -64,6 +67,7 @@ func (cfg *Config) Validate() error {
 		&cfg.Logging,
 		&cfg.Metrics,
 		&cfg.TrustDB,
+		&cfg.PathDB,
 		&cfg.SD,
 	)
 }
@@ -76,6 +80,7 @@ func (cfg *Config) Sample(dst io.Writer, path config.Path, _ config.CtxMap) {
 		&cfg.Metrics,
 		&cfg.Tracing,
 		&cfg.TrustDB,
+		&cfg.PathDB,
 		&cfg.SD,
 	)
 }
@@ -89,14 +94,10 @@ var _ config.Config = (*SDConfig)(nil)
 type SDConfig struct {
 	// Address is the local address to listen on for SCION messages, and to send out messages to
 	// other nodes.
-	Address string
-	// PathDB contains the configuration for the PathDB connection.
-	PathDB pathstorage.PathDBConf
-	// RevCache contains the configuration for the RevCache connection.
-	RevCache pathstorage.RevCacheConf
+	Address string `toml:"address,omitempty"`
 	// QueryInterval specifies after how much time segments
 	// for a destination should be refetched.
-	QueryInterval util.DurWrap
+	QueryInterval util.DurWrap `toml:"query_interval,omitempty"`
 }
 
 func (cfg *SDConfig) InitDefaults() {
@@ -106,19 +107,17 @@ func (cfg *SDConfig) InitDefaults() {
 	if cfg.QueryInterval.Duration == 0 {
 		cfg.QueryInterval.Duration = DefaultQueryInterval
 	}
-	config.InitAll(&cfg.PathDB, &cfg.RevCache)
 }
 
 func (cfg *SDConfig) Validate() error {
 	if cfg.QueryInterval.Duration == 0 {
 		return serrors.New("QueryInterval must not be zero")
 	}
-	return config.ValidateAll(&cfg.PathDB, &cfg.RevCache)
+	return nil
 }
 
 func (cfg *SDConfig) Sample(dst io.Writer, path config.Path, ctx config.CtxMap) {
 	config.WriteString(dst, sdSample)
-	config.WriteSample(dst, path, ctx, &cfg.PathDB, &cfg.RevCache)
 }
 
 func (cfg *SDConfig) ConfigName() string {
diff --git a/go/sciond/internal/config/sample.go b/go/sciond/internal/config/sample.go
index 01a43898e..1f4a43eca 100644
--- a/go/sciond/internal/config/sample.go
+++ b/go/sciond/internal/config/sample.go
@@ -22,5 +22,5 @@ const sdSample = `
 address = "127.0.0.1:30255"
 
 # The time after which segments for a destination are refetched. (default 5m)
-QueryInterval = "5m"
+query_interval = "5m"
 `
diff --git a/go/sciond/main.go b/go/sciond/main.go
index 321f14b7b..7ad469204 100644
--- a/go/sciond/main.go
+++ b/go/sciond/main.go
@@ -87,7 +87,7 @@ func realMain() int {
 		log.Crit("Setup failed", "err", err)
 		return 1
 	}
-	pathDB, revCache, err := pathstorage.NewPathStorage(cfg.SD.PathDB, cfg.SD.RevCache)
+	pathDB, revCache, err := pathstorage.NewPathStorage(cfg.PathDB)
 	if err != nil {
 		log.Crit("Unable to initialize path storage", "err", err)
 		return 1
@@ -219,7 +219,7 @@ func setup() error {
 	if err := cfg.Validate(); err != nil {
 		return common.NewBasicError("unable to validate config", err)
 	}
-	topo, err := topology.FromJSONFile(cfg.General.Topology)
+	topo, err := topology.FromJSONFile(cfg.General.Topology())
 	if err != nil {
 		return common.NewBasicError("unable to load topology", err)
 	}
@@ -227,7 +227,7 @@ func setup() error {
 	if err := itopo.Update(topo); err != nil {
 		return common.NewBasicError("unable to set initial static topology", err)
 	}
-	infraenv.InitInfraEnvironment(cfg.General.Topology)
+	infraenv.InitInfraEnvironment(cfg.General.Topology())
 	return nil
 }
 
diff --git a/go/sig/internal/sigcmn/common.go b/go/sig/internal/sigcmn/common.go
index c47c2efd8..1a404315a 100644
--- a/go/sig/internal/sigcmn/common.go
+++ b/go/sig/internal/sigcmn/common.go
@@ -133,7 +133,7 @@ func initNetworkWithRealSCIOND(cfg sigconfig.SigConf,
 func newDispatcher(cfg sigconfig.SigConf) (reliable.Dispatcher, error) {
 	if cfg.DispatcherBypass == "" {
 		log.Info("Regular SCION dispatcher", "addr", cfg.DispatcherBypass)
-		return reliable.NewDispatcher(cfg.Dispatcher), nil
+		return reliable.NewDispatcher(""), nil
 	}
 	// Initialize dispatcher bypass.
 	log.Info("Bypassing SCION dispatcher", "addr", cfg.DispatcherBypass)
diff --git a/go/sig/internal/sigconfig/conf.go b/go/sig/internal/sigconfig/conf.go
index c1d439818..ab27d4a92 100644
--- a/go/sig/internal/sigconfig/conf.go
+++ b/go/sig/internal/sigconfig/conf.go
@@ -33,14 +33,12 @@ const (
 	DefaultTunRTableId = 11
 )
 
-var _ config.Config = (*Config)(nil)
-
 type Config struct {
 	Features env.Features
-	Logging  log.Config `toml:"log,omitempty"`
-	Metrics  env.Metrics
-	Sciond   env.SCIONDClient `toml:"sd_client"`
-	Sig      SigConf
+	Logging  log.Config       `toml:"log,omitempty"`
+	Metrics  env.Metrics      `toml:"metrics,omitempty"`
+	Sciond   env.SCIONDClient `toml:"sciond_connection,omitempty"`
+	Sig      SigConf          `toml:"sig,omitempty"`
 }
 
 func (cfg *Config) InitDefaults() {
@@ -82,65 +80,63 @@ var _ config.Config = (*SigConf)(nil)
 // SigConf contains the configuration specific to the SIG.
 type SigConf struct {
 	// ID of the SIG (required)
-	ID string
+	ID string `toml:"id,omitempty"`
 	// The SIG config json file. (required)
-	SIGConfig string
+	SIGConfig string `toml:"sig_config,omitempty"`
 	// IA the local IA (required)
-	IA addr.IA
+	IA addr.IA `toml:"isd_as,omitempty"`
 	// IP the bind IP address (required)
-	IP net.IP
+	IP net.IP `toml:"ip,omitempty"`
 	// Control data port, e.g. keepalives. (default DefaultCtrlPort)
-	CtrlPort uint16
+	CtrlPort uint16 `toml:"ctrl_port,omitempty"`
 	// Encapsulation data port. (default DefaultEncapPort)
-	EncapPort uint16
-	// SCION dispatcher path. (default "")
-	Dispatcher string
+	EncapPort uint16 `toml:"encap_port,omitempty"`
 	// Name of TUN device to create. (default DefaultTunName)
-	Tun string
+	Tun string `toml:"tun,omitempty"`
 	// TunRTableId the id of the routing table used in the SIG. (default DefaultTunRTableId)
-	TunRTableId int
+	TunRTableId int `toml:"tun_routing_table_id,omitempty"`
 	// IPv4 source address hint to put into routing table.
-	SrcIP4 net.IP
+	SrcIP4 net.IP `toml:"src_ipv4,omitempty"`
 	// IPv6 source address hint to put into routing table.
-	SrcIP6 net.IP
+	SrcIP6 net.IP `toml:"src_ipv6,omitempty"`
 	// DispatcherBypass is the overlay address (e.g. ":30041") to use when bypassing SCION
 	// dispatcher. If the field is empty bypass is not done and SCION dispatcher is used
 	// instead.
-	DispatcherBypass string
+	DispatcherBypass string `toml:"disaptcher_bypass,omitempty"`
 }
 
 // InitDefaults sets the default values to unset values.
 func (cfg *SigConf) InitDefaults() {
-	if cfg.CtrlPort == 0 {
-		cfg.CtrlPort = DefaultCtrlPort
-	}
-	if cfg.EncapPort == 0 {
-		cfg.EncapPort = DefaultEncapPort
-	}
-	if cfg.Tun == "" {
-		cfg.Tun = DefaultTunName
-	}
-	if cfg.TunRTableId == 0 {
-		cfg.TunRTableId = DefaultTunRTableId
-	}
 }
 
 // Validate validate the config and returns an error if a value is not valid.
 func (cfg *SigConf) Validate() error {
 	if cfg.ID == "" {
-		return serrors.New("ID must be set!")
+		return serrors.New("id must be set!")
 	}
 	if cfg.SIGConfig == "" {
-		return serrors.New("Config must be set!")
+		return serrors.New("sig_config must be set!")
 	}
 	if cfg.IA.IsZero() {
-		return serrors.New("IA must be set")
+		return serrors.New("isd_as must be set")
 	}
 	if cfg.IA.IsWildcard() {
-		return serrors.New("Wildcard IA not allowed")
+		return serrors.New("Wildcard isd_as not allowed")
 	}
 	if cfg.IP.IsUnspecified() {
-		return serrors.New("IP must be set")
+		return serrors.New("ip must be set")
+	}
+	if cfg.CtrlPort == 0 {
+		cfg.CtrlPort = DefaultCtrlPort
+	}
+	if cfg.EncapPort == 0 {
+		cfg.EncapPort = DefaultEncapPort
+	}
+	if cfg.Tun == "" {
+		cfg.Tun = DefaultTunName
+	}
+	if cfg.TunRTableId == 0 {
+		cfg.TunRTableId = DefaultTunRTableId
 	}
 	return nil
 }
diff --git a/go/sig/internal/sigconfig/sample.go b/go/sig/internal/sigconfig/sample.go
index 0952eb926..e09ab5412 100644
--- a/go/sig/internal/sigconfig/sample.go
+++ b/go/sig/internal/sigconfig/sample.go
@@ -18,29 +18,26 @@ const idSample = "sig4"
 
 const sigSample = `
 # ID of the SIG. (required)
-ID = "%s"
+id = "%s"
 
 # The SIG config json file. (required)
-SIGConfig = "/etc/scion/sig/sig.json"
+sig_config = "/etc/scion/sig/sig.json"
 
-# The local IA. (required)
-IA = "1-ff00:0:113"
+# The local ISD-AS. (required)
+isd_as = "1-ff00:0:113"
 
 # The bind IP address. (required)
-IP = "192.0.2.100"
+ip = "192.0.2.100"
 
 # Control data port, e.g. keepalives. (default 30256)
-CtrlPort = 30256
+ctrl_port = 30256
 
 # Encapsulation data port. (default 30056)
-EncapPort = 30056
-
-# SCION dispatcher path. (default "")
-Dispatcher = ""
+encap_port = 30056
 
 # Name of TUN device to create. (default DefaultTunName)
-Tun = "sig"
+tun = "sig"
 
 # Id of the routing table. (default 11)
-TunRTableId = 11
+tun_routing_table_id = 11
 `
diff --git a/python/topology/go.py b/python/topology/go.py
index 835c2f933..9537dce07 100755
--- a/python/topology/go.py
+++ b/python/topology/go.py
@@ -86,15 +86,12 @@ class GoGenerator(object):
         config_dir = '/share/conf' if self.args.docker else os.path.join(base, name)
         raw_entry = {
             'general': {
-                'ID': name,
-                'ConfigDir': config_dir,
+                'id': name,
+                'config_dir': config_dir,
             },
             'log': self._log_entry(name),
             'metrics': {
-                'Prometheus': prom_addr_br(name, v, DEFAULT_BR_PROM_PORT),
-            },
-            'br': {
-                'Profile': False,
+                'prometheus': prom_addr_br(name, v, DEFAULT_BR_PROM_PORT),
             },
         }
         return raw_entry
@@ -115,35 +112,26 @@ class GoGenerator(object):
             base, name)
         raw_entry = {
             'general': {
-                'ID': name,
-                'ConfigDir': config_dir,
-                'ReconnectToDispatcher': True,
+                'id': name,
+                'config_dir': config_dir,
+                'reconnect_to_dispatcher': True,
             },
             'log': self._log_entry(name),
-            'trustDB': {
-                'Backend': 'sqlite',
-                'Connection': os.path.join(self.db_dir, '%s.trust.db' % name),
+            'trust_db': {
+                'backend': 'sqlite',
+                'connection': os.path.join(self.db_dir, '%s.trust.db' % name),
             },
-            'beaconDB':     {
-                'Backend': 'sqlite',
-                'Connection': os.path.join(self.db_dir, '%s.beacon.db' % name),
+            'beacon_db':     {
+                'backend': 'sqlite',
+                'connection': os.path.join(self.db_dir, '%s.beacon.db' % name),
+            },
+            'path_db': {
+                'backend': 'sqlite',
+                'connection': os.path.join(self.db_dir, '%s.path.db' % name),
             },
             'tracing': self._tracing_entry(),
             'metrics': self._metrics_entry(name, infra_elem, CS_PROM_PORT),
             'quic': self._quic_conf_entry(CS_QUIC_PORT, self.args.svcfrac, infra_elem),
-            'cs': {
-                'LeafReissueLeadTime': "6h",
-                'IssuerReissueLeadTime': "3d",
-                'ReissueRate': "10s",
-                'ReissueTimeout': "5s",
-            },
-            'ps': {
-                'pathDB': {
-                    'Backend': 'sqlite',
-                    'Connection': os.path.join(self.db_dir, '%s.path.db' % name),
-                },
-                'SegSync': True,
-            },
         }
         return raw_entry
 
@@ -173,9 +161,9 @@ class GoGenerator(object):
                 'ReconnectToDispatcher': True,
             },
             'log': self._log_entry(name),
-            'trustDB': {
-                'Backend': 'sqlite',
-                'Connection': os.path.join(self.db_dir, '%s.trust.db' % name),
+            'trust_db': {
+                'backend': 'sqlite',
+                'connection': os.path.join(self.db_dir, '%s.trust.db' % name),
             },
             'tracing': self._tracing_entry(),
             'metrics': self._metrics_entry(name, infra_elem, CO_PROM_PORT),
@@ -250,24 +238,24 @@ class GoGenerator(object):
         ip = sciond_ip(self.args.docker, topo_id, self.args.networks)
         raw_entry = {
             'general': {
-                'ID': name,
-                'ConfigDir': config_dir,
-                'ReconnectToDispatcher': True,
+                'id': name,
+                'config_dir': config_dir,
+                'reconnect_to_dispatcher': True,
             },
             'log': self._log_entry(name),
-            'trustDB': {
-                'Backend': 'sqlite',
-                'Connection': os.path.join(self.db_dir, '%s.trust.db' % name),
+            'trust_db': {
+                'backend': 'sqlite',
+                'connection': os.path.join(self.db_dir, '%s.trust.db' % name),
+            },
+            'path_db': {
+                'connection': os.path.join(self.db_dir, '%s.path.db' % name),
             },
             'sd': {
                 'address': socket_address_str(ip, SD_API_PORT),
-                'pathDB': {
-                    'Connection': os.path.join(self.db_dir, '%s.path.db' % name),
-                },
             },
             'tracing': self._tracing_entry(),
             'metrics': {
-                'Prometheus': socket_address_str(ip, SCIOND_PROM_PORT)
+                'prometheus': socket_address_str(ip, SCIOND_PROM_PORT)
             },
             'quic': self._quic_conf_entry(SD_QUIC_PORT, self.args.svcfrac),
         }
@@ -299,11 +287,11 @@ class GoGenerator(object):
                                                self.args.networks, DISP_PROM_PORT, name)
         return {
             'dispatcher': {
-                'ID': name,
+                'id': name,
             },
             'log': self._log_entry(name),
             'metrics': {
-                'Prometheus': prometheus_addr,
+                'prometheus': prometheus_addr,
             },
         }
 
@@ -322,16 +310,13 @@ class GoGenerator(object):
                 'path': os.path.join(self.log_dir, "%s.log" % name),
                 'level': self.log_level,
             },
-            'console': {
-                'level': 'crit',
-            },
         }
         return entry
 
     def _metrics_entry(self, name, infra_elem, base_port):
         prom_addr = prom_addr_infra(self.args.docker, name, infra_elem, base_port)
         return {
-            'Prometheus': prom_addr
+            'prometheus': prom_addr
         }
 
     def _quic_conf_entry(self, port, svcfrac, elem=None):
@@ -341,7 +326,7 @@ class GoGenerator(object):
             port = pub['Public']['L4Port']+1
         return {
             'address':  '[%s]:%s' % (addr, port),
-            'CertFile': os.path.join(self.certs_dir, 'tls.pem'),
-            'KeyFile': os.path.join(self.certs_dir, 'tls.key'),
-            'ResolutionFraction': svcfrac,
+            'cert_file': os.path.join(self.certs_dir, 'tls.pem'),
+            'key_file': os.path.join(self.certs_dir, 'tls.key'),
+            'resolution_fraction': svcfrac,
         }
diff --git a/python/topology/sig.py b/python/topology/sig.py
index a79d0c9c7..91fc6036b 100644
--- a/python/topology/sig.py
+++ b/python/topology/sig.py
@@ -148,12 +148,12 @@ class SIGGenerator(object):
 
         sig_conf = {
             'sig': {
-                'ID': name,
-                'SIGConfig': 'conf/cfg.json',
-                'IA': str(topo_id),
-                'IP': str(net[ipv]),
+                'id': name,
+                'sig_config': 'conf/cfg.json',
+                'isd_as': str(topo_id),
+                'ip': str(net[ipv]),
             },
-            'sd_client': {
+            'sciond_connection': {
                 'address': socket_address_str(sciond_ip, SD_API_PORT),
             },
             'log': {
@@ -166,7 +166,7 @@ class SIGGenerator(object):
                 }
             },
             'metrics': {
-                'Prometheus': '0.0.0.0:%s' % SIG_PROM_PORT
+                'prometheus': '0.0.0.0:%s' % SIG_PROM_PORT
             }
         }
         path = os.path.join(topo_id.base_dir(self.args.output_dir), name, SIG_CONFIG_NAME)


Test patch:
diff --git a/acceptance/sig_failover/testdata/1-ff00_0_110/dispatcher/disp.toml b/acceptance/sig_failover/testdata/1-ff00_0_110/dispatcher/disp.toml
index eb4920c21..c32395696 100644
--- a/acceptance/sig_failover/testdata/1-ff00_0_110/dispatcher/disp.toml
+++ b/acceptance/sig_failover/testdata/1-ff00_0_110/dispatcher/disp.toml
@@ -1,8 +1,8 @@
 [dispatcher]
-ID = "disp_1-ff00_0_110"
+id = "disp_1-ff00_0_110"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
 [log.file]
 level = "trace"
diff --git a/acceptance/sig_failover/testdata/1-ff00_0_110/sig/sig.toml b/acceptance/sig_failover/testdata/1-ff00_0_110/sig/sig.toml
index 28f45a7c6..ee88a4ba9 100644
--- a/acceptance/sig_failover/testdata/1-ff00_0_110/sig/sig.toml
+++ b/acceptance/sig_failover/testdata/1-ff00_0_110/sig/sig.toml
@@ -1,14 +1,14 @@
 [sig]
-ID = "sig1-ff00_0_110"
-SIGConfig = "/cfg.json"
-IA = "1-ff00:0:110"
-IP = "242.254.100.2"
+id = "sig1-ff00_0_110"
+sig_config = "/cfg.json"
+isd_as = "1-ff00:0:110"
+ip = "242.254.100.2"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
-[sd_client]
-FakeData = "/fake_sciond.json"
+[sciond_connection]
+fake_data = "/fake_sciond.json"
 
 [log.file]
 flush_interval = 1
diff --git a/acceptance/sig_failover/testdata/1-ff00_0_111/dispatcher/disp.toml b/acceptance/sig_failover/testdata/1-ff00_0_111/dispatcher/disp.toml
index 62860d93e..8cd7ee794 100644
--- a/acceptance/sig_failover/testdata/1-ff00_0_111/dispatcher/disp.toml
+++ b/acceptance/sig_failover/testdata/1-ff00_0_111/dispatcher/disp.toml
@@ -1,8 +1,8 @@
 [dispatcher]
-ID = "disp_1-ff00_0_111"
+id = "disp_1-ff00_0_111"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
 [log.file]
 level = "trace"
diff --git a/acceptance/sig_failover/testdata/1-ff00_0_111/sig/sig.toml b/acceptance/sig_failover/testdata/1-ff00_0_111/sig/sig.toml
index 459ab5efb..0393ea62f 100644
--- a/acceptance/sig_failover/testdata/1-ff00_0_111/sig/sig.toml
+++ b/acceptance/sig_failover/testdata/1-ff00_0_111/sig/sig.toml
@@ -1,14 +1,14 @@
 [sig]
-ID = "sig1-ff00_0_111"
-SIGConfig = "/cfg.json"
-IA = "1-ff00:0:111"
-IP = "242.254.200.2"
+id = "sig1-ff00_0_111"
+sig_config = "/cfg.json"
+isd_as = "1-ff00:0:111"
+ip = "242.254.200.2"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
-[sd_client]
-FakeData = "/fake_sciond.json"
+[sciond_connection]
+fake_data = "/fake_sciond.json"
 
 [log.file]
 flush_interval = 1
diff --git a/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/dispatcher/disp.toml b/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/dispatcher/disp.toml
index eb4920c21..c32395696 100644
--- a/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/dispatcher/disp.toml
+++ b/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/dispatcher/disp.toml
@@ -1,8 +1,8 @@
 [dispatcher]
-ID = "disp_1-ff00_0_110"
+id = "disp_1-ff00_0_110"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
 [log.file]
 level = "trace"
diff --git a/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/sig.toml b/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/sig.toml
index 28f45a7c6..ee88a4ba9 100644
--- a/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/sig.toml
+++ b/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/sig.toml
@@ -1,14 +1,14 @@
 [sig]
-ID = "sig1-ff00_0_110"
-SIGConfig = "/cfg.json"
-IA = "1-ff00:0:110"
-IP = "242.254.100.2"
+id = "sig1-ff00_0_110"
+sig_config = "/cfg.json"
+isd_as = "1-ff00:0:110"
+ip = "242.254.100.2"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
-[sd_client]
-FakeData = "/fake_sciond.json"
+[sciond_connection]
+fake_data = "/fake_sciond.json"
 
 [log.file]
 flush_interval = 1
diff --git a/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/dispatcher/disp.toml b/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/dispatcher/disp.toml
index 62860d93e..8cd7ee794 100644
--- a/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/dispatcher/disp.toml
+++ b/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/dispatcher/disp.toml
@@ -1,8 +1,8 @@
 [dispatcher]
-ID = "disp_1-ff00_0_111"
+id = "disp_1-ff00_0_111"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
 [log.file]
 level = "trace"
diff --git a/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/sig.toml b/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/sig.toml
index 459ab5efb..0393ea62f 100644
--- a/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/sig.toml
+++ b/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/sig.toml
@@ -1,14 +1,14 @@
 [sig]
-ID = "sig1-ff00_0_111"
-SIGConfig = "/cfg.json"
-IA = "1-ff00:0:111"
-IP = "242.254.200.2"
+id = "sig1-ff00_0_111"
+sig_config = "/cfg.json"
+isd_as = "1-ff00:0:111"
+ip = "242.254.200.2"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
-[sd_client]
-FakeData = "/fake_sciond.json"
+[sciond_connection]
+fake_data = "/fake_sciond.json"
 
 [log.file]
 flush_interval = 1
diff --git a/acceptance/topo_cs_reload/testdata/cs.toml b/acceptance/topo_cs_reload/testdata/cs.toml
index 04840a77a..babb4e6f6 100644
--- a/acceptance/topo_cs_reload/testdata/cs.toml
+++ b/acceptance/topo_cs_reload/testdata/cs.toml
@@ -1,22 +1,19 @@
 [general]
-ReconnectToDispatcher = true
-ConfigDir = "/"
-ID = "cs1-ff00_0_110-1"
+reconnect_to_dispatcher = true
+config_dir = "/"
+id = "cs1-ff00_0_110-1"
 
-[trustDB]
-Connection = "cs1-ff00_0_110-1.trust.db"
-Backend = "sqlite"
+[trust_db]
+connection = "cs1-ff00_0_110-1.trust.db"
 
 [log.console]
 level = "trace"
 
-[ps.pathDB]
-Connection = "cs1-ff00_0_110-1.path.db"
-Backend = "sqlite"
+[path_db]
+connection = "cs1-ff00_0_110-1.path.db"
 
-[beaconDB]
-Backend = "sqlite"
-Connection = "cs1-ff00_0_110-1.beacon.db"
+[beacon_db]
+connection = "cs1-ff00_0_110-1.beacon.db"
 
 [metrics]
-Prometheus = "242.253.100.2:30453"
+prometheus = "242.253.100.2:30453"
diff --git a/acceptance/topo_cs_reload/testdata/disp.toml b/acceptance/topo_cs_reload/testdata/disp.toml
index 21f4158b5..44753d9c1 100644
--- a/acceptance/topo_cs_reload/testdata/disp.toml
+++ b/acceptance/topo_cs_reload/testdata/disp.toml
@@ -1,8 +1,8 @@
 [dispatcher]
-ID = "disp_1-ff00_0_110"
+id = "disp_1-ff00_0_110"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
 [log.console]
 level = "trace"
diff --git a/acceptance/topo_cs_reload/testdata/sd.toml b/acceptance/topo_cs_reload/testdata/sd.toml
index 9b851e3b9..24d47ceb5 100644
--- a/acceptance/topo_cs_reload/testdata/sd.toml
+++ b/acceptance/topo_cs_reload/testdata/sd.toml
@@ -1,18 +1,16 @@
 [general]
-ReconnectToDispatcher = true
-ConfigDir = "/"
-ID = "sd1-ff00_0_110"
+reconnect_to_dispatcher = true
+config_dir = "/"
+id = "sd1-ff00_0_110"
 
-[trustDB]
-Connection = "sd1-ff00_0_110.trust.db"
-Backend = "sqlite"
+[trust_db]
+connection = "sd1-ff00_0_110.trust.db"
 
 [log.console]
 level = "trace"
 
 [sd]
-Address = "242.253.100.3:30255"
+address = "242.253.100.3:30255"
 
-[sd.pathDB]
-Connection = "sd1-ff00_0_110.path.db"
-Backend = "sqlite"
+[path_db]
+connection = "sd1-ff00_0_110.path.db"
diff --git a/acceptance/topo_sd_reload/testdata/disp.toml b/acceptance/topo_sd_reload/testdata/disp.toml
index 21f4158b5..44753d9c1 100644
--- a/acceptance/topo_sd_reload/testdata/disp.toml
+++ b/acceptance/topo_sd_reload/testdata/disp.toml
@@ -1,8 +1,8 @@
 [dispatcher]
-ID = "disp_1-ff00_0_110"
+id = "disp_1-ff00_0_110"
 
 [features]
-AllowRunAsRoot = true
+allow_run_as_root = true
 
 [log.console]
 level = "trace"
diff --git a/acceptance/topo_sd_reload/testdata/sd.toml b/acceptance/topo_sd_reload/testdata/sd.toml
index c9d676bf6..286a587c5 100644
--- a/acceptance/topo_sd_reload/testdata/sd.toml
+++ b/acceptance/topo_sd_reload/testdata/sd.toml
@@ -1,21 +1,19 @@
 [general]
-ReconnectToDispatcher = true
-ConfigDir = "/"
-ID = "sd1-ff00_0_110"
+reconnect_to_dispatcher = true
+config_dir = "/"
+id = "sd1-ff00_0_110"
 
-[trustDB]
-Connection = "sd1-ff00_0_110.trust.db"
-Backend = "sqlite"
+[trust_db]
+connection = "sd1-ff00_0_110.trust.db"
 
 [log.console]
 level = "trace"
 
 [sd]
-Public = "[242.254.100.2]:0"
+address = "[242.254.100.2]:0"
 
-[sd.pathDB]
-Connection = "sd1-ff00_0_110.path.db"
-Backend = "sqlite"
+[path_db]
+connection = "sd1-ff00_0_110.path.db"
 
 [metrics]
-Prometheus = "242.254.100.2:30455"
+prometheus = "242.254.100.2:30455"
diff --git a/docker/testimages/BUILD.bazel b/docker/testimages/BUILD.bazel
index f7409b562..90c4c886c 100644
--- a/docker/testimages/BUILD.bazel
+++ b/docker/testimages/BUILD.bazel
@@ -55,7 +55,6 @@ container_image(
         ":sig_entrypoint",
 
     ],
-    stamp = True,
     workdir = "/share",
     entrypoint = ["./sig.sh"],
 )
@@ -118,7 +117,6 @@ container_image(
         ":tester_integration_scripts",
         ":tester_binaries",
     ],
-    stamp = True,
     workdir = "/share",
     cmd = "tail -f /dev/null"
 )
diff --git a/go/border/brconf/params_test.go b/go/border/brconf/params_test.go
index 034cdb532..7031c2921 100644
--- a/go/border/brconf/params_test.go
+++ b/go/border/brconf/params_test.go
@@ -44,7 +44,6 @@ func InitTestConfig(cfg *Config) {
 }
 
 func InitTestBRConfig(cfg *BR) {
-	cfg.Profile = true
 }
 
 func CheckTestConfig(t *testing.T, cfg *Config, id string) {
@@ -54,6 +53,5 @@ func CheckTestConfig(t *testing.T, cfg *Config, id string) {
 }
 
 func CheckTestBRConfig(t *testing.T, cfg *BR) {
-	assert.False(t, cfg.Profile)
 	assert.Equal(t, FailActionFatal, cfg.RollbackFailAction)
 }
diff --git a/go/cs/config/config_test.go b/go/cs/config/config_test.go
index c5011b965..bf2dfa7ac 100644
--- a/go/cs/config/config_test.go
+++ b/go/cs/config/config_test.go
@@ -62,6 +62,7 @@ func InitTestConfig(cfg *Config) {
 	logtest.InitTestLogging(&cfg.Logging)
 	truststoragetest.InitTestConfig(&cfg.TrustDB)
 	beaconstoragetest.InitTestBeaconDBConf(&cfg.BeaconDB)
+	pathstoragetest.InitTestPathDBConf(&cfg.PathDB)
 	InitTestBSConfig(&cfg.BS)
 }
 
@@ -81,8 +82,8 @@ func CheckTestConfig(t *testing.T, cfg *Config, id string) {
 	logtest.CheckTestLogging(t, &cfg.Logging, id)
 	truststoragetest.CheckTestConfig(t, &cfg.TrustDB, id)
 	beaconstoragetest.CheckTestBeaconDBConf(t, &cfg.BeaconDB, id)
+	pathstoragetest.CheckTestPathDBConf(t, &cfg.PathDB, id)
 	CheckTestBSConfig(t, &cfg.BS)
-	CheckTestCSConfig(t, &cfg.CS)
 	CheckTestPSConfig(t, &cfg.PS, id)
 }
 
@@ -105,30 +106,9 @@ func CheckTestPolicies(t *testing.T, cfg *Policies) {
 	assert.Empty(t, cfg.DownRegistration)
 }
 
-func InitTestCSConfig(cfg *CSConfig) {
-	cfg.AutomaticRenewal = true
-	cfg.DisableCorePush = true
-}
-
-func CheckTestCSConfig(t *testing.T, cfg *CSConfig) {
-	assert.Equal(t, ReissReqRate, cfg.ReissueRate.Duration)
-	assert.Equal(t, ReissueReqTimeout, cfg.ReissueTimeout.Duration)
-	assert.False(t, cfg.AutomaticRenewal)
-	assert.Equal(t, LeafReissTime, cfg.LeafReissueLeadTime.Duration)
-	assert.Equal(t, IssuerReissTime, cfg.IssuerReissueLeadTime.Duration)
-	assert.False(t, cfg.DisableCorePush)
-}
-
 func InitTestPSConfig(cfg *PSConfig) {
-	cfg.SegSync = true
-	pathstoragetest.InitTestPathDBConf(&cfg.PathDB)
-	pathstoragetest.InitTestRevCacheConf(&cfg.RevCache)
 }
 
 func CheckTestPSConfig(t *testing.T, cfg *PSConfig, id string) {
-	pathstoragetest.CheckTestPathDBConf(t, &cfg.PathDB, id)
-	pathstoragetest.CheckTestRevCacheConf(t, &cfg.RevCache)
-	assert.False(t, cfg.SegSync)
 	assert.Equal(t, DefaultQueryInterval, cfg.QueryInterval.Duration)
-	assert.Equal(t, DefaultCryptoSyncInterval, cfg.CryptoSyncInterval.Duration)
 }
diff --git a/go/godispatcher/internal/config/config_test.go b/go/godispatcher/internal/config/config_test.go
index 01591cef5..c4603f69b 100644
--- a/go/godispatcher/internal/config/config_test.go
+++ b/go/godispatcher/internal/config/config_test.go
@@ -44,7 +44,6 @@ func InitTestConfig(cfg *Config) {
 	envtest.InitTest(nil, &cfg.Metrics, nil, nil)
 	logtest.InitTestLogging(&cfg.Logging)
 	cfg.Dispatcher.DeleteSocket = true
-	cfg.Dispatcher.PerfData = "Invalid"
 }
 
 func CheckTestConfig(t *testing.T, cfg *Config, id string) {
@@ -54,6 +53,5 @@ func CheckTestConfig(t *testing.T, cfg *Config, id string) {
 	assert.Equal(t, reliable.DefaultDispPath, cfg.Dispatcher.ApplicationSocket)
 	assert.Equal(t, reliable.DefaultDispSocketFileMode, int(cfg.Dispatcher.SocketFileMode))
 	assert.Equal(t, topology.EndhostPort, cfg.Dispatcher.OverlayPort)
-	assert.Empty(t, cfg.Dispatcher.PerfData)
 	assert.False(t, cfg.Dispatcher.DeleteSocket)
 }
diff --git a/go/lib/env/envtest/config.go b/go/lib/env/envtest/config.go
index 547ba919e..fa1e540df 100644
--- a/go/lib/env/envtest/config.go
+++ b/go/lib/env/envtest/config.go
@@ -76,7 +76,7 @@ func CheckTest(t *testing.T, general *env.General, metrics *env.Metrics,
 func CheckTestGeneral(t *testing.T, cfg *env.General, id string) {
 	assert.Equal(t, id, cfg.ID)
 	assert.Equal(t, "/etc/scion", cfg.ConfigDir)
-	assert.Equal(t, filepath.Join(cfg.ConfigDir, env.DefaultTopologyPath), cfg.Topology)
+	assert.Equal(t, filepath.Join(cfg.ConfigDir, env.TopologyFile), cfg.Topology())
 	assert.False(t, cfg.ReconnectToDispatcher)
 }
 
diff --git a/go/lib/env/testdata/cs.toml b/go/lib/env/testdata/cs.toml
deleted file mode 100644
index 5267c3f86..000000000
--- a/go/lib/env/testdata/cs.toml
+++ /dev/null
@@ -1,55 +0,0 @@
-[general]
-  # The ID of the service. This is used to choose the relevant portion of the
-  # topology file for some services.
-  ID = "cs1-ff00_0_110-1"
-
-  # Directory for loading AS information, certs, keys, path policy, topology
-  ConfigDir = "testdata"
-
-  # Topology file. If not specified, topology.json is loaded from the config
-  # directory.
-  Topology = "testdata/dir/topology.json"
-
-  # ReconnectToDispatcher can be set to true to enable transparent dispatcher
-  # reconnects.
-  ReconnectToDispatcher = true
-
-[log]
-  [log.file]
-    # Location of the logging file.
-    Path = "logs/cert_srv.test.log"
-
-    # File logging level (trace|debug|info|warn|error|crit) (default debug)
-    level = "debug"
-
-    # Max size of log file in MiB (default 50)
-    # Size = 50
-
-    # Max age of log file in days (default 7)
-    # MaxAge = 7
-
-    # MaxBackups is the maximum number of log files to retain. (default 10)
-    # MaxBackups = 10
-
-    # How frequently to flush to the log file, in seconds. If 0, all messages
-    # are immediately flushed. If negative, messages are never flushed
-    # automatically. (default 5)
-    flush_interval = 10
-  [log.console]
-    # Console logging level (trace|debug|info|warn|error|crit) (default crit)
-    level = "warn"
-
-[metrics]
-  # The address to export prometheus metrics on. If not set, metrics are not
-  # exported.
-  # Prometheus = "127.0.0.1:8000"
-
-[infra]
-  # Node type. Must be one of BS, PS, CS, RS or DS.
-  Type = "CS"
-
-[trust]
-  # Database for trust information. If a file already exists, it is treated as
-  # initial trust information. If a file does not exist, it is created from the
-  # initial information found under directory/certs (not implemented yet).
-  TrustDB = "trustdb"
diff --git a/go/lib/env/testdata/dir/topology.json b/go/lib/env/testdata/dir/topology.json
deleted file mode 100644
index 492cde67d..000000000
--- a/go/lib/env/testdata/dir/topology.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "Overlay": "UDP/IPv4",
-  "ISD_AS": "1-ff00:0:110",
-  "PathService": {
-    "ps1-ff00_0_110-1": {"Addrs": {
-        "IPv4": {"Public": {"Addr": "127.0.0.55", "L4Port": 30073}}
-    }}
-  }
-}
diff --git a/go/sciond/internal/config/config_test.go b/go/sciond/internal/config/config_test.go
index 7de0b1358..61872279a 100644
--- a/go/sciond/internal/config/config_test.go
+++ b/go/sciond/internal/config/config_test.go
@@ -44,24 +44,22 @@ func InitTestConfig(cfg *Config) {
 	envtest.InitTest(&cfg.General, &cfg.Metrics, &cfg.Tracing, nil)
 	logtest.InitTestLogging(&cfg.Logging)
 	truststoragetest.InitTestConfig(&cfg.TrustDB)
+	pathstoragetest.InitTestPathDBConf(&cfg.PathDB)
 	InitTestSDConfig(&cfg.SD)
 }
 
 func InitTestSDConfig(cfg *SDConfig) {
-	pathstoragetest.InitTestPathDBConf(&cfg.PathDB)
-	pathstoragetest.InitTestRevCacheConf(&cfg.RevCache)
 }
 
 func CheckTestConfig(t *testing.T, cfg *Config, id string) {
 	envtest.CheckTest(t, &cfg.General, &cfg.Metrics, &cfg.Tracing, nil, id)
 	logtest.CheckTestLogging(t, &cfg.Logging, id)
 	truststoragetest.CheckTestConfig(t, &cfg.TrustDB, id)
+	pathstoragetest.CheckTestPathDBConf(t, &cfg.PathDB, id)
 	CheckTestSDConfig(t, &cfg.SD, id)
 }
 
 func CheckTestSDConfig(t *testing.T, cfg *SDConfig, id string) {
-	pathstoragetest.CheckTestPathDBConf(t, &cfg.PathDB, id)
-	pathstoragetest.CheckTestRevCacheConf(t, &cfg.RevCache)
 	assert.Equal(t, sciond.DefaultSCIONDAddress, cfg.Address)
 	assert.Equal(t, DefaultQueryInterval, cfg.QueryInterval.Duration)
 }
diff --git a/go/sig/internal/sigconfig/conf_test.go b/go/sig/internal/sigconfig/conf_test.go
index 30eae23d7..16ca086cf 100644
--- a/go/sig/internal/sigconfig/conf_test.go
+++ b/go/sig/internal/sigconfig/conf_test.go
@@ -62,7 +62,6 @@ func CheckTestSigConf(t *testing.T, cfg *SigConf, id string) {
 	assert.Equal(t, net.ParseIP("192.0.2.100"), cfg.IP)
 	assert.Equal(t, DefaultCtrlPort, int(cfg.CtrlPort))
 	assert.Equal(t, DefaultEncapPort, int(cfg.EncapPort))
-	assert.Empty(t, cfg.Dispatcher)
 	assert.Equal(t, DefaultTunName, cfg.Tun)
 	assert.Equal(t, DefaultTunRTableId, cfg.TunRTableId)
 }