Beispiel #1
0
        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)
Beispiel #2
0
        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)
Beispiel #4
0
    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)
Beispiel #5
0
 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
     ]
Beispiel #6
0
    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])
Beispiel #7
0
    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)
Beispiel #8
0
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)
Beispiel #9
0
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,
)