From 678287018429ed057468c663f74bb0346317903e Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 11 Apr 2020 14:58:08 +0200 Subject: [PATCH 01/12] --help-merge-from-custom-file option for clients-from-euroix --- .DS_Store | Bin 0 -> 6148 bytes CHANGES.rst | 7 ++ docs/USAGE.rst | 3 + .../commands/clients_from_euroix.py | 74 ++++++++++++++++++ pierky/arouteserver/config/base.py | 10 +++ pierky/arouteserver/config/clients.py | 74 ++++++++++++++++++ tests/static/data/custom_clients_1.yml | 12 +++ tests/static/data/custom_clients_2.yml | 12 +++ tests/static/data/custom_clients_3.yml | 2 + tests/static/data/custom_clients_4.yml | 3 + tests/static/test_clients_from_euroix.py | 66 ++++++++++++++++ 11 files changed, 263 insertions(+) create mode 100644 .DS_Store create mode 100644 tests/static/data/custom_clients_1.yml create mode 100644 tests/static/data/custom_clients_2.yml create mode 100644 tests/static/data/custom_clients_3.yml create mode 100644 tests/static/data/custom_clients_4.yml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3e7647998886364b6970adfc23d0a7f707c3f50c GIT binary patch literal 6148 zcmeHK%}&BV5Z)Ek1!Lr3BFDXW;{g7E7n7#q!JA2q9@Ib^h%~{LltQDmrmvxI(y45pghA~3K|fN-ey1ii7E$I%WUN}|-MRMWK4 zJgUjP!)8{KX{%MQ$%Fl7mX*ZLZsYi@d;jp5K4s4@nqLm|E7>wQgI7>Yc~d6}hGB3A zBeUpP6d^G{3=jjvz)~?_jsdZ;R8>>4!~iky69#a9kkAk~lQ9#GH z1fn!(8O$|;2ZZZXK%L6X6NBq?7?&o_GMH=B>5QwDVIH&c?D4|Y>M$-WKkj zV4i`3HY<4kpTaM*@R2{CLKZPV4E!?&c(LuYZ79l|t>4PSvsOauLPNp092F4I=Pm(Y i;674SPVJYdL!4zW*NC&=xJn14i-018I%41#82A8%hfm=E literal 0 HcmV?d00001 diff --git a/CHANGES.rst b/CHANGES.rst index 81748fc3..5714e624 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,13 @@ Change log .. note:: **Upgrade notes**: after upgrading, run the ``arouteserver setup-templates`` command to sync the local templates with those distributed with the new version. More details on the `Upgrading `__ section of the documentation. +next release +------------ + +- Improvement: ``clients-from-euroix`` command, option ``--merge-from-custom-file`` to customise the list of clients generated from an Euro-IX JSON file. + + More details on how to use this option can be found running ``arouteserver clients-from-euroix --help-merge-from-custom-file``. + v0.24.1 ------- diff --git a/docs/USAGE.rst b/docs/USAGE.rst index 4e22c4f9..a21dcaf1 100644 --- a/docs/USAGE.rst +++ b/docs/USAGE.rst @@ -189,6 +189,9 @@ An example from the LONAP: ip: 5.57.81.57 ... + +Local customisations are possible using the ``--merge-from-custom-file`` command line argument, that allows to merge custom settings from a local YAML file into the one generated by this command: more details on how to use this option can be found running ``arouteserver clients-from-euroix --help-merge-from-custom-file``. + To get a list of all the available options, run the ``arouteserver clients-from-euroix --help`` command. .. _ixp-manager-integration: diff --git a/pierky/arouteserver/commands/clients_from_euroix.py b/pierky/arouteserver/commands/clients_from_euroix.py index 1f087094..defb4072 100644 --- a/pierky/arouteserver/commands/clients_from_euroix.py +++ b/pierky/arouteserver/commands/clients_from_euroix.py @@ -20,7 +20,9 @@ from .base import ARouteServerCommand from ..config.program import program_config +from ..config.clients import merge_clients from ..euro_ix import EuroIXMemberList +from ..errors import ARouteServerError class ClientsFromEuroIXCommand(ARouteServerCommand): @@ -96,6 +98,26 @@ def add_arguments(cls, parser): "not included in the Euro-IX JSON member list file.", dest="merge_from_peeringdb") + parser.add_argument( + "--merge-from-custom-file", + help="Merge a custom set of client settings from " + "FILE into the clients generated from the " + "Euro-IX JSON file. Can be used to override " + "or enrich the clients which are automatically " + "built by this tool with some custom local " + "settings. For more info on how it works and " + "the syntax of the custom file, run this command " + "again with --help-merge-from-custom-file.", + metavar="FILE", + type=argparse.FileType('r'), + dest="merge_from_custom_file") + + parser.add_argument( + "--help-merge-from-custom-file", + help="Prints additional info on how to use the " + "--merge-from-custom-file option.", + action="store_true") + parser.add_argument( "-o", "--output", type=argparse.FileType('w'), @@ -104,6 +126,48 @@ def add_arguments(cls, parser): dest="output_file") def run(self): + if self.args.help_merge_from_custom_file: + print( + "\n" + "When --merge-from-custom-file is used, a local " + "YAML file is used to enrich the clients.yml file " + "built using this command.\n" + "This option can be used to handle local exceptions, " + "to override settings or to add clients which are " + "not included in the Euro-IX JSON used to built the " + "original file.\n" + "The format of the custom file must be the same of " + "the regular clients.yml file; the 'ip' attribute " + "of a client included inside the custom file is used " + "to match the client on the original clients.yml " + "build by this command. The content of the custom " + "file is then merged into the definition of the " + "original client.\n" + "\n" + "If a client is configured in the local custom file " + "but is missing from the set of clients generated " + "using the Euro-IX JSON file, then the local one is " + "ignored, unless the 'add_if_missing' attribute is " + "set to 'True': in that case, the custom client is " + "added to the resulting clients.yml file.\n" + "\n" + "Example of a local custom file:\n" + "\n" + "clients:\n" + " - ip: 192.0.2.1\n" + " password: ""bgp_secret""\n" + " - ip: 192.0.2.2\n" + " cfg:\n" + " filtering:\n" + " irrdb:\n" + " as_sets:\n" + " - AS-TWO\n" + " - ip: 192.0.2.3\n" + " add_if_missing: True\n" + " asn: 3333\n" + ) + return True + euro_ix = EuroIXMemberList(self.args.url or self.args.input_file, program_config.get_dir("cache_dir"), program_config.get("cache_expiry")) @@ -116,6 +180,16 @@ def run(self): merge_from_peeringdb=self.args.merge_from_peeringdb) res = {"clients": clients} + if self.args.merge_from_custom_file: + try: + merge_clients(res, self.args.merge_from_custom_file) + except ARouteServerError as e: + raise ARouteServerError( + "An error occurred while processing the custom " + "clients file provided via " + "--merge-from-custom-file: {}".format(e) + ) + comments = [] comments.append("# Data fetched from {} at {} UTC".format( self.args.url or self.args.input_file.name, diff --git a/pierky/arouteserver/config/base.py b/pierky/arouteserver/config/base.py index 8e11328c..1b011b69 100644 --- a/pierky/arouteserver/config/base.py +++ b/pierky/arouteserver/config/base.py @@ -119,6 +119,16 @@ def load(self, cfg_path): logging.error(str(e)) raise ConfigError() + def load_from_dict(self, input_dict): + self.cfg = input_dict + + try: + self.parse() + except ARouteServerError as e: + if str(e): + logging.error(str(e)) + raise ConfigError() + @staticmethod def validate(schema, cfg, path=""): errors = False diff --git a/pierky/arouteserver/config/clients.py b/pierky/arouteserver/config/clients.py index 8beb918e..7d3e6342 100644 --- a/pierky/arouteserver/config/clients.py +++ b/pierky/arouteserver/config/clients.py @@ -15,6 +15,7 @@ from copy import deepcopy import logging +import yaml from .base import ConfigParserBase, convert_deprecated from .validators import * @@ -237,3 +238,76 @@ def inherit_from_general_cfg(dest, src, schema): if errors: raise ConfigError() + + +def merge_clients(original, custom_file): + try: + new = yaml.safe_load(custom_file) + except Exception as e: + raise ConfigError( + "Error while loading the YAML file: {e}".format(e) + ) + + if not new: + raise ConfigError("The YAML file is empty") + + if "clients" not in new: + raise ConfigError( + "The top level 'clients' key is missing from the " + "the set of clients to be merged." + ) + + if not isinstance(new["clients"], list): + raise ConfigError( + "The top level 'clients' key must represent a list " + "of clients." + ) + + for client_id, client in enumerate(new["clients"]): + try: + if "ip" not in client: + raise ConfigError( + "'ip' not found" + ) + + if not isinstance(client["ip"], str): + raise ConfigError( + "'ip' must be a string representing the IP " + "address of the original client to be updated." + ) + + ip = ValidatorIPAddr().validate(client["ip"]) + + for original_client in original["clients"]: + if original_client["ip"] != ip: + continue + + # A client having the same IP is present in the + # list of original clients. It's the one to update + # with the settings from the custom one. + original_client.update(client) + break + else: + # No clients to update were found. + # If the custom one has the 'add_if_missing' key + # set to True, the custom one can be added to the + # list of clients. + if client.pop("add_if_missing", False): + original["clients"].append(client) + + except ConfigError as e: + raise ConfigError( + "Error while processing the client n. {n} from " + "the set of clients to be merged: {e}".format( + n=client_id + 1, + e=e + ) + ) + try: + new_res_after_merge = deepcopy(original) + ConfigParserClients().load_from_dict(new_res_after_merge) + except ARouteServerError: + raise ConfigError( + "Validation of the final clients file failed: " + "check the logs for more details." + ) diff --git a/tests/static/data/custom_clients_1.yml b/tests/static/data/custom_clients_1.yml new file mode 100644 index 00000000..6cf2a525 --- /dev/null +++ b/tests/static/data/custom_clients_1.yml @@ -0,0 +1,12 @@ +clients: + - ip: 192.0.2.1 + password: bgp_secret + - ip: 192.0.2.2 + cfg: + filtering: + irrdb: + as_sets: + - AS-TWO + - ip: 192.0.2.3 + add_if_missing: True + asn: 3333 diff --git a/tests/static/data/custom_clients_2.yml b/tests/static/data/custom_clients_2.yml new file mode 100644 index 00000000..31ef7f76 --- /dev/null +++ b/tests/static/data/custom_clients_2.yml @@ -0,0 +1,12 @@ +clients: + - ip: 195.69.146.250 + password: bgp_secret + - ip: 195.69.147.250 + cfg: + filtering: + irrdb: + as_sets: + - AS-TWO + - ip: 192.0.2.3 + add_if_missing: True + asn: 3333 diff --git a/tests/static/data/custom_clients_3.yml b/tests/static/data/custom_clients_3.yml new file mode 100644 index 00000000..11248ba5 --- /dev/null +++ b/tests/static/data/custom_clients_3.yml @@ -0,0 +1,2 @@ +clients: + - password: bgp_secret diff --git a/tests/static/data/custom_clients_4.yml b/tests/static/data/custom_clients_4.yml new file mode 100644 index 00000000..7585d35f --- /dev/null +++ b/tests/static/data/custom_clients_4.yml @@ -0,0 +1,3 @@ +clients: + - ip: 195.69.146.250 + bad_key: True diff --git a/tests/static/test_clients_from_euroix.py b/tests/static/test_clients_from_euroix.py index 5aff5eb8..32592701 100644 --- a/tests/static/test_clients_from_euroix.py +++ b/tests/static/test_clients_from_euroix.py @@ -20,6 +20,7 @@ import yaml from pierky.arouteserver.euro_ix import EuroIXMemberList +from pierky.arouteserver.config.clients import merge_clients class TestClientsFromEuroIX(unittest.TestCase): @@ -158,3 +159,68 @@ def test_skip_routeserver_10(self): "2001:504:9b::9" ): assert member_ip in [client["ip"] for client in clients] + + def test_merge_clients_1(self): + """Clients from Euro-IX: merge local custom clients, add missing client""" + self._run("official_more_complex_example", ixp_id=42, vlan_id=0) + clients = {"clients": self.clients} + merge_clients(clients, open("tests/static/data/custom_clients_1.yml", "r")) + + assert "192.0.2.1" not in [client["ip"] for client in clients["clients"]] + assert "192.0.2.2" not in [client["ip"] for client in clients["clients"]] + assert "192.0.2.3" in [client["ip"] for client in clients["clients"]] + + def test_merge_clients_2(self): + """Clients from Euro-IX: merge local custom clients, add/change settings""" + self._run("official_more_complex_example", ixp_id=42, vlan_id=0) + clients = {"clients": self.clients} + + # Test before merging. + + ip = "195.69.146.250" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client.get("password", None) is None + + ip = "195.69.147.250" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["cfg"]["filtering"]["irrdb"]["as_sets"] == ["AS-NFLX-V4"] + + merge_clients(clients, open("tests/static/data/custom_clients_2.yml", "r")) + + # Test after merging. + + ip = "195.69.146.250" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["password"] == "bgp_secret" + + ip = "195.69.147.250" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["cfg"]["filtering"]["irrdb"]["as_sets"] == ["AS-TWO"] + + assert "192.0.2.3" in [client["ip"] for client in clients["clients"]] + + def test_merge_clients_3(self): + """Clients from Euro-IX: merge local custom clients, broken custom file 1""" + self._run("official_more_complex_example", ixp_id=42, vlan_id=0) + clients = {"clients": self.clients} + + with six.assertRaisesRegex( + self, + Exception, + "Error while processing the client n. 1 from " + "the set of clients to be merged: 'ip' not found" + ): + merge_clients(clients, open("tests/static/data/custom_clients_3.yml", "r")) + + def test_merge_clients_4(self): + """Clients from Euro-IX: merge local custom clients, broken custom file 2""" + self._run("official_more_complex_example", ixp_id=42, vlan_id=0) + clients = {"clients": self.clients} + + with six.assertRaisesRegex( + self, + Exception, + "Validation of the final clients file failed: " + "check the logs for more details." + ): + merge_clients(clients, open("tests/static/data/custom_clients_4.yml", "r")) From a5a9e5ac44f5a3abcc1a0e0192e2ca27880f912e Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 11 Apr 2020 15:06:42 +0200 Subject: [PATCH 02/12] Update examples --- examples/bird2_rpki_rtr/bird_v2.conf | 6 ++--- examples/bird_hooks/bird4.conf | 4 +-- examples/bird_hooks/bird6.conf | 2 +- examples/default/bird4.conf | 4 +-- examples/default/bird6.conf | 2 +- examples/default/bird_v2.conf | 6 ++--- examples/default/openbgpd.conf | 12 ++++----- examples/default/template-context | 22 ++++++++++++++++ examples/default/template-context4 | 22 ++++++++++++++++ examples/default/template-context6 | 22 ++++++++++++++++ examples/rich/bird4.conf | 6 ++--- examples/rich/bird6.conf | 2 +- examples/rich/bird_v2.conf | 10 ++++---- examples/rich/openbgpd.conf | 12 ++++----- examples/rich/template-context | 38 ++++++++++++++++++++++------ examples/rich/template-context4 | 22 ++++++++++++++++ examples/rich/template-context6 | 22 ++++++++++++++++ 17 files changed, 173 insertions(+), 41 deletions(-) diff --git a/examples/bird2_rpki_rtr/bird_v2.conf b/examples/bird2_rpki_rtr/bird_v2.conf index 4f018a48..a13cb79c 100644 --- a/examples/bird2_rpki_rtr/bird_v2.conf +++ b/examples/bird2_rpki_rtr/bird_v2.conf @@ -467,7 +467,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -653,7 +653,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -843,7 +843,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/bird_hooks/bird4.conf b/examples/bird_hooks/bird4.conf index 69a474fa..b21ca621 100644 --- a/examples/bird_hooks/bird4.conf +++ b/examples/bird_hooks/bird4.conf @@ -567,7 +567,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -770,7 +770,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/bird_hooks/bird6.conf b/examples/bird_hooks/bird6.conf index d2e35c79..952bf469 100644 --- a/examples/bird_hooks/bird6.conf +++ b/examples/bird_hooks/bird6.conf @@ -605,7 +605,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/bird4.conf b/examples/default/bird4.conf index 4cc2a543..7479b577 100644 --- a/examples/default/bird4.conf +++ b/examples/default/bird4.conf @@ -303,7 +303,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -468,7 +468,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/bird6.conf b/examples/default/bird6.conf index 6fce6f69..f374fe3e 100644 --- a/examples/default/bird6.conf +++ b/examples/default/bird6.conf @@ -341,7 +341,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/bird_v2.conf b/examples/default/bird_v2.conf index 13d1f1e8..7417c2b5 100644 --- a/examples/default/bird_v2.conf +++ b/examples/default/bird_v2.conf @@ -421,7 +421,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -596,7 +596,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -775,7 +775,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/openbgpd.conf b/examples/default/openbgpd.conf index dc8d73ba..d6d3658d 100644 --- a/examples/default/openbgpd.conf +++ b/examples/default/openbgpd.conf @@ -264,8 +264,8 @@ deny quick from 192.0.2.22 AS 4200000000 - 4294967295 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 }' - reject code: 15 -deny quick from 192.0.2.22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 } +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } @@ -368,8 +368,8 @@ deny quick from 2001:db:1:1::22 AS 4200000000 - 4294967295 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db:1:1::22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 }' - reject code: 15 -deny quick from 2001:db:1:1::22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 } +# Reject inbound routes when 'from 2001:db:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 2001:db:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } @@ -472,8 +472,8 @@ deny quick from 192.0.2.11 AS 4200000000 - 4294967295 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 }' - reject code: 15 -deny quick from 192.0.2.11 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 } +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } diff --git a/examples/default/template-context b/examples/default/template-context index 205d1f2e..1f7bed3c 100644 --- a/examples/default/template-context +++ b/examples/default/template-context @@ -921,11 +921,33 @@ registrobr_whois_db_records never_via_route_servers_asns ---------------------------- +- 1299 +- 12322 +- 13030 +- 3320 +- 174 - 6830 - 6908 - 11164 - 2914 - 3491 +- 8943 +- 8455 +- 36459 +- 7155 +- 263328 +- 46450 +- 52973 +- 265914 +- 138023 - 54295 +- 209395 +- 138953 - 58768 +- 328572 - 393573 +- 393684 +- 269156 +- 207353 +- 209699 +- 270544 diff --git a/examples/default/template-context4 b/examples/default/template-context4 index 7866bc73..cc22e6ac 100644 --- a/examples/default/template-context4 +++ b/examples/default/template-context4 @@ -891,11 +891,33 @@ registrobr_whois_db_records never_via_route_servers_asns ---------------------------- +- 1299 +- 12322 +- 13030 +- 3320 +- 174 - 6830 - 6908 - 11164 - 2914 - 3491 +- 8943 +- 8455 +- 36459 +- 7155 +- 263328 +- 46450 +- 52973 +- 265914 +- 138023 - 54295 +- 209395 +- 138953 - 58768 +- 328572 - 393573 +- 393684 +- 269156 +- 207353 +- 209699 +- 270544 diff --git a/examples/default/template-context6 b/examples/default/template-context6 index d2647a6b..575aa85f 100644 --- a/examples/default/template-context6 +++ b/examples/default/template-context6 @@ -847,11 +847,33 @@ registrobr_whois_db_records never_via_route_servers_asns ---------------------------- +- 1299 +- 12322 +- 13030 +- 3320 +- 174 - 6830 - 6908 - 11164 - 2914 - 3491 +- 8943 +- 8455 +- 36459 +- 7155 +- 263328 +- 46450 +- 52973 +- 265914 +- 138023 - 54295 +- 209395 +- 138953 - 58768 +- 328572 - 393573 +- 393684 +- 269156 +- 207353 +- 209699 +- 270544 diff --git a/examples/rich/bird4.conf b/examples/rich/bird4.conf index eb8eec34..649df512 100644 --- a/examples/rich/bird4.conf +++ b/examples/rich/bird4.conf @@ -61,7 +61,7 @@ define AS_SET_AS10745_prefixes_4 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_4 = [ - 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32}, 199.43.0.0/24{24,32} + 192.136.136.0/24{24,32}, 192.149.252.0/24{24,32}, 199.43.0.0/24{24,32} ]; @@ -1741,7 +1741,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -1958,7 +1958,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/rich/bird6.conf b/examples/rich/bird6.conf index 802349a6..4ddd3e06 100644 --- a/examples/rich/bird6.conf +++ b/examples/rich/bird6.conf @@ -1772,7 +1772,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/rich/bird_v2.conf b/examples/rich/bird_v2.conf index 5fe5a1e2..8a49f8dc 100644 --- a/examples/rich/bird_v2.conf +++ b/examples/rich/bird_v2.conf @@ -78,10 +78,10 @@ define AS_SET_AS10745_prefixes_6 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_4 = [ - 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32}, 199.43.0.0/24{24,32} + 199.43.0.0/24{24,32}, 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32} ]; define ARIN_Whois_db_AS10745_6 = [ - 2001:500:110::/48{48,128}, 2001:500:4::/48{48,128} + 2001:500:4::/48{48,128}, 2001:500:110::/48{48,128} ]; @@ -1915,7 +1915,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2140,7 +2140,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2369,7 +2369,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/rich/openbgpd.conf b/examples/rich/openbgpd.conf index 510f0d5e..8cdc89bd 100644 --- a/examples/rich/openbgpd.conf +++ b/examples/rich/openbgpd.conf @@ -371,8 +371,8 @@ deny quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 3257 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 }' - reject code: 15 -deny quick from 192.0.2.22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 } +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } @@ -1028,8 +1028,8 @@ deny quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 }' - reject code: 15 -deny quick from 2001:db8:1:1::22 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 } +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } @@ -1685,8 +1685,8 @@ deny quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 3257 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 }' - reject code: 15 -deny quick from 192.0.2.11 AS { 2914, 3491, 6830, 6908, 11164, 54295, 58768, 393573 } +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } diff --git a/examples/rich/template-context b/examples/rich/template-context index 1d8415cf..d8103bb1 100644 --- a/examples/rich/template-context +++ b/examples/rich/template-context @@ -998,30 +998,30 @@ AS10745: length: 24 max_length: 32 prefix: 192.149.252.0 +- exact: false + ge: 24 + le: 32 + length: 24 + max_length: 32 + prefix: 199.43.0.0 - exact: false ge: 48 le: 128 length: 48 max_length: 128 - prefix: '2001:500:4::' + prefix: '2001:500:110::' - exact: false ge: 48 le: 128 length: 48 max_length: 128 - prefix: '2001:500:110::' + prefix: '2001:500:4::' - exact: false ge: 24 le: 32 length: 24 max_length: 32 prefix: 192.136.136.0 -- exact: false - ge: 24 - le: 32 - length: 24 - max_length: 32 - prefix: 199.43.0.0 registrobr_whois_db_records @@ -1033,9 +1033,31 @@ never_via_route_servers_asns ---------------------------- - 2914 - 3491 +- 1299 +- 12322 +- 13030 +- 3320 +- 174 - 6830 - 6908 - 11164 +- 8943 +- 8455 +- 36459 +- 7155 +- 263328 +- 46450 +- 52973 +- 265914 +- 138023 - 54295 +- 209395 +- 138953 - 58768 +- 328572 - 393573 +- 393684 +- 269156 +- 207353 +- 209699 +- 270544 diff --git a/examples/rich/template-context4 b/examples/rich/template-context4 index 64549cfb..36fbed45 100644 --- a/examples/rich/template-context4 +++ b/examples/rich/template-context4 @@ -975,9 +975,31 @@ never_via_route_servers_asns ---------------------------- - 2914 - 3491 +- 1299 +- 12322 +- 13030 +- 3320 +- 174 - 6830 - 6908 - 11164 +- 8943 +- 8455 +- 36459 +- 7155 +- 263328 +- 46450 +- 52973 +- 265914 +- 138023 - 54295 +- 209395 +- 138953 - 58768 +- 328572 - 393573 +- 393684 +- 269156 +- 207353 +- 209699 +- 270544 diff --git a/examples/rich/template-context6 b/examples/rich/template-context6 index 95ea62d7..ae4f18ec 100644 --- a/examples/rich/template-context6 +++ b/examples/rich/template-context6 @@ -901,9 +901,31 @@ never_via_route_servers_asns ---------------------------- - 2914 - 3491 +- 1299 +- 12322 +- 13030 +- 3320 +- 174 - 6830 - 6908 - 11164 +- 8943 +- 8455 +- 36459 +- 7155 +- 263328 +- 46450 +- 52973 +- 265914 +- 138023 - 54295 +- 209395 +- 138953 - 58768 +- 328572 - 393573 +- 393684 +- 269156 +- 207353 +- 209699 +- 270544 From 83c52221c7b9734b8bd975e76262c08664196da4 Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 11 Apr 2020 15:06:57 +0200 Subject: [PATCH 03/12] Fix broken reject reasons table --- docs/REJECT_REASON_COMMUNITIES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/REJECT_REASON_COMMUNITIES.txt b/docs/REJECT_REASON_COMMUNITIES.txt index 7eee0250..bffbbd5e 100644 --- a/docs/REJECT_REASON_COMMUNITIES.txt +++ b/docs/REJECT_REASON_COMMUNITIES.txt @@ -1,5 +1,8 @@ .. DO NOT EDIT: this file is automatically created by ../utils/build_doc +Reject reasons +~~~~~~~~~~~~~~ + ===== ========================================================= ID Reason ===== ========================================================= From 880cb71d291399823a812682e0e8dfeef082c978 Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 11 Apr 2020 15:07:16 +0200 Subject: [PATCH 04/12] v0.25.0-alpha1 --- pierky/arouteserver/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pierky/arouteserver/version.py b/pierky/arouteserver/version.py index 6c57cb70..5ec7adbd 100644 --- a/pierky/arouteserver/version.py +++ b/pierky/arouteserver/version.py @@ -13,5 +13,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -__version__ = "0.24.1" # pragma: no cover +__version__ = "0.25.0-alpha1" # pragma: no cover COPYRIGHT_YEAR = 2020 # pragma: no cover From e30b52b7f78f2d1d253e2663c1efcc27797c06f6 Mon Sep 17 00:00:00 2001 From: Nick Pratley Date: Thu, 23 Apr 2020 15:32:25 +1000 Subject: [PATCH 05/12] Adding tag_and_reject option to reject_policy --- pierky/arouteserver/config/general.py | 11 ++++++----- templates/bird/clients.j2 | 2 ++ templates/fingerprints.yml | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pierky/arouteserver/config/general.py b/pierky/arouteserver/config/general.py index ffc37b64..f6eb775c 100644 --- a/pierky/arouteserver/config/general.py +++ b/pierky/arouteserver/config/general.py @@ -1,3 +1,4 @@ + # Copyright (C) 2017-2020 Pier Carlo Chiodi # # This program is free software: you can redistribute it and/or modify @@ -197,7 +198,7 @@ def get_schema(): f["reject_policy"] = OrderedDict() f["reject_policy"]["policy"] = ValidatorOption( - "policy", ("reject", "tag"), default="reject" + "policy", ("reject", "tag", "tag_and_reject"), default="reject" ) c["rpki_roas"] = OrderedDict() @@ -387,7 +388,7 @@ def parse(self): # The 'reject_cause' and 'rejected_route_announced_by' communities # can be set only if 'reject_policy' is 'tag'. - if self.cfg["cfg"]["filtering"]["reject_policy"]["policy"] != "tag": + if self.cfg["cfg"]["filtering"]["reject_policy"]["policy"] not in ["tag", "tag_and_reject"]: for comm in ("reject_cause", "rejected_route_announced_by"): reject_comm_is_set = False for fmt in ("std", "ext", "lrg"): @@ -400,8 +401,8 @@ def parse(self): "The '{}' community can be set only if " "'reject_policy.policy' is 'tag'.".format(comm)) - # The 'reject_cause' comm is mandatory when 'reject_policy' is 'tag'. - if self.cfg["cfg"]["filtering"]["reject_policy"]["policy"] == "tag": + # The 'reject_cause' comm is mandatory when 'reject_policy' is 'tag' or 'tag_and_reject'. + if self.cfg["cfg"]["filtering"]["reject_policy"]["policy"] in ["tag", "tag_and_reject"]: reject_comm_is_set = False for fmt in ("std", "ext", "lrg"): if self.cfg["cfg"]["communities"]["reject_cause"][fmt]: @@ -411,7 +412,7 @@ def parse(self): errors = True logging.error( "The 'reject_cause' community must be configured when " - "'reject_policy.policy' is 'tag'.") + "'reject_policy.policy' is 'tag' or 'tag_and_reject'.") # Overlapping communities? try: diff --git a/templates/bird/clients.j2 b/templates/bird/clients.j2 index 5d6f00b4..2cbdd9f5 100644 --- a/templates/bird/clients.j2 +++ b/templates/bird/clients.j2 @@ -14,6 +14,8 @@ {% macro reject(client, cause, err_msg, avoid_braces=False) %} {% if client.cfg.filtering.reject_policy.policy == "reject" %} reject {{ err_msg }}; +{% elif client.cfg.filtering.reject_policy.policy == "tag_and_reject" %} +{% if not avoid_braces %}{{ "{ " }}{% endif %}tag_and_reject({{ cause}}, {{ client.asn }}); reject {{ err_msg }};{% if not avoid_braces %}{{ " }" }}{% endif %} {% else %} {% if not avoid_braces %}{{ "{ " }}{% endif %}tag_and_reject({{ cause}}, {{ client.asn }}); print {{ err_msg }}; accept;{% if not avoid_braces %}{{ " }" }}{% endif %} {% endif %} diff --git a/templates/fingerprints.yml b/templates/fingerprints.yml index 6abab596..ec225e9a 100644 --- a/templates/fingerprints.yml +++ b/templates/fingerprints.yml @@ -1,5 +1,5 @@ bird: - clients.j2: 9ca57458286640722fa368deba328a6ae85db08d23733482887bb6efffa20271e68ff82168113811fe464fa57590909bf3055cf20bbdae39be245f15a8bd219a + clients.j2: 036f23b6c57472d9a7eff117eb194be0dc5c567b57a3b88d342ae049560ba938a974a5e404c2ffba4d51a38603917b96df5b61408e825174ac1fe5d8e947cfb5 common.j2: 2e5af4937fb04eebabe6a32b797924049755021dcda4ffccb775bdfcbc78ce6a351ca86349512ddf56d82fd09f9b69a9ea64185a383b321f89a31c5f155d45e9 header.j2: 584f9db6b8ee3f7c0be57d11323aac3e6b984cf5c495bbcb3d37b551c3525edc45baf1066d2d10b8af173a2159bc7e699a57f3fe4de4434ce244f12278df34a1 irrdb.j2: ba14f717104b1ace6b208046d1028e0e9bda456f7bbec31fb57e04d8e75133a3925a49e91b047dc8d73b96cc6a2be8df7fa5134ef42e4937f4f2e8245e712c2f From 8d6fb6158d61e7301e70ec8ab65c18f2e3d59052 Mon Sep 17 00:00:00 2001 From: Nick Pratley Date: Thu, 23 Apr 2020 15:33:35 +1000 Subject: [PATCH 06/12] remove whitespace --- pierky/arouteserver/config/general.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pierky/arouteserver/config/general.py b/pierky/arouteserver/config/general.py index f6eb775c..0b1f5bfa 100644 --- a/pierky/arouteserver/config/general.py +++ b/pierky/arouteserver/config/general.py @@ -1,4 +1,3 @@ - # Copyright (C) 2017-2020 Pier Carlo Chiodi # # This program is free software: you can redistribute it and/or modify From 82eae8dbf471c311ea0197077c2c84e3d1fda29e Mon Sep 17 00:00:00 2001 From: Nick Pratley Date: Thu, 23 Apr 2020 15:50:21 +1000 Subject: [PATCH 07/12] updating tests --- tests/static/test_cfg_general.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/static/test_cfg_general.py b/tests/static/test_cfg_general.py index 965305a9..cade0811 100644 --- a/tests/static/test_cfg_general.py +++ b/tests/static/test_cfg_general.py @@ -274,7 +274,10 @@ def test_reject_policy(self): del self.cfg["communities"]["reject_cause"]["std"] self.cfg["filtering"]["reject_policy"]["policy"] = "tag" - self._contains_err("The 'reject_cause' community must be configured when 'reject_policy.policy' is 'tag'.") + self._contains_err("The 'reject_cause' community must be configured when 'reject_policy.policy' is 'tag' or 'tag_and_reject'.") + + self.cfg["filtering"]["reject_policy"]["policy"] = "tag_and_reject" + self._contains_err("The 'reject_cause' community must be configured when 'reject_policy.policy' is 'tag' or 'tag_and_reject'.") self._test_option(self.cfg["filtering"]["reject_policy"], "policy", ()) @@ -499,7 +502,7 @@ def test_mandatory_dyn_val_communities(self): def test_reject_cause_community_with_no_reject_policy(self): """{}: reject_cause can be set only with 'tag' reject_policy""" self.cfg["communities"]["reject_cause"]["std"] = "0:dyn_val" - self._contains_err("The 'reject_cause' community can be set only if 'reject_policy.policy' is 'tag'.") + self._contains_err("The 'reject_cause' community can be set only if 'reject_policy.policy' is 'tag' or 'tag_and_reject'.") self.cfg["filtering"]["reject_policy"]["policy"] = "tag" self._contains_err() From 47b720bc1951b37c81fac2b57ec20dd94333687a Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 25 Apr 2020 11:07:17 +0200 Subject: [PATCH 08/12] Handle different representations of client IPs --- pierky/arouteserver/config/clients.py | 24 ++++++++++- tests/static/data/custom_clients_2.yml | 7 ++++ tests/static/data/custom_clients_5.yml | 4 ++ tests/static/test_clients_from_euroix.py | 53 ++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 tests/static/data/custom_clients_5.yml diff --git a/pierky/arouteserver/config/clients.py b/pierky/arouteserver/config/clients.py index 7d3e6342..8ce0a60e 100644 --- a/pierky/arouteserver/config/clients.py +++ b/pierky/arouteserver/config/clients.py @@ -276,12 +276,32 @@ def merge_clients(original, custom_file): "address of the original client to be updated." ) - ip = ValidatorIPAddr().validate(client["ip"]) + + # The value of the 'ip' key of the dictionary that will + # be used below to find the corresponding client and + # to update it is overriden here with the normalised + # representation of that IP. + # This is done in order to avoid mismatching of IPs + # represented in different ways (lower/upper case, + # exploded vs compact form), and also to avoid + # changing the way the IP was represented in + # the original client definition. + client["ip"] = ValidatorIPAddr().validate(client["ip"]) for original_client in original["clients"]: - if original_client["ip"] != ip: + if original_client["ip"] != client["ip"]: continue + if "add_if_missing" in client: + raise ConfigError( + "client {ip} already exists in the original " + "list of clients, but it's also reported in " + "the set of clients to be merged with the " + "'add_if_missing' attribute set.".format( + ip=client["ip"] + ) + ) + # A client having the same IP is present in the # list of original clients. It's the one to update # with the settings from the custom one. diff --git a/tests/static/data/custom_clients_2.yml b/tests/static/data/custom_clients_2.yml index 31ef7f76..259f89e1 100644 --- a/tests/static/data/custom_clients_2.yml +++ b/tests/static/data/custom_clients_2.yml @@ -10,3 +10,10 @@ clients: - ip: 192.0.2.3 add_if_missing: True asn: 3333 + - ip: 2001:7f8:1::A500:2906:1 + password: bgp_secret_2 + - ip: 2001:07f8:0001::A500:2906:0002 + password: bgp_secret_3 + - ip: 2001:07f8:0001:0000:0000:a500:2906:0003 + add_if_missing: True + asn: 4444 diff --git a/tests/static/data/custom_clients_5.yml b/tests/static/data/custom_clients_5.yml new file mode 100644 index 00000000..6b298fe8 --- /dev/null +++ b/tests/static/data/custom_clients_5.yml @@ -0,0 +1,4 @@ +clients: + - ip: 2001:07f8:0001:0000:0000:a500:2906:0002 + add_if_missing: True + asn: 4444 diff --git a/tests/static/test_clients_from_euroix.py b/tests/static/test_clients_from_euroix.py index 32592701..d547d02d 100644 --- a/tests/static/test_clients_from_euroix.py +++ b/tests/static/test_clients_from_euroix.py @@ -181,10 +181,18 @@ def test_merge_clients_2(self): client = [client for client in clients["clients"] if client["ip"] == ip][0] assert client.get("password", None) is None + ip = "2001:7f8:1::a500:2906:2" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["cfg"]["filtering"]["irrdb"]["as_sets"] == ["AS-NFLX-V6"] + ip = "195.69.147.250" client = [client for client in clients["clients"] if client["ip"] == ip][0] assert client["cfg"]["filtering"]["irrdb"]["as_sets"] == ["AS-NFLX-V4"] + ip = "2001:7f8:1::a500:2906:1" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client.get("password", None) is None + merge_clients(clients, open("tests/static/data/custom_clients_2.yml", "r")) # Test after merging. @@ -193,12 +201,40 @@ def test_merge_clients_2(self): client = [client for client in clients["clients"] if client["ip"] == ip][0] assert client["password"] == "bgp_secret" + # In custom_clients_2.yml, the client is reported with + # an "exploded" IPv6 address, with zeroes, so a different + # representation of the IP found in the Euro-IX JSON file. + # This test aims to verify that during the merge IP addresses + # are matched correctly, regardless of their textual + # representation. + ip = "2001:7f8:1::a500:2906:2" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["password"] == "bgp_secret_3" + ip = "195.69.147.250" client = [client for client in clients["clients"] if client["ip"] == ip][0] assert client["cfg"]["filtering"]["irrdb"]["as_sets"] == ["AS-TWO"] + # In custom_clients_2.yml, the client is reported with + # an uppercase IPv6 address, while the one that comes + # from the Euro-IX JSON file is lower-case. + # This test aims to verify that during the merge IP addresses + # are matched correctly, regardless of their textual + # representation. + ip = "2001:7f8:1::a500:2906:1" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["password"] == "bgp_secret_2" + assert "192.0.2.3" in [client["ip"] for client in clients["clients"]] + # Client that is added via the custom YML file. + # The IP on that file is represented using the exploded + # form. This verifies that the client is added correctly + # using the normalised representation. + ip = "2001:7f8:1::a500:2906:3" + client = [client for client in clients["clients"] if client["ip"] == ip][0] + assert client["asn"] == 4444 + def test_merge_clients_3(self): """Clients from Euro-IX: merge local custom clients, broken custom file 1""" self._run("official_more_complex_example", ixp_id=42, vlan_id=0) @@ -224,3 +260,20 @@ def test_merge_clients_4(self): "check the logs for more details." ): merge_clients(clients, open("tests/static/data/custom_clients_4.yml", "r")) + + def test_merge_clients_5(self): + """Clients from Euro-IX: merge local custom clients, broken custom file 3""" + self._run("official_more_complex_example", ixp_id=42, vlan_id=0) + clients = {"clients": self.clients} + + with six.assertRaisesRegex( + self, + Exception, + "Error while processing the client n. 1 from " + "the set of clients to be merged: " + "client 2001:7f8:1::a500:2906:2 already exists in the " + "original list of clients, but it's also reported in " + "the set of clients to be merged with the 'add_if_missing' " + "attribute set." + ): + merge_clients(clients, open("tests/static/data/custom_clients_5.yml", "r")) From a5e08cd551c1426ee414ece60b05fa0ced502e67 Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 25 Apr 2020 14:10:33 +0200 Subject: [PATCH 09/12] Fix and extend tests for tag_and_reject --- pierky/arouteserver/config/general.py | 4 ++-- tests/static/test_cfg_general.py | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pierky/arouteserver/config/general.py b/pierky/arouteserver/config/general.py index 0b1f5bfa..74e167b6 100644 --- a/pierky/arouteserver/config/general.py +++ b/pierky/arouteserver/config/general.py @@ -386,7 +386,7 @@ def parse(self): unique_communities.append(comm[fmt]) # The 'reject_cause' and 'rejected_route_announced_by' communities - # can be set only if 'reject_policy' is 'tag'. + # can be set only if 'reject_policy' is 'tag' or 'tag_and_reject'. if self.cfg["cfg"]["filtering"]["reject_policy"]["policy"] not in ["tag", "tag_and_reject"]: for comm in ("reject_cause", "rejected_route_announced_by"): reject_comm_is_set = False @@ -398,7 +398,7 @@ def parse(self): errors = True logging.error( "The '{}' community can be set only if " - "'reject_policy.policy' is 'tag'.".format(comm)) + "'reject_policy.policy' is 'tag' or 'tag_and_reject'.".format(comm)) # The 'reject_cause' comm is mandatory when 'reject_policy' is 'tag' or 'tag_and_reject'. if self.cfg["cfg"]["filtering"]["reject_policy"]["policy"] in ["tag", "tag_and_reject"]: diff --git a/tests/static/test_cfg_general.py b/tests/static/test_cfg_general.py index cade0811..0b9b238d 100644 --- a/tests/static/test_cfg_general.py +++ b/tests/static/test_cfg_general.py @@ -507,15 +507,21 @@ def test_reject_cause_community_with_no_reject_policy(self): self.cfg["filtering"]["reject_policy"]["policy"] = "tag" self._contains_err() + self.cfg["filtering"]["reject_policy"]["policy"] = "tag_and_reject" + self._contains_err() + def test_rejected_route_announced_by_with_no_reject_policy(self): """{}: rejected_route_announced_by can be set only with 'tag' reject_policy""" self.cfg["communities"]["reject_cause"]["std"] = "65520:dyn_val" self.cfg["communities"]["rejected_route_announced_by"]["std"] = "0:dyn_val" - self._contains_err("The 'rejected_route_announced_by' community can be set only if 'reject_policy.policy' is 'tag'.") + self._contains_err("The 'rejected_route_announced_by' community can be set only if 'reject_policy.policy' is 'tag' or 'tag_and_reject'.") self.cfg["filtering"]["reject_policy"]["policy"] = "tag" self._contains_err() + self.cfg["filtering"]["reject_policy"]["policy"] = "tag_and_reject" + self._contains_err() + def test_peer_as_usage_in_communities(self): """{}: peer_as macro usage in communities""" From d1b7dbbad5f4b34abbe2c8ca9231c79f7c3cd784 Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 25 Apr 2020 16:01:05 +0200 Subject: [PATCH 10/12] tag_and_reject tests and docs --- config.d/general.yml | 14 +- docs/CONFIG.rst | 2 + docs/GENERAL.rst | 15 +- examples/bird2_rpki_rtr/bird_v2.conf | 6 +- examples/bird_hooks/bird4.conf | 4 +- examples/bird_hooks/bird6.conf | 2 +- examples/default/bird4.conf | 4 +- examples/default/bird6.conf | 2 +- examples/default/bird_v2.conf | 6 +- examples/default/openbgpd.conf | 12 +- examples/default/template-context | 9 + examples/default/template-context4 | 9 + examples/default/template-context6 | 9 + examples/rich/bird4.conf | 6 +- examples/rich/bird6.conf | 4 +- examples/rich/bird_v2.conf | 8 +- examples/rich/openbgpd.conf | 12 +- examples/rich/template-context | 21 +- examples/rich/template-context4 | 15 +- examples/rich/template-context6 | 9 + pierky/arouteserver/builder.py | 8 + pierky/arouteserver/config/clients.py | 2 +- pierky/arouteserver/tests/live_tests/base.py | 8 +- tests/cli | 18 + tests/live_tests/scenarios/global/base.py | 7 +- .../bird2.conf | 3732 +++++++++++++++++ .../bird2.conf | 3732 +++++++++++++++++ .../bird16.conf | 2562 +++++++++++ .../bird16.conf | 2625 ++++++++++++ .../bird2/AS101.txt | 546 +++ .../bird2/AS1_1.txt | 406 ++ .../bird2/AS1_2.txt | 308 ++ .../bird2/AS2.txt | 392 ++ .../bird2/AS3.txt | 308 ++ .../bird2/AS4.txt | 252 ++ .../bird2/rs.txt | 826 ++++ .../bird2/AS101.txt | 546 +++ .../bird2/AS1_1.txt | 413 ++ .../bird2/AS1_2.txt | 315 ++ .../bird2/AS2.txt | 399 ++ .../bird2/AS3.txt | 308 ++ .../bird2/AS4.txt | 252 ++ .../bird2/rs.txt | 847 ++++ .../bird16/AS101.txt | 546 +++ .../bird16/AS1_1.txt | 406 ++ .../bird16/AS1_2.txt | 308 ++ .../bird16/AS2.txt | 392 ++ .../bird16/AS3.txt | 308 ++ .../bird16/AS4.txt | 252 ++ .../bird16/rs.txt | 826 ++++ .../bird16/AS101.txt | 546 +++ .../bird16/AS1_1.txt | 413 ++ .../bird16/AS1_2.txt | 315 ++ .../bird16/AS2.txt | 399 ++ .../bird16/AS3.txt | 308 ++ .../bird16/AS4.txt | 252 ++ .../bird16/rs.txt | 847 ++++ .../scenarios/global/test_bird1_4.py | 9 +- .../scenarios/global/test_bird1_6.py | 9 +- .../scenarios/global/test_bird2_4.py | 9 +- .../scenarios/global/test_bird2_6.py | 9 +- tests/var/general.yml | 7 +- utils/build_doc | 3 + utils/docker_stopall | 7 + 64 files changed, 25089 insertions(+), 63 deletions(-) create mode 100644 tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv4_TagAndReject/bird2.conf create mode 100644 tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv6_TagAndReject/bird2.conf create mode 100644 tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv4_TagAndReject/bird16.conf create mode 100644 tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv6_TagAndReject/bird16.conf create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS101.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_1.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS3.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS4.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/rs.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS101.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_1.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS3.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS4.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/rs.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS101.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_1.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS3.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS4.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/rs.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS101.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_1.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS2.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS3.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS4.txt create mode 100644 tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/rs.txt create mode 100755 utils/docker_stopall diff --git a/config.d/general.yml b/config.d/general.yml index 7b125377..6e5ebd03 100644 --- a/config.d/general.yml +++ b/config.d/general.yml @@ -475,6 +475,10 @@ cfg: # If it is set to 'tag', they are tagged as described above # (and not propagated anyway to other clients). In this case, # the 'reject_cause' BGP community must be also set. + # If it is set to 'tag_and_reject', they are tagged as in 'tag' + # but also discarded as in 'reject' mode. + # + # OpenBGPD: only 'reject' and 'tag' modes are allowed. # # Can be overwritten on a client-by-client basis. # @@ -1014,8 +1018,8 @@ cfg: #ext: # This BGP community is used when the 'reject_policy' option is - # set to 'tag'. It is used to track the code of the reason that - # led the route to be considered as invalid. + # set to 'tag' or 'tag_and_reject'. It is used to track the code + # of the reason that led the route to be considered as invalid. # # The following community is scrubbed from inbound routes. # @@ -1027,9 +1031,9 @@ cfg: #ext: # This BGP community is used when the 'reject_policy' option is - # set to 'tag'. If configured, it is used to track the ASN - # of the peer that announced the invalid route to the route - # server. + # set to 'tag' or 'tag_and_reject'. If configured, it is used + # to track the ASN of the peer that announced the invalid route + # to the route server. # # The following community is scrubbed from inbound routes. # diff --git a/docs/CONFIG.rst b/docs/CONFIG.rst index 637eb2b3..bef4ad2d 100644 --- a/docs/CONFIG.rst +++ b/docs/CONFIG.rst @@ -482,6 +482,8 @@ The reason that brought the server to reject the route is identified using a num \* This is not really a reject reason code, it only means that the route must be treated as rejected and must not be propagated to clients. +On BIRD, it's also possible to configure the ``reject_policy`` using the ``tag_and_reject`` value: doing this, the ``reject_reason`` and optionally the ``rejected_route_announced_by`` BGP communities are still attached to the invalid routes, but then they are rejected by BIRD. Since the BIRD-specific ``import keep filtered on`` configuration statement is used, those routes remain available within the BIRD daemon and can be seen using BIRD-specific commands like ``show route filtered all``. + Caveats and limitations *********************** diff --git a/docs/GENERAL.rst b/docs/GENERAL.rst index 15d8e4ae..fe092133 100644 --- a/docs/GENERAL.rst +++ b/docs/GENERAL.rst @@ -874,6 +874,11 @@ Reject policy: ``reject_policy`` If it is set to **tag**, they are tagged as described above (and not propagated anyway to other clients). In this case, the **reject_cause** BGP community must be also set. + If it is set to **tag_and_reject**, they are tagged as in **tag** + but also discarded as in **reject** mode. + + + OpenBGPD: only **reject** and **tag** modes are allowed. Can be overwritten on a client-by-client basis. @@ -1562,8 +1567,8 @@ Reject cause - ``reject_cause``: This BGP community is used when the **reject_policy** option is - set to **tag**. It is used to track the code of the reason that - led the route to be considered as invalid. + set to **tag** or **tag_and_reject**. It is used to track the code + of the reason that led the route to be considered as invalid. The following community is scrubbed from inbound routes. @@ -1579,9 +1584,9 @@ Reject cause - ``rejected_route_announced_by``: This BGP community is used when the **reject_policy** option is - set to **tag**. If configured, it is used to track the ASN - of the peer that announced the invalid route to the route - server. + set to **tag** or **tag_and_reject**. If configured, it is used + to track the ASN of the peer that announced the invalid route + to the route server. The following community is scrubbed from inbound routes. diff --git a/examples/bird2_rpki_rtr/bird_v2.conf b/examples/bird2_rpki_rtr/bird_v2.conf index a13cb79c..91dec5f1 100644 --- a/examples/bird2_rpki_rtr/bird_v2.conf +++ b/examples/bird2_rpki_rtr/bird_v2.conf @@ -467,7 +467,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -653,7 +653,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -843,7 +843,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/bird_hooks/bird4.conf b/examples/bird_hooks/bird4.conf index b21ca621..fbc85ccd 100644 --- a/examples/bird_hooks/bird4.conf +++ b/examples/bird_hooks/bird4.conf @@ -567,7 +567,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -770,7 +770,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/bird_hooks/bird6.conf b/examples/bird_hooks/bird6.conf index 952bf469..4238ab36 100644 --- a/examples/bird_hooks/bird6.conf +++ b/examples/bird_hooks/bird6.conf @@ -605,7 +605,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/bird4.conf b/examples/default/bird4.conf index 7479b577..9bb44ccf 100644 --- a/examples/default/bird4.conf +++ b/examples/default/bird4.conf @@ -303,7 +303,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -468,7 +468,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/bird6.conf b/examples/default/bird6.conf index f374fe3e..6d643d47 100644 --- a/examples/default/bird6.conf +++ b/examples/default/bird6.conf @@ -341,7 +341,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/bird_v2.conf b/examples/default/bird_v2.conf index 7417c2b5..c6d12d20 100644 --- a/examples/default/bird_v2.conf +++ b/examples/default/bird_v2.conf @@ -421,7 +421,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -596,7 +596,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -775,7 +775,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/default/openbgpd.conf b/examples/default/openbgpd.conf index d6d3658d..b886de58 100644 --- a/examples/default/openbgpd.conf +++ b/examples/default/openbgpd.conf @@ -264,8 +264,8 @@ deny quick from 192.0.2.22 AS 4200000000 - 4294967295 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 -deny quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } @@ -368,8 +368,8 @@ deny quick from 2001:db:1:1::22 AS 4200000000 - 4294967295 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 -deny quick from 2001:db:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } +# Reject inbound routes when 'from 2001:db:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 2001:db:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } @@ -472,8 +472,8 @@ deny quick from 192.0.2.11 AS 4200000000 - 4294967295 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 -deny quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } diff --git a/examples/default/template-context b/examples/default/template-context index 1f7bed3c..98d462a0 100644 --- a/examples/default/template-context +++ b/examples/default/template-context @@ -922,16 +922,20 @@ registrobr_whois_db_records never_via_route_servers_asns ---------------------------- - 1299 +- 8607 - 12322 - 13030 - 3320 - 174 - 6830 +- 8075 - 6908 - 11164 - 2914 - 3491 +- 34108 - 8943 +- 37271 - 8455 - 36459 - 7155 @@ -939,6 +943,7 @@ never_via_route_servers_asns - 46450 - 52973 - 265914 +- 134041 - 138023 - 54295 - 209395 @@ -951,3 +956,7 @@ never_via_route_servers_asns - 207353 - 209699 - 270544 +- 267373 +- 267442 +- 269535 +- 48265 diff --git a/examples/default/template-context4 b/examples/default/template-context4 index cc22e6ac..51b9d142 100644 --- a/examples/default/template-context4 +++ b/examples/default/template-context4 @@ -892,16 +892,20 @@ registrobr_whois_db_records never_via_route_servers_asns ---------------------------- - 1299 +- 8607 - 12322 - 13030 - 3320 - 174 - 6830 +- 8075 - 6908 - 11164 - 2914 - 3491 +- 34108 - 8943 +- 37271 - 8455 - 36459 - 7155 @@ -909,6 +913,7 @@ never_via_route_servers_asns - 46450 - 52973 - 265914 +- 134041 - 138023 - 54295 - 209395 @@ -921,3 +926,7 @@ never_via_route_servers_asns - 207353 - 209699 - 270544 +- 267373 +- 267442 +- 269535 +- 48265 diff --git a/examples/default/template-context6 b/examples/default/template-context6 index 575aa85f..1b2fe9a0 100644 --- a/examples/default/template-context6 +++ b/examples/default/template-context6 @@ -848,16 +848,20 @@ registrobr_whois_db_records never_via_route_servers_asns ---------------------------- - 1299 +- 8607 - 12322 - 13030 - 3320 - 174 - 6830 +- 8075 - 6908 - 11164 - 2914 - 3491 +- 34108 - 8943 +- 37271 - 8455 - 36459 - 7155 @@ -865,6 +869,7 @@ never_via_route_servers_asns - 46450 - 52973 - 265914 +- 134041 - 138023 - 54295 - 209395 @@ -877,3 +882,7 @@ never_via_route_servers_asns - 207353 - 209699 - 270544 +- 267373 +- 267442 +- 269535 +- 48265 diff --git a/examples/rich/bird4.conf b/examples/rich/bird4.conf index 649df512..b1aa8388 100644 --- a/examples/rich/bird4.conf +++ b/examples/rich/bird4.conf @@ -61,7 +61,7 @@ define AS_SET_AS10745_prefixes_4 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_4 = [ - 192.136.136.0/24{24,32}, 192.149.252.0/24{24,32}, 199.43.0.0/24{24,32} + 192.149.252.0/24{24,32}, 199.43.0.0/24{24,32}, 192.136.136.0/24{24,32} ]; @@ -1741,7 +1741,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -1958,7 +1958,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/rich/bird6.conf b/examples/rich/bird6.conf index 4ddd3e06..a70de6d6 100644 --- a/examples/rich/bird6.conf +++ b/examples/rich/bird6.conf @@ -45,7 +45,7 @@ define AS_SET_AS10745_prefixes_6 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_6 = [ - 2001:500:110::/48{48,128}, 2001:500:4::/48{48,128} + 2001:500:4::/48{48,128}, 2001:500:110::/48{48,128} ]; @@ -1772,7 +1772,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/rich/bird_v2.conf b/examples/rich/bird_v2.conf index 8a49f8dc..fc5d87da 100644 --- a/examples/rich/bird_v2.conf +++ b/examples/rich/bird_v2.conf @@ -81,7 +81,7 @@ define ARIN_Whois_db_AS10745_4 = [ 199.43.0.0/24{24,32}, 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32} ]; define ARIN_Whois_db_AS10745_6 = [ - 2001:500:4::/48{48,128}, 2001:500:110::/48{48,128} + 2001:500:110::/48{48,128}, 2001:500:4::/48{48,128} ]; @@ -1915,7 +1915,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2140,7 +2140,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2369,7 +2369,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/examples/rich/openbgpd.conf b/examples/rich/openbgpd.conf index 8cdc89bd..df827e3e 100644 --- a/examples/rich/openbgpd.conf +++ b/examples/rich/openbgpd.conf @@ -371,8 +371,8 @@ deny quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 3257 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 -deny quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } @@ -1028,8 +1028,8 @@ deny quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 -deny quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } @@ -1685,8 +1685,8 @@ deny quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 3257 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 }' - reject code: 15 -deny quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 8943, 11164, 12322, 13030, 36459, 46450, 52973, 54295, 58768, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 269156, 270544, 328572, 393573, 393684 } +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +deny quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } diff --git a/examples/rich/template-context b/examples/rich/template-context index d8103bb1..3de38e0d 100644 --- a/examples/rich/template-context +++ b/examples/rich/template-context @@ -992,6 +992,12 @@ rpki_roas arin_whois_db_records --------------------- AS10745: +- exact: false + ge: 48 + le: 128 + length: 48 + max_length: 128 + prefix: '2001:500:4::' - exact: false ge: 24 le: 32 @@ -1010,12 +1016,6 @@ AS10745: length: 48 max_length: 128 prefix: '2001:500:110::' -- exact: false - ge: 48 - le: 128 - length: 48 - max_length: 128 - prefix: '2001:500:4::' - exact: false ge: 24 le: 32 @@ -1034,14 +1034,18 @@ never_via_route_servers_asns - 2914 - 3491 - 1299 +- 8607 - 12322 - 13030 - 3320 - 174 - 6830 +- 8075 - 6908 - 11164 +- 34108 - 8943 +- 37271 - 8455 - 36459 - 7155 @@ -1049,6 +1053,7 @@ never_via_route_servers_asns - 46450 - 52973 - 265914 +- 134041 - 138023 - 54295 - 209395 @@ -1061,3 +1066,7 @@ never_via_route_servers_asns - 207353 - 209699 - 270544 +- 267373 +- 267442 +- 269535 +- 48265 diff --git a/examples/rich/template-context4 b/examples/rich/template-context4 index 36fbed45..1d0a4d12 100644 --- a/examples/rich/template-context4 +++ b/examples/rich/template-context4 @@ -951,19 +951,19 @@ AS10745: le: 32 length: 24 max_length: 32 - prefix: 192.136.136.0 + prefix: 199.43.0.0 - exact: false ge: 24 le: 32 length: 24 max_length: 32 - prefix: 192.149.252.0 + prefix: 192.136.136.0 - exact: false ge: 24 le: 32 length: 24 max_length: 32 - prefix: 199.43.0.0 + prefix: 192.149.252.0 registrobr_whois_db_records @@ -976,14 +976,18 @@ never_via_route_servers_asns - 2914 - 3491 - 1299 +- 8607 - 12322 - 13030 - 3320 - 174 - 6830 +- 8075 - 6908 - 11164 +- 34108 - 8943 +- 37271 - 8455 - 36459 - 7155 @@ -991,6 +995,7 @@ never_via_route_servers_asns - 46450 - 52973 - 265914 +- 134041 - 138023 - 54295 - 209395 @@ -1003,3 +1008,7 @@ never_via_route_servers_asns - 207353 - 209699 - 270544 +- 267373 +- 267442 +- 269535 +- 48265 diff --git a/examples/rich/template-context6 b/examples/rich/template-context6 index ae4f18ec..04b7aace 100644 --- a/examples/rich/template-context6 +++ b/examples/rich/template-context6 @@ -902,14 +902,18 @@ never_via_route_servers_asns - 2914 - 3491 - 1299 +- 8607 - 12322 - 13030 - 3320 - 174 - 6830 +- 8075 - 6908 - 11164 +- 34108 - 8943 +- 37271 - 8455 - 36459 - 7155 @@ -917,6 +921,7 @@ never_via_route_servers_asns - 46450 - 52973 - 265914 +- 134041 - 138023 - 54295 - 209395 @@ -929,3 +934,7 @@ never_via_route_servers_asns - 207353 - 209699 - 270544 +- 267373 +- 267442 +- 269535 +- 48265 diff --git a/pierky/arouteserver/builder.py b/pierky/arouteserver/builder.py index 0ccf18b1..a7a80960 100644 --- a/pierky/arouteserver/builder.py +++ b/pierky/arouteserver/builder.py @@ -826,6 +826,14 @@ def validate_bgpspeaker_specific_configuration(self): ): res = False + reject_policy = self.cfg_general["filtering"]["reject_policy"]["policy"] + if reject_policy == "tag_and_reject": + res = False + logging.error( + "For OpenBGP, 'reject_policy' can't be set to " + "'tag_and_reject'." + ) + add_path_clients = [] max_prefix_action_clients = [] for client in self.cfg_clients.cfg["clients"]: diff --git a/pierky/arouteserver/config/clients.py b/pierky/arouteserver/config/clients.py index 8ce0a60e..f09598ae 100644 --- a/pierky/arouteserver/config/clients.py +++ b/pierky/arouteserver/config/clients.py @@ -112,7 +112,7 @@ def get_client_descr(client): }, "reject_policy": { "policy": ValidatorOption("reject_policy", - ("reject", "tag"), + ("reject", "tag", "tag_and_reject"), mandatory=False) }, }, diff --git a/pierky/arouteserver/tests/live_tests/base.py b/pierky/arouteserver/tests/live_tests/base.py index 1061763c..02ae2058 100644 --- a/pierky/arouteserver/tests/live_tests/base.py +++ b/pierky/arouteserver/tests/live_tests/base.py @@ -878,6 +878,7 @@ class LiveScenario_TagRejectPolicy(object): REJECT_CAUSE_COMMUNITY = "^65520:(\d+)$" REJECTED_ROUTE_ANNOUNCED_BY_COMMUNITY = "^rt:65520:(\d+)$" + REJECT_POLICY = "tag" @classmethod def _get_cfg_general(cls, orig_file="general.yml"): @@ -888,7 +889,7 @@ def _get_cfg_general(cls, orig_file="general.yml"): with open(orig_path, "r") as f: cfg = yaml.safe_load(f.read()) - cfg["cfg"]["filtering"]["reject_policy"] = {"policy": "tag"} + cfg["cfg"]["filtering"]["reject_policy"] = {"policy": cls.REJECT_POLICY} if "communities" not in cfg["cfg"]: cfg["cfg"]["communities"] = {} cfg["cfg"]["communities"]["reject_cause"] = {"std": "65520:dyn_val"} @@ -898,3 +899,8 @@ def _get_cfg_general(cls, orig_file="general.yml"): yaml.safe_dump(cfg, f, default_flow_style=False) return dest_rel_path + +class LiveScenario_TagAndRejectRejectPolicy(LiveScenario_TagRejectPolicy): + """Same as LiveScenario_TagRejectPolicy, but with 'tag_and_reject' reject policy.""" + + REJECT_POLICY = "tag_and_reject" diff --git a/tests/cli b/tests/cli index c201fcbc..ffa80833 100755 --- a/tests/cli +++ b/tests/cli @@ -223,6 +223,24 @@ build_cmd "openbgpd" --target-version 6.0 --ignore-issues "large_communities" | SUB_TEST="$LINENO" build_cmd "openbgpd" --ignore-issues "large_communities" | must_not_contain "'do_not_announce_to_peer'" +# --------------------------------------------- +reset +TITLE="OpenBGPD tag_and_reject reject policy" +GENERAL="tests/var/general.yml" +cat << EOF > $GENERAL +cfg: + rs_as: 999 + router_id: "192.0.2.2" + filtering: + reject_policy: + policy: tag_and_reject +EOF + +EXP_ERR="ERROR For OpenBGP, 'reject_policy' can't be set to 'tag_and_reject'." + +SUB_TEST="$LINENO" +build_cmd "openbgpd" | must_not_contain "$EXP_ERR" + # --------------------------------------------- # clients-from-euroix reset diff --git a/tests/live_tests/scenarios/global/base.py b/tests/live_tests/scenarios/global/base.py index d8ef9169..75787ae4 100644 --- a/tests/live_tests/scenarios/global/base.py +++ b/tests/live_tests/scenarios/global/base.py @@ -19,7 +19,8 @@ from pierky.arouteserver.builder import OpenBGPDConfigBuilder, BIRDConfigBuilder from pierky.arouteserver.ipaddresses import IPNetwork from pierky.arouteserver.tests.live_tests.base import LiveScenario, \ - LiveScenario_TagRejectPolicy + LiveScenario_TagRejectPolicy, \ + LiveScenario_TagAndRejectRejectPolicy from pierky.arouteserver.tests.live_tests.openbgpd import OpenBGPDInstance, \ OpenBGPDPreviousInstance, \ OpenBGPDLatestInstance @@ -1062,6 +1063,10 @@ def test_042_bad_prefixes_received_by_rs_global_blacklist_wrong_tag(self): as_path="1", next_hop=self.AS1_1, filtered=True, reject_reason=1) +class BasicScenario_TagAndRejectRejectPolicy(LiveScenario_TagAndRejectRejectPolicy, + BasicScenario_TagRejectPolicy): + pass + class BasicScenarioBIRD(BasicScenario): __test__ = False diff --git a/tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv4_TagAndReject/bird2.conf b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv4_TagAndReject/bird2.conf new file mode 100644 index 00000000..b89560d1 --- /dev/null +++ b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv4_TagAndReject/bird2.conf @@ -0,0 +1,3732 @@ + +router id 192.0.2.2; +define rs_as = 999; + +log "/var/log/bird.log" all; +log syslog all; +debug protocols { states, routes, filters, interfaces, events }; + +timeformat base iso long; +timeformat log iso long; +timeformat protocol iso long; +timeformat route iso long; + +protocol device {}; + +ipv4 table master4 sorted; +ipv6 table master6 sorted; + + + + +# --------------------------------------------------------- +# RPKI + +roa4 table RPKI4; +roa6 table RPKI6; +protocol static { + roa4 { table RPKI4; }; + route 101.3.0.0/16 max 24 as 105; + route 101.2.0.0/17 max 17 as 101; + route 101.2.128.0/17 max 24 as 101; + route 101.0.128.0/20 max 23 as 101; + route 101.0.8.0/24 max 24 as 101; + route 101.0.9.0/24 max 24 as 102; +} +protocol static { + roa6 { table RPKI6; }; + route 3101:3::/32 max 48 as 105; + route 3101:0:8000::/33 max 34 as 101; + route 3101:2:8000::/33 max 48 as 101; + route 3101:2::/33 max 33 as 101; + route 3101:0:8::/48 max 48 as 101; + route 3101:0:9::/48 max 48 as 102; +} + + + +# --------------------------------------------------------- +# IRRDB + +# AS2, used_by client AS2_1, client AS2_2 +# no origin ASNs found for AS2 + +# no IPv4 prefixes found for AS2 +# no IPv6 prefixes found for AS2 + +# AS-AS1, AS-AS1_CUSTOMERS, used_by client AS1_1, client AS1_2, client AS1_3, client AS1_4 +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns = [ + 1, 101, 103, 104 +]; + +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_4 = [ + 1.0.0.0/8{8,32}, 128.0.0.0/7{7,32}, 101.0.0.0/16{16,32}, 103.0.0.0/16{16,32} +]; +# no IPv6 prefixes found for AS_AS1_AS_AS1_CUSTOMERS + +# AS-AS2, AS-AS2_CUSTOMERS, used_by client AS2_1, client AS2_2 +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns = [ + 2, 101, 103 +]; + +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_4 = [ + 2.0.0.0/16{16,32}, 101.0.0.0/16{16,32}, 103.0.0.0/16{16,32} +]; +# no IPv6 prefixes found for AS_AS2_AS_AS2_CUSTOMERS + +# WHITE_LIST_AS1_2, used_by client AS1_2 white list +define AS_SET_WHITE_LIST_AS1_2_asns = [ + 1011 +]; + +define AS_SET_WHITE_LIST_AS1_2_prefixes_4 = [ + 11.1.0.0/16{16,32} +]; +define AS_SET_WHITE_LIST_AS1_2_prefixes_6 = [ + 2a11:1::/32{32,128} +]; + +# AS1, used_by client AS1_1, client AS1_2, client AS1_3, client AS1_4 +# no origin ASNs found for AS1 + +# no IPv4 prefixes found for AS1 +# no IPv6 prefixes found for AS1 + +# WHITE_LIST_AS1_1, used_by client AS1_1 white list +define AS_SET_WHITE_LIST_AS1_1_asns = [ + 1011 +]; + +define AS_SET_WHITE_LIST_AS1_1_prefixes_4 = [ + 11.1.0.0/16{16,32} +]; +define AS_SET_WHITE_LIST_AS1_1_prefixes_6 = [ + 2a11:1::/32{32,128} +]; + + +# ARIN Whois database records +define ARIN_Whois_db_AS104_4 = [ + 104.0.0.0/23{23,32} +]; +define ARIN_Whois_db_AS104_6 = [ + 3104::/32{32,128} +]; + +# Registro.br Whois database records +define RegistroBR_Whois_db_AS104_4 = [ + 104.1.1.0/24{24,32} +]; +define RegistroBR_Whois_db_AS104_6 = [ + 3104:1:1::/48{48,128} +]; + + +# --------------------------------------------------------- +# COMMON + +# This function returns True if 'net' is a bogon prefix +# or falls within a bogon prefix. +function prefix_is_bogon() +prefix set bogons_4; +prefix set bogons_6; +{ + bogons_4 = [ + # Default route + 0.0.0.0/0, + + # IANA - Local Identification + 0.0.0.0/8{8,32}, + + # RFC 1918 - Private Use + 10.0.0.0/8{8,32}, + + # IANA - Loopback + 127.0.0.0/8{8,32}, + + # RFC 3927 - Link Local + 169.254.0.0/16{16,32}, + + # RFC 1918 - Private Use + 172.16.0.0/12{12,32}, + + # RFC 5737 - TEST-NET-1 + 192.0.2.0/24{24,32}, + + # RFC 3068 - 6to4 prefix + 192.88.99.0/24{24,32}, + + # RFC 1918 - Private Use + 192.168.0.0/16{16,32}, + + # RFC 2544 - Network Interconnect Device Benchmark Testing + 198.18.0.0/15{15,32}, + + # RFC 5737 - TEST-NET-2 + 198.51.100.0/24{24,32}, + + # RFC 5737 - TEST-NET-3 + 203.0.113.0/24{24,32}, + + # RFC 5771 - Multcast (formerly Class D) + 224.0.0.0/3{3,32}, + + # RFC 6598 - Shared Address Space + 100.64.0.0/10{10,32} + ]; + bogons_6 = [ + # Default route + ::/0, + + # loopback, unspecified, v4-mapped + ::/8{8,128}, + + # RFC 6052 - IPv4-IPv6 Translation + 64:ff9b::/96{96,128}, + + # RFC 6666 - reserved for Discard-Only Address Block + 100::/8{8,128}, + + # RFC 4048 - Reserved by IETF + 200::/7{7,128}, + + # RFC 4291 - Reserved by IETF + 400::/6{6,128}, + + # RFC 4291 - Reserved by IETF + 800::/5{5,128}, + + # RFC 4291 - Reserved by IETF + 1000::/4{4,128}, + + # RFC 4380 - Teredo prefix + 2001::/33{33,128}, + + # RFC 4380 - Teredo prefix + 2001:0:8000::/33{33,128}, + + # RFC 5180 - Benchmarking + 2001:2::/48{48,128}, + + # RFC 7450 - Automatic Multicast Tunneling + 2001:3::/32{32,128}, + + # RFC 4843 - Deprecated ORCHID + 2001:10::/28{28,128}, + + # RFC 7343 - ORCHIDv2 + 2001:20::/28{28,128}, + + # RFC 3849 - NON-ROUTABLE range to be used for documentation purpose + 2001:db8::/32{32,128}, + + # RFC 3068 - 6to4 prefix + 2002::/16{16,128}, + + # RFC 5156 - used for the 6bone but was returned + 3ffe::/16{16,128}, + + # RFC 4291 - Reserved by IETF + 4000::/3{3,128}, + + # RFC 5156 - used for the 6bone but was returned + 5f00::/8{8,128}, + + # RFC 4291 - Reserved by IETF + 6000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + 8000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + a000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + c000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + e000::/4{4,128}, + + # RFC 4291 - Reserved by IETF + f000::/5{5,128}, + + # RFC 4291 - Reserved by IETF + f800::/6{6,128}, + + # RFC 4193 - Unique Local Unicast + fc00::/7{7,128}, + + # RFC 4291 - Link Local Unicast + fe80::/10{10,128}, + + # RFC 4291 - Reserved by IETF + fec0::/10{10,128}, + + # RFC 4291 - Multicast + ff00::/8{8,128} + ]; + + if net.type = NET_IP4 then + if net ~ bogons_4 then return true; + if net.type = NET_IP6 then + if net ~ bogons_6 then return true; + return false; +} + +# This function returns True if 'net' falls within a +# prefix contained in the global blacklist (for example, +# local networks) +function prefix_is_in_global_blacklist() +prefix set global_blacklist_4; +prefix set global_blacklist_6; +{ + global_blacklist_4 = [ + # Local network + 192.0.2.0/24{24,32} + ]; + + if net.type = NET_IP4 then + if net ~ global_blacklist_4 then return true; + + global_blacklist_6 = [ + # Local network + 2001:db8::/32{32,128} + ]; + + if net.type = NET_IP6 then + if net ~ global_blacklist_6 then return true; + + return false; +} + +# This function returns True if the length of 'net' prefix +# falls within the range 'min'-'max' (included). +function prefix_len_is_valid (int pref_len_min; int pref_len_max) { + if net.len < pref_len_min then return false; + if net.len > pref_len_max then return false; + return true; +} + +# This function returns True if the AS_PATH contains one or +# more private/reserved ASN. +function as_path_contains_invalid_asn() +int set invalid_asns; +{ + # http://www.iana.org/assignments/as-numbers/as-numbers.xhtml + invalid_asns = [ + # 16-bit + 0, # Reserved. RFC7607 + 23456, # AS_TRANS. RFC6793 + 64496..64511, # Reserved for use in documentation and sample code. RFC5398 + 64512..65534, # Reserved for Private Use. RFC6996 + 65535, # Reserved. RFC7300 + + # 32-bit + 65536..65551, # Reserved for use in documentation and sample code. RFC5398 + 65552..131071, # Reserved. + 4200000000..4294967294, # Reserved for Private Use. [RFC6996] + 4294967295 # Reserved. RFC7300 + ]; + return bgp_path ~ invalid_asns; +} + +# This function returns the RTT measured for the peer given in client_ip. +# If the RTT is not available it returns 0. +function get_peer_rtt(ip client_ip) { + case client_ip { + 192.0.2.11 : return 1; # 0.1 + 192.0.2.12 : return 5; # 5 + 192.0.2.21 : return 17; # 17.3 + 192.0.2.31 : return 124; # 123.8 + 192.0.2.41 : return 600; # 600 + } + + return 0; +} + +# This function scrubs BGP communities used by the route server +# for signaling purpose toward its clients. (RFC7454, Section 11) +# It must be applied on routes entering the route server. +function scrub_communities_in() { + # origin_not_present_in_as_set + bgp_community.delete([(65530, 0)]); + bgp_large_community.delete([(999, 65530, 0)]); + + # origin_present_in_as_set + bgp_community.delete([(65530, 1)]); + bgp_large_community.delete([(999, 65530, 1)]); + + # prefix_validated_via_arin_whois_db_dump + bgp_community.delete([(65530, 3)]); + bgp_large_community.delete([(999, 65530, 3)]); + + # prefix_validated_via_rpki_roas + bgp_community.delete([(65530, 2)]); + bgp_large_community.delete([(999, 65530, 2)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function scrubs BGP communities used by clients to instruct +# the route server to perform some actions. +# It must be applied on routes leaving the route server. +function scrub_communities_out() { + # add_noadvertise_to_any + bgp_community.delete([(65508, 999)]); + bgp_large_community.delete([(999, 65508, 999)]); + bgp_ext_community.delete([(rt, 65508, 999)]); + + # add_noadvertise_to_peer + bgp_community.delete([(65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65510, 1..64511)]); + bgp_ext_community.delete([(rt, 65510, 131072..4199999999)]); + + # add_noexport_to_any + bgp_community.delete([(65507, 999)]); + bgp_large_community.delete([(999, 65507, 999)]); + bgp_ext_community.delete([(rt, 65507, 999)]); + + # add_noexport_to_peer + bgp_community.delete([(65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65509, 1..64511)]); + bgp_ext_community.delete([(rt, 65509, 131072..4199999999)]); + + # announce_to_peer + bgp_community.delete([(65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65501, 1..64511)]); + bgp_ext_community.delete([(rt, 65501, 131072..4199999999)]); + + # announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64533, *)]); + bgp_large_community.delete([(999, 64533, *)]); + bgp_ext_community.delete([(rt, 64533, *)]); + + # announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64532, *)]); + bgp_large_community.delete([(999, 64532, *)]); + bgp_ext_community.delete([(rt, 64532, *)]); + + # blackholing + bgp_community.delete([(65534, 0)]); + bgp_large_community.delete([(65534, 0, 0)]); + + # do_not_announce_to_any + bgp_community.delete([(0, 999)]); + bgp_large_community.delete([(999, 0, 999)]); + bgp_ext_community.delete([(rt, 0, 999)]); + + # do_not_announce_to_peer + bgp_community.delete([(0, 1..64511)]); + bgp_large_community.delete([(999, 0, 1..64511)]); + bgp_large_community.delete([(999, 0, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 0, 1..64511)]); + bgp_ext_community.delete([(rt, 0, 131072..4199999999)]); + + # do_not_announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64531, *)]); + bgp_large_community.delete([(999, 64531, *)]); + bgp_ext_community.delete([(rt, 64531, *)]); + + # do_not_announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64530, *)]); + bgp_large_community.delete([(999, 64530, *)]); + bgp_ext_community.delete([(rt, 64530, *)]); + + # prepend_once_to_any + bgp_community.delete([(65521, 65521)]); + bgp_large_community.delete([(999, 65521, 65521)]); + bgp_ext_community.delete([(rt, 65521, 65521)]); + + # prepend_once_to_peer + bgp_community.delete([(65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65521, 1..64511)]); + bgp_ext_community.delete([(rt, 65521, 131072..4199999999)]); + + # prepend_once_to_peers_with_rtt_higher_than + bgp_community.delete([(64537, *)]); + bgp_large_community.delete([(999, 64537, *)]); + bgp_ext_community.delete([(rt, 64537, *)]); + + # prepend_once_to_peers_with_rtt_lower_than + bgp_community.delete([(64534, *)]); + bgp_large_community.delete([(999, 64534, *)]); + bgp_ext_community.delete([(rt, 64534, *)]); + + # prepend_thrice_to_any + bgp_community.delete([(65523, 65523)]); + bgp_large_community.delete([(999, 65523, 65523)]); + bgp_ext_community.delete([(rt, 65523, 65523)]); + + # prepend_thrice_to_peer + bgp_community.delete([(65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65523, 1..64511)]); + bgp_ext_community.delete([(rt, 65523, 131072..4199999999)]); + + # prepend_thrice_to_peers_with_rtt_higher_than + bgp_community.delete([(64539, *)]); + bgp_large_community.delete([(999, 64539, *)]); + bgp_ext_community.delete([(rt, 64539, *)]); + + # prepend_thrice_to_peers_with_rtt_lower_than + bgp_community.delete([(64536, *)]); + bgp_large_community.delete([(999, 64536, *)]); + bgp_ext_community.delete([(rt, 64536, *)]); + + # prepend_twice_to_any + bgp_community.delete([(65522, 65522)]); + bgp_large_community.delete([(999, 65522, 65522)]); + bgp_ext_community.delete([(rt, 65522, 65522)]); + + # prepend_twice_to_peer + bgp_community.delete([(65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65522, 1..64511)]); + bgp_ext_community.delete([(rt, 65522, 131072..4199999999)]); + + # prepend_twice_to_peers_with_rtt_higher_than + bgp_community.delete([(64538, *)]); + bgp_large_community.delete([(999, 64538, *)]); + bgp_ext_community.delete([(rt, 64538, *)]); + + # prepend_twice_to_peers_with_rtt_lower_than + bgp_community.delete([(64535, *)]); + bgp_large_community.delete([(999, 64535, *)]); + bgp_ext_community.delete([(rt, 64535, *)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function verifies if the route is tagged with one of +# the blackhole filtering communities. +function is_blackhole_filtering_request() { + if net.type = NET_IP4 then { + if (65535, 666) ~ bgp_community then + return true; + + if (65534, 0) ~ bgp_community then + return true; + if (65534, 0, 0) ~ bgp_large_community then + return true; + + } + if net.type = NET_IP6 then { + if (65535, 666) ~ bgp_community then + return true; + + if (65534, 0) ~ bgp_community then + return true; + if (65534, 0, 0) ~ bgp_large_community then + return true; + + } + return false; +} + +# This function must be applied to outgoing routes. +# It applies the blackhole filtering policy to the current route. +function apply_blackhole_filtering_policy() { + if net.type = NET_IP4 then { + + # Configured policy: rewrite-next-hop + bgp_community.add((65535, 666)); + bgp_next_hop = 192.0.2.66; + # NO_EXPORT + bgp_community.add((65535, 65281)); + + } + if net.type = NET_IP6 then { + + # Configured policy: rewrite-next-hop + bgp_community.add((65535, 666)); + bgp_next_hop = 2001:db8:1:1::66; + # NO_EXPORT + bgp_community.add((65535, 65281)); + + } +} + +# This function verifies if the current route can be announced to +# the given client on the basis of the attached control BGP +# communities. +function route_can_be_announced_to(int peer_as; ip client_ip; string client_id) +int client_rtt; +{ + # do_not_announce_to_peer + if peer_as <= 65535 then { + if (0, peer_as) ~ bgp_community then + return false; + } + if (999, 0, peer_as) ~ bgp_large_community then + return false; + if (rt, 0, peer_as) ~ bgp_ext_community then + return false; + + # announce_to_peer + if peer_as <= 65535 then { + if (65501, peer_as) ~ bgp_community then + return true; + } + if (999, 65501, peer_as) ~ bgp_large_community then + return true; + if (rt, 65501, peer_as) ~ bgp_ext_community then + return true; + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # do_not_announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64531, 5) ~ bgp_community then + { if client_rtt > 5 then + return false; } + if (999, 64531, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return false; } + if (rt, 64531, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return false; } + + # 10 ms + if (64531, 10) ~ bgp_community then + { if client_rtt > 10 then + return false; } + if (999, 64531, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return false; } + if (rt, 64531, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return false; } + + # 15 ms + if (64531, 15) ~ bgp_community then + { if client_rtt > 15 then + return false; } + if (999, 64531, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return false; } + if (rt, 64531, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return false; } + + # 20 ms + if (64531, 20) ~ bgp_community then + { if client_rtt > 20 then + return false; } + if (999, 64531, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return false; } + if (rt, 64531, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return false; } + + # 30 ms + if (64531, 30) ~ bgp_community then + { if client_rtt > 30 then + return false; } + if (999, 64531, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return false; } + if (rt, 64531, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return false; } + + # 50 ms + if (64531, 50) ~ bgp_community then + { if client_rtt > 50 then + return false; } + if (999, 64531, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return false; } + if (rt, 64531, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return false; } + + # 100 ms + if (64531, 100) ~ bgp_community then + { if client_rtt > 100 then + return false; } + if (999, 64531, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return false; } + if (rt, 64531, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return false; } + + # 200 ms + if (64531, 200) ~ bgp_community then + { if client_rtt > 200 then + return false; } + if (999, 64531, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return false; } + if (rt, 64531, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return false; } + + # 500 ms + if (64531, 500) ~ bgp_community then + { if client_rtt > 500 then + return false; } + if (999, 64531, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return false; } + if (rt, 64531, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return false; } + + + # do_not_announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64530, 5) ~ bgp_community then + { if client_rtt <= 5 then + return false; } + if (999, 64530, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return false; } + if (rt, 64530, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return false; } + + # 10 ms + if (64530, 10) ~ bgp_community then + { if client_rtt <= 10 then + return false; } + if (999, 64530, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return false; } + if (rt, 64530, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return false; } + + # 15 ms + if (64530, 15) ~ bgp_community then + { if client_rtt <= 15 then + return false; } + if (999, 64530, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return false; } + if (rt, 64530, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return false; } + + # 20 ms + if (64530, 20) ~ bgp_community then + { if client_rtt <= 20 then + return false; } + if (999, 64530, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return false; } + if (rt, 64530, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return false; } + + # 30 ms + if (64530, 30) ~ bgp_community then + { if client_rtt <= 30 then + return false; } + if (999, 64530, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return false; } + if (rt, 64530, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return false; } + + # 50 ms + if (64530, 50) ~ bgp_community then + { if client_rtt <= 50 then + return false; } + if (999, 64530, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return false; } + if (rt, 64530, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return false; } + + # 100 ms + if (64530, 100) ~ bgp_community then + { if client_rtt <= 100 then + return false; } + if (999, 64530, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return false; } + if (rt, 64530, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return false; } + + # 200 ms + if (64530, 200) ~ bgp_community then + { if client_rtt <= 200 then + return false; } + if (999, 64530, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return false; } + if (rt, 64530, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return false; } + + # 500 ms + if (64530, 500) ~ bgp_community then + { if client_rtt <= 500 then + return false; } + if (999, 64530, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return false; } + if (rt, 64530, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return false; } + + + # announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64533, 5) ~ bgp_community then + { if client_rtt > 5 then + return true; } + if (999, 64533, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return true; } + if (rt, 64533, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return true; } + + # 10 ms + if (64533, 10) ~ bgp_community then + { if client_rtt > 10 then + return true; } + if (999, 64533, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return true; } + if (rt, 64533, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return true; } + + # 15 ms + if (64533, 15) ~ bgp_community then + { if client_rtt > 15 then + return true; } + if (999, 64533, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return true; } + if (rt, 64533, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return true; } + + # 20 ms + if (64533, 20) ~ bgp_community then + { if client_rtt > 20 then + return true; } + if (999, 64533, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return true; } + if (rt, 64533, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return true; } + + # 30 ms + if (64533, 30) ~ bgp_community then + { if client_rtt > 30 then + return true; } + if (999, 64533, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return true; } + if (rt, 64533, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return true; } + + # 50 ms + if (64533, 50) ~ bgp_community then + { if client_rtt > 50 then + return true; } + if (999, 64533, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return true; } + if (rt, 64533, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return true; } + + # 100 ms + if (64533, 100) ~ bgp_community then + { if client_rtt > 100 then + return true; } + if (999, 64533, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return true; } + if (rt, 64533, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return true; } + + # 200 ms + if (64533, 200) ~ bgp_community then + { if client_rtt > 200 then + return true; } + if (999, 64533, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return true; } + if (rt, 64533, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return true; } + + # 500 ms + if (64533, 500) ~ bgp_community then + { if client_rtt > 500 then + return true; } + if (999, 64533, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return true; } + if (rt, 64533, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return true; } + + + # announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64532, 5) ~ bgp_community then + { if client_rtt <= 5 then + return true; } + if (999, 64532, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return true; } + if (rt, 64532, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return true; } + + # 10 ms + if (64532, 10) ~ bgp_community then + { if client_rtt <= 10 then + return true; } + if (999, 64532, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return true; } + if (rt, 64532, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return true; } + + # 15 ms + if (64532, 15) ~ bgp_community then + { if client_rtt <= 15 then + return true; } + if (999, 64532, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return true; } + if (rt, 64532, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return true; } + + # 20 ms + if (64532, 20) ~ bgp_community then + { if client_rtt <= 20 then + return true; } + if (999, 64532, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return true; } + if (rt, 64532, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return true; } + + # 30 ms + if (64532, 30) ~ bgp_community then + { if client_rtt <= 30 then + return true; } + if (999, 64532, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return true; } + if (rt, 64532, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return true; } + + # 50 ms + if (64532, 50) ~ bgp_community then + { if client_rtt <= 50 then + return true; } + if (999, 64532, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return true; } + if (rt, 64532, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return true; } + + # 100 ms + if (64532, 100) ~ bgp_community then + { if client_rtt <= 100 then + return true; } + if (999, 64532, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return true; } + if (rt, 64532, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return true; } + + # 200 ms + if (64532, 200) ~ bgp_community then + { if client_rtt <= 200 then + return true; } + if (999, 64532, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return true; } + if (rt, 64532, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return true; } + + # 500 ms + if (64532, 500) ~ bgp_community then + { if client_rtt <= 500 then + return true; } + if (999, 64532, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return true; } + if (rt, 64532, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return true; } + + + } + + # do_not_announce_to_any + if (0, 999) ~ bgp_community then + return false; + if (999, 0, 999) ~ bgp_large_community then + return false; + if (rt, 0, 999) ~ bgp_ext_community then + return false; + + return true; +} + +# This function prepends the left-most ASN times. +function do_prepend(int times) { + case times { + 1: bgp_path.prepend(bgp_path.first); + 2: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + 3: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + } +} + +# This function verifies if the current route matches one of the +# control communities in charge of prepending client's ASN. +function apply_prepend(int peer_as; ip client_ip) +int client_rtt; +{ + # prepend_once_to_peer + if peer_as <= 65535 then { + if (65521, peer_as) ~ bgp_community then + { do_prepend(1); return true; } + } + if (999, 65521, peer_as) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, peer_as) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_peer + if peer_as <= 65535 then { + if (65522, peer_as) ~ bgp_community then + { do_prepend(2); return true; } + } + if (999, 65522, peer_as) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, peer_as) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_peer + if peer_as <= 65535 then { + if (65523, peer_as) ~ bgp_community then + { do_prepend(3); return true; } + } + if (999, 65523, peer_as) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, peer_as) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # prepend_once_to_peers_with_rtt_higher_than 500 ms + if (64537, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (999, 64537, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (rt, 64537, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 500 ms + if (64538, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (999, 64538, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (rt, 64538, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 500 ms + if (64539, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (999, 64539, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (rt, 64539, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 200 ms + if (64537, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (999, 64537, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (rt, 64537, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 200 ms + if (64538, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (999, 64538, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (rt, 64538, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 200 ms + if (64539, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (999, 64539, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (rt, 64539, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 100 ms + if (64537, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (999, 64537, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (rt, 64537, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 100 ms + if (64538, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (999, 64538, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (rt, 64538, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 100 ms + if (64539, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (999, 64539, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (rt, 64539, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 50 ms + if (64537, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (999, 64537, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (rt, 64537, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 50 ms + if (64538, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (999, 64538, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (rt, 64538, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 50 ms + if (64539, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (999, 64539, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (rt, 64539, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 30 ms + if (64537, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (999, 64537, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (rt, 64537, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 30 ms + if (64538, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (999, 64538, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (rt, 64538, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 30 ms + if (64539, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (999, 64539, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (rt, 64539, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 20 ms + if (64537, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (999, 64537, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (rt, 64537, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 20 ms + if (64538, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (999, 64538, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (rt, 64538, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 20 ms + if (64539, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (999, 64539, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (rt, 64539, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 15 ms + if (64537, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (999, 64537, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (rt, 64537, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 15 ms + if (64538, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (999, 64538, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (rt, 64538, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 15 ms + if (64539, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (999, 64539, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (rt, 64539, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 10 ms + if (64537, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (999, 64537, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (rt, 64537, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 10 ms + if (64538, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (999, 64538, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (rt, 64538, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 10 ms + if (64539, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (999, 64539, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (rt, 64539, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 5 ms + if (64537, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (999, 64537, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (rt, 64537, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 5 ms + if (64538, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (999, 64538, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (rt, 64538, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 5 ms + if (64539, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (999, 64539, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (rt, 64539, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 5 ms + if (64534, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (999, 64534, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (rt, 64534, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 5 ms + if (64535, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (999, 64535, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (rt, 64535, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 5 ms + if (64536, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (999, 64536, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (rt, 64536, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 10 ms + if (64534, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (999, 64534, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (rt, 64534, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 10 ms + if (64535, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (999, 64535, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (rt, 64535, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 10 ms + if (64536, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (999, 64536, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (rt, 64536, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 15 ms + if (64534, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (999, 64534, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (rt, 64534, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 15 ms + if (64535, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (999, 64535, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (rt, 64535, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 15 ms + if (64536, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (999, 64536, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (rt, 64536, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 20 ms + if (64534, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (999, 64534, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (rt, 64534, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 20 ms + if (64535, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (999, 64535, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (rt, 64535, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 20 ms + if (64536, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (999, 64536, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (rt, 64536, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 30 ms + if (64534, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (999, 64534, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (rt, 64534, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 30 ms + if (64535, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (999, 64535, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (rt, 64535, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 30 ms + if (64536, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (999, 64536, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (rt, 64536, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 50 ms + if (64534, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (999, 64534, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (rt, 64534, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 50 ms + if (64535, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (999, 64535, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (rt, 64535, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 50 ms + if (64536, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (999, 64536, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (rt, 64536, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 100 ms + if (64534, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (999, 64534, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (rt, 64534, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 100 ms + if (64535, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (999, 64535, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (rt, 64535, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 100 ms + if (64536, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (999, 64536, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (rt, 64536, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 200 ms + if (64534, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (999, 64534, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (rt, 64534, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 200 ms + if (64535, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (999, 64535, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (rt, 64535, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 200 ms + if (64536, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (999, 64536, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (rt, 64536, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 500 ms + if (64534, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (999, 64534, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (rt, 64534, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 500 ms + if (64535, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (999, 64535, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (rt, 64535, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 500 ms + if (64536, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (999, 64536, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (rt, 64536, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + + } + + # prepend_once_to_any + if (65521, 65521) ~ bgp_community then + { do_prepend(1); return true; } + if (999, 65521, 65521) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, 65521) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_any + if (65522, 65522) ~ bgp_community then + { do_prepend(2); return true; } + if (999, 65522, 65522) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, 65522) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_any + if (65523, 65523) ~ bgp_community then + { do_prepend(3); return true; } + if (999, 65523, 65523) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, 65523) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + return true; +} + +# This function adds the BGP communities used to +# keep track of RPKI validation state. +# RFC8097 extended communities are used here. +function add_rpki_community(string comm_name) { + if comm_name = "valid" then { + bgp_ext_community.add((unknown 0x4300, 0, 0)); + } + if comm_name = "unknown" then { + bgp_ext_community.add((unknown 0x4300, 0, 1)); + } + if comm_name = "invalid" then { + bgp_ext_community.add((unknown 0x4300, 0, 2)); + } +} + +# This functions performs RPKI validation of the current +# route and adds the informative communities. +function perform_rpki_validation () { + if net.type = NET_IP4 then { + case roa_check(RPKI4) { + ROA_VALID: add_rpki_community("valid"); + ROA_UNKNOWN: add_rpki_community("unknown"); + ROA_INVALID: add_rpki_community("invalid"); + } + } else { + case roa_check(RPKI6) { + ROA_VALID: add_rpki_community("valid"); + ROA_UNKNOWN: add_rpki_community("unknown"); + ROA_INVALID: add_rpki_community("invalid"); + } + } +} + +# This function returns True if the route is INVALID. +function route_is_rpki_invalid () { + return (unknown 0x4300, 0, 2) ~ bgp_ext_community; +} + +# This function returns True if RPKI INVALID routes +# should be announced to clients. +function announce_rpki_invalid_to_client(int client_asn; ip client_ip; string client_id) { + return false; +} + +# This function adds NO_EXPORT and/or NO_ADVERTISE +# well-known communities. +function add_noexport_noadvertise(int peer_as) { + # add_noexport_to_any + + if (65507, 999) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + if (999, 65507, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65507, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_any + + if (65508, 999) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + if (999, 65508, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65508, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + + # add_noexport_to_peer + + if peer_as <= 65535 then { + if (65509, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + } + if (999, 65509, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65509, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_peer + + if peer_as <= 65535 then { + if (65510, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + } + if (999, 65510, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65510, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + +} + +function tag_and_reject(int cause; int announcing_asn) +int dyn_val; +{ + # 0: the route must be treated as discarded + dyn_val = 0; + bgp_community.add((65520, dyn_val)); + + + # cause: the real cause + dyn_val = cause; + bgp_community.add((65520, dyn_val)); + + + # announcing_asn: the ASN of the peer that announced the route + dyn_val = announcing_asn; + bgp_ext_community.add((rt, 65520, dyn_val)); + + + bgp_local_pref = 1; +} + +function honor_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_local_pref = 5; + } +} + +function prevent_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_community.delete([(65535, 0)]); + } +} + + +# This function verifies if there is such a ROA for the +# current route's origin ASN to validate the announced prefix. +function prefix_in_rpki_roas_as_route_objects() { + if net.type = NET_IP4 then { + case roa_check(RPKI4) { + ROA_VALID: return true; + } + } else { + case roa_check(RPKI6) { + ROA_VALID: return true; + } + } + return false; +} + +# This function looks up the route's origin ASN in the ARIN +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_arin_whois_db() { + if net.type = NET_IP4 then { + case bgp_path.last_nonaggregated { + 104: return net ~ ARIN_Whois_db_AS104_4; + } + } + if net.type = NET_IP6 then { + case bgp_path.last_nonaggregated { + 104: return net ~ ARIN_Whois_db_AS104_6; + } + } + return false; +} + +# This function looks up the route's origin ASN in the Registro.br +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_registrobr_whois_db() { + if net.type = NET_IP4 then { + case bgp_path.last_nonaggregated { + 104: return net ~ RegistroBR_Whois_db_AS104_4; + } + } + if net.type = NET_IP6 then { + case bgp_path.last_nonaggregated { + 104: return net ~ RegistroBR_Whois_db_AS104_6; + } + } + return false; +} + + + + +# --------------------------------------------------------- +# MEMBERS + + +# AS-SET for AS1_1 +function origin_as_is_in_AS1_1_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_WHITE_LIST_AS1_1_asns then + return true; + return false; +} + +# R-SET for AS1_1 +function prefix_is_in_AS1_1_as_set() { + if net.type = NET_IP4 then + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_4 then + return true; + # AS-SET AS1 referenced but empty. + if net.type = NET_IP4 then + if net ~ AS_SET_WHITE_LIST_AS1_1_prefixes_4 then + return true; + return false; +} + +function next_hop_is_valid_for_AS1_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_1 + if bgp_next_hop = 192.0.2.11 then return true; + return false; +} + + +function verify_AS1_1_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_1_as_set(); + prefix_ok = prefix_is_in_AS1_1_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + # Client's white list + if !validated && net ~ [ 11.3.0.0/16 ] then { + if bgp_path.last_nonaggregated = 1011 then { + validated = true; + } + } + if !validated && net ~ [ 11.4.0.0/16{16,32} ] then { + validated = true; + } + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_1() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_1_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 192.0.2.11, "AS1_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 192.0.2.11, "AS1_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_1"; + + apply_prepend(1, 192.0.2.11); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 0.1 ms (normalized value: 1) +protocol bgp AS1_1 { + description "AS1_1 client"; + + local as 999; + neighbor 192.0.2.11 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_1; + export filter announce_to_AS1_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS1_2 +function origin_as_is_in_AS1_2_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + if bgp_path.last_nonaggregated ~ AS_SET_WHITE_LIST_AS1_2_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_2 +function prefix_is_in_AS1_2_as_set() { + # AS-SET AS_AS1_AS_AS1_CUSTOMERS referenced but empty. + if net.type = NET_IP6 then + if net ~ AS_SET_WHITE_LIST_AS1_2_prefixes_6 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_2 + if bgp_next_hop = 2001:db8:1:1::11 then return true; + return false; +} + + +function verify_AS1_2_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_2_as_set(); + prefix_ok = prefix_is_in_AS1_2_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + # Client's white list + if !validated && net ~ [ 2a11:3::/32 ] then { + if bgp_path.last_nonaggregated = 1011 then { + validated = true; + } + } + if !validated && net ~ [ 2a11:4::/32{32,128} ] then { + validated = true; + } + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_2() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 1); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_2_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 2001:db8:1:1::11, "AS1_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 2001:db8:1:1::11, "AS1_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_2"; + + apply_prepend(1, 2001:db8:1:1::11); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS1_2 { + description "AS1_1 client"; + + local as 999; + neighbor 2001:db8:1:1::11 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_2; + export filter announce_to_AS1_2; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS1_3 +function origin_as_is_in_AS1_3_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_3 +function prefix_is_in_AS1_3_as_set() { + if net.type = NET_IP4 then + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_4 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_3() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_3 + if bgp_next_hop = 192.0.2.11 then return true; # AS1_1 + if bgp_next_hop = 192.0.2.12 then return true; # AS1_3 + return false; +} + + +function verify_AS1_3_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_3_as_set(); + prefix_ok = prefix_is_in_AS1_3_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_3 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_3() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_3_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_3 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_3 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + reject "client AS1_3 not enabled to receive blackhole prefixes - NOT ANNOUNCING ", net, " TO AS1_3"; + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 192.0.2.12, "AS1_3") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_3"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 192.0.2.12, "AS1_3") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_3"; + + apply_prepend(1, 192.0.2.12); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 5 ms (normalized value: 5) +protocol bgp AS1_3 { + description "AS1_2 client"; + + local as 999; + neighbor 192.0.2.12 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_3; + export filter announce_to_AS1_3; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS1_4 +function origin_as_is_in_AS1_4_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_4 +function prefix_is_in_AS1_4_as_set() { + # AS-SET AS_AS1_AS_AS1_CUSTOMERS referenced but empty. + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_4() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_4 + if bgp_next_hop = 2001:db8:1:1::11 then return true; # AS1_2 + if bgp_next_hop = 2001:db8:1:1::12 then return true; # AS1_4 + return false; +} + + +function verify_AS1_4_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_4_as_set(); + prefix_ok = prefix_is_in_AS1_4_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_4 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_4() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 1); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_4_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_4 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_4 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + reject "client AS1_4 not enabled to receive blackhole prefixes - NOT ANNOUNCING ", net, " TO AS1_4"; + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 2001:db8:1:1::12, "AS1_4") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_4"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 2001:db8:1:1::12, "AS1_4") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_4"; + + apply_prepend(1, 2001:db8:1:1::12); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS1_4 { + description "AS1_2 client"; + + local as 999; + neighbor 2001:db8:1:1::12 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_4; + export filter announce_to_AS1_4; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS2_1 +function origin_as_is_in_AS2_1_as_set() { + # AS-SET AS2 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns then + return true; + return false; +} + +# R-SET for AS2_1 +function prefix_is_in_AS2_1_as_set() { + # AS-SET AS2 referenced but empty. + if net.type = NET_IP4 then + if net ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_4 then + return true; + return false; +} + +function next_hop_is_valid_for_AS2_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS2_1 + if bgp_next_hop = 192.0.2.21 then return true; + if bgp_next_hop = 192.0.2.22 then return true; + return false; +} + + +function verify_AS2_1_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS2_1_as_set(); + prefix_ok = prefix_is_in_AS2_1_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 2); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 2); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS2_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 2); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 2); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS2_1() then + { tag_and_reject(5, 2); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 2); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 2 then + { tag_and_reject(6, 2); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 2); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 2); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 2); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 2); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 2); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS2_1_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS2_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 2); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 2); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + prevent_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS2_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(2, 192.0.2.21, "AS2_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS2_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(2, 192.0.2.21, "AS2_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS2_1"; + + apply_prepend(2, 192.0.2.21); + + + add_noexport_noadvertise(2); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 17.3 ms (normalized value: 17) +protocol bgp AS2_1 { + description "AS2_1 client"; + + local as 999; + neighbor 192.0.2.21 as 2; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS2_1; + export filter announce_to_AS2_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS2_2 +function origin_as_is_in_AS2_2_as_set() { + # AS-SET AS2 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns then + return true; + return false; +} + +# R-SET for AS2_2 +function prefix_is_in_AS2_2_as_set() { + # AS-SET AS2 referenced but empty. + # AS-SET AS_AS2_AS_AS2_CUSTOMERS referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS2_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS2_2 + if bgp_next_hop = 2001:db8:1:1::21 then return true; + if bgp_next_hop = 2001:db8:1:1::22 then return true; + return false; +} + + +function verify_AS2_2_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS2_2_as_set(); + prefix_ok = prefix_is_in_AS2_2_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 2); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 2); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS2_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 2); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 2); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS2_2() then + { tag_and_reject(5, 2); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 2); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 2 then + { tag_and_reject(6, 2); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 2); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 2); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 2); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 2); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 2); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 2); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS2_2_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS2_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 2); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 2); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + prevent_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS2_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(2, 2001:db8:1:1::21, "AS2_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS2_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(2, 2001:db8:1:1::21, "AS2_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS2_2"; + + apply_prepend(2, 2001:db8:1:1::21); + + + add_noexport_noadvertise(2); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS2_2 { + description "AS2_1 client"; + + local as 999; + neighbor 2001:db8:1:1::21 as 2; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS2_2; + export filter announce_to_AS2_2; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS3_1 +function origin_as_is_in_AS3_1_as_set() { + return false; +} + +# R-SET for AS3_1 +function prefix_is_in_AS3_1_as_set() { + return false; +} + +function next_hop_is_valid_for_AS3_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS3_1 + if bgp_next_hop = 192.0.2.31 then return true; + return false; +} + +function prefix_is_in_AS3_1_blacklist() +prefix set AS3_1_blacklist; +{ + AS3_1_blacklist = [ + # bad network + 3.0.1.0/24{24,32} + ]; + return net ~ AS3_1_blacklist; +} + + +filter receive_from_AS3_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 3); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 3); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS3_1() then + { tag_and_reject(5, 3); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 3); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 3 then + { tag_and_reject(6, 3); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 3); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [174] then + { tag_and_reject(8, 3); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 3); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 3); reject "prefix is in global blacklist - REJECTING ", net; } + + # Prefix: client's blacklist + if prefix_is_in_AS3_1_blacklist() then + { tag_and_reject(11, 3); reject "prefix is in client's blacklist - REJECTING ", net; } + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 3); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS3_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 3); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 3); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS3_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(3, 192.0.2.31, "AS3_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS3_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(3, 192.0.2.31, "AS3_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS3_1"; + + apply_prepend(3, 192.0.2.31); + + # AS3_1 has been configured with 'prepend_rs_as' + bgp_path.prepend(999); + + add_noexport_noadvertise(3); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 123.8 ms (normalized value: 124) +protocol bgp AS3_1 { + description "AS3_1 client"; + + local as 999; + neighbor 192.0.2.31 as 3; + rs client; + + passive off; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + add paths tx; + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS3_1; + export filter announce_to_AS3_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS3_2 +function origin_as_is_in_AS3_2_as_set() { + return false; +} + +# R-SET for AS3_2 +function prefix_is_in_AS3_2_as_set() { + return false; +} + +function next_hop_is_valid_for_AS3_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS3_2 + if bgp_next_hop = 2001:db8:1:1::31 then return true; + return false; +} + +function prefix_is_in_AS3_2_blacklist() +prefix set AS3_2_blacklist; +{ + AS3_2_blacklist = [ + # bad network + 2a03:0:1::/48{48,128} + ]; + return net ~ AS3_2_blacklist; +} + + +filter receive_from_AS3_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 3); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 3); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS3_2() then + { tag_and_reject(5, 3); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 3); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 3 then + { tag_and_reject(6, 3); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 3); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [174] then + { tag_and_reject(8, 3); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 3); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 3); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 3); reject "prefix is in global blacklist - REJECTING ", net; } + + # Prefix: client's blacklist + if prefix_is_in_AS3_2_blacklist() then + { tag_and_reject(11, 3); reject "prefix is in client's blacklist - REJECTING ", net; } + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 3); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS3_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 3); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 3); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS3_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(3, 2001:db8:1:1::31, "AS3_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS3_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(3, 2001:db8:1:1::31, "AS3_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS3_2"; + + apply_prepend(3, 2001:db8:1:1::31); + + # AS3_2 has been configured with 'prepend_rs_as' + bgp_path.prepend(999); + + add_noexport_noadvertise(3); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS3_2 { + description "AS3_1 client"; + + local as 999; + neighbor 2001:db8:1:1::31 as 3; + rs client; + + passive off; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + add paths tx; + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS3_2; + export filter announce_to_AS3_2; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS4_1 +function origin_as_is_in_AS4_1_as_set() { + return false; +} + +# R-SET for AS4_1 +function prefix_is_in_AS4_1_as_set() { + return false; +} + +function next_hop_is_valid_for_AS4_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS4_1 + if bgp_next_hop = 192.0.2.41 then return true; + return false; +} + + + +filter receive_from_AS4_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 4); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 4); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS4_1() then + { tag_and_reject(5, 4); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 4); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 4 then + { tag_and_reject(6, 4); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 4); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 4); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 4); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 4); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 4); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS4_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 4); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 4); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS4_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(4, 192.0.2.41, "AS4_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS4_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(4, 192.0.2.41, "AS4_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS4_1"; + + apply_prepend(4, 192.0.2.41); + + + add_noexport_noadvertise(4); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 600 ms (normalized value: 600) +protocol bgp AS4_1 { + description "AS4_1 client"; + + local as 999; + neighbor 192.0.2.41 as 4; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS4_1; + export filter announce_to_AS4_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS4_2 +function origin_as_is_in_AS4_2_as_set() { + return false; +} + +# R-SET for AS4_2 +function prefix_is_in_AS4_2_as_set() { + return false; +} + +function next_hop_is_valid_for_AS4_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS4_2 + if bgp_next_hop = 2001:db8:1:1::41 then return true; + return false; +} + + + +filter receive_from_AS4_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 4); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 4); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS4_2() then + { tag_and_reject(5, 4); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 4); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 4 then + { tag_and_reject(6, 4); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 4); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 4); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 4); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 4); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 4); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 4); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS4_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 4); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 4); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS4_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(4, 2001:db8:1:1::41, "AS4_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS4_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(4, 2001:db8:1:1::41, "AS4_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS4_2"; + + apply_prepend(4, 2001:db8:1:1::41); + + + add_noexport_noadvertise(4); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS4_2 { + description "AS4_1 client"; + + local as 999; + neighbor 2001:db8:1:1::41 as 4; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS4_2; + export filter announce_to_AS4_2; + + # --------------------------------------- + }; + + } + + + +include "/etc/bird/footer4.local"; + +include "/etc/bird/footer6.local"; + diff --git a/tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv6_TagAndReject/bird2.conf b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv6_TagAndReject/bird2.conf new file mode 100644 index 00000000..7f877e2d --- /dev/null +++ b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRD2IPv6_TagAndReject/bird2.conf @@ -0,0 +1,3732 @@ + +router id 192.0.2.2; +define rs_as = 999; + +log "/var/log/bird.log" all; +log syslog all; +debug protocols { states, routes, filters, interfaces, events }; + +timeformat base iso long; +timeformat log iso long; +timeformat protocol iso long; +timeformat route iso long; + +protocol device {}; + +ipv4 table master4 sorted; +ipv6 table master6 sorted; + + + + +# --------------------------------------------------------- +# RPKI + +roa4 table RPKI4; +roa6 table RPKI6; +protocol static { + roa4 { table RPKI4; }; + route 101.3.0.0/16 max 24 as 105; + route 101.2.0.0/17 max 17 as 101; + route 101.2.128.0/17 max 24 as 101; + route 101.0.128.0/20 max 23 as 101; + route 101.0.8.0/24 max 24 as 101; + route 101.0.9.0/24 max 24 as 102; +} +protocol static { + roa6 { table RPKI6; }; + route 3101:3::/32 max 48 as 105; + route 3101:0:8000::/33 max 34 as 101; + route 3101:2:8000::/33 max 48 as 101; + route 3101:2::/33 max 33 as 101; + route 3101:0:8::/48 max 48 as 101; + route 3101:0:9::/48 max 48 as 102; +} + + + +# --------------------------------------------------------- +# IRRDB + +# AS2, used_by client AS2_1, client AS2_2 +# no origin ASNs found for AS2 + +# no IPv4 prefixes found for AS2 +# no IPv6 prefixes found for AS2 + +# AS-AS1, AS-AS1_CUSTOMERS, used_by client AS1_1, client AS1_2, client AS1_3, client AS1_4 +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns = [ + 1, 101, 103, 104 +]; + +# no IPv4 prefixes found for AS_AS1_AS_AS1_CUSTOMERS +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_6 = [ + 2a01::/32{32,128}, 2a99::/16{16,128}, 3101::/32{32,128}, 3103::/32{32,128} +]; + +# AS-AS2, AS-AS2_CUSTOMERS, used_by client AS2_1, client AS2_2 +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns = [ + 2, 101, 103 +]; + +# no IPv4 prefixes found for AS_AS2_AS_AS2_CUSTOMERS +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_6 = [ + 2a02::/32{32,128}, 3101::/32{32,128}, 3103::/32{32,128} +]; + +# WHITE_LIST_AS1_2, used_by client AS1_2 white list +define AS_SET_WHITE_LIST_AS1_2_asns = [ + 1011 +]; + +define AS_SET_WHITE_LIST_AS1_2_prefixes_4 = [ + 11.1.0.0/16{16,32} +]; +define AS_SET_WHITE_LIST_AS1_2_prefixes_6 = [ + 2a11:1::/32{32,128} +]; + +# AS1, used_by client AS1_1, client AS1_2, client AS1_3, client AS1_4 +# no origin ASNs found for AS1 + +# no IPv4 prefixes found for AS1 +# no IPv6 prefixes found for AS1 + +# WHITE_LIST_AS1_1, used_by client AS1_1 white list +define AS_SET_WHITE_LIST_AS1_1_asns = [ + 1011 +]; + +define AS_SET_WHITE_LIST_AS1_1_prefixes_4 = [ + 11.1.0.0/16{16,32} +]; +define AS_SET_WHITE_LIST_AS1_1_prefixes_6 = [ + 2a11:1::/32{32,128} +]; + + +# ARIN Whois database records +define ARIN_Whois_db_AS104_4 = [ + 104.0.0.0/23{23,32} +]; +define ARIN_Whois_db_AS104_6 = [ + 3104::/32{32,128} +]; + +# Registro.br Whois database records +define RegistroBR_Whois_db_AS104_4 = [ + 104.1.1.0/24{24,32} +]; +define RegistroBR_Whois_db_AS104_6 = [ + 3104:1:1::/48{48,128} +]; + + +# --------------------------------------------------------- +# COMMON + +# This function returns True if 'net' is a bogon prefix +# or falls within a bogon prefix. +function prefix_is_bogon() +prefix set bogons_4; +prefix set bogons_6; +{ + bogons_4 = [ + # Default route + 0.0.0.0/0, + + # IANA - Local Identification + 0.0.0.0/8{8,32}, + + # RFC 1918 - Private Use + 10.0.0.0/8{8,32}, + + # IANA - Loopback + 127.0.0.0/8{8,32}, + + # RFC 3927 - Link Local + 169.254.0.0/16{16,32}, + + # RFC 1918 - Private Use + 172.16.0.0/12{12,32}, + + # RFC 5737 - TEST-NET-1 + 192.0.2.0/24{24,32}, + + # RFC 3068 - 6to4 prefix + 192.88.99.0/24{24,32}, + + # RFC 1918 - Private Use + 192.168.0.0/16{16,32}, + + # RFC 2544 - Network Interconnect Device Benchmark Testing + 198.18.0.0/15{15,32}, + + # RFC 5737 - TEST-NET-2 + 198.51.100.0/24{24,32}, + + # RFC 5737 - TEST-NET-3 + 203.0.113.0/24{24,32}, + + # RFC 5771 - Multcast (formerly Class D) + 224.0.0.0/3{3,32}, + + # RFC 6598 - Shared Address Space + 100.64.0.0/10{10,32} + ]; + bogons_6 = [ + # Default route + ::/0, + + # loopback, unspecified, v4-mapped + ::/8{8,128}, + + # RFC 6052 - IPv4-IPv6 Translation + 64:ff9b::/96{96,128}, + + # RFC 6666 - reserved for Discard-Only Address Block + 100::/8{8,128}, + + # RFC 4048 - Reserved by IETF + 200::/7{7,128}, + + # RFC 4291 - Reserved by IETF + 400::/6{6,128}, + + # RFC 4291 - Reserved by IETF + 800::/5{5,128}, + + # RFC 4291 - Reserved by IETF + 1000::/4{4,128}, + + # RFC 4380 - Teredo prefix + 2001::/33{33,128}, + + # RFC 4380 - Teredo prefix + 2001:0:8000::/33{33,128}, + + # RFC 5180 - Benchmarking + 2001:2::/48{48,128}, + + # RFC 7450 - Automatic Multicast Tunneling + 2001:3::/32{32,128}, + + # RFC 4843 - Deprecated ORCHID + 2001:10::/28{28,128}, + + # RFC 7343 - ORCHIDv2 + 2001:20::/28{28,128}, + + # RFC 3849 - NON-ROUTABLE range to be used for documentation purpose + 2001:db8::/32{32,128}, + + # RFC 3068 - 6to4 prefix + 2002::/16{16,128}, + + # RFC 5156 - used for the 6bone but was returned + 3ffe::/16{16,128}, + + # RFC 4291 - Reserved by IETF + 4000::/3{3,128}, + + # RFC 5156 - used for the 6bone but was returned + 5f00::/8{8,128}, + + # RFC 4291 - Reserved by IETF + 6000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + 8000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + a000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + c000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + e000::/4{4,128}, + + # RFC 4291 - Reserved by IETF + f000::/5{5,128}, + + # RFC 4291 - Reserved by IETF + f800::/6{6,128}, + + # RFC 4193 - Unique Local Unicast + fc00::/7{7,128}, + + # RFC 4291 - Link Local Unicast + fe80::/10{10,128}, + + # RFC 4291 - Reserved by IETF + fec0::/10{10,128}, + + # RFC 4291 - Multicast + ff00::/8{8,128} + ]; + + if net.type = NET_IP4 then + if net ~ bogons_4 then return true; + if net.type = NET_IP6 then + if net ~ bogons_6 then return true; + return false; +} + +# This function returns True if 'net' falls within a +# prefix contained in the global blacklist (for example, +# local networks) +function prefix_is_in_global_blacklist() +prefix set global_blacklist_4; +prefix set global_blacklist_6; +{ + global_blacklist_4 = [ + # Local network + 192.0.2.0/24{24,32} + ]; + + if net.type = NET_IP4 then + if net ~ global_blacklist_4 then return true; + + global_blacklist_6 = [ + # Local network + 2001:db8::/32{32,128} + ]; + + if net.type = NET_IP6 then + if net ~ global_blacklist_6 then return true; + + return false; +} + +# This function returns True if the length of 'net' prefix +# falls within the range 'min'-'max' (included). +function prefix_len_is_valid (int pref_len_min; int pref_len_max) { + if net.len < pref_len_min then return false; + if net.len > pref_len_max then return false; + return true; +} + +# This function returns True if the AS_PATH contains one or +# more private/reserved ASN. +function as_path_contains_invalid_asn() +int set invalid_asns; +{ + # http://www.iana.org/assignments/as-numbers/as-numbers.xhtml + invalid_asns = [ + # 16-bit + 0, # Reserved. RFC7607 + 23456, # AS_TRANS. RFC6793 + 64496..64511, # Reserved for use in documentation and sample code. RFC5398 + 64512..65534, # Reserved for Private Use. RFC6996 + 65535, # Reserved. RFC7300 + + # 32-bit + 65536..65551, # Reserved for use in documentation and sample code. RFC5398 + 65552..131071, # Reserved. + 4200000000..4294967294, # Reserved for Private Use. [RFC6996] + 4294967295 # Reserved. RFC7300 + ]; + return bgp_path ~ invalid_asns; +} + +# This function returns the RTT measured for the peer given in client_ip. +# If the RTT is not available it returns 0. +function get_peer_rtt(ip client_ip) { + case client_ip { + 2001:db8:1:1::11 : return 1; # 0.1 + 2001:db8:1:1::12 : return 5; # 5 + 2001:db8:1:1::21 : return 17; # 17.3 + 2001:db8:1:1::31 : return 124; # 123.8 + 2001:db8:1:1::41 : return 600; # 600 + } + + return 0; +} + +# This function scrubs BGP communities used by the route server +# for signaling purpose toward its clients. (RFC7454, Section 11) +# It must be applied on routes entering the route server. +function scrub_communities_in() { + # origin_not_present_in_as_set + bgp_community.delete([(65530, 0)]); + bgp_large_community.delete([(999, 65530, 0)]); + + # origin_present_in_as_set + bgp_community.delete([(65530, 1)]); + bgp_large_community.delete([(999, 65530, 1)]); + + # prefix_validated_via_arin_whois_db_dump + bgp_community.delete([(65530, 3)]); + bgp_large_community.delete([(999, 65530, 3)]); + + # prefix_validated_via_rpki_roas + bgp_community.delete([(65530, 2)]); + bgp_large_community.delete([(999, 65530, 2)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function scrubs BGP communities used by clients to instruct +# the route server to perform some actions. +# It must be applied on routes leaving the route server. +function scrub_communities_out() { + # add_noadvertise_to_any + bgp_community.delete([(65508, 999)]); + bgp_large_community.delete([(999, 65508, 999)]); + bgp_ext_community.delete([(rt, 65508, 999)]); + + # add_noadvertise_to_peer + bgp_community.delete([(65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65510, 1..64511)]); + bgp_ext_community.delete([(rt, 65510, 131072..4199999999)]); + + # add_noexport_to_any + bgp_community.delete([(65507, 999)]); + bgp_large_community.delete([(999, 65507, 999)]); + bgp_ext_community.delete([(rt, 65507, 999)]); + + # add_noexport_to_peer + bgp_community.delete([(65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65509, 1..64511)]); + bgp_ext_community.delete([(rt, 65509, 131072..4199999999)]); + + # announce_to_peer + bgp_community.delete([(65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65501, 1..64511)]); + bgp_ext_community.delete([(rt, 65501, 131072..4199999999)]); + + # announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64533, *)]); + bgp_large_community.delete([(999, 64533, *)]); + bgp_ext_community.delete([(rt, 64533, *)]); + + # announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64532, *)]); + bgp_large_community.delete([(999, 64532, *)]); + bgp_ext_community.delete([(rt, 64532, *)]); + + # blackholing + bgp_community.delete([(65534, 0)]); + bgp_large_community.delete([(65534, 0, 0)]); + + # do_not_announce_to_any + bgp_community.delete([(0, 999)]); + bgp_large_community.delete([(999, 0, 999)]); + bgp_ext_community.delete([(rt, 0, 999)]); + + # do_not_announce_to_peer + bgp_community.delete([(0, 1..64511)]); + bgp_large_community.delete([(999, 0, 1..64511)]); + bgp_large_community.delete([(999, 0, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 0, 1..64511)]); + bgp_ext_community.delete([(rt, 0, 131072..4199999999)]); + + # do_not_announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64531, *)]); + bgp_large_community.delete([(999, 64531, *)]); + bgp_ext_community.delete([(rt, 64531, *)]); + + # do_not_announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64530, *)]); + bgp_large_community.delete([(999, 64530, *)]); + bgp_ext_community.delete([(rt, 64530, *)]); + + # prepend_once_to_any + bgp_community.delete([(65521, 65521)]); + bgp_large_community.delete([(999, 65521, 65521)]); + bgp_ext_community.delete([(rt, 65521, 65521)]); + + # prepend_once_to_peer + bgp_community.delete([(65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65521, 1..64511)]); + bgp_ext_community.delete([(rt, 65521, 131072..4199999999)]); + + # prepend_once_to_peers_with_rtt_higher_than + bgp_community.delete([(64537, *)]); + bgp_large_community.delete([(999, 64537, *)]); + bgp_ext_community.delete([(rt, 64537, *)]); + + # prepend_once_to_peers_with_rtt_lower_than + bgp_community.delete([(64534, *)]); + bgp_large_community.delete([(999, 64534, *)]); + bgp_ext_community.delete([(rt, 64534, *)]); + + # prepend_thrice_to_any + bgp_community.delete([(65523, 65523)]); + bgp_large_community.delete([(999, 65523, 65523)]); + bgp_ext_community.delete([(rt, 65523, 65523)]); + + # prepend_thrice_to_peer + bgp_community.delete([(65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65523, 1..64511)]); + bgp_ext_community.delete([(rt, 65523, 131072..4199999999)]); + + # prepend_thrice_to_peers_with_rtt_higher_than + bgp_community.delete([(64539, *)]); + bgp_large_community.delete([(999, 64539, *)]); + bgp_ext_community.delete([(rt, 64539, *)]); + + # prepend_thrice_to_peers_with_rtt_lower_than + bgp_community.delete([(64536, *)]); + bgp_large_community.delete([(999, 64536, *)]); + bgp_ext_community.delete([(rt, 64536, *)]); + + # prepend_twice_to_any + bgp_community.delete([(65522, 65522)]); + bgp_large_community.delete([(999, 65522, 65522)]); + bgp_ext_community.delete([(rt, 65522, 65522)]); + + # prepend_twice_to_peer + bgp_community.delete([(65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65522, 1..64511)]); + bgp_ext_community.delete([(rt, 65522, 131072..4199999999)]); + + # prepend_twice_to_peers_with_rtt_higher_than + bgp_community.delete([(64538, *)]); + bgp_large_community.delete([(999, 64538, *)]); + bgp_ext_community.delete([(rt, 64538, *)]); + + # prepend_twice_to_peers_with_rtt_lower_than + bgp_community.delete([(64535, *)]); + bgp_large_community.delete([(999, 64535, *)]); + bgp_ext_community.delete([(rt, 64535, *)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function verifies if the route is tagged with one of +# the blackhole filtering communities. +function is_blackhole_filtering_request() { + if net.type = NET_IP4 then { + if (65535, 666) ~ bgp_community then + return true; + + if (65534, 0) ~ bgp_community then + return true; + if (65534, 0, 0) ~ bgp_large_community then + return true; + + } + if net.type = NET_IP6 then { + if (65535, 666) ~ bgp_community then + return true; + + if (65534, 0) ~ bgp_community then + return true; + if (65534, 0, 0) ~ bgp_large_community then + return true; + + } + return false; +} + +# This function must be applied to outgoing routes. +# It applies the blackhole filtering policy to the current route. +function apply_blackhole_filtering_policy() { + if net.type = NET_IP4 then { + + # Configured policy: rewrite-next-hop + bgp_community.add((65535, 666)); + bgp_next_hop = 192.0.2.66; + # NO_EXPORT + bgp_community.add((65535, 65281)); + + } + if net.type = NET_IP6 then { + + # Configured policy: rewrite-next-hop + bgp_community.add((65535, 666)); + bgp_next_hop = 2001:db8:1:1::66; + # NO_EXPORT + bgp_community.add((65535, 65281)); + + } +} + +# This function verifies if the current route can be announced to +# the given client on the basis of the attached control BGP +# communities. +function route_can_be_announced_to(int peer_as; ip client_ip; string client_id) +int client_rtt; +{ + # do_not_announce_to_peer + if peer_as <= 65535 then { + if (0, peer_as) ~ bgp_community then + return false; + } + if (999, 0, peer_as) ~ bgp_large_community then + return false; + if (rt, 0, peer_as) ~ bgp_ext_community then + return false; + + # announce_to_peer + if peer_as <= 65535 then { + if (65501, peer_as) ~ bgp_community then + return true; + } + if (999, 65501, peer_as) ~ bgp_large_community then + return true; + if (rt, 65501, peer_as) ~ bgp_ext_community then + return true; + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # do_not_announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64531, 5) ~ bgp_community then + { if client_rtt > 5 then + return false; } + if (999, 64531, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return false; } + if (rt, 64531, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return false; } + + # 10 ms + if (64531, 10) ~ bgp_community then + { if client_rtt > 10 then + return false; } + if (999, 64531, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return false; } + if (rt, 64531, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return false; } + + # 15 ms + if (64531, 15) ~ bgp_community then + { if client_rtt > 15 then + return false; } + if (999, 64531, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return false; } + if (rt, 64531, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return false; } + + # 20 ms + if (64531, 20) ~ bgp_community then + { if client_rtt > 20 then + return false; } + if (999, 64531, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return false; } + if (rt, 64531, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return false; } + + # 30 ms + if (64531, 30) ~ bgp_community then + { if client_rtt > 30 then + return false; } + if (999, 64531, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return false; } + if (rt, 64531, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return false; } + + # 50 ms + if (64531, 50) ~ bgp_community then + { if client_rtt > 50 then + return false; } + if (999, 64531, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return false; } + if (rt, 64531, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return false; } + + # 100 ms + if (64531, 100) ~ bgp_community then + { if client_rtt > 100 then + return false; } + if (999, 64531, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return false; } + if (rt, 64531, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return false; } + + # 200 ms + if (64531, 200) ~ bgp_community then + { if client_rtt > 200 then + return false; } + if (999, 64531, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return false; } + if (rt, 64531, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return false; } + + # 500 ms + if (64531, 500) ~ bgp_community then + { if client_rtt > 500 then + return false; } + if (999, 64531, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return false; } + if (rt, 64531, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return false; } + + + # do_not_announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64530, 5) ~ bgp_community then + { if client_rtt <= 5 then + return false; } + if (999, 64530, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return false; } + if (rt, 64530, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return false; } + + # 10 ms + if (64530, 10) ~ bgp_community then + { if client_rtt <= 10 then + return false; } + if (999, 64530, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return false; } + if (rt, 64530, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return false; } + + # 15 ms + if (64530, 15) ~ bgp_community then + { if client_rtt <= 15 then + return false; } + if (999, 64530, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return false; } + if (rt, 64530, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return false; } + + # 20 ms + if (64530, 20) ~ bgp_community then + { if client_rtt <= 20 then + return false; } + if (999, 64530, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return false; } + if (rt, 64530, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return false; } + + # 30 ms + if (64530, 30) ~ bgp_community then + { if client_rtt <= 30 then + return false; } + if (999, 64530, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return false; } + if (rt, 64530, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return false; } + + # 50 ms + if (64530, 50) ~ bgp_community then + { if client_rtt <= 50 then + return false; } + if (999, 64530, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return false; } + if (rt, 64530, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return false; } + + # 100 ms + if (64530, 100) ~ bgp_community then + { if client_rtt <= 100 then + return false; } + if (999, 64530, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return false; } + if (rt, 64530, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return false; } + + # 200 ms + if (64530, 200) ~ bgp_community then + { if client_rtt <= 200 then + return false; } + if (999, 64530, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return false; } + if (rt, 64530, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return false; } + + # 500 ms + if (64530, 500) ~ bgp_community then + { if client_rtt <= 500 then + return false; } + if (999, 64530, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return false; } + if (rt, 64530, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return false; } + + + # announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64533, 5) ~ bgp_community then + { if client_rtt > 5 then + return true; } + if (999, 64533, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return true; } + if (rt, 64533, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return true; } + + # 10 ms + if (64533, 10) ~ bgp_community then + { if client_rtt > 10 then + return true; } + if (999, 64533, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return true; } + if (rt, 64533, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return true; } + + # 15 ms + if (64533, 15) ~ bgp_community then + { if client_rtt > 15 then + return true; } + if (999, 64533, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return true; } + if (rt, 64533, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return true; } + + # 20 ms + if (64533, 20) ~ bgp_community then + { if client_rtt > 20 then + return true; } + if (999, 64533, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return true; } + if (rt, 64533, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return true; } + + # 30 ms + if (64533, 30) ~ bgp_community then + { if client_rtt > 30 then + return true; } + if (999, 64533, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return true; } + if (rt, 64533, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return true; } + + # 50 ms + if (64533, 50) ~ bgp_community then + { if client_rtt > 50 then + return true; } + if (999, 64533, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return true; } + if (rt, 64533, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return true; } + + # 100 ms + if (64533, 100) ~ bgp_community then + { if client_rtt > 100 then + return true; } + if (999, 64533, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return true; } + if (rt, 64533, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return true; } + + # 200 ms + if (64533, 200) ~ bgp_community then + { if client_rtt > 200 then + return true; } + if (999, 64533, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return true; } + if (rt, 64533, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return true; } + + # 500 ms + if (64533, 500) ~ bgp_community then + { if client_rtt > 500 then + return true; } + if (999, 64533, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return true; } + if (rt, 64533, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return true; } + + + # announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64532, 5) ~ bgp_community then + { if client_rtt <= 5 then + return true; } + if (999, 64532, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return true; } + if (rt, 64532, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return true; } + + # 10 ms + if (64532, 10) ~ bgp_community then + { if client_rtt <= 10 then + return true; } + if (999, 64532, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return true; } + if (rt, 64532, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return true; } + + # 15 ms + if (64532, 15) ~ bgp_community then + { if client_rtt <= 15 then + return true; } + if (999, 64532, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return true; } + if (rt, 64532, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return true; } + + # 20 ms + if (64532, 20) ~ bgp_community then + { if client_rtt <= 20 then + return true; } + if (999, 64532, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return true; } + if (rt, 64532, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return true; } + + # 30 ms + if (64532, 30) ~ bgp_community then + { if client_rtt <= 30 then + return true; } + if (999, 64532, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return true; } + if (rt, 64532, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return true; } + + # 50 ms + if (64532, 50) ~ bgp_community then + { if client_rtt <= 50 then + return true; } + if (999, 64532, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return true; } + if (rt, 64532, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return true; } + + # 100 ms + if (64532, 100) ~ bgp_community then + { if client_rtt <= 100 then + return true; } + if (999, 64532, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return true; } + if (rt, 64532, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return true; } + + # 200 ms + if (64532, 200) ~ bgp_community then + { if client_rtt <= 200 then + return true; } + if (999, 64532, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return true; } + if (rt, 64532, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return true; } + + # 500 ms + if (64532, 500) ~ bgp_community then + { if client_rtt <= 500 then + return true; } + if (999, 64532, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return true; } + if (rt, 64532, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return true; } + + + } + + # do_not_announce_to_any + if (0, 999) ~ bgp_community then + return false; + if (999, 0, 999) ~ bgp_large_community then + return false; + if (rt, 0, 999) ~ bgp_ext_community then + return false; + + return true; +} + +# This function prepends the left-most ASN times. +function do_prepend(int times) { + case times { + 1: bgp_path.prepend(bgp_path.first); + 2: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + 3: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + } +} + +# This function verifies if the current route matches one of the +# control communities in charge of prepending client's ASN. +function apply_prepend(int peer_as; ip client_ip) +int client_rtt; +{ + # prepend_once_to_peer + if peer_as <= 65535 then { + if (65521, peer_as) ~ bgp_community then + { do_prepend(1); return true; } + } + if (999, 65521, peer_as) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, peer_as) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_peer + if peer_as <= 65535 then { + if (65522, peer_as) ~ bgp_community then + { do_prepend(2); return true; } + } + if (999, 65522, peer_as) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, peer_as) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_peer + if peer_as <= 65535 then { + if (65523, peer_as) ~ bgp_community then + { do_prepend(3); return true; } + } + if (999, 65523, peer_as) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, peer_as) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # prepend_once_to_peers_with_rtt_higher_than 500 ms + if (64537, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (999, 64537, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (rt, 64537, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 500 ms + if (64538, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (999, 64538, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (rt, 64538, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 500 ms + if (64539, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (999, 64539, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (rt, 64539, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 200 ms + if (64537, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (999, 64537, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (rt, 64537, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 200 ms + if (64538, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (999, 64538, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (rt, 64538, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 200 ms + if (64539, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (999, 64539, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (rt, 64539, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 100 ms + if (64537, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (999, 64537, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (rt, 64537, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 100 ms + if (64538, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (999, 64538, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (rt, 64538, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 100 ms + if (64539, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (999, 64539, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (rt, 64539, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 50 ms + if (64537, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (999, 64537, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (rt, 64537, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 50 ms + if (64538, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (999, 64538, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (rt, 64538, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 50 ms + if (64539, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (999, 64539, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (rt, 64539, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 30 ms + if (64537, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (999, 64537, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (rt, 64537, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 30 ms + if (64538, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (999, 64538, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (rt, 64538, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 30 ms + if (64539, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (999, 64539, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (rt, 64539, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 20 ms + if (64537, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (999, 64537, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (rt, 64537, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 20 ms + if (64538, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (999, 64538, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (rt, 64538, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 20 ms + if (64539, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (999, 64539, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (rt, 64539, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 15 ms + if (64537, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (999, 64537, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (rt, 64537, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 15 ms + if (64538, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (999, 64538, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (rt, 64538, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 15 ms + if (64539, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (999, 64539, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (rt, 64539, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 10 ms + if (64537, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (999, 64537, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (rt, 64537, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 10 ms + if (64538, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (999, 64538, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (rt, 64538, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 10 ms + if (64539, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (999, 64539, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (rt, 64539, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 5 ms + if (64537, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (999, 64537, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (rt, 64537, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 5 ms + if (64538, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (999, 64538, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (rt, 64538, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 5 ms + if (64539, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (999, 64539, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (rt, 64539, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 5 ms + if (64534, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (999, 64534, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (rt, 64534, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 5 ms + if (64535, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (999, 64535, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (rt, 64535, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 5 ms + if (64536, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (999, 64536, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (rt, 64536, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 10 ms + if (64534, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (999, 64534, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (rt, 64534, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 10 ms + if (64535, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (999, 64535, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (rt, 64535, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 10 ms + if (64536, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (999, 64536, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (rt, 64536, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 15 ms + if (64534, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (999, 64534, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (rt, 64534, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 15 ms + if (64535, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (999, 64535, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (rt, 64535, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 15 ms + if (64536, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (999, 64536, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (rt, 64536, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 20 ms + if (64534, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (999, 64534, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (rt, 64534, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 20 ms + if (64535, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (999, 64535, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (rt, 64535, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 20 ms + if (64536, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (999, 64536, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (rt, 64536, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 30 ms + if (64534, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (999, 64534, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (rt, 64534, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 30 ms + if (64535, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (999, 64535, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (rt, 64535, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 30 ms + if (64536, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (999, 64536, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (rt, 64536, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 50 ms + if (64534, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (999, 64534, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (rt, 64534, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 50 ms + if (64535, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (999, 64535, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (rt, 64535, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 50 ms + if (64536, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (999, 64536, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (rt, 64536, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 100 ms + if (64534, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (999, 64534, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (rt, 64534, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 100 ms + if (64535, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (999, 64535, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (rt, 64535, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 100 ms + if (64536, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (999, 64536, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (rt, 64536, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 200 ms + if (64534, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (999, 64534, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (rt, 64534, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 200 ms + if (64535, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (999, 64535, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (rt, 64535, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 200 ms + if (64536, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (999, 64536, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (rt, 64536, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 500 ms + if (64534, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (999, 64534, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (rt, 64534, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 500 ms + if (64535, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (999, 64535, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (rt, 64535, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 500 ms + if (64536, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (999, 64536, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (rt, 64536, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + + } + + # prepend_once_to_any + if (65521, 65521) ~ bgp_community then + { do_prepend(1); return true; } + if (999, 65521, 65521) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, 65521) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_any + if (65522, 65522) ~ bgp_community then + { do_prepend(2); return true; } + if (999, 65522, 65522) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, 65522) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_any + if (65523, 65523) ~ bgp_community then + { do_prepend(3); return true; } + if (999, 65523, 65523) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, 65523) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + return true; +} + +# This function adds the BGP communities used to +# keep track of RPKI validation state. +# RFC8097 extended communities are used here. +function add_rpki_community(string comm_name) { + if comm_name = "valid" then { + bgp_ext_community.add((unknown 0x4300, 0, 0)); + } + if comm_name = "unknown" then { + bgp_ext_community.add((unknown 0x4300, 0, 1)); + } + if comm_name = "invalid" then { + bgp_ext_community.add((unknown 0x4300, 0, 2)); + } +} + +# This functions performs RPKI validation of the current +# route and adds the informative communities. +function perform_rpki_validation () { + if net.type = NET_IP4 then { + case roa_check(RPKI4) { + ROA_VALID: add_rpki_community("valid"); + ROA_UNKNOWN: add_rpki_community("unknown"); + ROA_INVALID: add_rpki_community("invalid"); + } + } else { + case roa_check(RPKI6) { + ROA_VALID: add_rpki_community("valid"); + ROA_UNKNOWN: add_rpki_community("unknown"); + ROA_INVALID: add_rpki_community("invalid"); + } + } +} + +# This function returns True if the route is INVALID. +function route_is_rpki_invalid () { + return (unknown 0x4300, 0, 2) ~ bgp_ext_community; +} + +# This function returns True if RPKI INVALID routes +# should be announced to clients. +function announce_rpki_invalid_to_client(int client_asn; ip client_ip; string client_id) { + return false; +} + +# This function adds NO_EXPORT and/or NO_ADVERTISE +# well-known communities. +function add_noexport_noadvertise(int peer_as) { + # add_noexport_to_any + + if (65507, 999) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + if (999, 65507, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65507, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_any + + if (65508, 999) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + if (999, 65508, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65508, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + + # add_noexport_to_peer + + if peer_as <= 65535 then { + if (65509, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + } + if (999, 65509, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65509, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_peer + + if peer_as <= 65535 then { + if (65510, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + } + if (999, 65510, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65510, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + +} + +function tag_and_reject(int cause; int announcing_asn) +int dyn_val; +{ + # 0: the route must be treated as discarded + dyn_val = 0; + bgp_community.add((65520, dyn_val)); + + + # cause: the real cause + dyn_val = cause; + bgp_community.add((65520, dyn_val)); + + + # announcing_asn: the ASN of the peer that announced the route + dyn_val = announcing_asn; + bgp_ext_community.add((rt, 65520, dyn_val)); + + + bgp_local_pref = 1; +} + +function honor_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_local_pref = 5; + } +} + +function prevent_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_community.delete([(65535, 0)]); + } +} + + +# This function verifies if there is such a ROA for the +# current route's origin ASN to validate the announced prefix. +function prefix_in_rpki_roas_as_route_objects() { + if net.type = NET_IP4 then { + case roa_check(RPKI4) { + ROA_VALID: return true; + } + } else { + case roa_check(RPKI6) { + ROA_VALID: return true; + } + } + return false; +} + +# This function looks up the route's origin ASN in the ARIN +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_arin_whois_db() { + if net.type = NET_IP4 then { + case bgp_path.last_nonaggregated { + 104: return net ~ ARIN_Whois_db_AS104_4; + } + } + if net.type = NET_IP6 then { + case bgp_path.last_nonaggregated { + 104: return net ~ ARIN_Whois_db_AS104_6; + } + } + return false; +} + +# This function looks up the route's origin ASN in the Registro.br +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_registrobr_whois_db() { + if net.type = NET_IP4 then { + case bgp_path.last_nonaggregated { + 104: return net ~ RegistroBR_Whois_db_AS104_4; + } + } + if net.type = NET_IP6 then { + case bgp_path.last_nonaggregated { + 104: return net ~ RegistroBR_Whois_db_AS104_6; + } + } + return false; +} + + + + +# --------------------------------------------------------- +# MEMBERS + + +# AS-SET for AS1_1 +function origin_as_is_in_AS1_1_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_WHITE_LIST_AS1_1_asns then + return true; + return false; +} + +# R-SET for AS1_1 +function prefix_is_in_AS1_1_as_set() { + # AS-SET AS_AS1_AS_AS1_CUSTOMERS referenced but empty. + # AS-SET AS1 referenced but empty. + if net.type = NET_IP4 then + if net ~ AS_SET_WHITE_LIST_AS1_1_prefixes_4 then + return true; + return false; +} + +function next_hop_is_valid_for_AS1_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_1 + if bgp_next_hop = 192.0.2.11 then return true; + return false; +} + + +function verify_AS1_1_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_1_as_set(); + prefix_ok = prefix_is_in_AS1_1_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + # Client's white list + if !validated && net ~ [ 11.3.0.0/16 ] then { + if bgp_path.last_nonaggregated = 1011 then { + validated = true; + } + } + if !validated && net ~ [ 11.4.0.0/16{16,32} ] then { + validated = true; + } + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_1() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_1_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 192.0.2.11, "AS1_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 192.0.2.11, "AS1_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_1"; + + apply_prepend(1, 192.0.2.11); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS1_1 { + description "AS1_1 client"; + + local as 999; + neighbor 192.0.2.11 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_1; + export filter announce_to_AS1_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS1_2 +function origin_as_is_in_AS1_2_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + if bgp_path.last_nonaggregated ~ AS_SET_WHITE_LIST_AS1_2_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_2 +function prefix_is_in_AS1_2_as_set() { + if net.type = NET_IP6 then + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_6 then + return true; + if net.type = NET_IP6 then + if net ~ AS_SET_WHITE_LIST_AS1_2_prefixes_6 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_2 + if bgp_next_hop = 2001:db8:1:1::11 then return true; + return false; +} + + +function verify_AS1_2_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_2_as_set(); + prefix_ok = prefix_is_in_AS1_2_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + # Client's white list + if !validated && net ~ [ 2a11:3::/32 ] then { + if bgp_path.last_nonaggregated = 1011 then { + validated = true; + } + } + if !validated && net ~ [ 2a11:4::/32{32,128} ] then { + validated = true; + } + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_2() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 1); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_2_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 2001:db8:1:1::11, "AS1_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 2001:db8:1:1::11, "AS1_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_2"; + + apply_prepend(1, 2001:db8:1:1::11); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 0.1 ms (normalized value: 1) +protocol bgp AS1_2 { + description "AS1_1 client"; + + local as 999; + neighbor 2001:db8:1:1::11 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_2; + export filter announce_to_AS1_2; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS1_3 +function origin_as_is_in_AS1_3_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_3 +function prefix_is_in_AS1_3_as_set() { + # AS-SET AS_AS1_AS_AS1_CUSTOMERS referenced but empty. + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_3() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_3 + if bgp_next_hop = 192.0.2.11 then return true; # AS1_1 + if bgp_next_hop = 192.0.2.12 then return true; # AS1_3 + return false; +} + + +function verify_AS1_3_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_3_as_set(); + prefix_ok = prefix_is_in_AS1_3_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_3 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_3() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_3_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_3 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_3 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + reject "client AS1_3 not enabled to receive blackhole prefixes - NOT ANNOUNCING ", net, " TO AS1_3"; + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 192.0.2.12, "AS1_3") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_3"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 192.0.2.12, "AS1_3") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_3"; + + apply_prepend(1, 192.0.2.12); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS1_3 { + description "AS1_2 client"; + + local as 999; + neighbor 192.0.2.12 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_3; + export filter announce_to_AS1_3; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS1_4 +function origin_as_is_in_AS1_4_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_4 +function prefix_is_in_AS1_4_as_set() { + if net.type = NET_IP6 then + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_6 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_4() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_4 + if bgp_next_hop = 2001:db8:1:1::11 then return true; # AS1_2 + if bgp_next_hop = 2001:db8:1:1::12 then return true; # AS1_4 + return false; +} + + +function verify_AS1_4_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_4_as_set(); + prefix_ok = prefix_is_in_AS1_4_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_4 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 1); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_4() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 1); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_4_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_4 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_4 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + reject "client AS1_4 not enabled to receive blackhole prefixes - NOT ANNOUNCING ", net, " TO AS1_4"; + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 2001:db8:1:1::12, "AS1_4") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_4"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 2001:db8:1:1::12, "AS1_4") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_4"; + + apply_prepend(1, 2001:db8:1:1::12); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 5 ms (normalized value: 5) +protocol bgp AS1_4 { + description "AS1_2 client"; + + local as 999; + neighbor 2001:db8:1:1::12 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS1_4; + export filter announce_to_AS1_4; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS2_1 +function origin_as_is_in_AS2_1_as_set() { + # AS-SET AS2 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns then + return true; + return false; +} + +# R-SET for AS2_1 +function prefix_is_in_AS2_1_as_set() { + # AS-SET AS2 referenced but empty. + # AS-SET AS_AS2_AS_AS2_CUSTOMERS referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS2_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS2_1 + if bgp_next_hop = 192.0.2.21 then return true; + if bgp_next_hop = 192.0.2.22 then return true; + return false; +} + + +function verify_AS2_1_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS2_1_as_set(); + prefix_ok = prefix_is_in_AS2_1_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 2); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 2); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS2_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 2); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 2); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS2_1() then + { tag_and_reject(5, 2); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 2); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 2 then + { tag_and_reject(6, 2); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 2); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 2); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 2); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 2); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 2); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS2_1_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS2_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 2); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 2); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + prevent_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS2_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(2, 192.0.2.21, "AS2_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS2_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(2, 192.0.2.21, "AS2_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS2_1"; + + apply_prepend(2, 192.0.2.21); + + + add_noexport_noadvertise(2); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS2_1 { + description "AS2_1 client"; + + local as 999; + neighbor 192.0.2.21 as 2; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS2_1; + export filter announce_to_AS2_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS2_2 +function origin_as_is_in_AS2_2_as_set() { + # AS-SET AS2 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns then + return true; + return false; +} + +# R-SET for AS2_2 +function prefix_is_in_AS2_2_as_set() { + # AS-SET AS2 referenced but empty. + if net.type = NET_IP6 then + if net ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_6 then + return true; + return false; +} + +function next_hop_is_valid_for_AS2_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS2_2 + if bgp_next_hop = 2001:db8:1:1::21 then return true; + if bgp_next_hop = 2001:db8:1:1::22 then return true; + return false; +} + + +function verify_AS2_2_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS2_2_as_set(); + prefix_ok = prefix_is_in_AS2_2_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 2); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 2); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS2_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 2); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 2); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS2_2() then + { tag_and_reject(5, 2); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 2); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 2 then + { tag_and_reject(6, 2); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 2); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 2); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 2); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 2); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 2); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 2); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS2_2_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS2_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 2); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 2); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + prevent_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS2_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(2, 2001:db8:1:1::21, "AS2_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS2_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(2, 2001:db8:1:1::21, "AS2_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS2_2"; + + apply_prepend(2, 2001:db8:1:1::21); + + + add_noexport_noadvertise(2); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 17.3 ms (normalized value: 17) +protocol bgp AS2_2 { + description "AS2_1 client"; + + local as 999; + neighbor 2001:db8:1:1::21 as 2; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS2_2; + export filter announce_to_AS2_2; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS3_1 +function origin_as_is_in_AS3_1_as_set() { + return false; +} + +# R-SET for AS3_1 +function prefix_is_in_AS3_1_as_set() { + return false; +} + +function next_hop_is_valid_for_AS3_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS3_1 + if bgp_next_hop = 192.0.2.31 then return true; + return false; +} + +function prefix_is_in_AS3_1_blacklist() +prefix set AS3_1_blacklist; +{ + AS3_1_blacklist = [ + # bad network + 3.0.1.0/24{24,32} + ]; + return net ~ AS3_1_blacklist; +} + + +filter receive_from_AS3_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 3); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 3); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS3_1() then + { tag_and_reject(5, 3); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 3); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 3 then + { tag_and_reject(6, 3); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 3); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [174] then + { tag_and_reject(8, 3); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 3); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 3); reject "prefix is in global blacklist - REJECTING ", net; } + + # Prefix: client's blacklist + if prefix_is_in_AS3_1_blacklist() then + { tag_and_reject(11, 3); reject "prefix is in client's blacklist - REJECTING ", net; } + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 3); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS3_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 3); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 3); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS3_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(3, 192.0.2.31, "AS3_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS3_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(3, 192.0.2.31, "AS3_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS3_1"; + + apply_prepend(3, 192.0.2.31); + + # AS3_1 has been configured with 'prepend_rs_as' + bgp_path.prepend(999); + + add_noexport_noadvertise(3); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS3_1 { + description "AS3_1 client"; + + local as 999; + neighbor 192.0.2.31 as 3; + rs client; + + passive off; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + add paths tx; + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS3_1; + export filter announce_to_AS3_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS3_2 +function origin_as_is_in_AS3_2_as_set() { + return false; +} + +# R-SET for AS3_2 +function prefix_is_in_AS3_2_as_set() { + return false; +} + +function next_hop_is_valid_for_AS3_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS3_2 + if bgp_next_hop = 2001:db8:1:1::31 then return true; + return false; +} + +function prefix_is_in_AS3_2_blacklist() +prefix set AS3_2_blacklist; +{ + AS3_2_blacklist = [ + # bad network + 2a03:0:1::/48{48,128} + ]; + return net ~ AS3_2_blacklist; +} + + +filter receive_from_AS3_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 3); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 3); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS3_2() then + { tag_and_reject(5, 3); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 3); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 3 then + { tag_and_reject(6, 3); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 3); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [174] then + { tag_and_reject(8, 3); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 3); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 3); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 3); reject "prefix is in global blacklist - REJECTING ", net; } + + # Prefix: client's blacklist + if prefix_is_in_AS3_2_blacklist() then + { tag_and_reject(11, 3); reject "prefix is in client's blacklist - REJECTING ", net; } + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 3); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS3_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 3); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 3); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS3_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(3, 2001:db8:1:1::31, "AS3_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS3_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(3, 2001:db8:1:1::31, "AS3_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS3_2"; + + apply_prepend(3, 2001:db8:1:1::31); + + # AS3_2 has been configured with 'prepend_rs_as' + bgp_path.prepend(999); + + add_noexport_noadvertise(3); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 123.8 ms (normalized value: 124) +protocol bgp AS3_2 { + description "AS3_1 client"; + + local as 999; + neighbor 2001:db8:1:1::31 as 3; + rs client; + + passive off; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + add paths tx; + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS3_2; + export filter announce_to_AS3_2; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS4_1 +function origin_as_is_in_AS4_1_as_set() { + return false; +} + +# R-SET for AS4_1 +function prefix_is_in_AS4_1_as_set() { + return false; +} + +function next_hop_is_valid_for_AS4_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS4_1 + if bgp_next_hop = 192.0.2.41 then return true; + return false; +} + + + +filter receive_from_AS4_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 4); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP4) then + { tag_and_reject(65535, 4); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS4_1() then + { tag_and_reject(5, 4); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 4); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 4 then + { tag_and_reject(6, 4); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 4); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 4); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 4); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 4); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 4); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS4_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 4); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 4); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS4_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(4, 192.0.2.41, "AS4_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS4_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(4, 192.0.2.41, "AS4_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS4_1"; + + apply_prepend(4, 192.0.2.41); + + + add_noexport_noadvertise(4); + + scrub_communities_out(); + + + + accept; +} + +protocol bgp AS4_1 { + description "AS4_1 client"; + + local as 999; + neighbor 192.0.2.41 as 4; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv4 { + table master4; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS4_1; + export filter announce_to_AS4_1; + + # --------------------------------------- + }; + + } + + +# AS-SET for AS4_2 +function origin_as_is_in_AS4_2_as_set() { + return false; +} + +# R-SET for AS4_2 +function prefix_is_in_AS4_2_as_set() { + return false; +} + +function next_hop_is_valid_for_AS4_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS4_2 + if bgp_next_hop = 2001:db8:1:1::41 then return true; + return false; +} + + + +filter receive_from_AS4_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 4); reject "source != RTS_BGP - REJECTING ", net; } + + if !(net.type = NET_IP6) then + { tag_and_reject(65535, 4); reject "AFI not enabled for this peer - REJECTING ", net; } + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS4_2() then + { tag_and_reject(5, 4); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 4); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 4 then + { tag_and_reject(6, 4); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 4); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 4); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 4); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 4); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 4); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 4); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS4_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 4); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 4); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS4_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(4, 2001:db8:1:1::41, "AS4_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS4_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(4, 2001:db8:1:1::41, "AS4_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS4_2"; + + apply_prepend(4, 2001:db8:1:1::41); + + + add_noexport_noadvertise(4); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 600 ms (normalized value: 600) +protocol bgp AS4_2 { + description "AS4_1 client"; + + local as 999; + neighbor 2001:db8:1:1::41 as 4; + rs client; + + passive on; + ttl security off; + interpret communities off; + + # --------------------------------------- + ipv6 { + table master6; + + + secondary; + + + import table on; + + import keep filtered on; + + import filter receive_from_AS4_2; + export filter announce_to_AS4_2; + + # --------------------------------------- + }; + + } + + + +include "/etc/bird/footer4.local"; + +include "/etc/bird/footer6.local"; + diff --git a/tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv4_TagAndReject/bird16.conf b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv4_TagAndReject/bird16.conf new file mode 100644 index 00000000..3c449ae9 --- /dev/null +++ b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv4_TagAndReject/bird16.conf @@ -0,0 +1,2562 @@ + +router id 192.0.2.2; +define rs_as = 999; + +log "/var/log/bird.log" all; +log syslog all; +debug protocols { states, routes, filters, interfaces, events }; + +timeformat base iso long; +timeformat log iso long; +timeformat protocol iso long; +timeformat route iso long; + +protocol device {}; + +table master sorted; + + + + +# --------------------------------------------------------- +# RPKI + +roa table RPKI { + roa 101.3.0.0/16 max 24 as 105; + roa 101.2.0.0/17 max 17 as 101; + roa 101.2.128.0/17 max 24 as 101; + roa 101.0.128.0/20 max 23 as 101; + roa 101.0.8.0/24 max 24 as 101; + roa 101.0.9.0/24 max 24 as 102; +}; + + + +# --------------------------------------------------------- +# IRRDB + +# AS2, used_by client AS2_1 +# no origin ASNs found for AS2 + +# no IPv4 prefixes found for AS2 + +# AS-AS1, AS-AS1_CUSTOMERS, used_by client AS1_1, client AS1_3 +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns = [ + 1, 101, 103, 104 +]; + +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_4 = [ + 1.0.0.0/8{8,32}, 128.0.0.0/7{7,32}, 101.0.0.0/16{16,32}, 103.0.0.0/16{16,32} +]; + +# AS-AS2, AS-AS2_CUSTOMERS, used_by client AS2_1 +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns = [ + 2, 101, 103 +]; + +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_4 = [ + 2.0.0.0/16{16,32}, 101.0.0.0/16{16,32}, 103.0.0.0/16{16,32} +]; + +# AS1, used_by client AS1_1, client AS1_3 +# no origin ASNs found for AS1 + +# no IPv4 prefixes found for AS1 + +# WHITE_LIST_AS1_1, used_by client AS1_1 white list +define AS_SET_WHITE_LIST_AS1_1_asns = [ + 1011 +]; + +define AS_SET_WHITE_LIST_AS1_1_prefixes_4 = [ + 11.1.0.0/16{16,32} +]; + + +# ARIN Whois database records +define ARIN_Whois_db_AS104_4 = [ + 104.0.0.0/23{23,32} +]; + +# Registro.br Whois database records +define RegistroBR_Whois_db_AS104_4 = [ + 104.1.1.0/24{24,32} +]; + + +# --------------------------------------------------------- +# COMMON + +# This function returns True if 'net' is a bogon prefix +# or falls within a bogon prefix. +function prefix_is_bogon() +prefix set bogons_4; +{ + bogons_4 = [ + # Default route + 0.0.0.0/0, + + # IANA - Local Identification + 0.0.0.0/8{8,32}, + + # RFC 1918 - Private Use + 10.0.0.0/8{8,32}, + + # IANA - Loopback + 127.0.0.0/8{8,32}, + + # RFC 3927 - Link Local + 169.254.0.0/16{16,32}, + + # RFC 1918 - Private Use + 172.16.0.0/12{12,32}, + + # RFC 5737 - TEST-NET-1 + 192.0.2.0/24{24,32}, + + # RFC 3068 - 6to4 prefix + 192.88.99.0/24{24,32}, + + # RFC 1918 - Private Use + 192.168.0.0/16{16,32}, + + # RFC 2544 - Network Interconnect Device Benchmark Testing + 198.18.0.0/15{15,32}, + + # RFC 5737 - TEST-NET-2 + 198.51.100.0/24{24,32}, + + # RFC 5737 - TEST-NET-3 + 203.0.113.0/24{24,32}, + + # RFC 5771 - Multcast (formerly Class D) + 224.0.0.0/3{3,32}, + + # RFC 6598 - Shared Address Space + 100.64.0.0/10{10,32} + ]; + + if net ~ bogons_4 then return true; + return false; +} + +# This function returns True if 'net' falls within a +# prefix contained in the global blacklist (for example, +# local networks) +function prefix_is_in_global_blacklist() +prefix set global_blacklist_4; +{ + global_blacklist_4 = [ + # Local network + 192.0.2.0/24{24,32} + ]; + + if net ~ global_blacklist_4 then return true; + + return false; +} + +# This function returns True if the length of 'net' prefix +# falls within the range 'min'-'max' (included). +function prefix_len_is_valid (int pref_len_min; int pref_len_max) { + if net.len < pref_len_min then return false; + if net.len > pref_len_max then return false; + return true; +} + +# This function returns True if the AS_PATH contains one or +# more private/reserved ASN. +function as_path_contains_invalid_asn() +int set invalid_asns; +{ + # http://www.iana.org/assignments/as-numbers/as-numbers.xhtml + invalid_asns = [ + # 16-bit + 0, # Reserved. RFC7607 + 23456, # AS_TRANS. RFC6793 + 64496..64511, # Reserved for use in documentation and sample code. RFC5398 + 64512..65534, # Reserved for Private Use. RFC6996 + 65535, # Reserved. RFC7300 + + # 32-bit + 65536..65551, # Reserved for use in documentation and sample code. RFC5398 + 65552..131071, # Reserved. + 4200000000..4294967294, # Reserved for Private Use. [RFC6996] + 4294967295 # Reserved. RFC7300 + ]; + return bgp_path ~ invalid_asns; +} + +# This function returns the RTT measured for the peer given in client_ip. +# If the RTT is not available it returns 0. +function get_peer_rtt(ip client_ip) { + case client_ip { + 192.0.2.11 : return 1; # 0.1 + 192.0.2.12 : return 5; # 5 + 192.0.2.21 : return 17; # 17.3 + 192.0.2.31 : return 124; # 123.8 + 192.0.2.41 : return 600; # 600 + } + + return 0; +} + +# This function scrubs BGP communities used by the route server +# for signaling purpose toward its clients. (RFC7454, Section 11) +# It must be applied on routes entering the route server. +function scrub_communities_in() { + # origin_not_present_in_as_set + bgp_community.delete([(65530, 0)]); + bgp_large_community.delete([(999, 65530, 0)]); + + # origin_present_in_as_set + bgp_community.delete([(65530, 1)]); + bgp_large_community.delete([(999, 65530, 1)]); + + # prefix_validated_via_arin_whois_db_dump + bgp_community.delete([(65530, 3)]); + bgp_large_community.delete([(999, 65530, 3)]); + + # prefix_validated_via_rpki_roas + bgp_community.delete([(65530, 2)]); + bgp_large_community.delete([(999, 65530, 2)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function scrubs BGP communities used by clients to instruct +# the route server to perform some actions. +# It must be applied on routes leaving the route server. +function scrub_communities_out() { + # add_noadvertise_to_any + bgp_community.delete([(65508, 999)]); + bgp_large_community.delete([(999, 65508, 999)]); + bgp_ext_community.delete([(rt, 65508, 999)]); + + # add_noadvertise_to_peer + bgp_community.delete([(65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65510, 1..64511)]); + bgp_ext_community.delete([(rt, 65510, 131072..4199999999)]); + + # add_noexport_to_any + bgp_community.delete([(65507, 999)]); + bgp_large_community.delete([(999, 65507, 999)]); + bgp_ext_community.delete([(rt, 65507, 999)]); + + # add_noexport_to_peer + bgp_community.delete([(65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65509, 1..64511)]); + bgp_ext_community.delete([(rt, 65509, 131072..4199999999)]); + + # announce_to_peer + bgp_community.delete([(65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65501, 1..64511)]); + bgp_ext_community.delete([(rt, 65501, 131072..4199999999)]); + + # announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64533, *)]); + bgp_large_community.delete([(999, 64533, *)]); + bgp_ext_community.delete([(rt, 64533, *)]); + + # announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64532, *)]); + bgp_large_community.delete([(999, 64532, *)]); + bgp_ext_community.delete([(rt, 64532, *)]); + + # blackholing + bgp_community.delete([(65534, 0)]); + bgp_large_community.delete([(65534, 0, 0)]); + + # do_not_announce_to_any + bgp_community.delete([(0, 999)]); + bgp_large_community.delete([(999, 0, 999)]); + bgp_ext_community.delete([(rt, 0, 999)]); + + # do_not_announce_to_peer + bgp_community.delete([(0, 1..64511)]); + bgp_large_community.delete([(999, 0, 1..64511)]); + bgp_large_community.delete([(999, 0, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 0, 1..64511)]); + bgp_ext_community.delete([(rt, 0, 131072..4199999999)]); + + # do_not_announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64531, *)]); + bgp_large_community.delete([(999, 64531, *)]); + bgp_ext_community.delete([(rt, 64531, *)]); + + # do_not_announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64530, *)]); + bgp_large_community.delete([(999, 64530, *)]); + bgp_ext_community.delete([(rt, 64530, *)]); + + # prepend_once_to_any + bgp_community.delete([(65521, 65521)]); + bgp_large_community.delete([(999, 65521, 65521)]); + bgp_ext_community.delete([(rt, 65521, 65521)]); + + # prepend_once_to_peer + bgp_community.delete([(65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65521, 1..64511)]); + bgp_ext_community.delete([(rt, 65521, 131072..4199999999)]); + + # prepend_once_to_peers_with_rtt_higher_than + bgp_community.delete([(64537, *)]); + bgp_large_community.delete([(999, 64537, *)]); + bgp_ext_community.delete([(rt, 64537, *)]); + + # prepend_once_to_peers_with_rtt_lower_than + bgp_community.delete([(64534, *)]); + bgp_large_community.delete([(999, 64534, *)]); + bgp_ext_community.delete([(rt, 64534, *)]); + + # prepend_thrice_to_any + bgp_community.delete([(65523, 65523)]); + bgp_large_community.delete([(999, 65523, 65523)]); + bgp_ext_community.delete([(rt, 65523, 65523)]); + + # prepend_thrice_to_peer + bgp_community.delete([(65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65523, 1..64511)]); + bgp_ext_community.delete([(rt, 65523, 131072..4199999999)]); + + # prepend_thrice_to_peers_with_rtt_higher_than + bgp_community.delete([(64539, *)]); + bgp_large_community.delete([(999, 64539, *)]); + bgp_ext_community.delete([(rt, 64539, *)]); + + # prepend_thrice_to_peers_with_rtt_lower_than + bgp_community.delete([(64536, *)]); + bgp_large_community.delete([(999, 64536, *)]); + bgp_ext_community.delete([(rt, 64536, *)]); + + # prepend_twice_to_any + bgp_community.delete([(65522, 65522)]); + bgp_large_community.delete([(999, 65522, 65522)]); + bgp_ext_community.delete([(rt, 65522, 65522)]); + + # prepend_twice_to_peer + bgp_community.delete([(65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65522, 1..64511)]); + bgp_ext_community.delete([(rt, 65522, 131072..4199999999)]); + + # prepend_twice_to_peers_with_rtt_higher_than + bgp_community.delete([(64538, *)]); + bgp_large_community.delete([(999, 64538, *)]); + bgp_ext_community.delete([(rt, 64538, *)]); + + # prepend_twice_to_peers_with_rtt_lower_than + bgp_community.delete([(64535, *)]); + bgp_large_community.delete([(999, 64535, *)]); + bgp_ext_community.delete([(rt, 64535, *)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function verifies if the route is tagged with one of +# the blackhole filtering communities. +function is_blackhole_filtering_request() { + if (65535, 666) ~ bgp_community then + return true; + + if (65534, 0) ~ bgp_community then + return true; + if (65534, 0, 0) ~ bgp_large_community then + return true; + + return false; +} + +# This function must be applied to outgoing routes. +# It applies the blackhole filtering policy to the current route. +function apply_blackhole_filtering_policy() { + + # Configured policy: rewrite-next-hop + bgp_community.add((65535, 666)); + bgp_next_hop = 192.0.2.66; + # NO_EXPORT + bgp_community.add((65535, 65281)); + +} + +# This function verifies if the current route can be announced to +# the given client on the basis of the attached control BGP +# communities. +function route_can_be_announced_to(int peer_as; ip client_ip; string client_id) +int client_rtt; +{ + # do_not_announce_to_peer + if peer_as <= 65535 then { + if (0, peer_as) ~ bgp_community then + return false; + } + if (999, 0, peer_as) ~ bgp_large_community then + return false; + if (rt, 0, peer_as) ~ bgp_ext_community then + return false; + + # announce_to_peer + if peer_as <= 65535 then { + if (65501, peer_as) ~ bgp_community then + return true; + } + if (999, 65501, peer_as) ~ bgp_large_community then + return true; + if (rt, 65501, peer_as) ~ bgp_ext_community then + return true; + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # do_not_announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64531, 5) ~ bgp_community then + { if client_rtt > 5 then + return false; } + if (999, 64531, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return false; } + if (rt, 64531, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return false; } + + # 10 ms + if (64531, 10) ~ bgp_community then + { if client_rtt > 10 then + return false; } + if (999, 64531, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return false; } + if (rt, 64531, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return false; } + + # 15 ms + if (64531, 15) ~ bgp_community then + { if client_rtt > 15 then + return false; } + if (999, 64531, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return false; } + if (rt, 64531, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return false; } + + # 20 ms + if (64531, 20) ~ bgp_community then + { if client_rtt > 20 then + return false; } + if (999, 64531, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return false; } + if (rt, 64531, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return false; } + + # 30 ms + if (64531, 30) ~ bgp_community then + { if client_rtt > 30 then + return false; } + if (999, 64531, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return false; } + if (rt, 64531, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return false; } + + # 50 ms + if (64531, 50) ~ bgp_community then + { if client_rtt > 50 then + return false; } + if (999, 64531, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return false; } + if (rt, 64531, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return false; } + + # 100 ms + if (64531, 100) ~ bgp_community then + { if client_rtt > 100 then + return false; } + if (999, 64531, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return false; } + if (rt, 64531, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return false; } + + # 200 ms + if (64531, 200) ~ bgp_community then + { if client_rtt > 200 then + return false; } + if (999, 64531, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return false; } + if (rt, 64531, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return false; } + + # 500 ms + if (64531, 500) ~ bgp_community then + { if client_rtt > 500 then + return false; } + if (999, 64531, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return false; } + if (rt, 64531, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return false; } + + + # do_not_announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64530, 5) ~ bgp_community then + { if client_rtt <= 5 then + return false; } + if (999, 64530, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return false; } + if (rt, 64530, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return false; } + + # 10 ms + if (64530, 10) ~ bgp_community then + { if client_rtt <= 10 then + return false; } + if (999, 64530, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return false; } + if (rt, 64530, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return false; } + + # 15 ms + if (64530, 15) ~ bgp_community then + { if client_rtt <= 15 then + return false; } + if (999, 64530, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return false; } + if (rt, 64530, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return false; } + + # 20 ms + if (64530, 20) ~ bgp_community then + { if client_rtt <= 20 then + return false; } + if (999, 64530, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return false; } + if (rt, 64530, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return false; } + + # 30 ms + if (64530, 30) ~ bgp_community then + { if client_rtt <= 30 then + return false; } + if (999, 64530, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return false; } + if (rt, 64530, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return false; } + + # 50 ms + if (64530, 50) ~ bgp_community then + { if client_rtt <= 50 then + return false; } + if (999, 64530, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return false; } + if (rt, 64530, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return false; } + + # 100 ms + if (64530, 100) ~ bgp_community then + { if client_rtt <= 100 then + return false; } + if (999, 64530, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return false; } + if (rt, 64530, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return false; } + + # 200 ms + if (64530, 200) ~ bgp_community then + { if client_rtt <= 200 then + return false; } + if (999, 64530, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return false; } + if (rt, 64530, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return false; } + + # 500 ms + if (64530, 500) ~ bgp_community then + { if client_rtt <= 500 then + return false; } + if (999, 64530, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return false; } + if (rt, 64530, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return false; } + + + # announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64533, 5) ~ bgp_community then + { if client_rtt > 5 then + return true; } + if (999, 64533, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return true; } + if (rt, 64533, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return true; } + + # 10 ms + if (64533, 10) ~ bgp_community then + { if client_rtt > 10 then + return true; } + if (999, 64533, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return true; } + if (rt, 64533, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return true; } + + # 15 ms + if (64533, 15) ~ bgp_community then + { if client_rtt > 15 then + return true; } + if (999, 64533, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return true; } + if (rt, 64533, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return true; } + + # 20 ms + if (64533, 20) ~ bgp_community then + { if client_rtt > 20 then + return true; } + if (999, 64533, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return true; } + if (rt, 64533, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return true; } + + # 30 ms + if (64533, 30) ~ bgp_community then + { if client_rtt > 30 then + return true; } + if (999, 64533, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return true; } + if (rt, 64533, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return true; } + + # 50 ms + if (64533, 50) ~ bgp_community then + { if client_rtt > 50 then + return true; } + if (999, 64533, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return true; } + if (rt, 64533, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return true; } + + # 100 ms + if (64533, 100) ~ bgp_community then + { if client_rtt > 100 then + return true; } + if (999, 64533, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return true; } + if (rt, 64533, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return true; } + + # 200 ms + if (64533, 200) ~ bgp_community then + { if client_rtt > 200 then + return true; } + if (999, 64533, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return true; } + if (rt, 64533, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return true; } + + # 500 ms + if (64533, 500) ~ bgp_community then + { if client_rtt > 500 then + return true; } + if (999, 64533, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return true; } + if (rt, 64533, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return true; } + + + # announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64532, 5) ~ bgp_community then + { if client_rtt <= 5 then + return true; } + if (999, 64532, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return true; } + if (rt, 64532, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return true; } + + # 10 ms + if (64532, 10) ~ bgp_community then + { if client_rtt <= 10 then + return true; } + if (999, 64532, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return true; } + if (rt, 64532, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return true; } + + # 15 ms + if (64532, 15) ~ bgp_community then + { if client_rtt <= 15 then + return true; } + if (999, 64532, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return true; } + if (rt, 64532, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return true; } + + # 20 ms + if (64532, 20) ~ bgp_community then + { if client_rtt <= 20 then + return true; } + if (999, 64532, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return true; } + if (rt, 64532, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return true; } + + # 30 ms + if (64532, 30) ~ bgp_community then + { if client_rtt <= 30 then + return true; } + if (999, 64532, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return true; } + if (rt, 64532, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return true; } + + # 50 ms + if (64532, 50) ~ bgp_community then + { if client_rtt <= 50 then + return true; } + if (999, 64532, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return true; } + if (rt, 64532, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return true; } + + # 100 ms + if (64532, 100) ~ bgp_community then + { if client_rtt <= 100 then + return true; } + if (999, 64532, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return true; } + if (rt, 64532, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return true; } + + # 200 ms + if (64532, 200) ~ bgp_community then + { if client_rtt <= 200 then + return true; } + if (999, 64532, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return true; } + if (rt, 64532, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return true; } + + # 500 ms + if (64532, 500) ~ bgp_community then + { if client_rtt <= 500 then + return true; } + if (999, 64532, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return true; } + if (rt, 64532, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return true; } + + + } + + # do_not_announce_to_any + if (0, 999) ~ bgp_community then + return false; + if (999, 0, 999) ~ bgp_large_community then + return false; + if (rt, 0, 999) ~ bgp_ext_community then + return false; + + return true; +} + +# This function prepends the left-most ASN times. +function do_prepend(int times) { + case times { + 1: bgp_path.prepend(bgp_path.first); + 2: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + 3: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + } +} + +# This function verifies if the current route matches one of the +# control communities in charge of prepending client's ASN. +function apply_prepend(int peer_as; ip client_ip) +int client_rtt; +{ + # prepend_once_to_peer + if peer_as <= 65535 then { + if (65521, peer_as) ~ bgp_community then + { do_prepend(1); return true; } + } + if (999, 65521, peer_as) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, peer_as) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_peer + if peer_as <= 65535 then { + if (65522, peer_as) ~ bgp_community then + { do_prepend(2); return true; } + } + if (999, 65522, peer_as) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, peer_as) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_peer + if peer_as <= 65535 then { + if (65523, peer_as) ~ bgp_community then + { do_prepend(3); return true; } + } + if (999, 65523, peer_as) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, peer_as) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # prepend_once_to_peers_with_rtt_higher_than 500 ms + if (64537, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (999, 64537, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (rt, 64537, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 500 ms + if (64538, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (999, 64538, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (rt, 64538, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 500 ms + if (64539, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (999, 64539, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (rt, 64539, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 200 ms + if (64537, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (999, 64537, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (rt, 64537, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 200 ms + if (64538, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (999, 64538, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (rt, 64538, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 200 ms + if (64539, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (999, 64539, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (rt, 64539, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 100 ms + if (64537, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (999, 64537, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (rt, 64537, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 100 ms + if (64538, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (999, 64538, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (rt, 64538, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 100 ms + if (64539, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (999, 64539, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (rt, 64539, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 50 ms + if (64537, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (999, 64537, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (rt, 64537, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 50 ms + if (64538, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (999, 64538, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (rt, 64538, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 50 ms + if (64539, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (999, 64539, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (rt, 64539, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 30 ms + if (64537, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (999, 64537, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (rt, 64537, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 30 ms + if (64538, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (999, 64538, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (rt, 64538, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 30 ms + if (64539, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (999, 64539, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (rt, 64539, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 20 ms + if (64537, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (999, 64537, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (rt, 64537, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 20 ms + if (64538, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (999, 64538, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (rt, 64538, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 20 ms + if (64539, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (999, 64539, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (rt, 64539, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 15 ms + if (64537, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (999, 64537, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (rt, 64537, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 15 ms + if (64538, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (999, 64538, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (rt, 64538, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 15 ms + if (64539, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (999, 64539, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (rt, 64539, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 10 ms + if (64537, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (999, 64537, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (rt, 64537, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 10 ms + if (64538, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (999, 64538, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (rt, 64538, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 10 ms + if (64539, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (999, 64539, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (rt, 64539, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 5 ms + if (64537, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (999, 64537, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (rt, 64537, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 5 ms + if (64538, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (999, 64538, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (rt, 64538, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 5 ms + if (64539, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (999, 64539, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (rt, 64539, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 5 ms + if (64534, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (999, 64534, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (rt, 64534, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 5 ms + if (64535, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (999, 64535, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (rt, 64535, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 5 ms + if (64536, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (999, 64536, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (rt, 64536, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 10 ms + if (64534, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (999, 64534, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (rt, 64534, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 10 ms + if (64535, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (999, 64535, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (rt, 64535, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 10 ms + if (64536, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (999, 64536, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (rt, 64536, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 15 ms + if (64534, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (999, 64534, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (rt, 64534, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 15 ms + if (64535, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (999, 64535, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (rt, 64535, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 15 ms + if (64536, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (999, 64536, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (rt, 64536, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 20 ms + if (64534, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (999, 64534, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (rt, 64534, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 20 ms + if (64535, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (999, 64535, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (rt, 64535, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 20 ms + if (64536, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (999, 64536, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (rt, 64536, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 30 ms + if (64534, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (999, 64534, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (rt, 64534, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 30 ms + if (64535, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (999, 64535, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (rt, 64535, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 30 ms + if (64536, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (999, 64536, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (rt, 64536, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 50 ms + if (64534, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (999, 64534, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (rt, 64534, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 50 ms + if (64535, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (999, 64535, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (rt, 64535, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 50 ms + if (64536, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (999, 64536, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (rt, 64536, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 100 ms + if (64534, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (999, 64534, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (rt, 64534, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 100 ms + if (64535, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (999, 64535, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (rt, 64535, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 100 ms + if (64536, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (999, 64536, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (rt, 64536, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 200 ms + if (64534, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (999, 64534, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (rt, 64534, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 200 ms + if (64535, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (999, 64535, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (rt, 64535, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 200 ms + if (64536, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (999, 64536, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (rt, 64536, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 500 ms + if (64534, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (999, 64534, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (rt, 64534, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 500 ms + if (64535, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (999, 64535, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (rt, 64535, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 500 ms + if (64536, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (999, 64536, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (rt, 64536, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + + } + + # prepend_once_to_any + if (65521, 65521) ~ bgp_community then + { do_prepend(1); return true; } + if (999, 65521, 65521) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, 65521) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_any + if (65522, 65522) ~ bgp_community then + { do_prepend(2); return true; } + if (999, 65522, 65522) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, 65522) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_any + if (65523, 65523) ~ bgp_community then + { do_prepend(3); return true; } + if (999, 65523, 65523) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, 65523) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + return true; +} + +# This function adds the BGP communities used to +# keep track of RPKI validation state. +# RFC8097 extended communities are used here. +function add_rpki_community(string comm_name) { + if comm_name = "valid" then { + bgp_ext_community.add((unknown 0x4300, 0, 0)); + } + if comm_name = "unknown" then { + bgp_ext_community.add((unknown 0x4300, 0, 1)); + } + if comm_name = "invalid" then { + bgp_ext_community.add((unknown 0x4300, 0, 2)); + } +} + +# This functions performs RPKI validation of the current +# route and adds the informative communities. +function perform_rpki_validation () { + case roa_check(RPKI) { + ROA_VALID: add_rpki_community("valid"); + ROA_UNKNOWN: add_rpki_community("unknown"); + ROA_INVALID: add_rpki_community("invalid"); + } +} + +# This function returns True if the route is INVALID. +function route_is_rpki_invalid () { + return (unknown 0x4300, 0, 2) ~ bgp_ext_community; +} + +# This function returns True if RPKI INVALID routes +# should be announced to clients. +function announce_rpki_invalid_to_client(int client_asn; ip client_ip; string client_id) { + return false; +} + +# This function adds NO_EXPORT and/or NO_ADVERTISE +# well-known communities. +function add_noexport_noadvertise(int peer_as) { + # add_noexport_to_any + + if (65507, 999) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + if (999, 65507, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65507, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_any + + if (65508, 999) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + if (999, 65508, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65508, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + + # add_noexport_to_peer + + if peer_as <= 65535 then { + if (65509, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + } + if (999, 65509, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65509, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_peer + + if peer_as <= 65535 then { + if (65510, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + } + if (999, 65510, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65510, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + +} + +function tag_and_reject(int cause; int announcing_asn) +int dyn_val; +{ + # 0: the route must be treated as discarded + dyn_val = 0; + bgp_community.add((65520, dyn_val)); + + + # cause: the real cause + dyn_val = cause; + bgp_community.add((65520, dyn_val)); + + + # announcing_asn: the ASN of the peer that announced the route + dyn_val = announcing_asn; + bgp_ext_community.add((rt, 65520, dyn_val)); + + + bgp_local_pref = 1; +} + +function honor_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_local_pref = 5; + } +} + +function prevent_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_community.delete([(65535, 0)]); + } +} + + +# This function verifies if there is such a ROA for the +# current route's origin ASN to validate the announced prefix. +function prefix_in_rpki_roas_as_route_objects() { + case roa_check(RPKI) { + ROA_VALID: return true; + } + return false; +} + +# This function looks up the route's origin ASN in the ARIN +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_arin_whois_db() { + case bgp_path.last_nonaggregated { + 104: return net ~ ARIN_Whois_db_AS104_4; + } + return false; +} + +# This function looks up the route's origin ASN in the Registro.br +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_registrobr_whois_db() { + case bgp_path.last_nonaggregated { + 104: return net ~ RegistroBR_Whois_db_AS104_4; + } + return false; +} + + + + +# --------------------------------------------------------- +# MEMBERS + + +# AS-SET for AS1_1 +function origin_as_is_in_AS1_1_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_WHITE_LIST_AS1_1_asns then + return true; + return false; +} + +# R-SET for AS1_1 +function prefix_is_in_AS1_1_as_set() { + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_4 then + return true; + # AS-SET AS1 referenced but empty. + if net ~ AS_SET_WHITE_LIST_AS1_1_prefixes_4 then + return true; + return false; +} + +function next_hop_is_valid_for_AS1_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_1 + if bgp_next_hop = 192.0.2.11 then return true; + return false; +} + + +function verify_AS1_1_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_1_as_set(); + prefix_ok = prefix_is_in_AS1_1_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + # Client's white list + if !validated && net ~ [ 11.3.0.0/16 ] then { + if bgp_path.last_nonaggregated = 1011 then { + validated = true; + } + } + if !validated && net ~ [ 11.4.0.0/16{16,32} ] then { + validated = true; + } + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_1() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_1_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 192.0.2.11, "AS1_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 192.0.2.11, "AS1_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_1"; + + apply_prepend(1, 192.0.2.11); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 0.1 ms (normalized value: 1) +protocol bgp AS1_1 { + description "AS1_1 client"; + + local as 999; + neighbor 192.0.2.11 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS1_1; + export filter announce_to_AS1_1; + + + } + + +# AS-SET for AS1_3 +function origin_as_is_in_AS1_3_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_3 +function prefix_is_in_AS1_3_as_set() { + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_4 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_3() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_3 + if bgp_next_hop = 192.0.2.11 then return true; # AS1_1 + if bgp_next_hop = 192.0.2.12 then return true; # AS1_3 + return false; +} + + +function verify_AS1_3_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_3_as_set(); + prefix_ok = prefix_is_in_AS1_3_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_3 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_3() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_3_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_3 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_3 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + reject "client AS1_3 not enabled to receive blackhole prefixes - NOT ANNOUNCING ", net, " TO AS1_3"; + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 192.0.2.12, "AS1_3") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_3"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 192.0.2.12, "AS1_3") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_3"; + + apply_prepend(1, 192.0.2.12); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 5 ms (normalized value: 5) +protocol bgp AS1_3 { + description "AS1_2 client"; + + local as 999; + neighbor 192.0.2.12 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS1_3; + export filter announce_to_AS1_3; + + + } + + +# AS-SET for AS2_1 +function origin_as_is_in_AS2_1_as_set() { + # AS-SET AS2 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns then + return true; + return false; +} + +# R-SET for AS2_1 +function prefix_is_in_AS2_1_as_set() { + # AS-SET AS2 referenced but empty. + if net ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_4 then + return true; + return false; +} + +function next_hop_is_valid_for_AS2_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS2_1 + if bgp_next_hop = 192.0.2.21 then return true; + if bgp_next_hop = 192.0.2.22 then return true; + return false; +} + + +function verify_AS2_1_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS2_1_as_set(); + prefix_ok = prefix_is_in_AS2_1_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 2); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 2); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS2_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 2); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS2_1() then + { tag_and_reject(5, 2); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 2); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 2 then + { tag_and_reject(6, 2); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 2); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 2); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 2); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 2); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 2); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS2_1_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS2_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 2); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 2); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + prevent_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS2_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(2, 192.0.2.21, "AS2_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS2_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(2, 192.0.2.21, "AS2_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS2_1"; + + apply_prepend(2, 192.0.2.21); + + + add_noexport_noadvertise(2); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 17.3 ms (normalized value: 17) +protocol bgp AS2_1 { + description "AS2_1 client"; + + local as 999; + neighbor 192.0.2.21 as 2; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS2_1; + export filter announce_to_AS2_1; + + + } + + +# AS-SET for AS3_1 +function origin_as_is_in_AS3_1_as_set() { + return false; +} + +# R-SET for AS3_1 +function prefix_is_in_AS3_1_as_set() { + return false; +} + +function next_hop_is_valid_for_AS3_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS3_1 + if bgp_next_hop = 192.0.2.31 then return true; + return false; +} + +function prefix_is_in_AS3_1_blacklist() +prefix set AS3_1_blacklist; +{ + AS3_1_blacklist = [ + # bad network + 3.0.1.0/24{24,32} + ]; + return net ~ AS3_1_blacklist; +} + + +filter receive_from_AS3_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 3); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS3_1() then + { tag_and_reject(5, 3); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 3); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 3 then + { tag_and_reject(6, 3); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 3); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [174] then + { tag_and_reject(8, 3); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 3); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 3); reject "prefix is in global blacklist - REJECTING ", net; } + + # Prefix: client's blacklist + if prefix_is_in_AS3_1_blacklist() then + { tag_and_reject(11, 3); reject "prefix is in client's blacklist - REJECTING ", net; } + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 3); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS3_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 3); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 3); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS3_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(3, 192.0.2.31, "AS3_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS3_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(3, 192.0.2.31, "AS3_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS3_1"; + + apply_prepend(3, 192.0.2.31); + + # AS3_1 has been configured with 'prepend_rs_as' + bgp_path.prepend(999); + + add_noexport_noadvertise(3); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 123.8 ms (normalized value: 124) +protocol bgp AS3_1 { + description "AS3_1 client"; + + local as 999; + neighbor 192.0.2.31 as 3; + rs client; + + passive off; + ttl security off; + interpret communities off; + + + add paths tx; + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS3_1; + export filter announce_to_AS3_1; + + + } + + +# AS-SET for AS4_1 +function origin_as_is_in_AS4_1_as_set() { + return false; +} + +# R-SET for AS4_1 +function prefix_is_in_AS4_1_as_set() { + return false; +} + +function next_hop_is_valid_for_AS4_1() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS4_1 + if bgp_next_hop = 192.0.2.41 then return true; + return false; +} + + + +filter receive_from_AS4_1 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 4); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS4_1() then + { tag_and_reject(5, 4); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 4); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 4 then + { tag_and_reject(6, 4); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 4); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 4); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 4); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 4); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 4); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS4_1 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 4); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(8, 24) then + { tag_and_reject(13, 4); reject "prefix len [", net.len, "] not in 8-24 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS4_1 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(4, 192.0.2.41, "AS4_1") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS4_1"; + } + } + + # BGP control communities + if !route_can_be_announced_to(4, 192.0.2.41, "AS4_1") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS4_1"; + + apply_prepend(4, 192.0.2.41); + + + add_noexport_noadvertise(4); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 600 ms (normalized value: 600) +protocol bgp AS4_1 { + description "AS4_1 client"; + + local as 999; + neighbor 192.0.2.41 as 4; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS4_1; + export filter announce_to_AS4_1; + + + } + + + +include "/etc/bird/footer4.local"; + diff --git a/tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv6_TagAndReject/bird16.conf b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv6_TagAndReject/bird16.conf new file mode 100644 index 00000000..a4a5492c --- /dev/null +++ b/tests/live_tests/scenarios/global/configs/BasicScenario_BIRDIPv6_TagAndReject/bird16.conf @@ -0,0 +1,2625 @@ + +router id 192.0.2.2; +define rs_as = 999; + +log "/var/log/bird.log" all; +log syslog all; +debug protocols { states, routes, filters, interfaces, events }; + +timeformat base iso long; +timeformat log iso long; +timeformat protocol iso long; +timeformat route iso long; + +protocol device {}; + +table master sorted; + + + + +# --------------------------------------------------------- +# RPKI + +roa table RPKI { + roa 3101:3::/32 max 48 as 105; + roa 3101:0:8000::/33 max 34 as 101; + roa 3101:2:8000::/33 max 48 as 101; + roa 3101:2::/33 max 33 as 101; + roa 3101:0:8::/48 max 48 as 101; + roa 3101:0:9::/48 max 48 as 102; +}; + + + +# --------------------------------------------------------- +# IRRDB + +# AS2, used_by client AS2_2 +# no origin ASNs found for AS2 + +# no IPv6 prefixes found for AS2 + +# AS-AS1, AS-AS1_CUSTOMERS, used_by client AS1_2, client AS1_4 +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns = [ + 1, 101, 103, 104 +]; + +define AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_6 = [ + 2a01::/32{32,128}, 2a99::/16{16,128}, 3101::/32{32,128}, 3103::/32{32,128} +]; + +# AS-AS2, AS-AS2_CUSTOMERS, used_by client AS2_2 +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns = [ + 2, 101, 103 +]; + +define AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_6 = [ + 2a02::/32{32,128}, 3101::/32{32,128}, 3103::/32{32,128} +]; + +# WHITE_LIST_AS1_2, used_by client AS1_2 white list +define AS_SET_WHITE_LIST_AS1_2_asns = [ + 1011 +]; + +define AS_SET_WHITE_LIST_AS1_2_prefixes_6 = [ + 2a11:1::/32{32,128} +]; + +# AS1, used_by client AS1_2, client AS1_4 +# no origin ASNs found for AS1 + +# no IPv6 prefixes found for AS1 + + +# ARIN Whois database records +define ARIN_Whois_db_AS104_6 = [ + 3104::/32{32,128} +]; + +# Registro.br Whois database records +define RegistroBR_Whois_db_AS104_6 = [ + 3104:1:1::/48{48,128} +]; + + +# --------------------------------------------------------- +# COMMON + +# This function returns True if 'net' is a bogon prefix +# or falls within a bogon prefix. +function prefix_is_bogon() +prefix set bogons_6; +{ + bogons_6 = [ + # Default route + ::/0, + + # loopback, unspecified, v4-mapped + ::/8{8,128}, + + # RFC 6052 - IPv4-IPv6 Translation + 64:ff9b::/96{96,128}, + + # RFC 6666 - reserved for Discard-Only Address Block + 100::/8{8,128}, + + # RFC 4048 - Reserved by IETF + 200::/7{7,128}, + + # RFC 4291 - Reserved by IETF + 400::/6{6,128}, + + # RFC 4291 - Reserved by IETF + 800::/5{5,128}, + + # RFC 4291 - Reserved by IETF + 1000::/4{4,128}, + + # RFC 4380 - Teredo prefix + 2001::/33{33,128}, + + # RFC 4380 - Teredo prefix + 2001:0:8000::/33{33,128}, + + # RFC 5180 - Benchmarking + 2001:2::/48{48,128}, + + # RFC 7450 - Automatic Multicast Tunneling + 2001:3::/32{32,128}, + + # RFC 4843 - Deprecated ORCHID + 2001:10::/28{28,128}, + + # RFC 7343 - ORCHIDv2 + 2001:20::/28{28,128}, + + # RFC 3849 - NON-ROUTABLE range to be used for documentation purpose + 2001:db8::/32{32,128}, + + # RFC 3068 - 6to4 prefix + 2002::/16{16,128}, + + # RFC 5156 - used for the 6bone but was returned + 3ffe::/16{16,128}, + + # RFC 4291 - Reserved by IETF + 4000::/3{3,128}, + + # RFC 5156 - used for the 6bone but was returned + 5f00::/8{8,128}, + + # RFC 4291 - Reserved by IETF + 6000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + 8000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + a000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + c000::/3{3,128}, + + # RFC 4291 - Reserved by IETF + e000::/4{4,128}, + + # RFC 4291 - Reserved by IETF + f000::/5{5,128}, + + # RFC 4291 - Reserved by IETF + f800::/6{6,128}, + + # RFC 4193 - Unique Local Unicast + fc00::/7{7,128}, + + # RFC 4291 - Link Local Unicast + fe80::/10{10,128}, + + # RFC 4291 - Reserved by IETF + fec0::/10{10,128}, + + # RFC 4291 - Multicast + ff00::/8{8,128} + ]; + + if net ~ bogons_6 then return true; + return false; +} + +# This function returns True if 'net' falls within a +# prefix contained in the global blacklist (for example, +# local networks) +function prefix_is_in_global_blacklist() +prefix set global_blacklist_6; +{ + global_blacklist_6 = [ + # Local network + 2001:db8::/32{32,128} + ]; + + if net ~ global_blacklist_6 then return true; + + return false; +} + +# This function returns True if the length of 'net' prefix +# falls within the range 'min'-'max' (included). +function prefix_len_is_valid (int pref_len_min; int pref_len_max) { + if net.len < pref_len_min then return false; + if net.len > pref_len_max then return false; + return true; +} + +# This function returns True if the AS_PATH contains one or +# more private/reserved ASN. +function as_path_contains_invalid_asn() +int set invalid_asns; +{ + # http://www.iana.org/assignments/as-numbers/as-numbers.xhtml + invalid_asns = [ + # 16-bit + 0, # Reserved. RFC7607 + 23456, # AS_TRANS. RFC6793 + 64496..64511, # Reserved for use in documentation and sample code. RFC5398 + 64512..65534, # Reserved for Private Use. RFC6996 + 65535, # Reserved. RFC7300 + + # 32-bit + 65536..65551, # Reserved for use in documentation and sample code. RFC5398 + 65552..131071, # Reserved. + 4200000000..4294967294, # Reserved for Private Use. [RFC6996] + 4294967295 # Reserved. RFC7300 + ]; + return bgp_path ~ invalid_asns; +} + +# This function returns the RTT measured for the peer given in client_ip. +# If the RTT is not available it returns 0. +function get_peer_rtt(ip client_ip) { + case client_ip { + 2001:db8:1:1::11 : return 1; # 0.1 + 2001:db8:1:1::12 : return 5; # 5 + 2001:db8:1:1::21 : return 17; # 17.3 + 2001:db8:1:1::31 : return 124; # 123.8 + 2001:db8:1:1::41 : return 600; # 600 + } + + return 0; +} + +# This function scrubs BGP communities used by the route server +# for signaling purpose toward its clients. (RFC7454, Section 11) +# It must be applied on routes entering the route server. +function scrub_communities_in() { + # origin_not_present_in_as_set + bgp_community.delete([(65530, 0)]); + bgp_large_community.delete([(999, 65530, 0)]); + + # origin_present_in_as_set + bgp_community.delete([(65530, 1)]); + bgp_large_community.delete([(999, 65530, 1)]); + + # prefix_validated_via_arin_whois_db_dump + bgp_community.delete([(65530, 3)]); + bgp_large_community.delete([(999, 65530, 3)]); + + # prefix_validated_via_rpki_roas + bgp_community.delete([(65530, 2)]); + bgp_large_community.delete([(999, 65530, 2)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function scrubs BGP communities used by clients to instruct +# the route server to perform some actions. +# It must be applied on routes leaving the route server. +function scrub_communities_out() { + # add_noadvertise_to_any + bgp_community.delete([(65508, 999)]); + bgp_large_community.delete([(999, 65508, 999)]); + bgp_ext_community.delete([(rt, 65508, 999)]); + + # add_noadvertise_to_peer + bgp_community.delete([(65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 1..64511)]); + bgp_large_community.delete([(999, 65510, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65510, 1..64511)]); + bgp_ext_community.delete([(rt, 65510, 131072..4199999999)]); + + # add_noexport_to_any + bgp_community.delete([(65507, 999)]); + bgp_large_community.delete([(999, 65507, 999)]); + bgp_ext_community.delete([(rt, 65507, 999)]); + + # add_noexport_to_peer + bgp_community.delete([(65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 1..64511)]); + bgp_large_community.delete([(999, 65509, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65509, 1..64511)]); + bgp_ext_community.delete([(rt, 65509, 131072..4199999999)]); + + # announce_to_peer + bgp_community.delete([(65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 1..64511)]); + bgp_large_community.delete([(999, 65501, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65501, 1..64511)]); + bgp_ext_community.delete([(rt, 65501, 131072..4199999999)]); + + # announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64533, *)]); + bgp_large_community.delete([(999, 64533, *)]); + bgp_ext_community.delete([(rt, 64533, *)]); + + # announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64532, *)]); + bgp_large_community.delete([(999, 64532, *)]); + bgp_ext_community.delete([(rt, 64532, *)]); + + # blackholing + bgp_community.delete([(65534, 0)]); + bgp_large_community.delete([(65534, 0, 0)]); + + # do_not_announce_to_any + bgp_community.delete([(0, 999)]); + bgp_large_community.delete([(999, 0, 999)]); + bgp_ext_community.delete([(rt, 0, 999)]); + + # do_not_announce_to_peer + bgp_community.delete([(0, 1..64511)]); + bgp_large_community.delete([(999, 0, 1..64511)]); + bgp_large_community.delete([(999, 0, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 0, 1..64511)]); + bgp_ext_community.delete([(rt, 0, 131072..4199999999)]); + + # do_not_announce_to_peers_with_rtt_higher_than + bgp_community.delete([(64531, *)]); + bgp_large_community.delete([(999, 64531, *)]); + bgp_ext_community.delete([(rt, 64531, *)]); + + # do_not_announce_to_peers_with_rtt_lower_than + bgp_community.delete([(64530, *)]); + bgp_large_community.delete([(999, 64530, *)]); + bgp_ext_community.delete([(rt, 64530, *)]); + + # prepend_once_to_any + bgp_community.delete([(65521, 65521)]); + bgp_large_community.delete([(999, 65521, 65521)]); + bgp_ext_community.delete([(rt, 65521, 65521)]); + + # prepend_once_to_peer + bgp_community.delete([(65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 1..64511)]); + bgp_large_community.delete([(999, 65521, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65521, 1..64511)]); + bgp_ext_community.delete([(rt, 65521, 131072..4199999999)]); + + # prepend_once_to_peers_with_rtt_higher_than + bgp_community.delete([(64537, *)]); + bgp_large_community.delete([(999, 64537, *)]); + bgp_ext_community.delete([(rt, 64537, *)]); + + # prepend_once_to_peers_with_rtt_lower_than + bgp_community.delete([(64534, *)]); + bgp_large_community.delete([(999, 64534, *)]); + bgp_ext_community.delete([(rt, 64534, *)]); + + # prepend_thrice_to_any + bgp_community.delete([(65523, 65523)]); + bgp_large_community.delete([(999, 65523, 65523)]); + bgp_ext_community.delete([(rt, 65523, 65523)]); + + # prepend_thrice_to_peer + bgp_community.delete([(65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 1..64511)]); + bgp_large_community.delete([(999, 65523, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65523, 1..64511)]); + bgp_ext_community.delete([(rt, 65523, 131072..4199999999)]); + + # prepend_thrice_to_peers_with_rtt_higher_than + bgp_community.delete([(64539, *)]); + bgp_large_community.delete([(999, 64539, *)]); + bgp_ext_community.delete([(rt, 64539, *)]); + + # prepend_thrice_to_peers_with_rtt_lower_than + bgp_community.delete([(64536, *)]); + bgp_large_community.delete([(999, 64536, *)]); + bgp_ext_community.delete([(rt, 64536, *)]); + + # prepend_twice_to_any + bgp_community.delete([(65522, 65522)]); + bgp_large_community.delete([(999, 65522, 65522)]); + bgp_ext_community.delete([(rt, 65522, 65522)]); + + # prepend_twice_to_peer + bgp_community.delete([(65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 1..64511)]); + bgp_large_community.delete([(999, 65522, 131072..4199999999)]); + bgp_ext_community.delete([(rt, 65522, 1..64511)]); + bgp_ext_community.delete([(rt, 65522, 131072..4199999999)]); + + # prepend_twice_to_peers_with_rtt_higher_than + bgp_community.delete([(64538, *)]); + bgp_large_community.delete([(999, 64538, *)]); + bgp_ext_community.delete([(rt, 64538, *)]); + + # prepend_twice_to_peers_with_rtt_lower_than + bgp_community.delete([(64535, *)]); + bgp_large_community.delete([(999, 64535, *)]); + bgp_ext_community.delete([(rt, 64535, *)]); + + # reject_cause + bgp_community.delete([(65520, *)]); + + # rejected_route_announced_by + bgp_ext_community.delete([(rt, 65520, *)]); + +} + +# This function verifies if the route is tagged with one of +# the blackhole filtering communities. +function is_blackhole_filtering_request() { + if (65535, 666) ~ bgp_community then + return true; + + if (65534, 0) ~ bgp_community then + return true; + if (65534, 0, 0) ~ bgp_large_community then + return true; + + return false; +} + +# This function must be applied to outgoing routes. +# It applies the blackhole filtering policy to the current route. +function apply_blackhole_filtering_policy() { + + # Configured policy: rewrite-next-hop + bgp_community.add((65535, 666)); + bgp_next_hop = 2001:db8:1:1::66; + # NO_EXPORT + bgp_community.add((65535, 65281)); + +} + +# This function verifies if the current route can be announced to +# the given client on the basis of the attached control BGP +# communities. +function route_can_be_announced_to(int peer_as; ip client_ip; string client_id) +int client_rtt; +{ + # do_not_announce_to_peer + if peer_as <= 65535 then { + if (0, peer_as) ~ bgp_community then + return false; + } + if (999, 0, peer_as) ~ bgp_large_community then + return false; + if (rt, 0, peer_as) ~ bgp_ext_community then + return false; + + # announce_to_peer + if peer_as <= 65535 then { + if (65501, peer_as) ~ bgp_community then + return true; + } + if (999, 65501, peer_as) ~ bgp_large_community then + return true; + if (rt, 65501, peer_as) ~ bgp_ext_community then + return true; + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # do_not_announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64531, 5) ~ bgp_community then + { if client_rtt > 5 then + return false; } + if (999, 64531, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return false; } + if (rt, 64531, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return false; } + + # 10 ms + if (64531, 10) ~ bgp_community then + { if client_rtt > 10 then + return false; } + if (999, 64531, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return false; } + if (rt, 64531, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return false; } + + # 15 ms + if (64531, 15) ~ bgp_community then + { if client_rtt > 15 then + return false; } + if (999, 64531, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return false; } + if (rt, 64531, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return false; } + + # 20 ms + if (64531, 20) ~ bgp_community then + { if client_rtt > 20 then + return false; } + if (999, 64531, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return false; } + if (rt, 64531, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return false; } + + # 30 ms + if (64531, 30) ~ bgp_community then + { if client_rtt > 30 then + return false; } + if (999, 64531, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return false; } + if (rt, 64531, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return false; } + + # 50 ms + if (64531, 50) ~ bgp_community then + { if client_rtt > 50 then + return false; } + if (999, 64531, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return false; } + if (rt, 64531, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return false; } + + # 100 ms + if (64531, 100) ~ bgp_community then + { if client_rtt > 100 then + return false; } + if (999, 64531, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return false; } + if (rt, 64531, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return false; } + + # 200 ms + if (64531, 200) ~ bgp_community then + { if client_rtt > 200 then + return false; } + if (999, 64531, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return false; } + if (rt, 64531, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return false; } + + # 500 ms + if (64531, 500) ~ bgp_community then + { if client_rtt > 500 then + return false; } + if (999, 64531, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return false; } + if (rt, 64531, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return false; } + + + # do_not_announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64530, 5) ~ bgp_community then + { if client_rtt <= 5 then + return false; } + if (999, 64530, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return false; } + if (rt, 64530, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return false; } + + # 10 ms + if (64530, 10) ~ bgp_community then + { if client_rtt <= 10 then + return false; } + if (999, 64530, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return false; } + if (rt, 64530, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return false; } + + # 15 ms + if (64530, 15) ~ bgp_community then + { if client_rtt <= 15 then + return false; } + if (999, 64530, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return false; } + if (rt, 64530, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return false; } + + # 20 ms + if (64530, 20) ~ bgp_community then + { if client_rtt <= 20 then + return false; } + if (999, 64530, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return false; } + if (rt, 64530, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return false; } + + # 30 ms + if (64530, 30) ~ bgp_community then + { if client_rtt <= 30 then + return false; } + if (999, 64530, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return false; } + if (rt, 64530, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return false; } + + # 50 ms + if (64530, 50) ~ bgp_community then + { if client_rtt <= 50 then + return false; } + if (999, 64530, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return false; } + if (rt, 64530, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return false; } + + # 100 ms + if (64530, 100) ~ bgp_community then + { if client_rtt <= 100 then + return false; } + if (999, 64530, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return false; } + if (rt, 64530, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return false; } + + # 200 ms + if (64530, 200) ~ bgp_community then + { if client_rtt <= 200 then + return false; } + if (999, 64530, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return false; } + if (rt, 64530, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return false; } + + # 500 ms + if (64530, 500) ~ bgp_community then + { if client_rtt <= 500 then + return false; } + if (999, 64530, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return false; } + if (rt, 64530, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return false; } + + + # announce_to_peers_with_rtt_higher_than + + # 5 ms + if (64533, 5) ~ bgp_community then + { if client_rtt > 5 then + return true; } + if (999, 64533, 5) ~ bgp_large_community then + { if client_rtt > 5 then + return true; } + if (rt, 64533, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + return true; } + + # 10 ms + if (64533, 10) ~ bgp_community then + { if client_rtt > 10 then + return true; } + if (999, 64533, 10) ~ bgp_large_community then + { if client_rtt > 10 then + return true; } + if (rt, 64533, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + return true; } + + # 15 ms + if (64533, 15) ~ bgp_community then + { if client_rtt > 15 then + return true; } + if (999, 64533, 15) ~ bgp_large_community then + { if client_rtt > 15 then + return true; } + if (rt, 64533, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + return true; } + + # 20 ms + if (64533, 20) ~ bgp_community then + { if client_rtt > 20 then + return true; } + if (999, 64533, 20) ~ bgp_large_community then + { if client_rtt > 20 then + return true; } + if (rt, 64533, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + return true; } + + # 30 ms + if (64533, 30) ~ bgp_community then + { if client_rtt > 30 then + return true; } + if (999, 64533, 30) ~ bgp_large_community then + { if client_rtt > 30 then + return true; } + if (rt, 64533, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + return true; } + + # 50 ms + if (64533, 50) ~ bgp_community then + { if client_rtt > 50 then + return true; } + if (999, 64533, 50) ~ bgp_large_community then + { if client_rtt > 50 then + return true; } + if (rt, 64533, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + return true; } + + # 100 ms + if (64533, 100) ~ bgp_community then + { if client_rtt > 100 then + return true; } + if (999, 64533, 100) ~ bgp_large_community then + { if client_rtt > 100 then + return true; } + if (rt, 64533, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + return true; } + + # 200 ms + if (64533, 200) ~ bgp_community then + { if client_rtt > 200 then + return true; } + if (999, 64533, 200) ~ bgp_large_community then + { if client_rtt > 200 then + return true; } + if (rt, 64533, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + return true; } + + # 500 ms + if (64533, 500) ~ bgp_community then + { if client_rtt > 500 then + return true; } + if (999, 64533, 500) ~ bgp_large_community then + { if client_rtt > 500 then + return true; } + if (rt, 64533, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + return true; } + + + # announce_to_peers_with_rtt_lower_than + + # 5 ms + if (64532, 5) ~ bgp_community then + { if client_rtt <= 5 then + return true; } + if (999, 64532, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + return true; } + if (rt, 64532, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + return true; } + + # 10 ms + if (64532, 10) ~ bgp_community then + { if client_rtt <= 10 then + return true; } + if (999, 64532, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + return true; } + if (rt, 64532, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + return true; } + + # 15 ms + if (64532, 15) ~ bgp_community then + { if client_rtt <= 15 then + return true; } + if (999, 64532, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + return true; } + if (rt, 64532, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + return true; } + + # 20 ms + if (64532, 20) ~ bgp_community then + { if client_rtt <= 20 then + return true; } + if (999, 64532, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + return true; } + if (rt, 64532, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + return true; } + + # 30 ms + if (64532, 30) ~ bgp_community then + { if client_rtt <= 30 then + return true; } + if (999, 64532, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + return true; } + if (rt, 64532, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + return true; } + + # 50 ms + if (64532, 50) ~ bgp_community then + { if client_rtt <= 50 then + return true; } + if (999, 64532, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + return true; } + if (rt, 64532, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + return true; } + + # 100 ms + if (64532, 100) ~ bgp_community then + { if client_rtt <= 100 then + return true; } + if (999, 64532, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + return true; } + if (rt, 64532, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + return true; } + + # 200 ms + if (64532, 200) ~ bgp_community then + { if client_rtt <= 200 then + return true; } + if (999, 64532, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + return true; } + if (rt, 64532, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + return true; } + + # 500 ms + if (64532, 500) ~ bgp_community then + { if client_rtt <= 500 then + return true; } + if (999, 64532, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + return true; } + if (rt, 64532, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + return true; } + + + } + + # do_not_announce_to_any + if (0, 999) ~ bgp_community then + return false; + if (999, 0, 999) ~ bgp_large_community then + return false; + if (rt, 0, 999) ~ bgp_ext_community then + return false; + + return true; +} + +# This function prepends the left-most ASN times. +function do_prepend(int times) { + case times { + 1: bgp_path.prepend(bgp_path.first); + 2: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + 3: bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); bgp_path.prepend(bgp_path.first); + } +} + +# This function verifies if the current route matches one of the +# control communities in charge of prepending client's ASN. +function apply_prepend(int peer_as; ip client_ip) +int client_rtt; +{ + # prepend_once_to_peer + if peer_as <= 65535 then { + if (65521, peer_as) ~ bgp_community then + { do_prepend(1); return true; } + } + if (999, 65521, peer_as) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, peer_as) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_peer + if peer_as <= 65535 then { + if (65522, peer_as) ~ bgp_community then + { do_prepend(2); return true; } + } + if (999, 65522, peer_as) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, peer_as) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_peer + if peer_as <= 65535 then { + if (65523, peer_as) ~ bgp_community then + { do_prepend(3); return true; } + } + if (999, 65523, peer_as) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, peer_as) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + client_rtt = get_peer_rtt(client_ip); + + if client_rtt > 0 then { + # prepend_once_to_peers_with_rtt_higher_than 500 ms + if (64537, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (999, 64537, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + if (rt, 64537, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 500 ms + if (64538, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (999, 64538, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + if (rt, 64538, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 500 ms + if (64539, 500) ~ bgp_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (999, 64539, 500) ~ bgp_large_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + if (rt, 64539, 500) ~ bgp_ext_community then + { if client_rtt > 500 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 200 ms + if (64537, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (999, 64537, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + if (rt, 64537, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 200 ms + if (64538, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (999, 64538, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + if (rt, 64538, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 200 ms + if (64539, 200) ~ bgp_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (999, 64539, 200) ~ bgp_large_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + if (rt, 64539, 200) ~ bgp_ext_community then + { if client_rtt > 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 100 ms + if (64537, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (999, 64537, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + if (rt, 64537, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 100 ms + if (64538, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (999, 64538, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + if (rt, 64538, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 100 ms + if (64539, 100) ~ bgp_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (999, 64539, 100) ~ bgp_large_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + if (rt, 64539, 100) ~ bgp_ext_community then + { if client_rtt > 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 50 ms + if (64537, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (999, 64537, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + if (rt, 64537, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 50 ms + if (64538, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (999, 64538, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + if (rt, 64538, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 50 ms + if (64539, 50) ~ bgp_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (999, 64539, 50) ~ bgp_large_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + if (rt, 64539, 50) ~ bgp_ext_community then + { if client_rtt > 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 30 ms + if (64537, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (999, 64537, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + if (rt, 64537, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 30 ms + if (64538, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (999, 64538, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + if (rt, 64538, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 30 ms + if (64539, 30) ~ bgp_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (999, 64539, 30) ~ bgp_large_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + if (rt, 64539, 30) ~ bgp_ext_community then + { if client_rtt > 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 20 ms + if (64537, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (999, 64537, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + if (rt, 64537, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 20 ms + if (64538, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (999, 64538, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + if (rt, 64538, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 20 ms + if (64539, 20) ~ bgp_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (999, 64539, 20) ~ bgp_large_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + if (rt, 64539, 20) ~ bgp_ext_community then + { if client_rtt > 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 15 ms + if (64537, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (999, 64537, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + if (rt, 64537, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 15 ms + if (64538, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (999, 64538, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + if (rt, 64538, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 15 ms + if (64539, 15) ~ bgp_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (999, 64539, 15) ~ bgp_large_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + if (rt, 64539, 15) ~ bgp_ext_community then + { if client_rtt > 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 10 ms + if (64537, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (999, 64537, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + if (rt, 64537, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 10 ms + if (64538, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (999, 64538, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + if (rt, 64538, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 10 ms + if (64539, 10) ~ bgp_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (999, 64539, 10) ~ bgp_large_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + if (rt, 64539, 10) ~ bgp_ext_community then + { if client_rtt > 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_higher_than 5 ms + if (64537, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (999, 64537, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + if (rt, 64537, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_higher_than 5 ms + if (64538, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (999, 64538, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + if (rt, 64538, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_higher_than 5 ms + if (64539, 5) ~ bgp_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (999, 64539, 5) ~ bgp_large_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + if (rt, 64539, 5) ~ bgp_ext_community then + { if client_rtt > 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 5 ms + if (64534, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (999, 64534, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + if (rt, 64534, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 5 ms + if (64535, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (999, 64535, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + if (rt, 64535, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 5 ms + if (64536, 5) ~ bgp_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (999, 64536, 5) ~ bgp_large_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + if (rt, 64536, 5) ~ bgp_ext_community then + { if client_rtt <= 5 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 10 ms + if (64534, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (999, 64534, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + if (rt, 64534, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 10 ms + if (64535, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (999, 64535, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + if (rt, 64535, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 10 ms + if (64536, 10) ~ bgp_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (999, 64536, 10) ~ bgp_large_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + if (rt, 64536, 10) ~ bgp_ext_community then + { if client_rtt <= 10 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 15 ms + if (64534, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (999, 64534, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + if (rt, 64534, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 15 ms + if (64535, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (999, 64535, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + if (rt, 64535, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 15 ms + if (64536, 15) ~ bgp_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (999, 64536, 15) ~ bgp_large_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + if (rt, 64536, 15) ~ bgp_ext_community then + { if client_rtt <= 15 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 20 ms + if (64534, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (999, 64534, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + if (rt, 64534, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 20 ms + if (64535, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (999, 64535, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + if (rt, 64535, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 20 ms + if (64536, 20) ~ bgp_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (999, 64536, 20) ~ bgp_large_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + if (rt, 64536, 20) ~ bgp_ext_community then + { if client_rtt <= 20 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 30 ms + if (64534, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (999, 64534, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + if (rt, 64534, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 30 ms + if (64535, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (999, 64535, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + if (rt, 64535, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 30 ms + if (64536, 30) ~ bgp_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (999, 64536, 30) ~ bgp_large_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + if (rt, 64536, 30) ~ bgp_ext_community then + { if client_rtt <= 30 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 50 ms + if (64534, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (999, 64534, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + if (rt, 64534, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 50 ms + if (64535, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (999, 64535, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + if (rt, 64535, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 50 ms + if (64536, 50) ~ bgp_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (999, 64536, 50) ~ bgp_large_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + if (rt, 64536, 50) ~ bgp_ext_community then + { if client_rtt <= 50 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 100 ms + if (64534, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (999, 64534, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + if (rt, 64534, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 100 ms + if (64535, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (999, 64535, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + if (rt, 64535, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 100 ms + if (64536, 100) ~ bgp_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (999, 64536, 100) ~ bgp_large_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + if (rt, 64536, 100) ~ bgp_ext_community then + { if client_rtt <= 100 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 200 ms + if (64534, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (999, 64534, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + if (rt, 64534, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 200 ms + if (64535, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (999, 64535, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + if (rt, 64535, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 200 ms + if (64536, 200) ~ bgp_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (999, 64536, 200) ~ bgp_large_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + if (rt, 64536, 200) ~ bgp_ext_community then + { if client_rtt <= 200 then + { do_prepend(3); return true; } } + + # prepend_once_to_peers_with_rtt_lower_than 500 ms + if (64534, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (999, 64534, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + if (rt, 64534, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(1); return true; } } + + # prepend_twice_to_peers_with_rtt_lower_than 500 ms + if (64535, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (999, 64535, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + if (rt, 64535, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(2); return true; } } + + # prepend_thrice_to_peers_with_rtt_lower_than 500 ms + if (64536, 500) ~ bgp_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (999, 64536, 500) ~ bgp_large_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + if (rt, 64536, 500) ~ bgp_ext_community then + { if client_rtt <= 500 then + { do_prepend(3); return true; } } + + } + + # prepend_once_to_any + if (65521, 65521) ~ bgp_community then + { do_prepend(1); return true; } + if (999, 65521, 65521) ~ bgp_large_community then + { do_prepend(1); return true; } + if (rt, 65521, 65521) ~ bgp_ext_community then + { do_prepend(1); return true; } + + # prepend_twice_to_any + if (65522, 65522) ~ bgp_community then + { do_prepend(2); return true; } + if (999, 65522, 65522) ~ bgp_large_community then + { do_prepend(2); return true; } + if (rt, 65522, 65522) ~ bgp_ext_community then + { do_prepend(2); return true; } + + # prepend_thrice_to_any + if (65523, 65523) ~ bgp_community then + { do_prepend(3); return true; } + if (999, 65523, 65523) ~ bgp_large_community then + { do_prepend(3); return true; } + if (rt, 65523, 65523) ~ bgp_ext_community then + { do_prepend(3); return true; } + + + return true; +} + +# This function adds the BGP communities used to +# keep track of RPKI validation state. +# RFC8097 extended communities are used here. +function add_rpki_community(string comm_name) { + if comm_name = "valid" then { + bgp_ext_community.add((unknown 0x4300, 0, 0)); + } + if comm_name = "unknown" then { + bgp_ext_community.add((unknown 0x4300, 0, 1)); + } + if comm_name = "invalid" then { + bgp_ext_community.add((unknown 0x4300, 0, 2)); + } +} + +# This functions performs RPKI validation of the current +# route and adds the informative communities. +function perform_rpki_validation () { + case roa_check(RPKI) { + ROA_VALID: add_rpki_community("valid"); + ROA_UNKNOWN: add_rpki_community("unknown"); + ROA_INVALID: add_rpki_community("invalid"); + } +} + +# This function returns True if the route is INVALID. +function route_is_rpki_invalid () { + return (unknown 0x4300, 0, 2) ~ bgp_ext_community; +} + +# This function returns True if RPKI INVALID routes +# should be announced to clients. +function announce_rpki_invalid_to_client(int client_asn; ip client_ip; string client_id) { + return false; +} + +# This function adds NO_EXPORT and/or NO_ADVERTISE +# well-known communities. +function add_noexport_noadvertise(int peer_as) { + # add_noexport_to_any + + if (65507, 999) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + if (999, 65507, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65507, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_any + + if (65508, 999) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + if (999, 65508, 999) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65508, 999) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + + # add_noexport_to_peer + + if peer_as <= 65535 then { + if (65509, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65281)); } + } + if (999, 65509, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65281)); } + if (rt, 65509, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65281)); } + + # add_noadvertise_to_peer + + if peer_as <= 65535 then { + if (65510, peer_as) ~ bgp_community then + { bgp_community.add((65535, 65282)); } + } + if (999, 65510, peer_as) ~ bgp_large_community then + { bgp_community.add((65535, 65282)); } + if (rt, 65510, peer_as) ~ bgp_ext_community then + { bgp_community.add((65535, 65282)); } + +} + +function tag_and_reject(int cause; int announcing_asn) +int dyn_val; +{ + # 0: the route must be treated as discarded + dyn_val = 0; + bgp_community.add((65520, dyn_val)); + + + # cause: the real cause + dyn_val = cause; + bgp_community.add((65520, dyn_val)); + + + # announcing_asn: the ASN of the peer that announced the route + dyn_val = announcing_asn; + bgp_ext_community.add((rt, 65520, dyn_val)); + + + bgp_local_pref = 1; +} + +function honor_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_local_pref = 5; + } +} + +function prevent_graceful_shutdown() { + if (65535, 0) ~ bgp_community then { + bgp_community.delete([(65535, 0)]); + } +} + + +# This function verifies if there is such a ROA for the +# current route's origin ASN to validate the announced prefix. +function prefix_in_rpki_roas_as_route_objects() { + case roa_check(RPKI) { + ROA_VALID: return true; + } + return false; +} + +# This function looks up the route's origin ASN in the ARIN +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_arin_whois_db() { + case bgp_path.last_nonaggregated { + 104: return net ~ ARIN_Whois_db_AS104_6; + } + return false; +} + +# This function looks up the route's origin ASN in the Registro.br +# Whois DB: if there is such an entry for the current route's +# origin ASN to validate the announced prefix the function +# returns True, otherwise False. +function prefix_in_registrobr_whois_db() { + case bgp_path.last_nonaggregated { + 104: return net ~ RegistroBR_Whois_db_AS104_6; + } + return false; +} + + + + +# --------------------------------------------------------- +# MEMBERS + + +# AS-SET for AS1_2 +function origin_as_is_in_AS1_2_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + if bgp_path.last_nonaggregated ~ AS_SET_WHITE_LIST_AS1_2_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_2 +function prefix_is_in_AS1_2_as_set() { + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_6 then + return true; + if net ~ AS_SET_WHITE_LIST_AS1_2_prefixes_6 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_2 + if bgp_next_hop = 2001:db8:1:1::11 then return true; + return false; +} + + +function verify_AS1_2_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_2_as_set(); + prefix_ok = prefix_is_in_AS1_2_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + # Client's white list + if !validated && net ~ [ 2a11:3::/32 ] then { + if bgp_path.last_nonaggregated = 1011 then { + validated = true; + } + } + if !validated && net ~ [ 2a11:4::/32{32,128} ] then { + validated = true; + } + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_2() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 1); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_2_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 2001:db8:1:1::11, "AS1_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 2001:db8:1:1::11, "AS1_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_2"; + + apply_prepend(1, 2001:db8:1:1::11); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 0.1 ms (normalized value: 1) +protocol bgp AS1_2 { + description "AS1_1 client"; + + local as 999; + neighbor 2001:db8:1:1::11 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS1_2; + export filter announce_to_AS1_2; + + + } + + +# AS-SET for AS1_4 +function origin_as_is_in_AS1_4_as_set() { + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_asns then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +# R-SET for AS1_4 +function prefix_is_in_AS1_4_as_set() { + if net ~ AS_SET_AS_AS1_AS_AS1_CUSTOMERS_prefixes_6 then + return true; + # AS-SET AS1 referenced but empty. + return false; +} + +function next_hop_is_valid_for_AS1_4() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS1_4 + if bgp_next_hop = 2001:db8:1:1::11 then return true; # AS1_2 + if bgp_next_hop = 2001:db8:1:1::12 then return true; # AS1_4 + return false; +} + + +function verify_AS1_4_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS1_4_as_set(); + prefix_ok = prefix_is_in_AS1_4_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 1); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 1); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS1_4 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 1); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS1_4() then + { tag_and_reject(5, 1); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 1); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 1 then + { tag_and_reject(6, 1); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 1); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 1); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 1); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 1); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 1); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 1); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS1_4_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS1_4 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 1); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 1); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS1_4 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + reject "client AS1_4 not enabled to receive blackhole prefixes - NOT ANNOUNCING ", net, " TO AS1_4"; + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(1, 2001:db8:1:1::12, "AS1_4") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS1_4"; + } + } + + # BGP control communities + if !route_can_be_announced_to(1, 2001:db8:1:1::12, "AS1_4") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS1_4"; + + apply_prepend(1, 2001:db8:1:1::12); + + + add_noexport_noadvertise(1); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 5 ms (normalized value: 5) +protocol bgp AS1_4 { + description "AS1_2 client"; + + local as 999; + neighbor 2001:db8:1:1::12 as 1; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS1_4; + export filter announce_to_AS1_4; + + + } + + +# AS-SET for AS2_2 +function origin_as_is_in_AS2_2_as_set() { + # AS-SET AS2 referenced but empty. + if bgp_path.last_nonaggregated ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_asns then + return true; + return false; +} + +# R-SET for AS2_2 +function prefix_is_in_AS2_2_as_set() { + # AS-SET AS2 referenced but empty. + if net ~ AS_SET_AS_AS2_AS_AS2_CUSTOMERS_prefixes_6 then + return true; + return false; +} + +function next_hop_is_valid_for_AS2_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS2_2 + if bgp_next_hop = 2001:db8:1:1::21 then return true; + if bgp_next_hop = 2001:db8:1:1::22 then return true; + return false; +} + + +function verify_AS2_2_irrdb() +bool origin_ok; +bool prefix_ok; +bool validated; +{ + origin_ok = false; + prefix_ok = false; + validated = false; + + origin_ok = origin_as_is_in_AS2_2_as_set(); + prefix_ok = prefix_is_in_AS2_2_as_set(); + + + # Origin ASN is valid, prefix is not: check if a RPKI ROAs exists. + if origin_ok && prefix_in_rpki_roas_as_route_objects() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if an ARIN Whois record exists. + if origin_ok && prefix_in_arin_whois_db() then { + validated = true; + } + + # Origin ASN is valid, prefix is not: check if a NIC.BR Whois record exists. + if origin_ok && prefix_in_registrobr_whois_db() then { + validated = true; + } + + + if !validated && !origin_ok then { + tag_and_reject(9, 2); reject "origin ASN [", bgp_path.last_nonaggregated, "] not in allowed as-sets - REJECTING ", net; + } + if !validated && !prefix_ok then { + tag_and_reject(12, 2); reject "prefix not in client's r_set - REJECTING ", net; + } +} + +filter receive_from_AS2_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 2); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS2_2() then + { tag_and_reject(5, 2); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 2); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 2 then + { tag_and_reject(6, 2); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 2); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 2); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 2); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 2); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 2); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 2); reject "prefix is bogon - REJECTING ", net; } + + # IRRdb checks + verify_AS2_2_irrdb(); + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS2_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 2); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 2); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + prevent_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS2_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(2, 2001:db8:1:1::21, "AS2_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS2_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(2, 2001:db8:1:1::21, "AS2_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS2_2"; + + apply_prepend(2, 2001:db8:1:1::21); + + + add_noexport_noadvertise(2); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 17.3 ms (normalized value: 17) +protocol bgp AS2_2 { + description "AS2_1 client"; + + local as 999; + neighbor 2001:db8:1:1::21 as 2; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS2_2; + export filter announce_to_AS2_2; + + + } + + +# AS-SET for AS3_2 +function origin_as_is_in_AS3_2_as_set() { + return false; +} + +# R-SET for AS3_2 +function prefix_is_in_AS3_2_as_set() { + return false; +} + +function next_hop_is_valid_for_AS3_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS3_2 + if bgp_next_hop = 2001:db8:1:1::31 then return true; + return false; +} + +function prefix_is_in_AS3_2_blacklist() +prefix set AS3_2_blacklist; +{ + AS3_2_blacklist = [ + # bad network + 2a03:0:1::/48{48,128} + ]; + return net ~ AS3_2_blacklist; +} + + +filter receive_from_AS3_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 3); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS3_2() then + { tag_and_reject(5, 3); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 3); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 3 then + { tag_and_reject(6, 3); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 3); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [174] then + { tag_and_reject(8, 3); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 3); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 3); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 3); reject "prefix is in global blacklist - REJECTING ", net; } + + # Prefix: client's blacklist + if prefix_is_in_AS3_2_blacklist() then + { tag_and_reject(11, 3); reject "prefix is in client's blacklist - REJECTING ", net; } + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 3); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS3_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 3); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 3); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS3_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(3, 2001:db8:1:1::31, "AS3_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS3_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(3, 2001:db8:1:1::31, "AS3_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS3_2"; + + apply_prepend(3, 2001:db8:1:1::31); + + # AS3_2 has been configured with 'prepend_rs_as' + bgp_path.prepend(999); + + add_noexport_noadvertise(3); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 123.8 ms (normalized value: 124) +protocol bgp AS3_2 { + description "AS3_1 client"; + + local as 999; + neighbor 2001:db8:1:1::31 as 3; + rs client; + + passive off; + ttl security off; + interpret communities off; + + + add paths tx; + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS3_2; + export filter announce_to_AS3_2; + + + } + + +# AS-SET for AS4_2 +function origin_as_is_in_AS4_2_as_set() { + return false; +} + +# R-SET for AS4_2 +function prefix_is_in_AS4_2_as_set() { + return false; +} + +function next_hop_is_valid_for_AS4_2() +{ + # Checks if NEXT_HOP is one of those allowed for routes announced by AS4_2 + if bgp_next_hop = 2001:db8:1:1::41 then return true; + return false; +} + + + +filter receive_from_AS4_2 { + if !(source = RTS_BGP ) then + { tag_and_reject(65535, 4); reject "source != RTS_BGP - REJECTING ", net; } + + + + scrub_communities_in(); + + + # NEXT_HOP + if !next_hop_is_valid_for_AS4_2() then + { tag_and_reject(5, 4); reject "NEXT_HOP [", bgp_next_hop, "] not allowed - REJECTING ", net; } + + # AS_PATH: length + if bgp_path.len > 6 then + { tag_and_reject(1, 4); reject "AS_PATH len [", bgp_path.len ,"] longer than 6 - REJECTING ", net; } + + # AS_PATH: left-most ASN + if bgp_path.first != 4 then + { tag_and_reject(6, 4); reject "invalid left-most ASN [", bgp_path.first, "] - REJECTING ", net; } + + # AS_PATH: invalid ASNs + if as_path_contains_invalid_asn() then + { tag_and_reject(7, 4); reject "AS_PATH [", bgp_path ,"] contains invalid ASN - REJECTING ", net; } + + # AS_PATH: transit-free ASNs + if bgp_path ~ [3, 174] then + { tag_and_reject(8, 4); reject "AS_PATH [", bgp_path ,"] contains transit-free ASN - REJECTING ", net; } + + # AS_PATH: never via route-servers ASNs + if bgp_path ~ [666, 777] then + { tag_and_reject(15, 4); reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; } + + # Prefix: only IPv6 Global Unicast space allowed + if !(net ~ [2000::/3+]) then + { tag_and_reject(10, 4); reject "prefix is not in IPv6 Global Unicast space - REJECTING ", net; } + + # Prefix: global blacklist + if prefix_is_in_global_blacklist() then + { tag_and_reject(3, 4); reject "prefix is in global blacklist - REJECTING ", net; } + + + # Prefix: bogon + if prefix_is_bogon() then + { tag_and_reject(2, 4); reject "prefix is bogon - REJECTING ", net; } + + + # Blackhole request? + if is_blackhole_filtering_request() then { + accept "blackhole filtering request from AS4_2 - ACCEPTING ", net; + } else { + perform_rpki_validation(); + + if route_is_rpki_invalid() then + { tag_and_reject(14, 4); reject "RPKI, route is INVALID - REJECTING ", net; } + + # Prefix: length + if !prefix_len_is_valid(17, 48) then + { tag_and_reject(13, 4); reject "prefix len [", net.len, "] not in 17-48 - REJECTING ", net; } + + honor_graceful_shutdown(); + } + + + accept; +} + +filter announce_to_AS4_2 { + + + if (65520, 0) ~ bgp_community then + reject; + + + # Blackhole request? + if is_blackhole_filtering_request() then { + apply_blackhole_filtering_policy(); + } else { + # RPKI: do not announce INVALID to clients + if route_is_rpki_invalid() then { + if !announce_rpki_invalid_to_client(4, 2001:db8:1:1::41, "AS4_2") then + reject "route is INVALID - NOT ANNOUNCING ", net, " TO AS4_2"; + } + } + + # BGP control communities + if !route_can_be_announced_to(4, 2001:db8:1:1::41, "AS4_2") then + reject "route didn't pass control communities checks - NOT ANNOUNCING ", net, " TO AS4_2"; + + apply_prepend(4, 2001:db8:1:1::41); + + + add_noexport_noadvertise(4); + + scrub_communities_out(); + + + + accept; +} + +# RTT: 600 ms (normalized value: 600) +protocol bgp AS4_2 { + description "AS4_1 client"; + + local as 999; + neighbor 2001:db8:1:1::41 as 4; + rs client; + + passive on; + ttl security off; + interpret communities off; + + + + secondary; + + + + import keep filtered on; + + import filter receive_from_AS4_2; + export filter announce_to_AS4_2; + + + } + + + +include "/etc/bird/footer6.local"; + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS101.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS101.txt new file mode 100644 index 00000000..21ae362d --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS101.txt @@ -0,0 +1,546 @@ +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.1.0/24, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +10.0.0.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 2 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +11.1.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.2.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 2 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +11.3.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 2 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/10, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/7, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/8, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/9, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +192.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.22, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.22, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.5.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 2 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 2 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 2 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 2 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 1 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 1 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 2 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 2 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 2 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 2 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 2 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.6.0/24, AS_PATH: 2 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 2 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 1 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 1 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 2 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_1.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_1.txt new file mode 100644 index 00000000..04b5a71f --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_1.txt @@ -0,0 +1,406 @@ +101.0.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.11.0/24, AS_PATH: 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 2 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.1.0.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +102.0.1.0/24, AS_PATH: 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.7.1/32, AS_PATH: 4, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_2.txt new file mode 100644 index 00000000..762cfbd2 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS1_2.txt @@ -0,0 +1,308 @@ +101.0.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.11.0/24, AS_PATH: 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.1.0.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +102.0.1.0/24, AS_PATH: 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS2.txt new file mode 100644 index 00000000..616a3f2a --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS2.txt @@ -0,0 +1,392 @@ +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.11.0/24, AS_PATH: 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.1.0.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +102.0.1.0/24, AS_PATH: 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.6.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.7.1/32, AS_PATH: 4, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS3.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS3.txt new file mode 100644 index 00000000..eddf4379 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS3.txt @@ -0,0 +1,308 @@ +1.0.1.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +1.0.1.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.12, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +1.0.2.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +1.0.2.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.12, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +1.0.3.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.1.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.1.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.128.1/32, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.2.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.3.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.4.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.5.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.6.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.8.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.2.0.0/17, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.2.128.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 999 1 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 65535:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +103.0.1.0/24, AS_PATH: 999 2 101 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 999 1 101 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +103.0.2.0/24, AS_PATH: 999 2 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 999 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +104.1.1.0/24, AS_PATH: 999 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +11.1.1.0/24, AS_PATH: 999 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +11.3.0.0/16, AS_PATH: 999 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +11.4.1.0/24, AS_PATH: 999 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2.0.1.0/24, AS_PATH: 999 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 999 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 999 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 999 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 999 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 999 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 999 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 999 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 999 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 999 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS4.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS4.txt new file mode 100644 index 00000000..8c0e1a23 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/AS4.txt @@ -0,0 +1,252 @@ +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 2 101 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 2 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/rs.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/rs.txt new file mode 100644 index 00000000..b05644a7 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv4_TagAndReject/bird2/rs.txt @@ -0,0 +1,826 @@ +0.0.0.0/0, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (2) + +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +10.0.0.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (2) + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 1 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.10.0/24, AS_PATH: 1 101 666, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.10.0/24, AS_PATH: 2 101 666, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.11.0/24, AS_PATH: 1 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.11.0/24, AS_PATH: 1 101 777, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.11.0/24, AS_PATH: 2 101 777, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.0.128.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 65535:666 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 888:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 777:0 + ext comms: rt:65520:1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 1 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.7.0/24, AS_PATH: 1 101 174, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +101.0.7.0/24, AS_PATH: 2 101 174, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.9.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.0.9.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.1.0.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.1.0.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.1.0.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.2.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.2.1.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 1 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.3.0.0/24, AS_PATH: 1 101 105, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +101.3.0.0/24, AS_PATH: 2 101 105, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +102.0.1.0/24, AS_PATH: 1 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +102.0.1.0/24, AS_PATH: 1 101 102, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +102.0.1.0/24, AS_PATH: 2 101 102, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +103.0.1.0/24, AS_PATH: 1 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 65535:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +103.0.1.0/24, AS_PATH: 1 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 65535:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 5 + filtered: False () + +103.0.1.0/24, AS_PATH: 2 101 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 1 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +103.0.2.0/24, AS_PATH: 1 101 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 2 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 2 101 104, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 2 101 104, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +11.1.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.2.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +11.2.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +11.3.0.0/16, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +11.4.1.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/10, AS_PATH: 1 2 2 2 2 2 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (1) + +128.0.0.0/7, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (13) + +128.0.0.0/8, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (6) + +128.0.0.0/9, AS_PATH: 1 65536 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (7) + +192.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (3) + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 65534:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: 65534:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.5.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.23, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3.0.1.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (11) + +3.0.10.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65521:65521, 65523:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65507:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65509:1, 65523:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65535:65281 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.14.0/24, AS_PATH: 3 174 33, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +3.0.2.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 0:999, 65501:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 0:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.4.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 0:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65522:65522 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65523:65523 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65521:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65522:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 0:999, 64532:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: + ext comms: generic:0x43000000:0x1, rt:64537:10, rt:64538:20 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 0:999, 64532:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:5, 65501:3 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.6.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64530:5, 64531:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.7.1/32, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:20, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64538:10, 64539:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64535:20, 64536:5, 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS101.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS101.txt new file mode 100644 index 00000000..b7157b6f --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS101.txt @@ -0,0 +1,546 @@ +2001::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2001:db8:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:5::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 2 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 2 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 1 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 1 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 2 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 2 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 2 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 2 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 2 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 2 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:6::/48, AS_PATH: 2 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 2 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 1 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 1 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 2 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 2 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 2 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a11:1:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:2:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 2 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 2 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a99:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99::/16, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99::/32, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_1.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_1.txt new file mode 100644 index 00000000..24ba8cfe --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_1.txt @@ -0,0 +1,413 @@ +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:7::1/128, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:10::/48, AS_PATH: 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:11::/48, AS_PATH: 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:4000::/34, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3102:0:1::/48, AS_PATH: 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +8000:1::/32, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_2.txt new file mode 100644 index 00000000..66b25f9e --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS1_2.txt @@ -0,0 +1,315 @@ +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:10::/48, AS_PATH: 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:11::/48, AS_PATH: 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:4000::/34, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3102:0:1::/48, AS_PATH: 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +8000:1::/32, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS2.txt new file mode 100644 index 00000000..71619059 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS2.txt @@ -0,0 +1,399 @@ +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:6::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:7::1/128, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:10::/48, AS_PATH: 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:11::/48, AS_PATH: 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:4000::/34, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3102:0:1::/48, AS_PATH: 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +8000:1::/32, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS3.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS3.txt new file mode 100644 index 00000000..a3a5bf0b --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS3.txt @@ -0,0 +1,308 @@ +2a01:0:1::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a01:0:1::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +2a01:0:2::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a01:0:2::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +2a01:0:3::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a02:0:1::/48, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 999 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 999 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 999 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 999 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 999 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a11:3::/32, AS_PATH: 999 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a11:4:1::/48, AS_PATH: 999 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:1::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:1::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:2::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:3::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:4::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:5::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:6::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:8::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:2:8000::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:2::/33, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 999 1 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 65535:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3103:0:1::/48, AS_PATH: 999 2 101 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 999 1 101 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3103:0:2::/48, AS_PATH: 999 2 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 999 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3104:1:1::/48, AS_PATH: 999 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS4.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS4.txt new file mode 100644 index 00000000..f13e8107 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/AS4.txt @@ -0,0 +1,252 @@ +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 2 101 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 2 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/rs.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/rs.txt new file mode 100644 index 00000000..f4304977 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRD2IPv6_TagAndReject/bird2/rs.txt @@ -0,0 +1,847 @@ +2001::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (2) + +2001:db8:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (3) + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 65534:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: 65534:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:5::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::23, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +2a03:0:1::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (11) + +2a03:0:2::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 0:999, 65501:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 0:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:4::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 0:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65522:65522 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65523:65523 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65521:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65522:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65521:65521, 65523:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65507:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65509:1, 65523:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65535:65281 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:e::/48, AS_PATH: 3 174 33, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +2a04:0:1::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 0:999, 64532:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 0:999, 64532:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:5, 65501:3 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:6::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64530:5, 64531:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:7::1/128, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:20, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64538:10, 64539:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64535:20, 64536:5, 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: + ext comms: generic:0x43000000:0x1, rt:64537:10, rt:64538:20 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:2::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +2a11:2:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +2a11:3:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +2a11:3::/32, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99:1::/48, AS_PATH: 1 65536 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (7) + +2a99:2::/48, AS_PATH: 1 2 2 2 2 2 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (1) + +2a99::/16, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (13) + +2a99::/32, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (6) + +3101:0:10::/48, AS_PATH: 1 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:10::/48, AS_PATH: 1 101 666, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:10::/48, AS_PATH: 2 101 666, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:11::/48, AS_PATH: 1 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:11::/48, AS_PATH: 1 101 777, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:11::/48, AS_PATH: 2 101 777, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 888:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 777:0 + ext comms: rt:65520:1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 1 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:7::/48, AS_PATH: 1 101 174, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +3101:0:7::/48, AS_PATH: 2 101 174, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +3101:0:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:0:8000::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 65535:666 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:9::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:0:9::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:1::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:2:4000::/34, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:2:4000::/34, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:2:4000::/34, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 1 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:3:1::/48, AS_PATH: 1 101 105, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3101:3:1::/48, AS_PATH: 2 101 105, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3102:0:1::/48, AS_PATH: 1 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3102:0:1::/48, AS_PATH: 1 101 102, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3102:0:1::/48, AS_PATH: 2 101 102, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3103:0:1::/48, AS_PATH: 1 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 65535:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3103:0:1::/48, AS_PATH: 1 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 65535:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 5 + filtered: False () + +3103:0:1::/48, AS_PATH: 2 101 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 1 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3103:0:2::/48, AS_PATH: 1 101 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 2 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 2 101 104, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 2 101 104, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +8000:1::/32, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +8000:1::/32, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (10) + +8000:1::/32, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (10) + +::/0, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (10) + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS101.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS101.txt new file mode 100644 index 00000000..21ae362d --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS101.txt @@ -0,0 +1,546 @@ +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.1.0/24, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +10.0.0.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 2 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +11.1.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.2.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 2 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +11.3.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 2 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/10, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/7, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/8, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/9, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +192.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.21, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.22, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 1 2, NEXT_HOP: 192.0.2.22, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.5.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 2 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 2 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 2 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 2 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 1 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 1 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 2 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 1 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 2 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 1 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 2 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 1 3, NEXT_HOP: 192.0.2.31, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 2 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 2 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.6.0/24, AS_PATH: 2 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 1 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 2 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 1 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 1 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 2 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_1.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_1.txt new file mode 100644 index 00000000..04b5a71f --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_1.txt @@ -0,0 +1,406 @@ +101.0.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.11.0/24, AS_PATH: 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 2 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.1.0.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +102.0.1.0/24, AS_PATH: 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.7.1/32, AS_PATH: 4, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_2.txt new file mode 100644 index 00000000..762cfbd2 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS1_2.txt @@ -0,0 +1,308 @@ +101.0.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.11.0/24, AS_PATH: 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.1.0.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +102.0.1.0/24, AS_PATH: 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.2.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS2.txt new file mode 100644 index 00000000..616a3f2a --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS2.txt @@ -0,0 +1,392 @@ +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.11.0/24, AS_PATH: 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.1.0.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 101, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +102.0.1.0/24, AS_PATH: 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.6.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.7.1/32, AS_PATH: 4, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS3.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS3.txt new file mode 100644 index 00000000..eddf4379 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS3.txt @@ -0,0 +1,308 @@ +1.0.1.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +1.0.1.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.12, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +1.0.2.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +1.0.2.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.12, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +1.0.3.0/24, AS_PATH: 999 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.1.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.1.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.128.1/32, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.2.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.3.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.4.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.5.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.6.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.0.8.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.2.0.0/17, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 999 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +101.2.128.0/24, AS_PATH: 999 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 999 1 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 65535:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +103.0.1.0/24, AS_PATH: 999 2 101 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 999 1 101 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +103.0.2.0/24, AS_PATH: 999 2 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 999 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +104.1.1.0/24, AS_PATH: 999 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +11.1.1.0/24, AS_PATH: 999 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +11.3.0.0/16, AS_PATH: 999 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +11.4.1.0/24, AS_PATH: 999 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2.0.1.0/24, AS_PATH: 999 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 999 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 999 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 999 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 999 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 999 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 999 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 999 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 999 4 4 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 999 4 4, NEXT_HOP: 192.0.2.41, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS4.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS4.txt new file mode 100644 index 00000000..8c0e1a23 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/AS4.txt @@ -0,0 +1,252 @@ +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.1.0/24, AS_PATH: 2 101 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 2 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.0.0/16, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.4.1.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.66, via 192.0.2.2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.10.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3 3 3 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/rs.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/rs.txt new file mode 100644 index 00000000..b05644a7 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv4_TagAndReject/bird16/rs.txt @@ -0,0 +1,826 @@ +0.0.0.0/0, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (2) + +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.1.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +1.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.12, via 192.0.2.12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +1.0.3.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +10.0.0.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (2) + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.1.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.10.0/24, AS_PATH: 1 101 666, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.10.0/24, AS_PATH: 1 101 666, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.10.0/24, AS_PATH: 2 101 666, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.11.0/24, AS_PATH: 1 101 777, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.11.0/24, AS_PATH: 1 101 777, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.11.0/24, AS_PATH: 2 101 777, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +101.0.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.0.128.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 65535:666 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.128.1/32, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.128.1/32, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.2.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.2.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.3.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.3.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 888:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.4.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.4.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.5.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.5.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 777:0 + ext comms: rt:65520:1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.6.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.6.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.7.0/24, AS_PATH: 1 101 174, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.7.0/24, AS_PATH: 1 101 174, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +101.0.7.0/24, AS_PATH: 2 101 174, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.0.8.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.0.8.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.0.9.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.0.9.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.0.9.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +101.1.0.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.1.0.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.1.0.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.2.0.0/17, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.0.0/17, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.2.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.2.1.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.2.1.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +101.2.128.0/24, AS_PATH: 1 101, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +101.2.128.0/24, AS_PATH: 2 101, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +101.3.0.0/24, AS_PATH: 1 101 105, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +101.3.0.0/24, AS_PATH: 1 101 105, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +101.3.0.0/24, AS_PATH: 2 101 105, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +102.0.1.0/24, AS_PATH: 1 101 102, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +102.0.1.0/24, AS_PATH: 1 101 102, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +102.0.1.0/24, AS_PATH: 2 101 102, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +103.0.1.0/24, AS_PATH: 1 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5, 65535:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +103.0.1.0/24, AS_PATH: 1 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: 65535:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 5 + filtered: False () + +103.0.1.0/24, AS_PATH: 2 101 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 1 101 101 103, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +103.0.2.0/24, AS_PATH: 1 101 101 103, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +103.0.2.0/24, AS_PATH: 2 101 103, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +104.0.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.0.1.0/24, AS_PATH: 2 101 104, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.101, via 192.0.2.12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +104.1.1.0/24, AS_PATH: 1 101 104, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +104.1.1.0/24, AS_PATH: 2 101 104, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +11.1.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.1.2.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +11.2.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +11.3.0.0/16, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +11.3.1.0/24, AS_PATH: 1 1011, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +11.4.1.0/24, AS_PATH: 1 1000, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +128.0.0.0/10, AS_PATH: 1 2 2 2 2 2 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (1) + +128.0.0.0/7, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (13) + +128.0.0.0/8, AS_PATH: 2 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (6) + +128.0.0.0/9, AS_PATH: 1 65536 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (7) + +192.0.2.0/24, AS_PATH: 1, NEXT_HOP: 192.0.2.11, via 192.0.2.11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (3) + +2.0.1.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.2.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.1/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.2/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: 65534:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.3.3/32, AS_PATH: 2, NEXT_HOP: 192.0.2.21, via 192.0.2.21 + std comms: + ext comms: + lrg comms: 65534:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.4.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.22, via 192.0.2.21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2.0.5.0/24, AS_PATH: 2, NEXT_HOP: 192.0.2.23, via 192.0.2.21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3.0.1.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (11) + +3.0.10.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65521:65521, 65523:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.11.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65507:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.12.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65509:1, 65523:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.13.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65535:65281 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.14.0/24, AS_PATH: 3 174 33, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +3.0.2.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 0:999, 65501:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.3.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 0:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.4.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 0:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.5.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.6.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65522:65522 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.7.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65523:65523 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.8.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65521:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3.0.9.0/24, AS_PATH: 3, NEXT_HOP: 192.0.2.31, via 192.0.2.31 + std comms: 65522:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.1.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 0:999, 64532:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.10.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: + ext comms: generic:0x43000000:0x1, rt:64537:10, rt:64538:20 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.2.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 0:999, 64532:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.3.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.4.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.5.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:5, 65501:3 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.6.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64530:5, 64531:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.7.1/32, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64531:20, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.8.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64538:10, 64539:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +4.0.9.0/24, AS_PATH: 4, NEXT_HOP: 192.0.2.41, via 192.0.2.41 + std comms: 64535:20, 64536:5, 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS101.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS101.txt new file mode 100644 index 00000000..b7157b6f --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS101.txt @@ -0,0 +1,546 @@ +2001::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2001:db8:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 1 2, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:5::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 2 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 2 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 1 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 1 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 2 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 2 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 1 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 2 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 1 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 2 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 1 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 2 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 2 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:6::/48, AS_PATH: 2 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 2 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 1 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 1 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 2 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 1 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 2 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 2 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a11:1:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:2:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 2 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 2 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a99:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99::/16, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99::/32, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_1.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_1.txt new file mode 100644 index 00000000..24ba8cfe --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_1.txt @@ -0,0 +1,413 @@ +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:7::1/128, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:10::/48, AS_PATH: 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:11::/48, AS_PATH: 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:4000::/34, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3102:0:1::/48, AS_PATH: 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +8000:1::/32, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_2.txt new file mode 100644 index 00000000..66b25f9e --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS1_2.txt @@ -0,0 +1,315 @@ +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:2::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:1::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:10::/48, AS_PATH: 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:11::/48, AS_PATH: 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:4000::/34, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3102:0:1::/48, AS_PATH: 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +8000:1::/32, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS2.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS2.txt new file mode 100644 index 00000000..71619059 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS2.txt @@ -0,0 +1,399 @@ +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:6::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:7::1/128, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:10::/48, AS_PATH: 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:11::/48, AS_PATH: 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 999:65530:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65530:1, 777:0 + ext comms: + lrg comms: 777:0:0, 999:65530:1 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:1::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:4000::/34, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3102:0:1::/48, AS_PATH: 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +8000:1::/32, AS_PATH: 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::101 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS3.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS3.txt new file mode 100644 index 00000000..a3a5bf0b --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS3.txt @@ -0,0 +1,308 @@ +2a01:0:1::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a01:0:1::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +2a01:0:2::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a01:0:2::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 101 + filtered: False () + +2a01:0:3::/48, AS_PATH: 999 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a02:0:1::/48, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 999 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 999 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 999 4 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 999 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 999 4 4 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 999 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a11:3::/32, AS_PATH: 999 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +2a11:4:1::/48, AS_PATH: 999 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:1::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:1::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:2::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:3::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:4::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:5::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:6::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:0:8::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:2:8000::/48, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 999 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3101:2::/33, AS_PATH: 999 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 999 1 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 65535:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3103:0:1::/48, AS_PATH: 999 2 101 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 999 1 101 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3103:0:2::/48, AS_PATH: 999 2 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 999 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + +3104:1:1::/48, AS_PATH: 999 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 101 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS4.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS4.txt new file mode 100644 index 00000000..f13e8107 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/AS4.txt @@ -0,0 +1,252 @@ +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3 3 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::2 + std comms: 65535:65281 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:3::/32, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 888:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: 777:0 + ext comms: + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::66, via 2001:db8:1:1::2 + std comms: 65535:65281, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:1::/48, AS_PATH: 2 101 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 2 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::2 + std comms: + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + diff --git a/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/rs.txt b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/rs.txt new file mode 100644 index 00000000..f4304977 --- /dev/null +++ b/tests/live_tests/scenarios/global/routes/BasicScenario_BIRDIPv6_TagAndReject/bird16/rs.txt @@ -0,0 +1,847 @@ +2001::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (2) + +2001:db8:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (3) + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:1::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a01:0:2::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::12, via 2001:db8:1:1::12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +2a01:0:3::/48, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::12 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:1::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:2::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::1/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::2/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 65534:0 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:3::3/128, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: 65534:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:4::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::22, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a02:0:5::/48, AS_PATH: 2, NEXT_HOP: 2001:db8:1:1::23, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +2a03:0:1::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (11) + +2a03:0:2::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 0:999, 65501:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:3::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 0:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:4::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 0:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:5::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:6::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65522:65522 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:7::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65523:65523 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:8::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65521:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:9::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65522:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:a::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65521:65521, 65523:1 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:b::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65507:999 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:c::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65509:1, 65523:2 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:d::/48, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: 65535:65281 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a03:0:e::/48, AS_PATH: 3 174 33, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +2a04:0:1::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 0:999, 64532:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:2::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 0:999, 64532:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:3::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:15 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:4::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:5 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:5::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:5, 65501:3 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:6::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64530:5, 64531:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:7::1/128, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64531:20, 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:8::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64538:10, 64539:100 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:9::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: 64535:20, 64536:5, 65521:65521 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a04:0:a::/48, AS_PATH: 4, NEXT_HOP: 2001:db8:1:1::41, via 2001:db8:1:1::41 + std comms: + ext comms: generic:0x43000000:0x1, rt:64537:10, rt:64538:20 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:1:2::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +2a11:2:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +2a11:3:1::/48, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +2a11:3::/32, AS_PATH: 1 1011, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a11:4:1::/48, AS_PATH: 1 1000, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +2a99:1::/48, AS_PATH: 1 65536 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (7) + +2a99:2::/48, AS_PATH: 1 2 2 2 2 2 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (1) + +2a99::/16, AS_PATH: 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (13) + +2a99::/32, AS_PATH: 2 1, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (6) + +3101:0:10::/48, AS_PATH: 1 101 666, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:10::/48, AS_PATH: 1 101 666, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:10::/48, AS_PATH: 2 101 666, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:11::/48, AS_PATH: 1 101 777, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:11::/48, AS_PATH: 1 101 777, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:11::/48, AS_PATH: 2 101 777, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (15) + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:1::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:2::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:2::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:3::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:3::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 888:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:4::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:4::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 888:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:5::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:5::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: 888:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 777:0 + ext comms: rt:65520:1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:6::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:6::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 777:0 + ext comms: generic:0x43000000:0x1 + lrg comms: 777:0:0 + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:7::/48, AS_PATH: 1 101 174, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:7::/48, AS_PATH: 1 101 174, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +3101:0:7::/48, AS_PATH: 2 101 174, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (8) + +3101:0:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:0:8000::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 65535:666 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:8000::1/128, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 65535:666 + ext comms: + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8000::1/128, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: 65535:666 + ext comms: + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:0:8::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:0:8::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:0:9::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:0:9::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:0:9::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x2 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (14) + +3101:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:1::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:1::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:2:4000::/34, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:2:4000::/34, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:2:4000::/34, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (12) + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:2:8000::/48, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2:8000::/48, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3101:2::/33, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3101:2::/33, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x0 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3101:3:1::/48, AS_PATH: 1 101 105, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3101:3:1::/48, AS_PATH: 1 101 105, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3101:3:1::/48, AS_PATH: 2 101 105, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3102:0:1::/48, AS_PATH: 1 101 102, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3102:0:1::/48, AS_PATH: 1 101 102, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3102:0:1::/48, AS_PATH: 2 101 102, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3103:0:1::/48, AS_PATH: 1 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5, 65535:0 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3103:0:1::/48, AS_PATH: 1 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: 65535:0 + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 5 + filtered: False () + +3103:0:1::/48, AS_PATH: 2 101 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 1 101 101 103, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: 65520:0, 65520:5 + ext comms: rt:65520:1 + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True () + +3103:0:2::/48, AS_PATH: 1 101 101 103, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: False, LOCAL_PREF: 100 + filtered: False () + +3103:0:2::/48, AS_PATH: 2 101 103, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3104:0:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:0:1::/48, AS_PATH: 2 101 104, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +3104:1:1::/48, AS_PATH: 1 101 104, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: generic:0x43000000:0x1 + lrg comms: + best: True, LOCAL_PREF: 100 + filtered: False () + +3104:1:1::/48, AS_PATH: 2 101 104, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (9) + +8000:1::/32, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::101, via 2001:db8:1:1::12 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (5) + +8000:1::/32, AS_PATH: 1 101, NEXT_HOP: 2001:db8:1:1::11, via 2001:db8:1:1::11 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (10) + +8000:1::/32, AS_PATH: 2 101, NEXT_HOP: 2001:db8:1:1::21, via 2001:db8:1:1::21 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (10) + +::/0, AS_PATH: 3, NEXT_HOP: 2001:db8:1:1::31, via 2001:db8:1:1::31 + std comms: + ext comms: + lrg comms: + best: False, LOCAL_PREF: 1 + filtered: True (10) + diff --git a/tests/live_tests/scenarios/global/test_bird1_4.py b/tests/live_tests/scenarios/global/test_bird1_4.py index 73e03b27..e8b789c1 100644 --- a/tests/live_tests/scenarios/global/test_bird1_4.py +++ b/tests/live_tests/scenarios/global/test_bird1_4.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from .base import BasicScenarioBIRD, BasicScenario_TagRejectPolicy +from .base import BasicScenarioBIRD, BasicScenario_TagRejectPolicy, BasicScenario_TagAndRejectRejectPolicy from .data4 import BasicScenario_Data4 from pierky.arouteserver.tests.live_tests.bird import BIRDInstanceIPv4 @@ -38,3 +38,10 @@ class BasicScenario_BIRDIPv4_Tag(BasicScenario_TagRejectPolicy, __test__ = True SHORT_DESCR = "Live test, BIRD, global scenario, IPv4, tag" + +class BasicScenario_BIRDIPv4_TagAndReject(BasicScenario_TagAndRejectRejectPolicy, + BasicScenario_BIRDIPv4): + + __test__ = True + + SHORT_DESCR = "Live test, BIRD, global scenario, IPv4, tag&reject" diff --git a/tests/live_tests/scenarios/global/test_bird1_6.py b/tests/live_tests/scenarios/global/test_bird1_6.py index 345c05d9..cc03d7f2 100644 --- a/tests/live_tests/scenarios/global/test_bird1_6.py +++ b/tests/live_tests/scenarios/global/test_bird1_6.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from .base import BasicScenarioBIRD, BasicScenario_TagRejectPolicy +from .base import BasicScenarioBIRD, BasicScenario_TagRejectPolicy, BasicScenario_TagAndRejectRejectPolicy from .data6 import BasicScenario_Data6 from pierky.arouteserver.tests.live_tests.bird import BIRDInstanceIPv6 @@ -38,3 +38,10 @@ class BasicScenario_BIRDIPv6_Tag(BasicScenario_TagRejectPolicy, __test__ = True SHORT_DESCR = "Live test, BIRD, global scenario, IPv6, tag" + +class BasicScenario_BIRDIPv6_TagAndReject(BasicScenario_TagAndRejectRejectPolicy, + BasicScenario_BIRDIPv6): + + __test__ = True + + SHORT_DESCR = "Live test, BIRD, global scenario, IPv6, tag&reject" diff --git a/tests/live_tests/scenarios/global/test_bird2_4.py b/tests/live_tests/scenarios/global/test_bird2_4.py index 4c7a03d2..3c72cb68 100644 --- a/tests/live_tests/scenarios/global/test_bird2_4.py +++ b/tests/live_tests/scenarios/global/test_bird2_4.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from .base import BasicScenarioBIRD2, BasicScenario_TagRejectPolicy +from .base import BasicScenarioBIRD2, BasicScenario_TagRejectPolicy, BasicScenario_TagAndRejectRejectPolicy from .data4 import BasicScenario_Data4 from pierky.arouteserver.tests.live_tests.bird import BIRDInstanceIPv4, BIRD2Instance @@ -37,3 +37,10 @@ class BasicScenario_BIRD2IPv4_Tag(BasicScenario_TagRejectPolicy, __test__ = True SHORT_DESCR = "Live test, BIRD v2, global scenario, IPv4, tag" + +class BasicScenario_BIRD2IPv4_TagAndReject(BasicScenario_TagAndRejectRejectPolicy, + BasicScenario_BIRD2IPv4): + + __test__ = True + + SHORT_DESCR = "Live test, BIRD v2, global scenario, IPv4, tag&reject" diff --git a/tests/live_tests/scenarios/global/test_bird2_6.py b/tests/live_tests/scenarios/global/test_bird2_6.py index 465229c0..ad39d6dd 100644 --- a/tests/live_tests/scenarios/global/test_bird2_6.py +++ b/tests/live_tests/scenarios/global/test_bird2_6.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from .base import BasicScenarioBIRD2, BasicScenario_TagRejectPolicy +from .base import BasicScenarioBIRD2, BasicScenario_TagRejectPolicy, BasicScenario_TagAndRejectRejectPolicy from .data6 import BasicScenario_Data6 from pierky.arouteserver.tests.live_tests.bird import BIRDInstanceIPv6, BIRD2Instance @@ -37,3 +37,10 @@ class BasicScenario_BIRD2IPv6_Tag(BasicScenario_TagRejectPolicy, __test__ = True SHORT_DESCR = "Live test, BIRD v2, global scenario, IPv6, tag" + +class BasicScenario_BIRD2IPv6_TagAndReject(BasicScenario_TagAndRejectRejectPolicy, + BasicScenario_BIRD2IPv6): + + __test__ = True + + SHORT_DESCR = "Live test, BIRD v2, global scenario, IPv6, tag&reject" diff --git a/tests/var/general.yml b/tests/var/general.yml index 693dca77..075298a8 100644 --- a/tests/var/general.yml +++ b/tests/var/general.yml @@ -1,7 +1,6 @@ cfg: rs_as: 999 router_id: "192.0.2.2" - communities: - do_not_announce_to_peer: - std: "0:peer_as" - lrg: "rs_as:0:peer_as" + filtering: + reject_policy: + policy: tag_and_reject diff --git a/utils/build_doc b/utils/build_doc index 73dc24fa..878435b7 100755 --- a/utils/build_doc +++ b/utils/build_doc @@ -66,6 +66,9 @@ D=docs/REJECT_REASON_COMMUNITIES.txt cat << EOF > $D .. DO NOT EDIT: this file is automatically created by ../utils/build_doc +Reject reasons +~~~~~~~~~~~~~~ + ===== ========================================================= ID Reason ===== ========================================================= diff --git a/utils/docker_stopall b/utils/docker_stopall new file mode 100755 index 00000000..1824920b --- /dev/null +++ b/utils/docker_stopall @@ -0,0 +1,7 @@ +#!/bin/bash + +for c in $(docker ps -f name=ars_ --format="{{.ID}}"); do + echo -n "Stopping ${c}... " + docker rm --force ${c} &>/dev/null + echo "OK" +done From 2b6eb8ca87d11c697e979fe70faa30e4fd94f798 Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 25 Apr 2020 13:06:40 -0400 Subject: [PATCH 11/12] Update tests --- docs/SUPPORTED_SPEAKERS_CI.txt | 180 ++++++- tests/last | 455 ++++++++++++++++-- tests/last.json | 2 +- tests/last_results/extres.last | 2 +- .../live_bird2_rpki_rtr_example_bird2.last | 2 +- .../live_bird_hooks_example_bird1.last | 2 +- .../last_results/live_communities_bird1.last | 2 +- .../last_results/live_communities_bird2.last | 2 +- .../live_communities_openbgpd_latest.last | 2 +- .../live_communities_openbgpd_portable.last | 2 +- .../live_communities_openbgpd_previous.last | 2 +- tests/last_results/live_default_bird1.last | 2 +- tests/last_results/live_default_bird2.last | 2 +- .../live_default_openbgpd_latest.last | 2 +- .../live_default_openbgpd_portable.last | 2 +- .../live_default_openbgpd_previous.last | 2 +- tests/last_results/live_global_bird1.last | 176 ++++++- tests/last_results/live_global_bird2.last | 176 ++++++- .../live_global_openbgpd_latest.last | 2 +- .../live_global_openbgpd_portable.last | 2 +- .../live_global_openbgpd_previous.last | 2 +- tests/last_results/live_gshut_bird1.last | 2 +- tests/last_results/live_gshut_bird2.last | 2 +- .../live_gshut_openbgpd_latest.last | 2 +- .../live_gshut_openbgpd_portable.last | 2 +- .../live_gshut_openbgpd_previous.last | 2 +- tests/last_results/live_max_prefix_bird1.last | 2 +- tests/last_results/live_max_prefix_bird2.last | 2 +- .../live_max_prefix_openbgpd_latest.last | 2 +- .../live_max_prefix_openbgpd_portable.last | 2 +- .../live_max_prefix_openbgpd_previous.last | 2 +- .../last_results/live_path_hiding_bird1.last | 2 +- .../last_results/live_path_hiding_bird2.last | 2 +- .../live_path_hiding_openbgpd_latest.last | 2 +- .../live_path_hiding_openbgpd_portable.last | 2 +- .../live_path_hiding_openbgpd_previous.last | 2 +- .../last_results/live_rich_example_bird1.last | 2 +- .../last_results/live_rich_example_bird2.last | 2 +- .../live_rich_example_openbgpd_latest.last | 2 +- .../live_rich_example_openbgpd_portable.last | 2 +- .../live_rich_example_openbgpd_previous.last | 2 +- tests/last_results/live_rpki_bird1.last | 2 +- tests/last_results/live_rpki_bird2.last | 2 +- tests/last_results/live_tag_as_set_bird1.last | 2 +- tests/last_results/live_tag_as_set_bird2.last | 2 +- .../live_tag_as_set_openbgpd_latest.last | 2 +- .../live_tag_as_set_openbgpd_portable.last | 2 +- .../live_tag_as_set_openbgpd_previous.last | 2 +- .../live_tag_reject_policy_bird1.last | 2 +- .../live_tag_reject_policy_bird2.last | 2 +- ...ive_tag_reject_policy_openbgpd_latest.last | 2 +- ...e_tag_reject_policy_openbgpd_portable.last | 2 +- ...e_tag_reject_policy_openbgpd_previous.last | 2 +- tests/last_results/static.last | 7 +- .../openbgpd65.conf | 12 +- .../openbgpd66.conf | 12 +- .../openbgpd66p.conf | 12 +- .../openbgpd65.conf | 12 +- .../openbgpd66.conf | 12 +- .../bird2.conf | 8 +- .../bird2.conf | 8 +- .../bird16.conf | 6 +- .../bird16.conf | 4 +- .../bird2.conf | 8 +- .../bird16.conf | 4 +- .../bird16.conf | 4 +- .../bird2.conf | 8 +- 67 files changed, 1042 insertions(+), 160 deletions(-) diff --git a/docs/SUPPORTED_SPEAKERS_CI.txt b/docs/SUPPORTED_SPEAKERS_CI.txt index 0641dd34..956f2706 100644 --- a/docs/SUPPORTED_SPEAKERS_CI.txt +++ b/docs/SUPPORTED_SPEAKERS_CI.txt @@ -5,8 +5,8 @@ Total test cases per BGP speaker =============== ========= ============ ============ =========== **BGP speaker** **Total** **Passed ✔** **Failed ✖** **Skipped** -BIRD 618 617 0 1 -BIRD v2 617 616 0 1 +BIRD 780 779 0 1 +BIRD v2 779 778 0 1 OpenBGPD 6.5 428 419 0 9 OpenBGPD 6.6 428 419 0 9 OpenBGPD 6.6p0 428 419 0 9 @@ -359,6 +359,94 @@ reconfigure session configured via local include files ✔ ✔ =============================================================================== ======== =========== ================ ================ ================== +global scenario, IPv4, tag&reject ++++++++++++++++++++++++++++++++++ + +=============================================================================== ======== =========== ================ ================ ================== +**Test** **BIRD** **BIRD v2** **OpenBGPD 6.5** **OpenBGPD 6.6** **OpenBGPD 6.6p0** +RPKI, blackhole request for a covered prefix ✔ ✔ +RPKI, invalid prefix (bad ASN) not propagated to clients ✔ ✔ +RPKI, invalid prefix (bad ASN) received by rs ✔ ✔ +RPKI, invalid prefix (bad length) received by rs ✔ ✔ +RPKI, valid prefix propagated to clients ✔ ✔ +RPKI, valid prefix received by rs ✔ ✔ +bad communities as seen by AS101 upstreams ✔ ✔ +bad communities scrubbed by rs (lrg) ✔ ✔ +bad communities scrubbed by rs (std) ✔ ✔ +bad prefixes not received by clients ✔ ✔ +bad prefixes received by rs: AS_PATH len ✔ ✔ +bad prefixes received by rs: IRRdb white-list ✔ ✔ +bad prefixes received by rs: RPKI ROAs as route objects failed ✔ ✔ +bad prefixes received by rs: bogon ✔ ✔ +bad prefixes received by rs: bogon (wrong tag) ✔ ✔ +bad prefixes received by rs: client blacklist ✔ ✔ +bad prefixes received by rs: default route ✔ ✔ +bad prefixes received by rs: global blacklist ✔ ✔ +bad prefixes received by rs: global blacklist (wrong tag) ✔ ✔ +bad prefixes received by rs: invalid ASN in AS-PATH ✔ ✔ +bad prefixes received by rs: invalid NEXT_HOP ✔ ✔ +bad prefixes received by rs: invalid prefix-len ✔ ✔ +bad prefixes received by rs: left-most ASN ✔ ✔ +bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ✔ ✔ +bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ✔ ✔ +bad prefixes received by rs: not IPv6 global unicast space ✔ ✔ +bad prefixes received by rs: origin not in AS-SET ✔ ✔ +bad prefixes received by rs: prefix not in AS-SET ✔ ✔ +bad prefixes received by rs: transit-free ASN in AS-PATH ✔ ✔ +bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ✔ ✔ +bad prefixes received by rs: unknown NEXT_HOP ✔ ✔ +blackhole filtering requests as seen by rs (BLACKHOLE) ✔ ✔ +blackhole filtering requests as seen by rs (lrg cust) ✔ ✔ +blackhole filtering requests as seen by rs (std cust) ✔ ✔ +blackholed prefixes as seen by enabled clients (BLACKHOLE) ✔ ✔ +blackholed prefixes as seen by enabled clients (lrg_cust) ✔ ✔ +blackholed prefixes as seen by enabled clients (std_cust) ✔ ✔ +blackholed prefixes not seen by not enabled clients ✔ ✔ +control communities, NO_EXPORT to AS1 ✔ ✔ +control communities, NO_EXPORT to any ✔ ✔ +control communities, RFC1997 NO_EXPORT ✔ ✔ +control communities, RTT, blackhole, not peers > 20 ms ✔ ✔ +control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ✔ ✔ +control communities, RTT, not peers <= 5 and > 100 ms ✔ ✔ +control communities, RTT, not peers > 15 ms ✔ ✔ +control communities, RTT, not peers > 5 ms ✔ ✔ +control communities, RTT, not peers > 5 ms + AS3 ✔ ✔ +control communities, RTT, only peers <= 15 ms ✔ ✔ +control communities, RTT, only peers <= 5 ms ✔ ✔ +control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ✔ ✔ +control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ✔ ✔ +control communities, announce to AS1 only ✔ ✔ +control communities, announce to all except AS1 ✔ ✔ +control communities, don't announce to any ✔ ✔ +control communities, prepend once to AS1 ✔ ✔ +control communities, prepend once to any ✔ ✔ +control communities, prepend thrice to AS1, once to others ✔ ✔ +control communities, prepend thrice to any ✔ ✔ +control communities, prepend twice to AS2 ✔ ✔ +control communities, prepend twice to any ✔ ✔ +good prefixes because of use_arin_bulk_whois_data ✔ ✔ +good prefixes because of use_registrobr_bulk_whois_data ✔ ✔ +good prefixes because of use_rpki_roas_as_route_objects: covering ✔ ✔ +good prefixes because of use_rpki_roas_as_route_objects: exact ✔ ✔ +good prefixes received by rs ✔ ✔ +good prefixes received by rs: IRRdb white-list ✔ ✔ +good prefixes received by rs: non-client NEXT_HOP ✔ ✔ +gshut by a not enabled client ✔ ✔ +gshut by an enabled client ✔ ✔ +log contains errors ✔ ✔ +other communities not scrubbed by rs (lrg) ✔ ✔ +other communities not scrubbed by rs (std) ✔ ✔ +prefixes from AS101 received by its upstreams ✔ ✔ +prefixes from AS101 received by rs ✔ ✔ +prefixes received by clients: AS1_1 ✔ ✔ +prefixes received by clients: AS1_2 ✔ ✔ +prefixes received by clients: AS2 ✔ ✔ +prefixes received by clients: AS3 ✔ ✔ +prefixes received by clients: AS3 (with ADD-PATH) ✔ ✔ +reconfigure ✔ ✔ +session configured via local include files ✔ ✔ +=============================================================================== ======== =========== ================ ================ ================== + global scenario, IPv6 +++++++++++++++++++++ @@ -535,6 +623,94 @@ reconfigure session configured via local include files ✔ ✔ =============================================================================== ======== =========== ================ ================ ================== +global scenario, IPv6, tag&reject ++++++++++++++++++++++++++++++++++ + +=============================================================================== ======== =========== ================ ================ ================== +**Test** **BIRD** **BIRD v2** **OpenBGPD 6.5** **OpenBGPD 6.6** **OpenBGPD 6.6p0** +RPKI, blackhole request for a covered prefix ✔ ✔ +RPKI, invalid prefix (bad ASN) not propagated to clients ✔ ✔ +RPKI, invalid prefix (bad ASN) received by rs ✔ ✔ +RPKI, invalid prefix (bad length) received by rs ✔ ✔ +RPKI, valid prefix propagated to clients ✔ ✔ +RPKI, valid prefix received by rs ✔ ✔ +bad communities as seen by AS101 upstreams ✔ ✔ +bad communities scrubbed by rs (lrg) ✔ ✔ +bad communities scrubbed by rs (std) ✔ ✔ +bad prefixes not received by clients ✔ ✔ +bad prefixes received by rs: AS_PATH len ✔ ✔ +bad prefixes received by rs: IRRdb white-list ✔ ✔ +bad prefixes received by rs: RPKI ROAs as route objects failed ✔ ✔ +bad prefixes received by rs: bogon ✔ ✔ +bad prefixes received by rs: bogon (wrong tag) ✔ ✔ +bad prefixes received by rs: client blacklist ✔ ✔ +bad prefixes received by rs: default route ✔ ✔ +bad prefixes received by rs: global blacklist ✔ ✔ +bad prefixes received by rs: global blacklist (wrong tag) ✔ ✔ +bad prefixes received by rs: invalid ASN in AS-PATH ✔ ✔ +bad prefixes received by rs: invalid NEXT_HOP ✔ ✔ +bad prefixes received by rs: invalid prefix-len ✔ ✔ +bad prefixes received by rs: left-most ASN ✔ ✔ +bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ✔ ✔ +bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ✔ ✔ +bad prefixes received by rs: not IPv6 global unicast space ✔ ✔ +bad prefixes received by rs: origin not in AS-SET ✔ ✔ +bad prefixes received by rs: prefix not in AS-SET ✔ ✔ +bad prefixes received by rs: transit-free ASN in AS-PATH ✔ ✔ +bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ✔ ✔ +bad prefixes received by rs: unknown NEXT_HOP ✔ ✔ +blackhole filtering requests as seen by rs (BLACKHOLE) ✔ ✔ +blackhole filtering requests as seen by rs (lrg cust) ✔ ✔ +blackhole filtering requests as seen by rs (std cust) ✔ ✔ +blackholed prefixes as seen by enabled clients (BLACKHOLE) ✔ ✔ +blackholed prefixes as seen by enabled clients (lrg_cust) ✔ ✔ +blackholed prefixes as seen by enabled clients (std_cust) ✔ ✔ +blackholed prefixes not seen by not enabled clients ✔ ✔ +control communities, NO_EXPORT to AS1 ✔ ✔ +control communities, NO_EXPORT to any ✔ ✔ +control communities, RFC1997 NO_EXPORT ✔ ✔ +control communities, RTT, blackhole, not peers > 20 ms ✔ ✔ +control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ✔ ✔ +control communities, RTT, not peers <= 5 and > 100 ms ✔ ✔ +control communities, RTT, not peers > 15 ms ✔ ✔ +control communities, RTT, not peers > 5 ms ✔ ✔ +control communities, RTT, not peers > 5 ms + AS3 ✔ ✔ +control communities, RTT, only peers <= 15 ms ✔ ✔ +control communities, RTT, only peers <= 5 ms ✔ ✔ +control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ✔ ✔ +control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ✔ ✔ +control communities, announce to AS1 only ✔ ✔ +control communities, announce to all except AS1 ✔ ✔ +control communities, don't announce to any ✔ ✔ +control communities, prepend once to AS1 ✔ ✔ +control communities, prepend once to any ✔ ✔ +control communities, prepend thrice to AS1, once to others ✔ ✔ +control communities, prepend thrice to any ✔ ✔ +control communities, prepend twice to AS2 ✔ ✔ +control communities, prepend twice to any ✔ ✔ +good prefixes because of use_arin_bulk_whois_data ✔ ✔ +good prefixes because of use_registrobr_bulk_whois_data ✔ ✔ +good prefixes because of use_rpki_roas_as_route_objects: covering ✔ ✔ +good prefixes because of use_rpki_roas_as_route_objects: exact ✔ ✔ +good prefixes received by rs ✔ ✔ +good prefixes received by rs: IRRdb white-list ✔ ✔ +good prefixes received by rs: non-client NEXT_HOP ✔ ✔ +gshut by a not enabled client ✔ ✔ +gshut by an enabled client ✔ ✔ +log contains errors ✔ ✔ +other communities not scrubbed by rs (lrg) ✔ ✔ +other communities not scrubbed by rs (std) ✔ ✔ +prefixes from AS101 received by its upstreams ✔ ✔ +prefixes from AS101 received by rs ✔ ✔ +prefixes received by clients: AS1_1 ✔ ✔ +prefixes received by clients: AS1_2 ✔ ✔ +prefixes received by clients: AS2 ✔ ✔ +prefixes received by clients: AS3 ✔ ✔ +prefixes received by clients: AS3 (with ADD-PATH) ✔ ✔ +reconfigure ✔ ✔ +session configured via local include files ✔ ✔ +=============================================================================== ======== =========== ================ ================ ================== + gshut, IPv4 +++++++++++ diff --git a/tests/last b/tests/last index c0407b0c..44cdf328 100644 --- a/tests/last +++ b/tests/last @@ -116,6 +116,11 @@ Program config: setup, change a template file then fix it ... ok Program config: setup, then remove templates ... ok Program config: setup, remove templates then fix it ... ok Clients from Euro-IX: IXP-Manager workaround ... ok +Clients from Euro-IX: merge local custom clients, add missing client ... ok +Clients from Euro-IX: merge local custom clients, add/change settings ... ok +Clients from Euro-IX: merge local custom clients, broken custom file 1 ... ok +Clients from Euro-IX: merge local custom clients, broken custom file 2 ... ok +Clients from Euro-IX: merge local custom clients, broken custom file 3 ... ok Clients from Euro-IX: official basic example ... ok Clients from Euro-IX: official more complex example ... ok Clients from Euro-IX: --routeserver-only filter ... ok @@ -195,7 +200,7 @@ RTT getter parser: new line only ... ok RTT getter parser: none ... ok ---------------------------------------------------------------------- -Ran 195 tests in 40.249s +Ran 200 tests in 99.544s OK External resources: ARIN Whois database dump ... ok @@ -212,7 +217,7 @@ External resources: prefixes from AS-SET via bgpq3 ... ok External resources: prefixes from AS-SET via bgpq4 ... ok ---------------------------------------------------------------------- -Ran 12 tests in 46.359s +Ran 12 tests in 50.299s OK Live test, BIRD, hooks example, IPv4: setting instances up... @@ -229,7 +234,7 @@ Live test, BIRD, hooks example, IPv6: dumping routes... Live test, BIRD, hooks example, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 12.860s +Ran 4 tests in 13.036s OK Live test, BIRD, BGP communities, IPv4: setting instances up... @@ -268,7 +273,7 @@ Live test, BIRD, BGP communities, IPv6: dumping routes... Live test, BIRD, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 54.796s +Ran 26 tests in 55.019s OK Live test, BIRD, default config, IPv4: setting instances up... @@ -285,7 +290,7 @@ Live test, BIRD, default config, IPv6: dumping routes... Live test, BIRD, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 13.381s +Ran 4 tests in 13.252s OK Live test, BIRD, global scenario, IPv4: setting instances up... @@ -460,6 +465,93 @@ Live test, BIRD, global scenario, IPv4, tag: log contains errors ... ok Live test, BIRD, global scenario, IPv4, tag: dumping rs config... Live test, BIRD, global scenario, IPv4, tag: dumping routes... Live test, BIRD, global scenario, IPv4, tag: stopping instances... +Live test, BIRD, global scenario, IPv4, tag&reject: setting instances up... +Live test, BIRD, global scenario, IPv4, tag&reject: instances setup ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: sessions are up ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: session configured via local include files ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: gshut by an enabled client ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: reconfigure ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: log contains errors ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: dumping rs config... +Live test, BIRD, global scenario, IPv4, tag&reject: dumping routes... +Live test, BIRD, global scenario, IPv4, tag&reject: stopping instances... Live test, BIRD, global scenario, IPv6: setting instances up... Live test, BIRD, global scenario, IPv6: instances setup ... ok Live test, BIRD, global scenario, IPv6: sessions are up ... ok @@ -632,9 +724,96 @@ Live test, BIRD, global scenario, IPv6, tag: log contains errors ... ok Live test, BIRD, global scenario, IPv6, tag: dumping rs config... Live test, BIRD, global scenario, IPv6, tag: dumping routes... Live test, BIRD, global scenario, IPv6, tag: stopping instances... +Live test, BIRD, global scenario, IPv6, tag&reject: setting instances up... +Live test, BIRD, global scenario, IPv6, tag&reject: instances setup ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: sessions are up ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: session configured via local include files ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: gshut by an enabled client ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: reconfigure ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: log contains errors ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: dumping rs config... +Live test, BIRD, global scenario, IPv6, tag&reject: dumping routes... +Live test, BIRD, global scenario, IPv6, tag&reject: stopping instances... ---------------------------------------------------------------------- -Ran 328 tests in 257.676s +Ran 494 tests in 393.658s OK Live test, BIRD, gshut, IPv4: setting instances up... @@ -657,7 +836,7 @@ Live test, BIRD, gshut, IPv6: dumping routes... Live test, BIRD, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 39.521s +Ran 10 tests in 40.126s OK Live test, BIRD, max-prefix, IPv4: setting instances up... @@ -688,7 +867,7 @@ Live test, BIRD, max-prefix, IPv6: dumping routes... Live test, BIRD, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 18 tests in 62.000s +Ran 18 tests in 63.571s OK Live test, BIRD, path hiding, mitigation off, IPv4: setting instances up... @@ -745,7 +924,7 @@ Live test, BIRD, path hiding, mitigation on, IPv6: dumping routes... Live test, BIRD, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 151.005s +Ran 36 tests in 151.866s OK Live test, BIRD, examples, rich config, IPv4: setting instances up... @@ -762,7 +941,7 @@ Live test, BIRD, examples, rich config, IPv6: dumping routes... Live test, BIRD, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 25.028s +Ran 4 tests in 29.364s OK Live test, BIRD, RPKI INVALID tagging, IPv4: setting instances up... @@ -803,7 +982,7 @@ Live test, BIRD, RPKI INVALID tagging, IPv6: dumping routes... Live test, BIRD, RPKI INVALID tagging, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 28 tests in 73.592s +Ran 28 tests in 74.620s OK Live test, BIRD, tag prefix/origin in AS-SET, IPv4: setting instances up... @@ -990,7 +1169,7 @@ Live test, BIRD, tag prefix/origin empty AS-SET, IPv6: dumping routes... Live test, BIRD, tag prefix/origin empty AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 144.614s +Ran 166 tests in 147.812s OK Live test, BIRD, 'tag' reject policy scenario, IPv4: setting instances up... @@ -1047,7 +1226,7 @@ Live test, BIRD, 'tag' reject policy scenario, IPv6: dumping routes... Live test, BIRD, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 107.856s +Ran 44 tests in 102.124s OK (SKIP=1) Live test, BIRD v2, RTR protocol: setting instances up... @@ -1058,7 +1237,7 @@ Live test, BIRD v2, RTR protocol: dumping routes... Live test, BIRD v2, RTR protocol: stopping instances... ---------------------------------------------------------------------- -Ran 2 tests in 6.884s +Ran 2 tests in 6.575s OK Live test, BIRD v2, BGP communities, IPv4: setting instances up... @@ -1097,7 +1276,7 @@ Live test, BIRD v2, BGP communities, IPv6: dumping routes... Live test, BIRD v2, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 60.695s +Ran 26 tests in 56.091s OK Live test, BIRD v2, default config, IPv4: setting instances up... @@ -1114,7 +1293,7 @@ Live test, BIRD v2, default config, IPv6: dumping routes... Live test, BIRD v2, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 13.437s +Ran 4 tests in 13.677s OK Live test, BIRD v2, global scenario, IPv4: setting instances up... @@ -1289,6 +1468,93 @@ Live test, BIRD v2, global scenario, IPv4, tag: log contains errors ... ok Live test, BIRD v2, global scenario, IPv4, tag: dumping rs config... Live test, BIRD v2, global scenario, IPv4, tag: dumping routes... Live test, BIRD v2, global scenario, IPv4, tag: stopping instances... +Live test, BIRD v2, global scenario, IPv4, tag&reject: setting instances up... +Live test, BIRD v2, global scenario, IPv4, tag&reject: instances setup ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: sessions are up ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: session configured via local include files ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: gshut by an enabled client ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: reconfigure ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: log contains errors ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: dumping rs config... +Live test, BIRD v2, global scenario, IPv4, tag&reject: dumping routes... +Live test, BIRD v2, global scenario, IPv4, tag&reject: stopping instances... Live test, BIRD v2, global scenario, IPv6: setting instances up... Live test, BIRD v2, global scenario, IPv6: instances setup ... ok Live test, BIRD v2, global scenario, IPv6: sessions are up ... ok @@ -1461,9 +1727,96 @@ Live test, BIRD v2, global scenario, IPv6, tag: log contains errors ... ok Live test, BIRD v2, global scenario, IPv6, tag: dumping rs config... Live test, BIRD v2, global scenario, IPv6, tag: dumping routes... Live test, BIRD v2, global scenario, IPv6, tag: stopping instances... +Live test, BIRD v2, global scenario, IPv6, tag&reject: setting instances up... +Live test, BIRD v2, global scenario, IPv6, tag&reject: instances setup ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: sessions are up ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: session configured via local include files ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: gshut by an enabled client ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: reconfigure ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: log contains errors ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: dumping rs config... +Live test, BIRD v2, global scenario, IPv6, tag&reject: dumping routes... +Live test, BIRD v2, global scenario, IPv6, tag&reject: stopping instances... ---------------------------------------------------------------------- -Ran 328 tests in 259.840s +Ran 494 tests in 396.083s OK Live test, BIRD v2, gshut, IPv4: setting instances up... @@ -1486,7 +1839,7 @@ Live test, BIRD v2, gshut, IPv6: dumping routes... Live test, BIRD v2, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 38.868s +Ran 10 tests in 40.202s OK Live test, BIRD v2, max-prefix, IPv4: setting instances up... @@ -1517,7 +1870,7 @@ Live test, BIRD v2, max-prefix, IPv6: dumping routes... Live test, BIRD v2, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 18 tests in 63.061s +Ran 18 tests in 63.195s OK Live test, BIRD v2, path hiding, mitigation off, IPv4: setting instances up... @@ -1574,7 +1927,7 @@ Live test, BIRD v2, path hiding, mitigation on, IPv6: dumping routes... Live test, BIRD v2, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 152.255s +Ran 36 tests in 152.361s OK Live test, BIRD v2, examples, rich config, IPv4: setting instances up... @@ -1591,7 +1944,7 @@ Live test, BIRD v2, examples, rich config, IPv6: dumping routes... Live test, BIRD v2, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 25.164s +Ran 4 tests in 29.814s OK Live test, BIRD v2, RPKI INVALID tagging, IPv4: setting instances up... @@ -1632,7 +1985,7 @@ Live test, BIRD v2, RPKI INVALID tagging, IPv6: dumping routes... Live test, BIRD v2, RPKI INVALID tagging, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 28 tests in 69.685s +Ran 28 tests in 74.989s OK Live test, BIRD v2, tag prefix/origin in AS-SET, IPv4: setting instances up... @@ -1819,7 +2172,7 @@ Live test, BIRD v2, tag prefix/origin empty AS-SET, IPv6: dumping routes... Live test, BIRD v2, tag prefix/origin empty AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 151.721s +Ran 166 tests in 148.459s OK Live test, BIRD v2, 'tag' reject policy scenario, IPv4: setting instances up... @@ -1876,7 +2229,7 @@ Live test, BIRD v2, 'tag' reject policy scenario, IPv6: dumping routes... Live test, BIRD v2, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 108.835s +Ran 44 tests in 109.129s OK (SKIP=1) Live test, OpenBGPD 6.6p0, BGP communities, IPv4: setting instances up... @@ -1915,7 +2268,7 @@ Live test, OpenBGPD 6.6p0, BGP communities, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 60.575s +Ran 26 tests in 66.252s OK Live test, OpenBGPD 6.6p0, default config, IPv4: setting instances up... @@ -1932,7 +2285,7 @@ Live test, OpenBGPD 6.6p0, default config, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 10.794s +Ran 4 tests in 11.051s OK Live test, OpenBGPD 6.6p0, global scenario, IPv4: setting instances up... @@ -2111,7 +2464,7 @@ Live test, OpenBGPD 6.6p0, global scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, global scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 132.468s +Ran 166 tests in 134.408s OK (SKIP=2) Live test, OpenBGPD 6.6p0, gshut, IPv4: setting instances up... @@ -2134,7 +2487,7 @@ Live test, OpenBGPD 6.6p0, gshut, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 49.834s +Ran 10 tests in 45.239s OK Live test, OpenBGPD 6.6p0, max-prefix, IPv4: setting instances up... @@ -2157,7 +2510,7 @@ Live test, OpenBGPD 6.6p0, max-prefix, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 325.246s +Ran 10 tests in 328.564s OK Live test, OpenBGPD 6.6p0, path hiding, mitigation off, IPv4: setting instances up... @@ -2214,7 +2567,7 @@ Live test, OpenBGPD 6.6p0, path hiding, mitigation on, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 165.710s +Ran 36 tests in 167.889s OK (SKIP=4) Live test, OpenBGPD 6.6p0, examples, rich config, IPv4: setting instances up... @@ -2231,7 +2584,7 @@ Live test, OpenBGPD 6.6p0, examples, rich config, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 23.705s +Ran 4 tests in 27.814s OK Live test, OpenBGPD 6.6p0, tag prefix/origin empty AS-SET, IPv4: setting instances up... @@ -2418,7 +2771,7 @@ Live test, OpenBGPD 6.6p0, tag prefix/origin in AS-SET, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, tag prefix/origin in AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 162.705s +Ran 166 tests in 164.873s OK Live test, OpenBGPD 6.6p0, 'tag' reject policy scenario, IPv4: setting instances up... @@ -2475,7 +2828,7 @@ Live test, OpenBGPD 6.6p0, 'tag' reject policy scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 108.215s +Ran 44 tests in 114.596s OK (SKIP=3) Live test, OpenBGPD 6.5, BGP communities, IPv4: setting instances up... @@ -2514,7 +2867,7 @@ Live test, OpenBGPD 6.5, BGP communities, IPv6: dumping routes... Live test, OpenBGPD 6.5, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 192.469s +Ran 26 tests in 196.603s OK Live test, OpenBGPD 6.5, default config, IPv4: setting instances up... @@ -2531,7 +2884,7 @@ Live test, OpenBGPD 6.5, default config, IPv6: dumping routes... Live test, OpenBGPD 6.5, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 42.505s +Ran 4 tests in 43.233s OK Live test, OpenBGPD 6.5, global scenario, IPv4: setting instances up... @@ -2710,7 +3063,7 @@ Live test, OpenBGPD 6.5, global scenario, IPv6: dumping routes... Live test, OpenBGPD 6.5, global scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 186.166s +Ran 166 tests in 189.588s OK (SKIP=2) Live test, OpenBGPD 6.5, gshut, IPv4: setting instances up... @@ -2733,7 +3086,7 @@ Live test, OpenBGPD 6.5, gshut, IPv6: dumping routes... Live test, OpenBGPD 6.5, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 84.525s +Ran 10 tests in 85.922s OK Live test, OpenBGPD 6.5, max-prefix, IPv4: setting instances up... @@ -2756,7 +3109,7 @@ Live test, OpenBGPD 6.5, max-prefix, IPv6: dumping routes... Live test, OpenBGPD 6.5, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 472.889s +Ran 10 tests in 468.559s OK Live test, OpenBGPD 6.5, path hiding, mitigation off, IPv4: setting instances up... @@ -2813,7 +3166,7 @@ Live test, OpenBGPD 6.5, path hiding, mitigation on, IPv6: dumping routes... Live test, OpenBGPD 6.5, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 243.213s +Ran 36 tests in 250.864s OK (SKIP=4) Live test, OpenBGPD 6.5, examples, rich config, IPv4: setting instances up... @@ -2830,7 +3183,7 @@ Live test, OpenBGPD 6.5, examples, rich config, IPv6: dumping routes... Live test, OpenBGPD 6.5, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 53.123s +Ran 4 tests in 61.844s OK Live test, OpenBGPD 6.5, tag prefix/origin empty AS-SET, IPv4: setting instances up... @@ -3017,7 +3370,7 @@ Live test, OpenBGPD 6.5, tag prefix/origin in AS-SET, IPv6: dumping routes... Live test, OpenBGPD 6.5, tag prefix/origin in AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 229.325s +Ran 166 tests in 241.696s OK Live test, OpenBGPD 6.5, 'tag' reject policy scenario, IPv4: setting instances up... @@ -3074,7 +3427,7 @@ Live test, OpenBGPD 6.5, 'tag' reject policy scenario, IPv6: dumping routes... Live test, OpenBGPD 6.5, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 166.639s +Ran 44 tests in 173.327s OK (SKIP=3) Live test, OpenBGPD 6.6, BGP communities, IPv4: setting instances up... @@ -3113,7 +3466,7 @@ Live test, OpenBGPD 6.6, BGP communities, IPv6: dumping routes... Live test, OpenBGPD 6.6, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 210.998s +Ran 26 tests in 220.182s OK Live test, OpenBGPD 6.6, default config, IPv4: setting instances up... @@ -3130,7 +3483,7 @@ Live test, OpenBGPD 6.6, default config, IPv6: dumping routes... Live test, OpenBGPD 6.6, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 40.648s +Ran 4 tests in 43.786s OK Live test, OpenBGPD 6.6, global scenario, IPv4: setting instances up... @@ -3309,7 +3662,7 @@ Live test, OpenBGPD 6.6, global scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6, global scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 181.832s +Ran 166 tests in 200.028s OK (SKIP=2) Live test, OpenBGPD 6.6, gshut, IPv4: setting instances up... @@ -3332,7 +3685,7 @@ Live test, OpenBGPD 6.6, gshut, IPv6: dumping routes... Live test, OpenBGPD 6.6, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 80.758s +Ran 10 tests in 87.064s OK Live test, OpenBGPD 6.6, max-prefix, IPv4: setting instances up... @@ -3355,7 +3708,7 @@ Live test, OpenBGPD 6.6, max-prefix, IPv6: dumping routes... Live test, OpenBGPD 6.6, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 478.757s +Ran 10 tests in 474.432s OK Live test, OpenBGPD 6.6, path hiding, mitigation off, IPv4: setting instances up... @@ -3412,7 +3765,7 @@ Live test, OpenBGPD 6.6, path hiding, mitigation on, IPv6: dumping routes... Live test, OpenBGPD 6.6, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 247.322s +Ran 36 tests in 251.321s OK (SKIP=4) Live test, OpenBGPD 6.6, examples, rich config, IPv4: setting instances up... @@ -3429,7 +3782,7 @@ Live test, OpenBGPD 6.6, examples, rich config, IPv6: dumping routes... Live test, OpenBGPD 6.6, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 56.940s +Ran 4 tests in 63.733s OK Live test, OpenBGPD 6.6, tag prefix/origin empty AS-SET, IPv4: setting instances up... @@ -3616,7 +3969,7 @@ Live test, OpenBGPD 6.6, tag prefix/origin in AS-SET, IPv6: dumping routes... Live test, OpenBGPD 6.6, tag prefix/origin in AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 237.184s +Ran 166 tests in 242.344s OK Live test, OpenBGPD 6.6, 'tag' reject policy scenario, IPv4: setting instances up... @@ -3673,6 +4026,6 @@ Live test, OpenBGPD 6.6, 'tag' reject policy scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 287.676s +Ran 44 tests in 174.215s OK (SKIP=3) diff --git a/tests/last.json b/tests/last.json index 60368608..328a8ed4 100644 --- a/tests/last.json +++ b/tests/last.json @@ -1 +1 @@ -{"unique_test_cases": 2910} +{"unique_test_cases": 3247} diff --git a/tests/last_results/extres.last b/tests/last_results/extres.last index f73fcb55..e978133c 100644 --- a/tests/last_results/extres.last +++ b/tests/last_results/extres.last @@ -12,6 +12,6 @@ External resources: prefixes from AS-SET via bgpq3 ... ok External resources: prefixes from AS-SET via bgpq4 ... ok ---------------------------------------------------------------------- -Ran 12 tests in 46.359s +Ran 12 tests in 50.299s OK diff --git a/tests/last_results/live_bird2_rpki_rtr_example_bird2.last b/tests/last_results/live_bird2_rpki_rtr_example_bird2.last index 95f59fde..36119a3c 100644 --- a/tests/last_results/live_bird2_rpki_rtr_example_bird2.last +++ b/tests/last_results/live_bird2_rpki_rtr_example_bird2.last @@ -6,6 +6,6 @@ Live test, BIRD v2, RTR protocol: dumping routes... Live test, BIRD v2, RTR protocol: stopping instances... ---------------------------------------------------------------------- -Ran 2 tests in 6.884s +Ran 2 tests in 6.575s OK diff --git a/tests/last_results/live_bird_hooks_example_bird1.last b/tests/last_results/live_bird_hooks_example_bird1.last index 43472b2e..0368c07b 100644 --- a/tests/last_results/live_bird_hooks_example_bird1.last +++ b/tests/last_results/live_bird_hooks_example_bird1.last @@ -12,6 +12,6 @@ Live test, BIRD, hooks example, IPv6: dumping routes... Live test, BIRD, hooks example, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 12.860s +Ran 4 tests in 13.036s OK diff --git a/tests/last_results/live_communities_bird1.last b/tests/last_results/live_communities_bird1.last index 131ca883..77d32ba1 100644 --- a/tests/last_results/live_communities_bird1.last +++ b/tests/last_results/live_communities_bird1.last @@ -34,6 +34,6 @@ Live test, BIRD, BGP communities, IPv6: dumping routes... Live test, BIRD, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 54.796s +Ran 26 tests in 55.019s OK diff --git a/tests/last_results/live_communities_bird2.last b/tests/last_results/live_communities_bird2.last index 61c05b9b..d172c80d 100644 --- a/tests/last_results/live_communities_bird2.last +++ b/tests/last_results/live_communities_bird2.last @@ -34,6 +34,6 @@ Live test, BIRD v2, BGP communities, IPv6: dumping routes... Live test, BIRD v2, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 60.695s +Ran 26 tests in 56.091s OK diff --git a/tests/last_results/live_communities_openbgpd_latest.last b/tests/last_results/live_communities_openbgpd_latest.last index 577ec888..1322ecfd 100644 --- a/tests/last_results/live_communities_openbgpd_latest.last +++ b/tests/last_results/live_communities_openbgpd_latest.last @@ -34,6 +34,6 @@ Live test, OpenBGPD 6.6, BGP communities, IPv6: dumping routes... Live test, OpenBGPD 6.6, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 210.998s +Ran 26 tests in 220.182s OK diff --git a/tests/last_results/live_communities_openbgpd_portable.last b/tests/last_results/live_communities_openbgpd_portable.last index c343fb48..238d9930 100644 --- a/tests/last_results/live_communities_openbgpd_portable.last +++ b/tests/last_results/live_communities_openbgpd_portable.last @@ -34,6 +34,6 @@ Live test, OpenBGPD 6.6p0, BGP communities, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 60.575s +Ran 26 tests in 66.252s OK diff --git a/tests/last_results/live_communities_openbgpd_previous.last b/tests/last_results/live_communities_openbgpd_previous.last index 68b0014b..33d04111 100644 --- a/tests/last_results/live_communities_openbgpd_previous.last +++ b/tests/last_results/live_communities_openbgpd_previous.last @@ -34,6 +34,6 @@ Live test, OpenBGPD 6.5, BGP communities, IPv6: dumping routes... Live test, OpenBGPD 6.5, BGP communities, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 26 tests in 192.469s +Ran 26 tests in 196.603s OK diff --git a/tests/last_results/live_default_bird1.last b/tests/last_results/live_default_bird1.last index 5636307d..2e2a8588 100644 --- a/tests/last_results/live_default_bird1.last +++ b/tests/last_results/live_default_bird1.last @@ -12,6 +12,6 @@ Live test, BIRD, default config, IPv6: dumping routes... Live test, BIRD, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 13.381s +Ran 4 tests in 13.252s OK diff --git a/tests/last_results/live_default_bird2.last b/tests/last_results/live_default_bird2.last index a6be2619..412ee868 100644 --- a/tests/last_results/live_default_bird2.last +++ b/tests/last_results/live_default_bird2.last @@ -12,6 +12,6 @@ Live test, BIRD v2, default config, IPv6: dumping routes... Live test, BIRD v2, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 13.437s +Ran 4 tests in 13.677s OK diff --git a/tests/last_results/live_default_openbgpd_latest.last b/tests/last_results/live_default_openbgpd_latest.last index 9c185ca5..0c251497 100644 --- a/tests/last_results/live_default_openbgpd_latest.last +++ b/tests/last_results/live_default_openbgpd_latest.last @@ -12,6 +12,6 @@ Live test, OpenBGPD 6.6, default config, IPv6: dumping routes... Live test, OpenBGPD 6.6, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 40.648s +Ran 4 tests in 43.786s OK diff --git a/tests/last_results/live_default_openbgpd_portable.last b/tests/last_results/live_default_openbgpd_portable.last index f79c51e7..05fa7850 100644 --- a/tests/last_results/live_default_openbgpd_portable.last +++ b/tests/last_results/live_default_openbgpd_portable.last @@ -12,6 +12,6 @@ Live test, OpenBGPD 6.6p0, default config, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 10.794s +Ran 4 tests in 11.051s OK diff --git a/tests/last_results/live_default_openbgpd_previous.last b/tests/last_results/live_default_openbgpd_previous.last index 4d429a7b..1411ad06 100644 --- a/tests/last_results/live_default_openbgpd_previous.last +++ b/tests/last_results/live_default_openbgpd_previous.last @@ -12,6 +12,6 @@ Live test, OpenBGPD 6.5, default config, IPv6: dumping routes... Live test, OpenBGPD 6.5, default config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 42.505s +Ran 4 tests in 43.233s OK diff --git a/tests/last_results/live_global_bird1.last b/tests/last_results/live_global_bird1.last index d525ae28..6299729c 100644 --- a/tests/last_results/live_global_bird1.last +++ b/tests/last_results/live_global_bird1.last @@ -170,6 +170,93 @@ Live test, BIRD, global scenario, IPv4, tag: log contains errors ... ok Live test, BIRD, global scenario, IPv4, tag: dumping rs config... Live test, BIRD, global scenario, IPv4, tag: dumping routes... Live test, BIRD, global scenario, IPv4, tag: stopping instances... +Live test, BIRD, global scenario, IPv4, tag&reject: setting instances up... +Live test, BIRD, global scenario, IPv4, tag&reject: instances setup ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: sessions are up ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: session configured via local include files ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: gshut by an enabled client ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: reconfigure ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: log contains errors ... ok +Live test, BIRD, global scenario, IPv4, tag&reject: dumping rs config... +Live test, BIRD, global scenario, IPv4, tag&reject: dumping routes... +Live test, BIRD, global scenario, IPv4, tag&reject: stopping instances... Live test, BIRD, global scenario, IPv6: setting instances up... Live test, BIRD, global scenario, IPv6: instances setup ... ok Live test, BIRD, global scenario, IPv6: sessions are up ... ok @@ -342,8 +429,95 @@ Live test, BIRD, global scenario, IPv6, tag: log contains errors ... ok Live test, BIRD, global scenario, IPv6, tag: dumping rs config... Live test, BIRD, global scenario, IPv6, tag: dumping routes... Live test, BIRD, global scenario, IPv6, tag: stopping instances... +Live test, BIRD, global scenario, IPv6, tag&reject: setting instances up... +Live test, BIRD, global scenario, IPv6, tag&reject: instances setup ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: sessions are up ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: session configured via local include files ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: gshut by an enabled client ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: reconfigure ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: log contains errors ... ok +Live test, BIRD, global scenario, IPv6, tag&reject: dumping rs config... +Live test, BIRD, global scenario, IPv6, tag&reject: dumping routes... +Live test, BIRD, global scenario, IPv6, tag&reject: stopping instances... ---------------------------------------------------------------------- -Ran 328 tests in 257.676s +Ran 494 tests in 393.658s OK diff --git a/tests/last_results/live_global_bird2.last b/tests/last_results/live_global_bird2.last index 503cc330..8f2e2c47 100644 --- a/tests/last_results/live_global_bird2.last +++ b/tests/last_results/live_global_bird2.last @@ -170,6 +170,93 @@ Live test, BIRD v2, global scenario, IPv4, tag: log contains errors ... ok Live test, BIRD v2, global scenario, IPv4, tag: dumping rs config... Live test, BIRD v2, global scenario, IPv4, tag: dumping routes... Live test, BIRD v2, global scenario, IPv4, tag: stopping instances... +Live test, BIRD v2, global scenario, IPv4, tag&reject: setting instances up... +Live test, BIRD v2, global scenario, IPv4, tag&reject: instances setup ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: sessions are up ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: session configured via local include files ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: gshut by an enabled client ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: reconfigure ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: log contains errors ... ok +Live test, BIRD v2, global scenario, IPv4, tag&reject: dumping rs config... +Live test, BIRD v2, global scenario, IPv4, tag&reject: dumping routes... +Live test, BIRD v2, global scenario, IPv4, tag&reject: stopping instances... Live test, BIRD v2, global scenario, IPv6: setting instances up... Live test, BIRD v2, global scenario, IPv6: instances setup ... ok Live test, BIRD v2, global scenario, IPv6: sessions are up ... ok @@ -342,8 +429,95 @@ Live test, BIRD v2, global scenario, IPv6, tag: log contains errors ... ok Live test, BIRD v2, global scenario, IPv6, tag: dumping rs config... Live test, BIRD v2, global scenario, IPv6, tag: dumping routes... Live test, BIRD v2, global scenario, IPv6, tag: stopping instances... +Live test, BIRD v2, global scenario, IPv6, tag&reject: setting instances up... +Live test, BIRD v2, global scenario, IPv6, tag&reject: instances setup ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: sessions are up ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: session configured via local include files ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_arin_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_registrobr_bulk_whois_data ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: exact ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes because of use_rpki_roas_as_route_objects: covering ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: good prefixes received by rs: non-client NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: not IPv6 global unicast space ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: IRRdb white-list ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: AS_PATH len ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: client blacklist ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: left-most ASN ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (asns list) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: never via route servers ASN in AS-PATH (PeeringDB) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: origin not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: prefix not in AS-SET ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: invalid prefix-len ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: transit-free ASN in AS-PATH from a transit peer ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: unknown NEXT_HOP ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: RPKI ROAs as route objects failed ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: default route ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes not received by clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: bogon (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad prefixes received by rs: global blacklist (wrong tag) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, blackhole request for a covered prefix ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad length) received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, invalid prefix (bad ASN) not propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, valid prefix received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: RPKI, valid prefix propagated to clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes from AS101 received by its upstreams ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes from AS101 received by rs ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad communities as seen by AS101 upstreams ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: bad communities scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (lrg) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: other communities not scrubbed by rs (std) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (lrg cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackhole filtering requests as seen by rs (std cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (BLACKHOLE) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (lrg_cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes as seen by enabled clients (std_cust) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: blackholed prefixes not seen by not enabled clients ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: gshut by an enabled client ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: gshut by a not enabled client ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, announce to AS1 only ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, don't announce to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, announce to all except AS1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend once to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend twice to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend thrice to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend once to AS1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend twice to AS2 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, prepend thrice to AS1, once to others ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to AS1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, NO_EXPORT to any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RFC1997 NO_EXPORT ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, blackhole, not peers > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 15 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers > 5 ms + AS3 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, not peers <= 5 and > 100 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 15 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, only peers <= 5 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, ext comms, prepend 1x > 10 ms, 2x > 20 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x > 100 ms, 2x > 10 ms ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: control communities, RTT, prepend 3x <= 5 ms, 2x <= 20 ms, 1x any ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_1 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS1_2 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS2 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: prefixes received by clients: AS3 (with ADD-PATH) ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: reconfigure ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: log contains errors ... ok +Live test, BIRD v2, global scenario, IPv6, tag&reject: dumping rs config... +Live test, BIRD v2, global scenario, IPv6, tag&reject: dumping routes... +Live test, BIRD v2, global scenario, IPv6, tag&reject: stopping instances... ---------------------------------------------------------------------- -Ran 328 tests in 259.840s +Ran 494 tests in 396.083s OK diff --git a/tests/last_results/live_global_openbgpd_latest.last b/tests/last_results/live_global_openbgpd_latest.last index a9d380b3..8555bcc7 100644 --- a/tests/last_results/live_global_openbgpd_latest.last +++ b/tests/last_results/live_global_openbgpd_latest.last @@ -174,6 +174,6 @@ Live test, OpenBGPD 6.6, global scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6, global scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 181.832s +Ran 166 tests in 200.028s OK (SKIP=2) diff --git a/tests/last_results/live_global_openbgpd_portable.last b/tests/last_results/live_global_openbgpd_portable.last index 9386096e..ae05f2d4 100644 --- a/tests/last_results/live_global_openbgpd_portable.last +++ b/tests/last_results/live_global_openbgpd_portable.last @@ -174,6 +174,6 @@ Live test, OpenBGPD 6.6p0, global scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, global scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 132.468s +Ran 166 tests in 134.408s OK (SKIP=2) diff --git a/tests/last_results/live_global_openbgpd_previous.last b/tests/last_results/live_global_openbgpd_previous.last index 465a73fe..26bfe436 100644 --- a/tests/last_results/live_global_openbgpd_previous.last +++ b/tests/last_results/live_global_openbgpd_previous.last @@ -174,6 +174,6 @@ Live test, OpenBGPD 6.5, global scenario, IPv6: dumping routes... Live test, OpenBGPD 6.5, global scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 186.166s +Ran 166 tests in 189.588s OK (SKIP=2) diff --git a/tests/last_results/live_gshut_bird1.last b/tests/last_results/live_gshut_bird1.last index d4cab592..4d701614 100644 --- a/tests/last_results/live_gshut_bird1.last +++ b/tests/last_results/live_gshut_bird1.last @@ -18,6 +18,6 @@ Live test, BIRD, gshut, IPv6: dumping routes... Live test, BIRD, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 39.521s +Ran 10 tests in 40.126s OK diff --git a/tests/last_results/live_gshut_bird2.last b/tests/last_results/live_gshut_bird2.last index 61f97f30..6a820101 100644 --- a/tests/last_results/live_gshut_bird2.last +++ b/tests/last_results/live_gshut_bird2.last @@ -18,6 +18,6 @@ Live test, BIRD v2, gshut, IPv6: dumping routes... Live test, BIRD v2, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 38.868s +Ran 10 tests in 40.202s OK diff --git a/tests/last_results/live_gshut_openbgpd_latest.last b/tests/last_results/live_gshut_openbgpd_latest.last index be81ef2c..dd9bc081 100644 --- a/tests/last_results/live_gshut_openbgpd_latest.last +++ b/tests/last_results/live_gshut_openbgpd_latest.last @@ -18,6 +18,6 @@ Live test, OpenBGPD 6.6, gshut, IPv6: dumping routes... Live test, OpenBGPD 6.6, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 80.758s +Ran 10 tests in 87.064s OK diff --git a/tests/last_results/live_gshut_openbgpd_portable.last b/tests/last_results/live_gshut_openbgpd_portable.last index d451843f..de4f17db 100644 --- a/tests/last_results/live_gshut_openbgpd_portable.last +++ b/tests/last_results/live_gshut_openbgpd_portable.last @@ -18,6 +18,6 @@ Live test, OpenBGPD 6.6p0, gshut, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 49.834s +Ran 10 tests in 45.239s OK diff --git a/tests/last_results/live_gshut_openbgpd_previous.last b/tests/last_results/live_gshut_openbgpd_previous.last index 9f06e43c..e641b5a3 100644 --- a/tests/last_results/live_gshut_openbgpd_previous.last +++ b/tests/last_results/live_gshut_openbgpd_previous.last @@ -18,6 +18,6 @@ Live test, OpenBGPD 6.5, gshut, IPv6: dumping routes... Live test, OpenBGPD 6.5, gshut, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 84.525s +Ran 10 tests in 85.922s OK diff --git a/tests/last_results/live_max_prefix_bird1.last b/tests/last_results/live_max_prefix_bird1.last index 89069f08..50976957 100644 --- a/tests/last_results/live_max_prefix_bird1.last +++ b/tests/last_results/live_max_prefix_bird1.last @@ -26,6 +26,6 @@ Live test, BIRD, max-prefix, IPv6: dumping routes... Live test, BIRD, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 18 tests in 62.000s +Ran 18 tests in 63.571s OK diff --git a/tests/last_results/live_max_prefix_bird2.last b/tests/last_results/live_max_prefix_bird2.last index 7f7a7907..e1a9682d 100644 --- a/tests/last_results/live_max_prefix_bird2.last +++ b/tests/last_results/live_max_prefix_bird2.last @@ -26,6 +26,6 @@ Live test, BIRD v2, max-prefix, IPv6: dumping routes... Live test, BIRD v2, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 18 tests in 63.061s +Ran 18 tests in 63.195s OK diff --git a/tests/last_results/live_max_prefix_openbgpd_latest.last b/tests/last_results/live_max_prefix_openbgpd_latest.last index 8c610106..48980b56 100644 --- a/tests/last_results/live_max_prefix_openbgpd_latest.last +++ b/tests/last_results/live_max_prefix_openbgpd_latest.last @@ -18,6 +18,6 @@ Live test, OpenBGPD 6.6, max-prefix, IPv6: dumping routes... Live test, OpenBGPD 6.6, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 478.757s +Ran 10 tests in 474.432s OK diff --git a/tests/last_results/live_max_prefix_openbgpd_portable.last b/tests/last_results/live_max_prefix_openbgpd_portable.last index 6eed5ea7..3dfa3b3a 100644 --- a/tests/last_results/live_max_prefix_openbgpd_portable.last +++ b/tests/last_results/live_max_prefix_openbgpd_portable.last @@ -18,6 +18,6 @@ Live test, OpenBGPD 6.6p0, max-prefix, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 325.246s +Ran 10 tests in 328.564s OK diff --git a/tests/last_results/live_max_prefix_openbgpd_previous.last b/tests/last_results/live_max_prefix_openbgpd_previous.last index 570aef9a..88ee3562 100644 --- a/tests/last_results/live_max_prefix_openbgpd_previous.last +++ b/tests/last_results/live_max_prefix_openbgpd_previous.last @@ -18,6 +18,6 @@ Live test, OpenBGPD 6.5, max-prefix, IPv6: dumping routes... Live test, OpenBGPD 6.5, max-prefix, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 10 tests in 472.889s +Ran 10 tests in 468.559s OK diff --git a/tests/last_results/live_path_hiding_bird1.last b/tests/last_results/live_path_hiding_bird1.last index a86bef33..cd67e6c7 100644 --- a/tests/last_results/live_path_hiding_bird1.last +++ b/tests/last_results/live_path_hiding_bird1.last @@ -52,6 +52,6 @@ Live test, BIRD, path hiding, mitigation on, IPv6: dumping routes... Live test, BIRD, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 151.005s +Ran 36 tests in 151.866s OK diff --git a/tests/last_results/live_path_hiding_bird2.last b/tests/last_results/live_path_hiding_bird2.last index 7e8dbbc4..2a230520 100644 --- a/tests/last_results/live_path_hiding_bird2.last +++ b/tests/last_results/live_path_hiding_bird2.last @@ -52,6 +52,6 @@ Live test, BIRD v2, path hiding, mitigation on, IPv6: dumping routes... Live test, BIRD v2, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 152.255s +Ran 36 tests in 152.361s OK diff --git a/tests/last_results/live_path_hiding_openbgpd_latest.last b/tests/last_results/live_path_hiding_openbgpd_latest.last index 5d9cdcac..5a785127 100644 --- a/tests/last_results/live_path_hiding_openbgpd_latest.last +++ b/tests/last_results/live_path_hiding_openbgpd_latest.last @@ -52,6 +52,6 @@ Live test, OpenBGPD 6.6, path hiding, mitigation on, IPv6: dumping routes... Live test, OpenBGPD 6.6, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 247.322s +Ran 36 tests in 251.321s OK (SKIP=4) diff --git a/tests/last_results/live_path_hiding_openbgpd_portable.last b/tests/last_results/live_path_hiding_openbgpd_portable.last index 40fe2c8c..ff18e746 100644 --- a/tests/last_results/live_path_hiding_openbgpd_portable.last +++ b/tests/last_results/live_path_hiding_openbgpd_portable.last @@ -52,6 +52,6 @@ Live test, OpenBGPD 6.6p0, path hiding, mitigation on, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 165.710s +Ran 36 tests in 167.889s OK (SKIP=4) diff --git a/tests/last_results/live_path_hiding_openbgpd_previous.last b/tests/last_results/live_path_hiding_openbgpd_previous.last index e5d47b44..72e39738 100644 --- a/tests/last_results/live_path_hiding_openbgpd_previous.last +++ b/tests/last_results/live_path_hiding_openbgpd_previous.last @@ -52,6 +52,6 @@ Live test, OpenBGPD 6.5, path hiding, mitigation on, IPv6: dumping routes... Live test, OpenBGPD 6.5, path hiding, mitigation on, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 36 tests in 243.213s +Ran 36 tests in 250.864s OK (SKIP=4) diff --git a/tests/last_results/live_rich_example_bird1.last b/tests/last_results/live_rich_example_bird1.last index 97d11e6b..f9c89231 100644 --- a/tests/last_results/live_rich_example_bird1.last +++ b/tests/last_results/live_rich_example_bird1.last @@ -12,6 +12,6 @@ Live test, BIRD, examples, rich config, IPv6: dumping routes... Live test, BIRD, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 25.028s +Ran 4 tests in 29.364s OK diff --git a/tests/last_results/live_rich_example_bird2.last b/tests/last_results/live_rich_example_bird2.last index 931ac231..29bb5305 100644 --- a/tests/last_results/live_rich_example_bird2.last +++ b/tests/last_results/live_rich_example_bird2.last @@ -12,6 +12,6 @@ Live test, BIRD v2, examples, rich config, IPv6: dumping routes... Live test, BIRD v2, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 25.164s +Ran 4 tests in 29.814s OK diff --git a/tests/last_results/live_rich_example_openbgpd_latest.last b/tests/last_results/live_rich_example_openbgpd_latest.last index 5c438cc1..fb793b65 100644 --- a/tests/last_results/live_rich_example_openbgpd_latest.last +++ b/tests/last_results/live_rich_example_openbgpd_latest.last @@ -12,6 +12,6 @@ Live test, OpenBGPD 6.6, examples, rich config, IPv6: dumping routes... Live test, OpenBGPD 6.6, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 56.940s +Ran 4 tests in 63.733s OK diff --git a/tests/last_results/live_rich_example_openbgpd_portable.last b/tests/last_results/live_rich_example_openbgpd_portable.last index 48327107..132b10e1 100644 --- a/tests/last_results/live_rich_example_openbgpd_portable.last +++ b/tests/last_results/live_rich_example_openbgpd_portable.last @@ -12,6 +12,6 @@ Live test, OpenBGPD 6.6p0, examples, rich config, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 23.705s +Ran 4 tests in 27.814s OK diff --git a/tests/last_results/live_rich_example_openbgpd_previous.last b/tests/last_results/live_rich_example_openbgpd_previous.last index 60923e61..a615008c 100644 --- a/tests/last_results/live_rich_example_openbgpd_previous.last +++ b/tests/last_results/live_rich_example_openbgpd_previous.last @@ -12,6 +12,6 @@ Live test, OpenBGPD 6.5, examples, rich config, IPv6: dumping routes... Live test, OpenBGPD 6.5, examples, rich config, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 4 tests in 53.123s +Ran 4 tests in 61.844s OK diff --git a/tests/last_results/live_rpki_bird1.last b/tests/last_results/live_rpki_bird1.last index 8afe5bcc..08b046a9 100644 --- a/tests/last_results/live_rpki_bird1.last +++ b/tests/last_results/live_rpki_bird1.last @@ -36,6 +36,6 @@ Live test, BIRD, RPKI INVALID tagging, IPv6: dumping routes... Live test, BIRD, RPKI INVALID tagging, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 28 tests in 73.592s +Ran 28 tests in 74.620s OK diff --git a/tests/last_results/live_rpki_bird2.last b/tests/last_results/live_rpki_bird2.last index 6a0f88a5..dffba23a 100644 --- a/tests/last_results/live_rpki_bird2.last +++ b/tests/last_results/live_rpki_bird2.last @@ -36,6 +36,6 @@ Live test, BIRD v2, RPKI INVALID tagging, IPv6: dumping routes... Live test, BIRD v2, RPKI INVALID tagging, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 28 tests in 69.685s +Ran 28 tests in 74.989s OK diff --git a/tests/last_results/live_tag_as_set_bird1.last b/tests/last_results/live_tag_as_set_bird1.last index 780329f6..ece2426b 100644 --- a/tests/last_results/live_tag_as_set_bird1.last +++ b/tests/last_results/live_tag_as_set_bird1.last @@ -182,6 +182,6 @@ Live test, BIRD, tag prefix/origin empty AS-SET, IPv6: dumping routes... Live test, BIRD, tag prefix/origin empty AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 144.614s +Ran 166 tests in 147.812s OK diff --git a/tests/last_results/live_tag_as_set_bird2.last b/tests/last_results/live_tag_as_set_bird2.last index 03c8786f..ec158acb 100644 --- a/tests/last_results/live_tag_as_set_bird2.last +++ b/tests/last_results/live_tag_as_set_bird2.last @@ -182,6 +182,6 @@ Live test, BIRD v2, tag prefix/origin empty AS-SET, IPv6: dumping routes... Live test, BIRD v2, tag prefix/origin empty AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 151.721s +Ran 166 tests in 148.459s OK diff --git a/tests/last_results/live_tag_as_set_openbgpd_latest.last b/tests/last_results/live_tag_as_set_openbgpd_latest.last index bf1b996e..49d6370e 100644 --- a/tests/last_results/live_tag_as_set_openbgpd_latest.last +++ b/tests/last_results/live_tag_as_set_openbgpd_latest.last @@ -182,6 +182,6 @@ Live test, OpenBGPD 6.6, tag prefix/origin in AS-SET, IPv6: dumping routes... Live test, OpenBGPD 6.6, tag prefix/origin in AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 237.184s +Ran 166 tests in 242.344s OK diff --git a/tests/last_results/live_tag_as_set_openbgpd_portable.last b/tests/last_results/live_tag_as_set_openbgpd_portable.last index 3bbe6519..a0971f2a 100644 --- a/tests/last_results/live_tag_as_set_openbgpd_portable.last +++ b/tests/last_results/live_tag_as_set_openbgpd_portable.last @@ -182,6 +182,6 @@ Live test, OpenBGPD 6.6p0, tag prefix/origin in AS-SET, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, tag prefix/origin in AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 162.705s +Ran 166 tests in 164.873s OK diff --git a/tests/last_results/live_tag_as_set_openbgpd_previous.last b/tests/last_results/live_tag_as_set_openbgpd_previous.last index 1f083a61..0601c8f8 100644 --- a/tests/last_results/live_tag_as_set_openbgpd_previous.last +++ b/tests/last_results/live_tag_as_set_openbgpd_previous.last @@ -182,6 +182,6 @@ Live test, OpenBGPD 6.5, tag prefix/origin in AS-SET, IPv6: dumping routes... Live test, OpenBGPD 6.5, tag prefix/origin in AS-SET, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 166 tests in 229.325s +Ran 166 tests in 241.696s OK diff --git a/tests/last_results/live_tag_reject_policy_bird1.last b/tests/last_results/live_tag_reject_policy_bird1.last index c29b0ed6..ec59eef0 100644 --- a/tests/last_results/live_tag_reject_policy_bird1.last +++ b/tests/last_results/live_tag_reject_policy_bird1.last @@ -52,6 +52,6 @@ Live test, BIRD, 'tag' reject policy scenario, IPv6: dumping routes... Live test, BIRD, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 107.856s +Ran 44 tests in 102.124s OK (SKIP=1) diff --git a/tests/last_results/live_tag_reject_policy_bird2.last b/tests/last_results/live_tag_reject_policy_bird2.last index 7d0d0284..88379bad 100644 --- a/tests/last_results/live_tag_reject_policy_bird2.last +++ b/tests/last_results/live_tag_reject_policy_bird2.last @@ -52,6 +52,6 @@ Live test, BIRD v2, 'tag' reject policy scenario, IPv6: dumping routes... Live test, BIRD v2, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 108.835s +Ran 44 tests in 109.129s OK (SKIP=1) diff --git a/tests/last_results/live_tag_reject_policy_openbgpd_latest.last b/tests/last_results/live_tag_reject_policy_openbgpd_latest.last index effb45b0..4a1662d5 100644 --- a/tests/last_results/live_tag_reject_policy_openbgpd_latest.last +++ b/tests/last_results/live_tag_reject_policy_openbgpd_latest.last @@ -52,6 +52,6 @@ Live test, OpenBGPD 6.6, 'tag' reject policy scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 287.676s +Ran 44 tests in 174.215s OK (SKIP=3) diff --git a/tests/last_results/live_tag_reject_policy_openbgpd_portable.last b/tests/last_results/live_tag_reject_policy_openbgpd_portable.last index 44abb0c8..10d13e0c 100644 --- a/tests/last_results/live_tag_reject_policy_openbgpd_portable.last +++ b/tests/last_results/live_tag_reject_policy_openbgpd_portable.last @@ -52,6 +52,6 @@ Live test, OpenBGPD 6.6p0, 'tag' reject policy scenario, IPv6: dumping routes... Live test, OpenBGPD 6.6p0, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 108.215s +Ran 44 tests in 114.596s OK (SKIP=3) diff --git a/tests/last_results/live_tag_reject_policy_openbgpd_previous.last b/tests/last_results/live_tag_reject_policy_openbgpd_previous.last index 72a94580..268dff8d 100644 --- a/tests/last_results/live_tag_reject_policy_openbgpd_previous.last +++ b/tests/last_results/live_tag_reject_policy_openbgpd_previous.last @@ -52,6 +52,6 @@ Live test, OpenBGPD 6.5, 'tag' reject policy scenario, IPv6: dumping routes... Live test, OpenBGPD 6.5, 'tag' reject policy scenario, IPv6: stopping instances... ---------------------------------------------------------------------- -Ran 44 tests in 166.639s +Ran 44 tests in 173.327s OK (SKIP=3) diff --git a/tests/last_results/static.last b/tests/last_results/static.last index cc092e05..d7e85c28 100644 --- a/tests/last_results/static.last +++ b/tests/last_results/static.last @@ -116,6 +116,11 @@ Program config: setup, change a template file then fix it ... ok Program config: setup, then remove templates ... ok Program config: setup, remove templates then fix it ... ok Clients from Euro-IX: IXP-Manager workaround ... ok +Clients from Euro-IX: merge local custom clients, add missing client ... ok +Clients from Euro-IX: merge local custom clients, add/change settings ... ok +Clients from Euro-IX: merge local custom clients, broken custom file 1 ... ok +Clients from Euro-IX: merge local custom clients, broken custom file 2 ... ok +Clients from Euro-IX: merge local custom clients, broken custom file 3 ... ok Clients from Euro-IX: official basic example ... ok Clients from Euro-IX: official more complex example ... ok Clients from Euro-IX: --routeserver-only filter ... ok @@ -195,6 +200,6 @@ RTT getter parser: new line only ... ok RTT getter parser: none ... ok ---------------------------------------------------------------------- -Ran 195 tests in 40.249s +Ran 200 tests in 99.544s OK diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd65.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd65.conf index ccb270b2..8ef32a6b 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd65.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd65.conf @@ -369,8 +369,8 @@ allow quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1032,8 +1032,8 @@ allow quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 291 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1695,8 +1695,8 @@ allow quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66.conf index ccb270b2..8ef32a6b 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66.conf @@ -369,8 +369,8 @@ allow quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1032,8 +1032,8 @@ allow quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 291 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1695,8 +1695,8 @@ allow quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66p.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66p.conf index 9b612fe3..270deaf6 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66p.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv4/openbgpd66p.conf @@ -369,8 +369,8 @@ allow quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1032,8 +1032,8 @@ allow quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 291 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1695,8 +1695,8 @@ allow quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd65.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd65.conf index 9b612fe3..270deaf6 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd65.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd65.conf @@ -369,8 +369,8 @@ allow quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1032,8 +1032,8 @@ allow quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 291 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1695,8 +1695,8 @@ allow quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd66.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd66.conf index 9b612fe3..270deaf6 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd66.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenarioOpenBGPD_IPv6/openbgpd66.conf @@ -369,8 +369,8 @@ allow quick from 192.0.2.22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1032,8 +1032,8 @@ allow quick from 2001:db8:1:1::22 AS { 174, 209, 286, 701, 1239, 1299, 2828, 291 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 2001:db8:1:1::22 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} @@ -1695,8 +1695,8 @@ allow quick from 192.0.2.11 AS { 174, 209, 286, 701, 1239, 1299, 2828, 2914, 325 # AS_PATH: never via route-servers ASNs -# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 }' - reject code: 15 -allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} +# Reject inbound routes when 'from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 }' - reject code: 15 +allow quick from 192.0.2.11 AS { 174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684 } set { localpref 1 community delete NO_ADVERTISE ext-community delete $INTCOMM_PREF_OK_ROA ext-community delete $INTCOMM_ROUTE_OK_WL ext-community delete $INTCOMM_PREF_OK_ARINDB ext-community delete $INTCOMM_PREF_OK_REGISTROBRDB ext-community delete $INTCOMM_ORIGIN_OK ext-community delete $INTCOMM_ORIGIN_KO ext-community delete $INTCOMM_PREFIX_OK ext-community delete $INTCOMM_PREFIX_KO ext-community delete $INTCOMM_IRR_REJECT ext-community delete $INTCOMM_RPKI_UNKNOWN ext-community delete $INTCOMM_RPKI_INVALID ext-community delete $INTCOMM_RPKI_VALID ext-community delete $INTCOMM_NO_EXPORT ext-community delete $INTCOMM_NO_ADVERTISE community 65520:0 community 65520:15} diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv4/bird2.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv4/bird2.conf index aa402700..03a71763 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv4/bird2.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv4/bird2.conf @@ -73,7 +73,7 @@ define AS_SET_AS10745_prefixes_4 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_4 = [ - 199.43.0.0/24{24,32}, 192.136.136.0/24{24,32}, 192.149.252.0/24{24,32} + 199.43.0.0/24{24,32}, 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32} ]; define ARIN_Whois_db_AS10745_6 = [ 2001:500:110::/48{48,128}, 2001:500:4::/48{48,128} @@ -1910,7 +1910,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2135,7 +2135,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2366,7 +2366,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv6/bird2.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv6/bird2.conf index af1380af..3f628f3c 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv6/bird2.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRD2IPv6/bird2.conf @@ -73,7 +73,7 @@ define AS_SET_AS10745_prefixes_6 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_4 = [ - 199.43.0.0/24{24,32}, 192.136.136.0/24{24,32}, 192.149.252.0/24{24,32} + 199.43.0.0/24{24,32}, 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32} ]; define ARIN_Whois_db_AS10745_6 = [ 2001:500:110::/48{48,128}, 2001:500:4::/48{48,128} @@ -1908,7 +1908,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2135,7 +2135,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -2364,7 +2364,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv4/bird16.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv4/bird16.conf index 9eafb544..60802c69 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv4/bird16.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv4/bird16.conf @@ -60,7 +60,7 @@ define AS_SET_AS10745_prefixes_4 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_4 = [ - 192.136.136.0/24{24,32}, 199.43.0.0/24{24,32}, 192.149.252.0/24{24,32} + 199.43.0.0/24{24,32}, 192.149.252.0/24{24,32}, 192.136.136.0/24{24,32} ]; @@ -1740,7 +1740,7 @@ filter receive_from_AS10745_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; @@ -1957,7 +1957,7 @@ filter receive_from_AS3333_1 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv6/bird16.conf b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv6/bird16.conf index 4a111f8b..e5b5d68b 100644 --- a/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv6/bird16.conf +++ b/tests/live_tests/scenarios/rich_example/configs/RichConfigExampleScenario_BIRDIPv6/bird16.conf @@ -45,7 +45,7 @@ define AS_SET_AS10745_prefixes_6 = [ # ARIN Whois database records define ARIN_Whois_db_AS10745_6 = [ - 2001:500:4::/48{48,128}, 2001:500:110::/48{48,128} + 2001:500:110::/48{48,128}, 2001:500:4::/48{48,128} ]; @@ -1772,7 +1772,7 @@ filter receive_from_AS10745_2 { # AS_PATH: never via route-servers ASNs - if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8455, 11164, 12322, 13030, 36459, 54295, 58768, 138023, 138953, 207353, 209395, 265914, 269156, 393573, 393684] then + if bgp_path ~ [174, 1299, 2914, 3320, 3491, 6830, 6908, 7155, 8075, 8455, 8607, 8943, 11164, 12322, 13030, 34108, 36459, 37271, 46450, 48265, 52973, 54295, 58768, 134041, 138023, 138953, 207353, 209395, 209699, 263328, 265914, 267373, 267442, 269156, 269535, 270544, 328572, 393573, 393684] then reject "AS_PATH [", bgp_path ,"] contains never via route-servers ASN - REJECTING ", net; diff --git a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRD2IPv6/bird2.conf b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRD2IPv6/bird2.conf index 023e7b70..a0c81c98 100644 --- a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRD2IPv6/bird2.conf +++ b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRD2IPv6/bird2.conf @@ -193,16 +193,16 @@ define AS_SET_AS_AS2_prefixes_6 = [ # ARIN Whois database records define ARIN_Whois_db_AS2_4 = [ - 2.6.0.0/16{16,32}, 2.0.5.0/24{24,32}, 2.7.0.0/16{16,32} + 2.6.0.0/16{16,32}, 2.7.0.0/16{16,32}, 2.0.5.0/24{24,32} ]; define ARIN_Whois_db_AS2_6 = [ - 2a02:6::/32{32,128}, 2a02:7::/32{32,128}, 2a02:0:5::/48{48,128} + 2a02:7::/32{32,128}, 2a02:0:5::/48{48,128}, 2a02:6::/32{32,128} ]; define ARIN_Whois_db_AS3_4 = [ - 3.3.0.0/16{16,32}, 3.2.0.0/16{16,32} + 3.2.0.0/16{16,32}, 3.3.0.0/16{16,32} ]; define ARIN_Whois_db_AS3_6 = [ - 2a03:2::/32{32,128}, 2a03:3::/32{32,128} + 2a03:3::/32{32,128}, 2a03:2::/32{32,128} ]; define ARIN_Whois_db_AS6_4 = [ 6.0.1.0/24{24,32} diff --git a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv4/bird16.conf b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv4/bird16.conf index fa9db0bd..381c2a37 100644 --- a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv4/bird16.conf +++ b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv4/bird16.conf @@ -126,10 +126,10 @@ define AS_SET_AS_AS2_prefixes_4 = [ # ARIN Whois database records define ARIN_Whois_db_AS2_4 = [ - 2.0.5.0/24{24,32}, 2.7.0.0/16{16,32}, 2.6.0.0/16{16,32} + 2.7.0.0/16{16,32}, 2.0.5.0/24{24,32}, 2.6.0.0/16{16,32} ]; define ARIN_Whois_db_AS3_4 = [ - 3.3.0.0/16{16,32}, 3.2.0.0/16{16,32} + 3.2.0.0/16{16,32}, 3.3.0.0/16{16,32} ]; define ARIN_Whois_db_AS6_4 = [ 6.0.1.0/24{24,32} diff --git a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv6/bird16.conf b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv6/bird16.conf index b7d58f8f..56b83ca3 100644 --- a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv6/bird16.conf +++ b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDIPv6/bird16.conf @@ -126,10 +126,10 @@ define AS_SET_AS_AS2_prefixes_6 = [ # ARIN Whois database records define ARIN_Whois_db_AS2_6 = [ - 2a02:6::/32{32,128}, 2a02:0:5::/48{48,128}, 2a02:7::/32{32,128} + 2a02:0:5::/48{48,128}, 2a02:6::/32{32,128}, 2a02:7::/32{32,128} ]; define ARIN_Whois_db_AS3_6 = [ - 2a03:2::/32{32,128}, 2a03:3::/32{32,128} + 2a03:3::/32{32,128}, 2a03:2::/32{32,128} ]; define ARIN_Whois_db_AS6_6 = [ 2a06:0:1::/48{48,128} diff --git a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDsIPv4/bird2.conf b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDsIPv4/bird2.conf index 6ffce1e3..ee23cb6b 100644 --- a/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDsIPv4/bird2.conf +++ b/tests/live_tests/scenarios/tag_as_set/configs/TagASSetScenario_WithAS_SETs_BIRDsIPv4/bird2.conf @@ -193,16 +193,16 @@ define AS_SET_AS_AS2_prefixes_4 = [ # ARIN Whois database records define ARIN_Whois_db_AS2_4 = [ - 2.6.0.0/16{16,32}, 2.0.5.0/24{24,32}, 2.7.0.0/16{16,32} + 2.6.0.0/16{16,32}, 2.7.0.0/16{16,32}, 2.0.5.0/24{24,32} ]; define ARIN_Whois_db_AS2_6 = [ - 2a02:6::/32{32,128}, 2a02:7::/32{32,128}, 2a02:0:5::/48{48,128} + 2a02:7::/32{32,128}, 2a02:0:5::/48{48,128}, 2a02:6::/32{32,128} ]; define ARIN_Whois_db_AS3_4 = [ - 3.3.0.0/16{16,32}, 3.2.0.0/16{16,32} + 3.2.0.0/16{16,32}, 3.3.0.0/16{16,32} ]; define ARIN_Whois_db_AS3_6 = [ - 2a03:2::/32{32,128}, 2a03:3::/32{32,128} + 2a03:3::/32{32,128}, 2a03:2::/32{32,128} ]; define ARIN_Whois_db_AS6_4 = [ 6.0.1.0/24{24,32} From 8a265828610517e43af58527ca38e6edaa775602 Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 25 Apr 2020 19:57:49 +0200 Subject: [PATCH 12/12] v0.25.0-alpha2 --- CHANGES.rst | 7 +++++++ pierky/arouteserver/version.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5714e624..805f20e9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,13 @@ Change log next release ------------ +- New feature: ``tag_and_reject`` reject policy for BIRD. + + Invalid routes can be tagged with informational BGP communities and then discarded by BIRD. + With this option, alice-lg reject reasons are supported nicely, whilst keeping ``show routes all filtered`` working to keep birdwatcher happy. + + Related: `PR #57 on GitHub `_. + - Improvement: ``clients-from-euroix`` command, option ``--merge-from-custom-file`` to customise the list of clients generated from an Euro-IX JSON file. More details on how to use this option can be found running ``arouteserver clients-from-euroix --help-merge-from-custom-file``. diff --git a/pierky/arouteserver/version.py b/pierky/arouteserver/version.py index 5ec7adbd..43f96e13 100644 --- a/pierky/arouteserver/version.py +++ b/pierky/arouteserver/version.py @@ -13,5 +13,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -__version__ = "0.25.0-alpha1" # pragma: no cover +__version__ = "0.25.0-alpha2" # pragma: no cover COPYRIGHT_YEAR = 2020 # pragma: no cover