diff --git a/scionlab/admin.py b/scionlab/admin.py index 600a9fbe..3fd42211 100644 --- a/scionlab/admin.py +++ b/scionlab/admin.py @@ -301,11 +301,13 @@ class BorderRouterAdminForm(_CreateUpdateModelForm): def create(self): return BorderRouter.objects.create( host=self.cleaned_data['host'], + is_hsr=self.cleaned_data['is_hsr'], ) def update(self): self.instance.update( host=self.cleaned_data['host'], + is_hsr=self.cleaned_data['is_hsr'], ) @@ -313,7 +315,7 @@ class BorderRouterInline(admin.TabularInline): model = BorderRouter extra = 0 form = BorderRouterAdminForm - fields = ('host',) + fields = ('host', 'is_hsr') def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "host": diff --git a/scionlab/fixtures/testdata.yaml b/scionlab/fixtures/testdata.yaml index 09211eca..2541a6a0 100644 --- a/scionlab/fixtures/testdata.yaml +++ b/scionlab/fixtures/testdata.yaml @@ -4525,101 +4525,121 @@ fields: AS: 1 host: 1 + is_hsr: false - model: scionlab.borderrouter pk: 2 fields: AS: 3 host: 3 + is_hsr: true - model: scionlab.borderrouter pk: 3 fields: AS: 2 host: 2 + is_hsr: true - model: scionlab.borderrouter pk: 4 fields: AS: 4 host: 4 + is_hsr: false - model: scionlab.borderrouter pk: 5 fields: AS: 5 host: 5 + is_hsr: false - model: scionlab.borderrouter pk: 6 fields: AS: 6 host: 6 + is_hsr: false - model: scionlab.borderrouter pk: 7 fields: AS: 7 host: 7 + is_hsr: false - model: scionlab.borderrouter pk: 8 fields: AS: 8 host: 8 + is_hsr: false - model: scionlab.borderrouter pk: 9 fields: AS: 9 host: 9 + is_hsr: false - model: scionlab.borderrouter pk: 10 fields: AS: 10 host: 10 + is_hsr: false - model: scionlab.borderrouter pk: 11 fields: AS: 11 host: 11 + is_hsr: false - model: scionlab.borderrouter pk: 12 fields: AS: 12 host: 12 + is_hsr: false - model: scionlab.borderrouter pk: 13 fields: AS: 13 host: 13 + is_hsr: false - model: scionlab.borderrouter pk: 14 fields: AS: 14 host: 14 + is_hsr: false - model: scionlab.borderrouter pk: 15 fields: AS: 15 host: 15 + is_hsr: false - model: scionlab.borderrouter pk: 16 fields: AS: 16 host: 16 + is_hsr: false - model: scionlab.borderrouter pk: 18 fields: AS: 17 host: 17 + is_hsr: false - model: scionlab.borderrouter pk: 20 fields: AS: 18 host: 18 + is_hsr: false - model: scionlab.borderrouter pk: 22 fields: AS: 19 host: 19 + is_hsr: false - model: scionlab.borderrouter pk: 24 fields: AS: 20 host: 20 + is_hsr: false - model: scionlab.service pk: 1 fields: diff --git a/scionlab/fixtures/testtopo.py b/scionlab/fixtures/testtopo.py index b8ae2864..0cee0c67 100644 --- a/scionlab/fixtures/testtopo.py +++ b/scionlab/fixtures/testtopo.py @@ -13,7 +13,7 @@ # limitations under the License. from collections import namedtuple -from scionlab.models.core import ISD, AS, Link, Host, Service +from scionlab.models.core import ISD, AS, Link, Host, Service, BorderRouter from scionlab.models.user_as import AttachmentPoint from scionlab.models.vpn import VPN @@ -110,6 +110,12 @@ def makeLinkDef(type, as_id_tail_a, as_id_tail_b): (_expand_as_id(0x1301), Service.SIG), ] +# Router instances (AS ID, router instance ID) with high-speed router configuration +hsrs = [ + (_expand_as_id(0x1102), 1), + (_expand_as_id(0x1103), 1), +] + # VPNs for APs, except 1303 vpns = [ VPNDef(_expand_as_id(0x1107), "10.0.8.1", 1194, "10.0.0.0/16"), # odd subnet, used in prod! @@ -124,6 +130,7 @@ def create_testtopo(): create_links() create_vpn() create_extraservices() + setup_hsrs() def create_isds(): @@ -156,6 +163,13 @@ def create_extraservices(): Service.objects.create(host=host, type=as_serv[1]) +def setup_hsrs(): + for as_id, brid in hsrs: + br = BorderRouter.objects.filter(AS__as_id=as_id)[brid-1] + br.is_hsr = True + br.save() + + def _create_as(isd_id, as_id, label, public_ip, is_core=False, is_ap=False): isd = ISD.objects.get(isd_id=isd_id) as_ = AS.objects.create_with_default_services( diff --git a/scionlab/migrations/0002_hsr.py b/scionlab/migrations/0002_hsr.py new file mode 100644 index 00000000..bb2dac32 --- /dev/null +++ b/scionlab/migrations/0002_hsr.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2 on 2021-09-14 13:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('scionlab', '0001_squashed_0011_pullap'), + ] + + operations = [ + migrations.AddField( + model_name='borderrouter', + name='is_hsr', + field=models.BooleanField(default=False, help_text='If true, this is a high-speed router instance with special configuration.'), + ), + migrations.AlterField( + model_name='service', + name='type', + field=models.CharField(choices=[('CS', 'Control Service'), ('SIG', 'SCION IP Gateway'), ('BW', 'Bandwidth tester server'), ('PP', 'Pingpong server')], max_length=16), + ), + ] diff --git a/scionlab/models/core.py b/scionlab/models/core.py index 6b0cb88d..f7020104 100644 --- a/scionlab/models/core.py +++ b/scionlab/models/core.py @@ -1009,10 +1009,11 @@ def get_interface_b(self): class BorderRouterManager(models.Manager): - def create(self, host): + def create(self, host, is_hsr=False): """ Create a BorderRouter object. :param Host host: the host, defines the AS + :param bool is_hsr: this is a high-speed router instance :returns: BorderRouter """ host.AS.hosts.bump_config() @@ -1020,15 +1021,17 @@ def create(self, host): return super().create( AS=host.AS, host=host, + is_hsr=is_hsr, ) - def first_or_create(self, host): + def first_or_create(self, host, is_hsr=False): """ Get the first border router related to this host, or create a new one with default settings. :param Host host: the host, defines the AS + :param bool is_hsr: this is a high-speed router instance :returns: BorderRouter """ - return host.border_routers.first() or self.create(host=host) + return host.border_routers.first() or self.create(host=host, is_hsr=is_hsr) def iterator_non_empty(self): """ @@ -1053,6 +1056,10 @@ class BorderRouter(models.Model): related_name='border_routers', on_delete=models.CASCADE ) + is_hsr = models.BooleanField( + default=False, + help_text="If true, this is a high-speed router instance with special configuration." + ) objects = BorderRouterManager() @@ -1094,12 +1101,14 @@ def internal_port(self): def metrics_port(self): return BR_METRICS_PORT_BASE + self.instance_id - def update(self, host=_placeholder): + def update(self, host=_placeholder, is_hsr=_placeholder): """ Update the given fields :param Host host: optional, the host. Must be in current AS. + :param bool is_hsr: optional, this is a high-speed router instance """ prev_host = self.host + prev_is_hsr = self.is_hsr if host is not _placeholder: if host.AS != self.AS: @@ -1108,10 +1117,15 @@ def update(self, host=_placeholder): raise RuntimeError('BorderRouter.update cannot change AS') self.host = host + if is_hsr is not _placeholder: + self.is_hsr = is_hsr + self.save() - if host != prev_host: - host.AS.hosts.bump_config() + if self.host != prev_host: + self.AS.hosts.bump_config() + elif self.is_hsr != prev_is_hsr: + self.host.bump_config() class ServiceManager(models.Manager): diff --git a/scionlab/scion/config.py b/scionlab/scion/config.py index 0756f1b0..f0e96790 100644 --- a/scionlab/scion/config.py +++ b/scionlab/scion/config.py @@ -44,7 +44,6 @@ SERVICES_TO_SYSTEMD_NAMES = { Service.CS: 'scion-control-service', Service.BW: 'scion-bwtestserver', - TYPE_BR: 'scion-border-router', } DEFAULT_ENV = ['TZ=UTC'] @@ -97,8 +96,9 @@ def _write_as_config(self, cb: '_ConfigBuilder'): config_dir = cb.config_dir.lstrip('/') # don't use absolute paths in the archive for router in self._routers(): - self.archive.write_toml((config_dir, f'{router.instance_name}.toml'), - cb.build_br_conf(router)) + if not router.is_hsr: + self.archive.write_toml((config_dir, f'{router.instance_name}.toml'), + cb.build_br_conf(router)) for service in self._control_services(): assert service.type == Service.CS @@ -166,7 +166,11 @@ def generate(self): # dispatcher and sciond config files are installed with the package def systemd_units(self): - units = ["scion-border-router@%s.service" % router.instance_name + router_systemd_name = { + False: 'scion-border-router', + True: 'scion-hsr', + } + units = ["%s@%s.service" % (router_systemd_name[router.is_hsr], router.instance_name) for router in self._routers()] units += ["%s@%s.service" % (SERVICES_TO_SYSTEMD_NAMES[service.type], service.instance_name) for service in self._control_services()] @@ -205,12 +209,13 @@ def _cmd(binary_name, config_dir, config_file): as_dir = self._as_dir() config = configparser.ConfigParser() for router in self._routers(): - _add_supervisord_program_conf( - config, - router.instance_name, - _cmd(CMDS[TYPE_BR], as_dir, router.instance_name + '.toml'), - env=BORDER_ENV - ) + if not router.is_hsr: + _add_supervisord_program_conf( + config, + router.instance_name, + _cmd(CMDS[TYPE_BR], as_dir, router.instance_name + '.toml'), + env=BORDER_ENV + ) for service in self._control_services(): _add_supervisord_program_conf( config, diff --git a/scionlab/tests/data/test_config_tar/host_3.yml b/scionlab/tests/data/test_config_tar/host_3.yml new file mode 100644 index 00000000..96b61acf --- /dev/null +++ b/scionlab/tests/data/test_config_tar/host_3.yml @@ -0,0 +1,417 @@ +etc/scion/beacon_policy.yaml: | + Filter: + AllowIsdLoop: false +etc/scion/certs/ISD17-B1-S1.trc: !!binary | + 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 + zi9R52BakPllb84= +etc/scion/certs/ISD19-B1-S1.trc: !!binary | + MIIXegYJKoZIhvcNAQcCoIIXazCCF2cCAQExDzANBglghkgBZQMEAgMFADCCEG8GCSqGSIb3DQEH + AaCCEGAEghBcMIIQWAIBADAJAgETAgEBAgEBMCIYDzIwMjEwMTIwMDYxNzM1WhgPMjAyMzAxMjAw + NjE3MzRaAgEAAQEAMAACAQIwGhMLZmZhYTowOjEzMDETC2ZmYWE6MDoxMzAyMBoTC2ZmYWE6MDox + MzAxEwtmZmFhOjA6MTMwMgwXU0NJT05MYWIgVFJDIGZvciBJU0QgMTkwgg/GMIICkTCCAjegAwIB + AgIUI9zYNq8776t5MVxBaZyGLD0TABQwCgYIKoZIzj0EAwQwgaUxCzAJBgNVBAYTAkNIMQswCQYD + VQQIDAJaSDEQMA4GA1UEBwwHWsO8cmljaDEPMA0GA1UECgwGTmV0c2VjMQ8wDQYDVQQLDAZOZXRz + ZWMxNDAyBgNVBAMMKzE5LWZmYWE6MDoxMzAxIFNlbnNpdGl2ZSBWb3RpbmcgQ2VydGlmaWNhdGUx + HzAdBgsrBgEEAYOwHAECAQwOMTktZmZhYTowOjEzMDEwHhcNMjEwMTIwMDYxNzM0WhcNMjMwMTIw + MDYxNzM0WjCBpTELMAkGA1UEBhMCQ0gxCzAJBgNVBAgMAlpIMRAwDgYDVQQHDAdaw7xyaWNoMQ8w + DQYDVQQKDAZOZXRzZWMxDzANBgNVBAsMBk5ldHNlYzE0MDIGA1UEAwwrMTktZmZhYTowOjEzMDEg + U2Vuc2l0aXZlIFZvdGluZyBDZXJ0aWZpY2F0ZTEfMB0GCysGAQQBg7AcAQIBDA4xOS1mZmFhOjA6 + MTMwMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLytiyH57q+deo4/K7K/iAk6G0oiddX3MfJP + UH206Ifdm/SdEJO74w1ebVAvTxdQ1x7V6+t3gdjahWZ75RlfYmejQzBBMB0GA1UdDgQWBBQA7qta + irSh56ZViTmLRLEByx7e6DAgBgNVHSUEGTAXBgsrBgEEAYOwHAEDAQYIKwYBBQUHAwgwCgYIKoZI + zj0EAwQDSAAwRQIhAJI9XtLYjD+c7IYZ2Zs2uAw7pfhukCDR1P+CJbieOFRHAiAwbPXRm8G5zuXh + f4I57HnIS1arXhZgn28S8m4Q2XypBjCCAo0wggIzoAMCAQICFD8np5z+Vgn7Actp+HV9oo3dTvXw + MAoGCCqGSM49BAMEMIGjMQswCQYDVQQGEwJDSDELMAkGA1UECAwCWkgxEDAOBgNVBAcMB1rDvHJp + Y2gxDzANBgNVBAoMBk5ldHNlYzEPMA0GA1UECwwGTmV0c2VjMTIwMAYDVQQDDCkxOS1mZmFhOjA6 + MTMwMSBSZWd1bGFyIFZvdGluZyBDZXJ0aWZpY2F0ZTEfMB0GCysGAQQBg7AcAQIBDA4xOS1mZmFh + OjA6MTMwMTAeFw0yMTAxMjAwNjE3MzRaFw0yMzAxMjAwNjE3MzRaMIGjMQswCQYDVQQGEwJDSDEL + MAkGA1UECAwCWkgxEDAOBgNVBAcMB1rDvHJpY2gxDzANBgNVBAoMBk5ldHNlYzEPMA0GA1UECwwG + TmV0c2VjMTIwMAYDVQQDDCkxOS1mZmFhOjA6MTMwMSBSZWd1bGFyIFZvdGluZyBDZXJ0aWZpY2F0 + ZTEfMB0GCysGAQQBg7AcAQIBDA4xOS1mZmFhOjA6MTMwMTBZMBMGByqGSM49AgEGCCqGSM49AwEH + A0IABOnlzOd4sB3UWfgrIa0llCz0JMtvtYkCFUeVOUFTTTUaYQPHqMcZdMSBCNAFx+NaK2SkJyoc + R3JA+N1GELbz0r2jQzBBMB0GA1UdDgQWBBSleUU91NqRnFKrjZPBgXbHbK56JzAgBgNVHSUEGTAX + BgsrBgEEAYOwHAEDAgYIKwYBBQUHAwgwCgYIKoZIzj0EAwQDSAAwRQIgCISfZI2qxBkPCK0eN0vx + Y5FiV55k8yXIydbBTJVhd8UCIQCjJ0+HRuC6pPTIiiT/MxB9RzWXM5wq1Rt3uNVByAfY9jCCArkw + ggJfoAMCAQICFDlt6m1pl0mYV+Uf9GY9Oon/BKHFMAoGCCqGSM49BAMEMIGnMQswCQYDVQQGEwJD + SDELMAkGA1UECAwCWkgxEDAOBgNVBAcMB1rDvHJpY2gxDzANBgNVBAoMBk5ldHNlYzEPMA0GA1UE + CwwGTmV0c2VjMTYwNAYDVQQDDC0xOS1mZmFhOjA6MTMwMSBIaWdoIFNlY3VyaXR5IFJvb3QgQ2Vy + dGlmaWNhdGUxHzAdBgsrBgEEAYOwHAECAQwOMTktZmZhYTowOjEzMDEwHhcNMjEwMTIwMDYxNzM0 + WhcNMjMwMTIwMDYxNzM0WjCBpzELMAkGA1UEBhMCQ0gxCzAJBgNVBAgMAlpIMRAwDgYDVQQHDAda + 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 + coX4ivOv8fqxhM9P5egUl7glAdTVPKmy6WtoAdM= +etc/scion/certs/ISD20-B1-S1.trc: !!binary | + MIIXewYJKoZIhvcNAQcCoIIXbDCCF2gCAQExDzANBglghkgBZQMEAgMFADCCEHAGCSqGSIb3DQEH + AaCCEGEEghBdMIIQWQIBADAJAgEUAgEBAgEBMCIYDzIwMjEwMTIwMDYxNzM2WhgPMjAyMzAxMjAw + NjE3MzVaAgEAAQEAMAACAQIwGhMLZmZhYTowOjE0MDETC2ZmYWE6MDoxNDAyMBoTC2ZmYWE6MDox + NDAxEwtmZmFhOjA6MTQwMgwXU0NJT05MYWIgVFJDIGZvciBJU0QgMjAwgg/HMIICkTCCAjegAwIB + AgIUBPv1Sp1nTT03+ksVBCTY97ZQ7ygwCgYIKoZIzj0EAwQwgaUxCzAJBgNVBAYTAkNIMQswCQYD + VQQIDAJaSDEQMA4GA1UEBwwHWsO8cmljaDEPMA0GA1UECgwGTmV0c2VjMQ8wDQYDVQQLDAZOZXRz + ZWMxNDAyBgNVBAMMKzIwLWZmYWE6MDoxNDAxIFNlbnNpdGl2ZSBWb3RpbmcgQ2VydGlmaWNhdGUx + HzAdBgsrBgEEAYOwHAECAQwOMjAtZmZhYTowOjE0MDEwHhcNMjEwMTIwMDYxNzM1WhcNMjMwMTIw + MDYxNzM1WjCBpTELMAkGA1UEBhMCQ0gxCzAJBgNVBAgMAlpIMRAwDgYDVQQHDAdaw7xyaWNoMQ8w + DQYDVQQKDAZOZXRzZWMxDzANBgNVBAsMBk5ldHNlYzE0MDIGA1UEAwwrMjAtZmZhYTowOjE0MDEg + U2Vuc2l0aXZlIFZvdGluZyBDZXJ0aWZpY2F0ZTEfMB0GCysGAQQBg7AcAQIBDA4yMC1mZmFhOjA6 + MTQwMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABElDZ+poZYyLgjupGHvTH5lvaOuVt5sc48Ej + ZUdgR1Tu9wjFvJq4ijx4AbVyPqb0ps3u2jGrkiE8ZYmy1ZJaUg+jQzBBMB0GA1UdDgQWBBTotGMw + UYHMJmn+Kv95vi9SiL4MIjAgBgNVHSUEGTAXBgsrBgEEAYOwHAEDAQYIKwYBBQUHAwgwCgYIKoZI + zj0EAwQDSAAwRQIgPie9cl7iBQdW0x6eabx/9jJk1rMss03blTaxhUkYkbcCIQCpzCSNR7blZNsk + NjMTe3sLL06kbeoQAjBfxteQTBo4bDCCAowwggIzoAMCAQICFC+r3K1jh0JQsG0Igxxx+caTI2nv + MAoGCCqGSM49BAMEMIGjMQswCQYDVQQGEwJDSDELMAkGA1UECAwCWkgxEDAOBgNVBAcMB1rDvHJp + Y2gxDzANBgNVBAoMBk5ldHNlYzEPMA0GA1UECwwGTmV0c2VjMTIwMAYDVQQDDCkyMC1mZmFhOjA6 + MTQwMSBSZWd1bGFyIFZvdGluZyBDZXJ0aWZpY2F0ZTEfMB0GCysGAQQBg7AcAQIBDA4yMC1mZmFh + OjA6MTQwMTAeFw0yMTAxMjAwNjE3MzVaFw0yMzAxMjAwNjE3MzVaMIGjMQswCQYDVQQGEwJDSDEL + MAkGA1UECAwCWkgxEDAOBgNVBAcMB1rDvHJpY2gxDzANBgNVBAoMBk5ldHNlYzEPMA0GA1UECwwG + TmV0c2VjMTIwMAYDVQQDDCkyMC1mZmFhOjA6MTQwMSBSZWd1bGFyIFZvdGluZyBDZXJ0aWZpY2F0 + ZTEfMB0GCysGAQQBg7AcAQIBDA4yMC1mZmFhOjA6MTQwMTBZMBMGByqGSM49AgEGCCqGSM49AwEH + A0IABLLgta4+wWZsHo0VgDT0QUpm3fk9kx4YUKXfyVWSRgEiowPldm7AHAnitJVOXSxsDgrFvhgl + X2bAO61G2gH97qajQzBBMB0GA1UdDgQWBBS0iYeH8y15bE1hyK90lZwnca3KRTAgBgNVHSUEGTAX + BgsrBgEEAYOwHAEDAgYIKwYBBQUHAwgwCgYIKoZIzj0EAwQDRwAwRAIgPyC7rvmALXG47FH4zq5p + 0SfQlEdXKTrlhVU8k418N5YCIA1ztsnuqN8Cnr7i+ZGzi/j8bBE1b2tLoZQEw3gxEAmQMIICuDCC + Al6gAwIBAgITYA95f2tNdBu+BVUB8kKLoKH3ODAKBggqhkjOPQQDBDCBpzELMAkGA1UEBhMCQ0gx + CzAJBgNVBAgMAlpIMRAwDgYDVQQHDAdaw7xyaWNoMQ8wDQYDVQQKDAZOZXRzZWMxDzANBgNVBAsM + Bk5ldHNlYzE2MDQGA1UEAwwtMjAtZmZhYTowOjE0MDEgSGlnaCBTZWN1cml0eSBSb290IENlcnRp + ZmljYXRlMR8wHQYLKwYBBAGDsBwBAgEMDjIwLWZmYWE6MDoxNDAxMB4XDTIxMDEyMDA2MTczNVoX + DTIzMDEyMDA2MTczNVowgacxCzAJBgNVBAYTAkNIMQswCQYDVQQIDAJaSDEQMA4GA1UEBwwHWsO8 + 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 +etc/scion/crypto/as/ISD17-ASffaa_0_1103.pem: | + -----BEGIN CERTIFICATE----- + MIICtDCCAlqgAwIBAgIUFs0tWQh0LUE3YKgiUzjstVttGq0wCgYIKoZIzj0EAwQw + gZ4xCzAJBgNVBAYTAkNIMQswCQYDVQQIDAJaSDEQMA4GA1UEBwwHWsO8cmljaDEP + MA0GA1UECgwGTmV0c2VjMQ8wDQYDVQQLDAZOZXRzZWMxLTArBgNVBAMMJDE3LWZm + YWE6MDoxMTAxIFNlY3VyZSBDQSBDZXJ0aWZpY2F0ZTEfMB0GCysGAQQBg7AcAQIB + DA4xNy1mZmFhOjA6MTEwMTAeFw0yMTAxMjAwNjE3MzRaFw0yMjAxMjAwNjE3MzRa + MIGXMQswCQYDVQQGEwJDSDELMAkGA1UECAwCWkgxEDAOBgNVBAcMB1rDvHJpY2gx + DzANBgNVBAoMBk5ldHNlYzEPMA0GA1UECwwGTmV0c2VjMSYwJAYDVQQDDB0xNy1m + ZmFhOjA6MTEwMyBBUyBDZXJ0aWZpY2F0ZTEfMB0GCysGAQQBg7AcAQIBDA4xNy1m + ZmFhOjA6MTEwMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHMaHE5uyt0BmSLK + NzAx2PSitjouXtMoqKxRYIdz3Fy+SUMdvXURSM/3yr6KN52fyhVdxcepWgmxC2B3 + 9Q5SUVajezB5MA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU5d3EjacvraxhWm70 + NM1yooiLS94wHwYDVR0jBBgwFoAUMCDDfwjuyVXys7mhW7vYIfipKYUwJwYDVR0l + BCAwHgYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDCDAKBggqhkjOPQQDBANI + ADBFAiBgE2xaAPuTBSt46WBYmP3v1apWoz3s6DFhXXUvmjecPQIhAMIRVO0VDN2J + J8w1QjCbuUVd2PEDPcTqQebJZzVeXxbS + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- + MIICrzCCAlWgAwIBAgIUGpKYoG8xfR7c6BzjqULcY7aFW5EwCgYIKoZIzj0EAwQw + gacxCzAJBgNVBAYTAkNIMQswCQYDVQQIDAJaSDEQMA4GA1UEBwwHWsO8cmljaDEP + MA0GA1UECgwGTmV0c2VjMQ8wDQYDVQQLDAZOZXRzZWMxNjA0BgNVBAMMLTE3LWZm + YWE6MDoxMTAxIEhpZ2ggU2VjdXJpdHkgUm9vdCBDZXJ0aWZpY2F0ZTEfMB0GCysG + AQQBg7AcAQIBDA4xNy1mZmFhOjA6MTEwMTAeFw0yMTAxMjAwNjE3MzRaFw0yMzAx + MjAwNjE3MzRaMIGeMQswCQYDVQQGEwJDSDELMAkGA1UECAwCWkgxEDAOBgNVBAcM + B1rDvHJpY2gxDzANBgNVBAoMBk5ldHNlYzEPMA0GA1UECwwGTmV0c2VjMS0wKwYD + VQQDDCQxNy1mZmFhOjA6MTEwMSBTZWN1cmUgQ0EgQ2VydGlmaWNhdGUxHzAdBgsr + BgEEAYOwHAECAQwOMTctZmZhYTowOjExMDEwWTATBgcqhkjOPQIBBggqhkjOPQMB + BwNCAAS3d5PbxPo8kw2i7rJCukEuUH+48wQzYv+Hzkh3pgBlhraVrknlRIlRirLK + rViC+U41dQrPORJ8SBAFBUxmjfPTo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEAMA4G + A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUMCDDfwjuyVXys7mhW7vYIfipKYUwHwYD + VR0jBBgwFoAUAJ2V/qt+bqyUF3gls5Zn/3nt1aAwCgYIKoZIzj0EAwQDSAAwRQIh + AMZkNZixwA41VYQSbEFiY0uLMIgwRig3gKYmeloEzWlcAiAIeXNmWVXotSBQAX/A + PxtK8c90x+XlTWjwhFxWCwb/5Q== + -----END CERTIFICATE----- +etc/scion/crypto/as/cp-as.key: | + -----BEGIN PRIVATE KEY----- + MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIJLgxEVZ1rqr/5D8 + rqBVkPwk6F5UFRP4LCtz8uI0QkShRANCAARzGhxObsrdAZkiyjcwMdj0orY6Ll7T + KKisUWCHc9xcvklDHb11EUjP98q+ijedn8oVXcXHqVoJsQtgd/UOUlFW + -----END PRIVATE KEY----- +etc/scion/cs-1.toml: | + [beacon_db] + connection = "/var/lib/scion/cs-1.beacon.db" + + [beaconing] + origination_interval = "5s" + propagation_interval = "5s" + + [general] + config_dir = "/etc/scion" + id = "cs-1" + reconnect_to_dispatcher = true + + [metrics] + prometheus = "127.0.0.1:30454" + + [path_db] + connection = "/var/lib/scion/cs-1.path.db" + + [quic] + address = "127.0.0.1:30354" + + [trust_db] + connection = "/var/lib/scion/cs-1.trust.db" + + [beaconing.policies] + propagation = "/etc/scion/beacon_policy.yaml" + + [log.console] + level = "info" +etc/scion/keys/master0.key: |- + F/vGGh+49IFjSw8+vZqe6w== +etc/scion/keys/master1.key: |- + F/vGGh+49IFjSw8+vZqe6w== +etc/scion/topology.json: |- + { + "attributes": [], + "border_routers": { + "br-1": { + "ctrl_addr": "127.0.0.1:30201", + "interfaces": { + "1": { + "bandwidth": 1000, + "isd_as": "17-ffaa:0:1101", + "link_to": "PARENT", + "mtu": 1472, + "underlay": { + "public": "192.0.2.13:50000", + "remote": "192.0.2.11:50000" + } + }, + "2": { + "bandwidth": 1000, + "isd_as": "17-ffaa:0:1102", + "link_to": "CHILD", + "mtu": 1472, + "underlay": { + "public": "192.0.2.13:50001", + "remote": "192.0.2.12:50000" + } + } + }, + "internal_addr": "127.0.0.1:30001" + } + }, + "control_service": { + "cs-1": { + "addr": "127.0.0.1:30254" + } + }, + "discovery_service": { + "ds-1": { + "addr": "127.0.0.1:30254" + } + }, + "isd_as": "17-ffaa:0:1103", + "mtu": 1472 + } +scionlab-config.json: |- + { + "files": { + "etc/scion/beacon_policy.yaml": "90c69ea879ca52546774c3007e7d29104766fc07", + "etc/scion/certs/ISD17-B1-S1.trc": "6e20b26b9831223ff8557b88cf7e2a3a441619b0", + "etc/scion/certs/ISD19-B1-S1.trc": "b91dfb74d7f9d24d7cd81b53fdc2ffd820b1f46c", + "etc/scion/certs/ISD20-B1-S1.trc": "66a6da3efd14c19c51c88dacd3de1534caa9b92c", + "etc/scion/crypto/as/ISD17-ASffaa_0_1103.pem": "ef840f8bda9a0d44b46cf1d880c667f0cbbdc017", + "etc/scion/crypto/as/cp-as.key": "74abf7e5596b9b790e0c6f6ec6c64f72ebc25ed1", + "etc/scion/cs-1.toml": "84467cd10682d975caeccba3a7eaaec1bd9ea858", + "etc/scion/keys/master0.key": "1da16f862afe030b5442d93d91c7226ab3185e2e", + "etc/scion/keys/master1.key": "1da16f862afe030b5442d93d91c7226ab3185e2e", + "etc/scion/topology.json": "3fa174c3e24a5efd6d51e2c31584ab3b21bdd6a1" + }, + "host_id": "7b113599307b4c078bb58efda2dfb734", + "host_secret": "d8ae8eb8a08f4ff5af7f604e593e58a8", + "systemd_units": [ + "scion-hsr@br-1.service", + "scion-control-service@cs-1.service", + "scion-daemon.service", + "scion-dispatcher.service" + ], + "url": "http://localhost:8000", + "version": 6 + } diff --git a/scionlab/tests/test_config_tar.py b/scionlab/tests/test_config_tar.py index fed2c0bc..49909844 100644 --- a/scionlab/tests/test_config_tar.py +++ b/scionlab/tests/test_config_tar.py @@ -20,7 +20,7 @@ from scionlab.config_tar import generate_host_config_tar, generate_user_as_config_tar from scionlab.fixtures.testuser import get_testuser_exbert -from scionlab.models.core import AS, Service +from scionlab.models.core import AS, BorderRouter, Service from scionlab.models.user_as import UserAS from scionlab.util.archive import DictWriter @@ -58,6 +58,10 @@ def test_host_extra_srv(self): extra_srv = Service.objects.filter(type__in=[Service.BW]).first() self._test_host(extra_srv.host) + def test_host_hsr(self): + hsr = BorderRouter.objects.filter(is_hsr=True).first() + self._test_host(hsr.host) + def _test_host(self, host): archive = DictWriter() generate_host_config_tar(host, archive)