From 83951810202655a3f0cadfaa30fa1f689c99ee34 Mon Sep 17 00:00:00 2001 From: Quantum Date: Tue, 29 Oct 2024 01:37:50 -0400 Subject: [PATCH] Add script to generate is_aspa_invalid_pair for bird --- aspa/generate.py | 30 ++++++++++++++++++++++++++++++ make-bird-aspa | 21 +++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 aspa/generate.py create mode 100755 make-bird-aspa diff --git a/aspa/generate.py b/aspa/generate.py new file mode 100644 index 0000000..ae2bc65 --- /dev/null +++ b/aspa/generate.py @@ -0,0 +1,30 @@ +from aspa.data import ASPA + + +def generate_bird(aspas: list[ASPA]) -> str: + lines = [ + 'function is_aspa_invalid_pair(int upstream_asn; int downstream_asn) {', + ' case downstream_asn {' + ] + + for aspa in aspas: + if not aspa.providers: + lines.append(f' {aspa.customer}: return true;') + continue + + lines.append(f' {aspa.customer}: case upstream_asn {{') + for provider in aspa.providers: + lines.append(f' {provider}: {{}}') + + lines += [ + ' else: return true;', + ' }' + ] + + lines += [ + ' }', + ' return false;', + '}' + ] + + return '\n'.join(lines) diff --git a/make-bird-aspa b/make-bird-aspa new file mode 100755 index 0000000..6450a57 --- /dev/null +++ b/make-bird-aspa @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +import argparse + +from aspa.data import parse_json +from aspa.generate import generate_bird + + +def main(): + parser = argparse.ArgumentParser(description='Generates is_aspa_invalid_pair function for bird') + parser.add_argument('aspa_json', type=str, help='the JSON file with ASPA data') + args = parser.parse_args() + + with open(args.aspa_json) as f: + aspas = parse_json(f.read()) + + print(generate_bird(aspas)) + + +if __name__ == '__main__': + main()