From ec00f0d89e8b564d7c446b795cc9634ef4ab0030 Mon Sep 17 00:00:00 2001 From: Felix Walter Date: Fri, 19 Jan 2024 09:51:56 +0100 Subject: [PATCH] Add AAP2 link configuration tool Signed-off-by: Felix Walter --- tools/aap2/aap2_configure_link.py | 77 +++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 tools/aap2/aap2_configure_link.py diff --git a/tools/aap2/aap2_configure_link.py b/tools/aap2/aap2_configure_link.py new file mode 100644 index 0000000..65bb596 --- /dev/null +++ b/tools/aap2/aap2_configure_link.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: BSD-3-Clause OR Apache-2.0 +# encoding: utf-8 + +import argparse + +from ud3tn_utils.aap2 import ( + AAP2TCPClient, + AAP2UnixClient, + AAPMessage, + AuthType, + Link, + LinkStatus, + ResponseStatus, +) +from helpers import add_common_parser_arguments, initialize_logger + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="configure a FIB entry via AAP 2.0", + ) + add_common_parser_arguments(parser) + parser.add_argument( + "NODE_ID", + help="the next-hop node ID to be configured", + ) + parser.add_argument( + "CLA_ADDR", + help="the CLA address used to reach the next hop", + ) + parser.add_argument( + "-d", "--delete", + action="store_true", + help="if set, the entry will be deleted", + ) + parser.add_argument( + "-n", "--no-link", + action="store_true", + help="if set, do not initiate a link update (only update the FIB)", + ) + args = parser.parse_args() + logger = initialize_logger(args.verbosity) + + if args.tcp: + aap2_client = AAP2TCPClient(address=args.tcp) + else: + aap2_client = AAP2UnixClient(address=args.socket) + with aap2_client: + secret = aap2_client.configure( + args.agentid, + subscribe=False, + secret=args.secret, + auth_type=AuthType.AUTH_TYPE_FIB_CONTROL, + ) + logger.info("Assigned agent secret: '%s'", secret) + if args.no_link: + target_link_status = LinkStatus.LINK_STATUS_UNSPECIFIED + elif args.delete: + target_link_status = LinkStatus.LINK_STATUS_TEARDOWN + else: + target_link_status = LinkStatus.LINK_STATUS_ACTIVE + logger.info( + "Sending link update for '%s' via '%s': %s", + args.NODE_ID, + args.CLA_ADDR, + target_link_status, + ) + aap2_client.send(AAPMessage(link=Link( + status=target_link_status, + peer_node_id=args.NODE_ID, + peer_cla_addr=args.CLA_ADDR, + ))) + assert ( + aap2_client.receive_response().response_status == + ResponseStatus.RESPONSE_STATUS_SUCCESS + )