def _prefix_mgr_client(): prefix_mgr_client_inst = prefix_mgr_client.PrefixMgrClient( bunch.Bunch({ "ctx": zmq.Context(), "host": "localhost", "prefix_mgr_cmd_port": 5000, })) resp = prefix_mgr_client_inst.add_prefix( ["2620:0:1cff:dead:bef1:ffff:ffff:4/128"], "LOOPBACK") self.assertTrue(resp.success) resp = prefix_mgr_client_inst.view_prefix() prefix_entry4 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix( "2620:0:1cff:dead:bef1:ffff:ffff:4/128"), type=network_types.PrefixType.LOOPBACK, ) self.assertTrue(resp.success) self.assertTrue(prefix_entry4 in resp.prefixes) resp = prefix_mgr_client_inst.withdraw_prefix( ["2620:0:1cff:dead:bef1:ffff:ffff:4/128"]) self.assertTrue(resp.success) resp = prefix_mgr_client_inst.view_prefix() self.assertTrue(resp.success) self.assertFalse(prefix_entry4 in resp.prefixes) resp = prefix_mgr_client_inst.withdraw_prefix( ["2620:0:1cff:dead:bef1:ffff:ffff:5/128"]) self.assertFalse(resp.success)
def _prefix_mgr_client(): prefix_mgr_client_inst = prefix_mgr_client.PrefixMgrClient( zmq.Context(), "tcp://localhost:5000") resp = prefix_mgr_client_inst.add_prefix( '2620:0:1cff:dead:bef1:ffff:ffff:4/128') self.assertTrue(resp.success) resp = prefix_mgr_client_inst.view_prefix() prefix_entry4 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix( '2620:0:1cff:dead:bef1:ffff:ffff:4/128'), type=lsdb_types.PrefixType.LOOPBACK) self.assertTrue(resp.success) self.assertTrue(prefix_entry4 in resp.prefixes) resp = prefix_mgr_client_inst.withdraw_prefix( '2620:0:1cff:dead:bef1:ffff:ffff:4/128') self.assertTrue(resp.success) resp = prefix_mgr_client_inst.view_prefix() self.assertTrue(resp.success) self.assertFalse(prefix_entry4 in resp.prefixes) resp = prefix_mgr_client_inst.withdraw_prefix( '2620:0:1cff:dead:bef1:ffff:ffff:5/128') self.assertFalse(resp.success)
def _prefix_mgr_client(): prefix_mgr_client_inst = prefix_mgr_client.PrefixMgrClient( zmq.Context(), socket_url) resp = prefix_mgr_client_inst.add_prefix( ["2620:0:1cff:dead:bef1:ffff:ffff:4/128"], "LOOPBACK") self.assertTrue(resp.success) resp = prefix_mgr_client_inst.view_prefix() prefix_entry4 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix( "2620:0:1cff:dead:bef1:ffff:ffff:4/128"), type=lsdb_types.PrefixType.LOOPBACK, ) self.assertTrue(resp.success) self.assertTrue(prefix_entry4 in resp.prefixes) resp = prefix_mgr_client_inst.withdraw_prefix( ["2620:0:1cff:dead:bef1:ffff:ffff:4/128"]) self.assertTrue(resp.success) resp = prefix_mgr_client_inst.view_prefix() self.assertTrue(resp.success) self.assertFalse(prefix_entry4 in resp.prefixes) resp = prefix_mgr_client_inst.withdraw_prefix( ["2620:0:1cff:dead:bef1:ffff:ffff:5/128"]) self.assertFalse(resp.success)
def send_cmd_to_prefix_mgr(self, cmd, prefixes=None, prefix_type="BREEZE", forwarding_type="IP"): """ Send the given cmd to prefix manager and return resp """ PREFIX_TYPE_TO_VALUES = network_types.PrefixType._NAMES_TO_VALUES if prefix_type not in PREFIX_TYPE_TO_VALUES: raise Exception("Unknown type {}. Use any of {}".format( prefix_type, ", ".join(PREFIX_TYPE_TO_VALUES.keys()))) FORWARDING_TYPE_TO_VALUES = lsdb_types.PrefixForwardingType._NAMES_TO_VALUES if forwarding_type not in FORWARDING_TYPE_TO_VALUES: raise Exception("Unknown forwarding type {}. Use any of {}".format( forwarding_type, ", ".join(FORWARDING_TYPE_TO_VALUES.keys()))) req_msg = prefix_mgr_types.PrefixManagerRequest() req_msg.cmd = cmd req_msg.type = PREFIX_TYPE_TO_VALUES[prefix_type] req_msg.prefixes = [] if prefixes is not None: for prefix in prefixes: req_msg.prefixes.append( lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix(prefix), type=PREFIX_TYPE_TO_VALUES[prefix_type], forwardingType=FORWARDING_TYPE_TO_VALUES[ forwarding_type], )) return self.send_and_recv_thrift_obj( req_msg, prefix_mgr_types.PrefixManagerResponse)
def to_thrift_prefixes( self, prefixes: List[str], prefix_type: network_types.PrefixType, forwarding_type: PrefixForwardingType = PrefixForwardingType.IP, ) -> List[lsdb_types.PrefixEntry]: return [ lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix(prefix), type=prefix_type, forwardingType=forwarding_type, ) for prefix in prefixes ]
def test_parse_prefix_database(self): bgp1 = lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("1.0.0.0/8"), type=network_types.PrefixType.BGP, ) bgp2 = lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("2.0.0.0/8"), type=network_types.PrefixType.BGP, ) loop1 = lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("10.0.0.1/32"), type=network_types.PrefixType.LOOPBACK, ) prefix_db = lsdb_types.PrefixDatabase( thisNodeName="node1", prefixEntries=[bgp1, bgp2, loop1], deletePrefix=False, perfEvents=None, ) # No filter and ensure we receive everything back data = {} parse_prefix_database("", "", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp1, bgp2, loop1]) # Filter on prefix data = {} parse_prefix_database("10.0.0.1/32", "", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [loop1]) # Filter on type data = {} parse_prefix_database("", "bgp", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp1, bgp2]) # Filter on prefix and type both data = {} parse_prefix_database("2.0.0.0/8", "bgp", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp2])
def send_cmd_to_prefix_mgr(self, cmd, prefixes=None, prefix_type='BREEZE'): ''' Send the given cmd to prefix manager and return resp ''' TYPE_TO_VALUES = lsdb_types.PrefixType._NAMES_TO_VALUES if prefix_type not in TYPE_TO_VALUES: raise Exception('Unknown type {}. Use any of {}'.format( prefix_type, ', '.join(TYPE_TO_VALUES.keys()))) req_msg = prefix_mgr_types.PrefixManagerRequest() req_msg.cmd = cmd req_msg.type = TYPE_TO_VALUES[prefix_type] req_msg.prefixes = [] if prefixes is not None: for prefix in prefixes: req_msg.prefixes.append( lsdb_types.PrefixEntry(prefix=ip_str_to_prefix(prefix), type=TYPE_TO_VALUES[prefix_type])) self._prefix_mgr_cmd_socket.send_thrift_obj(req_msg) return self._prefix_mgr_cmd_socket.recv_thrift_obj( prefix_mgr_types.PrefixManagerResponse)
from __future__ import print_function from __future__ import unicode_literals from __future__ import division from openr.utils import socket from openr.clients import prefix_mgr_client from openr.PrefixManager import ttypes as prefix_mgr_types from openr.Lsdb import ttypes as lsdb_types from openr.cli.utils.utils import ip_str_to_prefix, sprint_prefix import zmq import unittest from multiprocessing import Process prefix_entry1 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix('2620:0:1cff:dead:bef1:ffff:ffff:1/128'), type=lsdb_types.PrefixType.LOOPBACK) prefix_entry2 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix('2620:0:1cff:dead:bef1:ffff:ffff:2/128'), type=lsdb_types.PrefixType.LOOPBACK) prefix_entry3 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix('2620:0:1cff:dead:bef1:ffff:ffff:3/128'), type=lsdb_types.PrefixType.LOOPBACK) class PrefixMgr(): def __init__(self, zmq_ctx, url): self._prefix_mgr_server_socket = socket.Socket(zmq_ctx, zmq.REP) self._prefix_mgr_server_socket.bind(url)
import unittest from builtins import object, range from multiprocessing import Process import bunch import zmq from openr.clients import prefix_mgr_client from openr.Lsdb import ttypes as lsdb_types from openr.Network import ttypes as network_types from openr.PrefixManager import ttypes as prefix_mgr_types from openr.utils import zmq_socket from openr.utils.ipnetwork import ip_str_to_prefix, sprint_prefix prefix_entry1 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix("2620:0:1cff:dead:bef1:ffff:ffff:1/128"), type=network_types.PrefixType.LOOPBACK, forwardingType=lsdb_types.PrefixForwardingType.IP, ) prefix_entry2 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix("2620:0:1cff:dead:bef1:ffff:ffff:2/128"), type=network_types.PrefixType.LOOPBACK, forwardingType=lsdb_types.PrefixForwardingType.IP, ) prefix_entry3 = lsdb_types.PrefixEntry( prefix=ip_str_to_prefix("2620:0:1cff:dead:bef1:ffff:ffff:3/128"), type=network_types.PrefixType.LOOPBACK, forwardingType=lsdb_types.PrefixForwardingType.IP, )