Repository: scionproto/scion
Pull request #3849 (2020-08-10 08:32:34)

sig: remove IA from config, make IP optional
The local IA in the sig.toml config is redundant as it can be obtained
from sciond. Simply removed the option.
The bind IP option is made optional by defaulting to a sensible local
IP, using the same logic used e.g. in showpaths.

Both of these changes combined allow us to package a default sig.toml
config file that (in most cases) "just works" without modifications.

<!-- 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/3849)
<!-- Reviewable:end -->



Patch:
diff --git a/go/lib/sciond/fake/fake.go b/go/lib/sciond/fake/fake.go
index fdb28ab87..686898f44 100644
--- a/go/lib/sciond/fake/fake.go
+++ b/go/lib/sciond/fake/fake.go
@@ -56,6 +56,7 @@ func NewFromFile(file string) (sciond.Connector, error) {
 
 // Script describes the path entries a fake SCIOND should respond with.
 type Script struct {
+	IA      addr.IA  `json:"ia"`
 	Entries []*Entry `json:"entries"`
 }
 
@@ -218,7 +219,7 @@ func (c connector) adapter(paths []*Path) []snet.Path {
 }
 
 func (c connector) LocalIA(ctx context.Context) (addr.IA, error) {
-	panic("not implemented")
+	return c.script.IA, nil
 }
 
 func (c connector) ASInfo(ctx context.Context, ia addr.IA) (*sciond.ASInfoReply, error) {
diff --git a/go/pkg/sig/config/BUILD.bazel b/go/pkg/sig/config/BUILD.bazel
index c0da1581e..08ed40497 100644
--- a/go/pkg/sig/config/BUILD.bazel
+++ b/go/pkg/sig/config/BUILD.bazel
@@ -9,7 +9,6 @@ go_library(
     importpath = "github.com/scionproto/scion/go/pkg/sig/config",
     visibility = ["//visibility:public"],
     deps = [
-        "//go/lib/addr:go_default_library",
         "//go/lib/config:go_default_library",
         "//go/lib/env:go_default_library",
         "//go/lib/log:go_default_library",
diff --git a/go/pkg/sig/config/config.go b/go/pkg/sig/config/config.go
index 015ed0242..aec9f2d05 100644
--- a/go/pkg/sig/config/config.go
+++ b/go/pkg/sig/config/config.go
@@ -19,7 +19,6 @@ import (
 	"io"
 	"net"
 
-	"github.com/scionproto/scion/go/lib/addr"
 	"github.com/scionproto/scion/go/lib/config"
 	"github.com/scionproto/scion/go/lib/env"
 	"github.com/scionproto/scion/go/lib/log"
@@ -79,9 +78,7 @@ type SigConf struct {
 	ID string `toml:"id,omitempty"`
 	// The SIG config json file. (required)
 	SIGConfig string `toml:"sig_config,omitempty"`
-	// IA the local IA (required)
-	IA addr.IA `toml:"isd_as,omitempty"`
-	// IP the bind IP address (required)
+	// IP the bind IP address (optional, default determined based on route to control service)
 	IP net.IP `toml:"ip,omitempty"`
 	// Control data port, e.g. keepalives. (default DefaultCtrlPort)
 	CtrlPort uint16 `toml:"ctrl_port,omitempty"`
@@ -113,15 +110,6 @@ func (cfg *SigConf) Validate() error {
 	if cfg.SIGConfig == "" {
 		return serrors.New("sig_config must be set!")
 	}
-	if cfg.IA.IsZero() {
-		return serrors.New("isd_as must be set")
-	}
-	if cfg.IA.IsWildcard() {
-		return serrors.New("Wildcard isd_as not allowed")
-	}
-	if cfg.IP.IsUnspecified() {
-		return serrors.New("ip must be set")
-	}
 	if cfg.CtrlPort == 0 {
 		cfg.CtrlPort = DefaultCtrlPort
 	}
diff --git a/go/pkg/sig/config/sample.go b/go/pkg/sig/config/sample.go
index 1a7093f87..c8e52bef2 100644
--- a/go/pkg/sig/config/sample.go
+++ b/go/pkg/sig/config/sample.go
@@ -23,10 +23,7 @@ id = "%s"
 # The SIG config json file. (required)
 sig_config = "/etc/scion/sig/sig.json"
 
-# The local ISD-AS. (required)
-isd_as = "1-ff00:0:113"
-
-# The bind IP address. (required)
+# The bind IP address. (optional, default determined based on route to control service)
 ip = "192.0.2.100"
 
 # Control data port, e.g. keepalives. (default 30256)
@@ -35,7 +32,7 @@ ctrl_port = 30256
 # Encapsulation data port. (default 30056)
 encap_port = 30056
 
-# Name of TUN device to create. (default DefaultTunName)
+# Name of TUN device to create. (default "sig")
 tun = "sig"
 
 # Id of the routing table. (default 11)
diff --git a/go/sig/egress/session/session.go b/go/sig/egress/session/session.go
index 8482dd95a..2eb1573cc 100644
--- a/go/sig/egress/session/session.go
+++ b/go/sig/egress/session/session.go
@@ -169,7 +169,7 @@ type PathPool struct {
 var _ iface.PathPool = (*PathPool)(nil)
 
 func NewPathPool(dst addr.IA) (*PathPool, error) {
-	pool, err := sigcmn.PathMgr.Watch(context.TODO(), sigcmn.IA, dst)
+	pool, err := sigcmn.PathMgr.Watch(context.TODO(), addr.IA{}, dst)
 	if err != nil {
 		return nil, common.NewBasicError("Unable to register watch", err)
 	}
diff --git a/go/sig/internal/sigcmn/BUILD.bazel b/go/sig/internal/sigcmn/BUILD.bazel
index a2dbaae17..f9ed7d1cf 100644
--- a/go/sig/internal/sigcmn/BUILD.bazel
+++ b/go/sig/internal/sigcmn/BUILD.bazel
@@ -13,11 +13,12 @@ go_library(
         "//go/lib/env:go_default_library",
         "//go/lib/log:go_default_library",
         "//go/lib/pathmgr:go_default_library",
+        "//go/lib/sciond:go_default_library",
         "//go/lib/sciond/fake:go_default_library",
         "//go/lib/serrors:go_default_library",
         "//go/lib/snet:go_default_library",
+        "//go/lib/snet/addrutil:go_default_library",
         "//go/lib/sock/reliable:go_default_library",
         "//go/pkg/sig/config:go_default_library",
-        "//go/sig/internal/snetmigrate:go_default_library",
     ],
 )
diff --git a/go/sig/internal/sigcmn/common.go b/go/sig/internal/sigcmn/common.go
index b268a68bf..37e614128 100644
--- a/go/sig/internal/sigcmn/common.go
+++ b/go/sig/internal/sigcmn/common.go
@@ -27,12 +27,13 @@ import (
 	"github.com/scionproto/scion/go/lib/env"
 	"github.com/scionproto/scion/go/lib/log"
 	"github.com/scionproto/scion/go/lib/pathmgr"
+	"github.com/scionproto/scion/go/lib/sciond"
 	"github.com/scionproto/scion/go/lib/sciond/fake"
 	"github.com/scionproto/scion/go/lib/serrors"
 	"github.com/scionproto/scion/go/lib/snet"
+	"github.com/scionproto/scion/go/lib/snet/addrutil"
 	"github.com/scionproto/scion/go/lib/sock/reliable"
 	sigconfig "github.com/scionproto/scion/go/pkg/sig/config"
-	"github.com/scionproto/scion/go/sig/internal/snetmigrate"
 )
 
 const (
@@ -46,7 +47,6 @@ var (
 )
 
 var (
-	IA         addr.IA
 	PathMgr    pathmgr.Resolver
 	Dispatcher reliable.Dispatcher
 	Network    *snet.SCIONNetwork
@@ -58,15 +58,23 @@ var (
 )
 
 func Init(cfg sigconfig.SigConf, sdCfg env.SCIONDClient, features env.Features) error {
-	IA = cfg.IA
-	CtrlAddr = cfg.IP
-	CtrlPort = int(cfg.CtrlPort)
-	DataAddr = cfg.IP
-	DataPort = int(cfg.EncapPort)
-	network, resolver, err := initNetwork(cfg, sdCfg, features)
+	network, sciondConn, resolver, err := initNetwork(cfg, sdCfg, features)
 	if err != nil {
 		return common.NewBasicError("Error creating local SCION Network context", err)
 	}
+
+	ip := cfg.IP
+	if len(ip) == 0 || ip.IsUnspecified() {
+		ip, err = findDefaultLocalIP(context.Background(), sciondConn)
+		if err != nil {
+			return serrors.WrapStr("unable to determine default local IP", err)
+		}
+	}
+
+	CtrlAddr = ip
+	CtrlPort = int(cfg.CtrlPort)
+	DataAddr = ip
+	DataPort = int(cfg.EncapPort)
 	conn, err := network.Listen(context.Background(), "udp",
 		&net.UDPAddr{IP: CtrlAddr, Port: CtrlPort}, addr.SvcSIG)
 	if err != nil {
@@ -80,62 +88,64 @@ func Init(cfg sigconfig.SigConf, sdCfg env.SCIONDClient, features env.Features)
 	return nil
 }
 
-func initNetwork(cfg sigconfig.SigConf,
-	sdCfg env.SCIONDClient, features env.Features) (*snet.SCIONNetwork, pathmgr.Resolver, error) {
+func initNetwork(cfg sigconfig.SigConf, sdCfg env.SCIONDClient,
+	features env.Features) (*snet.SCIONNetwork, sciond.Connector, pathmgr.Resolver, error) {
 
 	var err error
 	Dispatcher, err = newDispatcher(cfg)
 	if err != nil {
-		return nil, nil, serrors.WrapStr("unable to initialize SCION dispatcher", err)
+		return nil, nil, nil, serrors.WrapStr("unable to initialize SCION dispatcher", err)
 	}
+	var sciondConn sciond.Connector
 	if sdCfg.FakeData != "" {
-		return initNetworkWithFakeSCIOND(cfg, sdCfg, features)
+		sciondConn, err = initFakeSCIOND(cfg, sdCfg, features)
+		if err != nil {
+			return nil, nil, nil, serrors.WrapStr("unable to initialize fake SCIOND service", err)
+		}
+	} else {
+		sciondConn, err = initRealSCIOND(cfg, sdCfg, features)
+		if err != nil {
+			return nil, nil, nil, serrors.WrapStr("unable to initialize SCIOND service", err)
+		}
 	}
-	return initNetworkWithRealSCIOND(cfg, sdCfg, features)
-}
-
-func initNetworkWithFakeSCIOND(cfg sigconfig.SigConf,
-	sdCfg env.SCIONDClient, features env.Features) (*snet.SCIONNetwork, pathmgr.Resolver, error) {
 
-	sciondConn, err := fake.NewFromFile(sdCfg.FakeData)
-	if err != nil {
-		return nil, nil, serrors.WrapStr("unable to initialize fake SCIOND service", err)
-	}
+	ia, _ := sciondConn.LocalIA(context.Background())
 	pathResolver := pathmgr.New(sciondConn, pathmgr.Timers{}, sdCfg.PathCount)
 	network := &snet.SCIONNetwork{
-		LocalIA: cfg.IA,
+		LocalIA: ia,
 		Dispatcher: &snet.DefaultPacketDispatcherService{
 			Dispatcher:  Dispatcher,
 			SCMPHandler: snet.NewSCMPHandler(pathResolver),
 			Version2:    features.HeaderV2,
 		},
 	}
-	return network, pathResolver, nil
+	return network, sciondConn, pathResolver, nil
 }
 
-func initNetworkWithRealSCIOND(cfg sigconfig.SigConf,
-	sdCfg env.SCIONDClient, features env.Features) (*snet.SCIONNetwork, pathmgr.Resolver, error) {
+func initFakeSCIOND(cfg sigconfig.SigConf,
+	sdCfg env.SCIONDClient, features env.Features) (sciond.Connector, error) {
+
+	return fake.NewFromFile(sdCfg.FakeData)
+}
+
+func initRealSCIOND(cfg sigconfig.SigConf,
+	sdCfg env.SCIONDClient, features env.Features) (sciond.Connector, error) {
 
 	// TODO(karampok). To be kept until https://github.com/scionproto/scion/issues/3377
 	deadline := time.Now().Add(sdCfg.InitialConnectPeriod.Duration)
+	ctx, cancel := context.WithDeadline(context.Background(), deadline)
+	defer cancel()
 	var retErr error
 	for tries := 0; time.Now().Before(deadline); tries++ {
-		resolver, err := snetmigrate.ResolverFromSD(sdCfg.Address, sdCfg.PathCount)
+		sciondConn, err := sciond.NewService(sdCfg.Address).Connect(ctx)
 		if err == nil {
-			return &snet.SCIONNetwork{
-				LocalIA: cfg.IA,
-				Dispatcher: &snet.DefaultPacketDispatcherService{
-					Dispatcher:  Dispatcher,
-					SCMPHandler: snet.NewSCMPHandler(resolver),
-					Version2:    features.HeaderV2,
-				},
-			}, resolver, nil
+			return sciondConn, nil
 		}
 		log.Debug("SIG is retrying to get NewNetwork", "err", err)
 		retErr = err
 		time.Sleep(time.Second)
 	}
-	return nil, nil, retErr
+	return nil, retErr
 }
 
 func newDispatcher(cfg sigconfig.SigConf) (reliable.Dispatcher, error) {
@@ -171,3 +181,30 @@ func GetMgmtAddr() sig_mgmt.Addr {
 	return *sig_mgmt.NewAddr(addr.HostFromIP(CtrlAddr), uint16(CtrlPort),
 		addr.HostFromIP(DataAddr), uint16(DataPort))
 }
+
+// TODO(matzf): this is a simple, hopefully temporary, workaround to not having
+// wildcard addresses in snet.
+// Here we just use a seemingly sensible default IP, but in the general case
+// the local IP would depend on the next hop of selected path. This approach
+// will not work in more complicated setups where e.g. different network
+// interface are used to talk to different AS interfaces.
+// Once a available, a wildcard address should be used and this should simply
+// be removed.
+//
+// findDefaultLocalIP returns _a_ IP of this host in the local AS.
+func findDefaultLocalIP(ctx context.Context, sciondConn sciond.Connector) (net.IP, error) {
+	hostInLocalAS, err := findAnyHostInLocalAS(ctx, sciondConn)
+	if err != nil {
+		return nil, err
+	}
+	return addrutil.ResolveLocal(hostInLocalAS)
+}
+
+// findAnyHostInLocalAS returns the IP address of some (infrastructure) host in the local AS.
+func findAnyHostInLocalAS(ctx context.Context, sciondConn sciond.Connector) (net.IP, error) {
+	addr, err := sciond.TopoQuerier{Connector: sciondConn}.UnderlayAnycast(ctx, addr.SvcBS)
+	if err != nil {
+		return nil, err
+	}
+	return addr.IP, nil
+}
diff --git a/go/sig/internal/snetmigrate/BUILD.bazel b/go/sig/internal/snetmigrate/BUILD.bazel
index 656bc62dd..cf85e01b3 100644
--- a/go/sig/internal/snetmigrate/BUILD.bazel
+++ b/go/sig/internal/snetmigrate/BUILD.bazel
@@ -5,7 +5,6 @@ go_library(
     srcs = [
         "path.go",
         "querier.go",
-        "resolver.go",
     ],
     importpath = "github.com/scionproto/scion/go/sig/internal/snetmigrate",
     visibility = ["//visibility:public"],
@@ -15,7 +14,6 @@ go_library(
         "//go/lib/pathmgr:go_default_library",
         "//go/lib/pathpol: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/spath/spathmeta:go_default_library",
diff --git a/go/sig/internal/snetmigrate/resolver.go b/go/sig/internal/snetmigrate/resolver.go
deleted file mode 100644
index 4ba22c4dc..000000000
--- a/go/sig/internal/snetmigrate/resolver.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2019 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 snetmigrate
-
-import (
-	"context"
-
-	"github.com/scionproto/scion/go/lib/pathmgr"
-	"github.com/scionproto/scion/go/lib/sciond"
-	"github.com/scionproto/scion/go/lib/serrors"
-)
-
-func ResolverFromSD(sciondPath string, pathCount uint16) (pathmgr.Resolver, error) {
-	var pathResolver pathmgr.Resolver
-	if sciondPath != "" {
-		sciondConn, err := sciond.NewService(sciondPath).Connect(
-			context.Background())
-		if err != nil {
-			return nil, serrors.WrapStr("Unable to initialize SCIOND service", err)
-		}
-		pathResolver = pathmgr.New(sciondConn, pathmgr.Timers{}, pathCount)
-	}
-	return pathResolver, nil
-}
diff --git a/python/topology/sig.py b/python/topology/sig.py
index 5d1e78078..29ae638c4 100644
--- a/python/topology/sig.py
+++ b/python/topology/sig.py
@@ -148,7 +148,6 @@ class SIGGenerator(object):
             'sig': {
                 'id': name,
                 'sig_config': 'conf/cfg.json',
-                'isd_as': str(topo_id),
                 'ip': str(net[ipv]),
             },
             'sciond_connection': {


Test patch:
diff --git a/acceptance/sig_failover/testdata/1-ff00_0_110/sig/fake_sciond.json b/acceptance/sig_failover/testdata/1-ff00_0_110/sig/fake_sciond.json
index 79906e2f2..94164082e 100644
--- a/acceptance/sig_failover/testdata/1-ff00_0_110/sig/fake_sciond.json
+++ b/acceptance/sig_failover/testdata/1-ff00_0_110/sig/fake_sciond.json
@@ -1,4 +1,5 @@
 {
+    "ia": "1-ff00:0:110",
     "entries": [
         {
             "reply_start_timestamp": 0,
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 8ae421502..65e3946c4 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,7 +1,6 @@
 [sig]
 id = "sig1-ff00_0_110"
 sig_config = "/cfg.json"
-isd_as = "1-ff00:0:110"
 ip = "242.254.100.2"
 
 [features]
diff --git a/acceptance/sig_failover/testdata/1-ff00_0_111/sig/fake_sciond.json b/acceptance/sig_failover/testdata/1-ff00_0_111/sig/fake_sciond.json
index 15a16afd5..68db70b2d 100644
--- a/acceptance/sig_failover/testdata/1-ff00_0_111/sig/fake_sciond.json
+++ b/acceptance/sig_failover/testdata/1-ff00_0_111/sig/fake_sciond.json
@@ -1,4 +1,5 @@
 {
+    "ia": "1-ff00:0:111",
     "entries": [
         {
             "reply_start_timestamp": 0,
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 5ab481ce6..fe0b189ad 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,7 +1,6 @@
 [sig]
 id = "sig1-ff00_0_111"
 sig_config = "/cfg.json"
-isd_as = "1-ff00:0:111"
 ip = "242.254.200.2"
 
 [features]
diff --git a/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/fake_sciond.json b/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/fake_sciond.json
index b865c341f..eda40fbe1 100644
--- a/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/fake_sciond.json
+++ b/acceptance/sig_short_exp_time/testdata/1-ff00_0_110/sig/fake_sciond.json
@@ -1,4 +1,5 @@
 {
+    "ia": "1-ff00:0:110",
     "entries": [
         {
             "reply_start_timestamp": 0,
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 8ae421502..65e3946c4 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,7 +1,6 @@
 [sig]
 id = "sig1-ff00_0_110"
 sig_config = "/cfg.json"
-isd_as = "1-ff00:0:110"
 ip = "242.254.100.2"
 
 [features]
diff --git a/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/fake_sciond.json b/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/fake_sciond.json
index a42ed5ca7..129d9d52f 100644
--- a/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/fake_sciond.json
+++ b/acceptance/sig_short_exp_time/testdata/1-ff00_0_111/sig/fake_sciond.json
@@ -1,4 +1,5 @@
 {
+    "ia": "1-ff00:0:111",
     "entries": [
         {
             "seconds": 0,
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 5ab481ce6..fe0b189ad 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,7 +1,6 @@
 [sig]
 id = "sig1-ff00_0_111"
 sig_config = "/cfg.json"
-isd_as = "1-ff00:0:111"
 ip = "242.254.200.2"
 
 [features]
diff --git a/go/lib/sciond/fake/fake_test.go b/go/lib/sciond/fake/fake_test.go
index 59a2e8910..33a1b0198 100644
--- a/go/lib/sciond/fake/fake_test.go
+++ b/go/lib/sciond/fake/fake_test.go
@@ -25,6 +25,7 @@ var update = flag.Bool("update", false, "set to true to update golden files")
 
 func TestJSONConversion(t *testing.T) {
 	script := &fake.Script{
+		IA: xtest.MustParseIA("1-ff00:0:ffff"),
 		Entries: []*fake.Entry{
 			{
 				ReplyStartTimestamp: 0,
diff --git a/go/lib/sciond/fake/testdata/sd.json b/go/lib/sciond/fake/testdata/sd.json
index 32ef1f3ba..fa3ddbceb 100644
--- a/go/lib/sciond/fake/testdata/sd.json
+++ b/go/lib/sciond/fake/testdata/sd.json
@@ -1,4 +1,5 @@
 {
+    "ia": "1-ff00:0:ffff",
     "entries": [
       {
         "reply_start_timestamp": 0,
diff --git a/go/pkg/sig/config/configtest/BUILD.bazel b/go/pkg/sig/config/configtest/BUILD.bazel
index 7d4c5f6e6..0fcb6f623 100644
--- a/go/pkg/sig/config/configtest/BUILD.bazel
+++ b/go/pkg/sig/config/configtest/BUILD.bazel
@@ -6,7 +6,6 @@ go_library(
     importpath = "github.com/scionproto/scion/go/pkg/sig/config/configtest",
     visibility = ["//visibility:public"],
     deps = [
-        "//go/lib/xtest:go_default_library",
         "//go/pkg/sig/config:go_default_library",
         "@com_github_stretchr_testify//assert:go_default_library",
     ],
diff --git a/go/pkg/sig/config/configtest/configtest.go b/go/pkg/sig/config/configtest/configtest.go
index 672c883b2..99124e43e 100644
--- a/go/pkg/sig/config/configtest/configtest.go
+++ b/go/pkg/sig/config/configtest/configtest.go
@@ -20,14 +20,12 @@ import (
 
 	"github.com/stretchr/testify/assert"
 
-	"github.com/scionproto/scion/go/lib/xtest"
 	"github.com/scionproto/scion/go/pkg/sig/config"
 )
 
 func CheckTestSIG(t *testing.T, cfg *config.SigConf, id string) {
 	assert.Equal(t, id, cfg.ID)
 	assert.Equal(t, "/etc/scion/sig/sig.json", cfg.SIGConfig)
-	assert.Equal(t, xtest.MustParseIA("1-ff00:0:113"), cfg.IA)
 	assert.Equal(t, net.ParseIP("192.0.2.100"), cfg.IP)
 	assert.Equal(t, config.DefaultCtrlPort, int(cfg.CtrlPort))
 	assert.Equal(t, config.DefaultEncapPort, int(cfg.EncapPort))