示例#1
0
 def reset_bgp(self):
     # TODO: port status changes should cause us to withdraw a route.
     # TODO: configurable behavior - withdraw routes if peer goes down.
     for dp_id, valve in self.valves.iteritems():
         if dp_id not in self.dp_bgp_speakers:
             self.dp_bgp_speakers[dp_id] = {}
         bgp_speakers = self.dp_bgp_speakers[dp_id]
         for bgp_speaker in bgp_speakers.itervalues():
             bgp_speaker.shutdown()
         for vlan in valve.dp.vlans.itervalues():
             if vlan.bgp_as:
                 handler = lambda x: self.bgp_route_handler(x, vlan)
                 bgp_speaker = BGPSpeaker(
                     as_number=vlan.bgp_as,
                     router_id=vlan.bgp_routerid,
                     bgp_server_port=vlan.bgp_port,
                     best_path_change_handler=handler)
                 for controller_ip in vlan.controller_ips:
                     prefix = ipaddr.IPNetwork(
                         '/'.join(
                             (str(controller_ip.ip),
                              str(controller_ip.prefixlen))))
                     bgp_speaker.prefix_add(
                         prefix=str(prefix),
                         next_hop=controller_ip.ip)
                 for route_table in (vlan.ipv4_routes, vlan.ipv6_routes):
                     for ip_dst, ip_gw in route_table.iteritems():
                         bgp_speaker.prefix_add(
                             prefix=str(ip_dst),
                             next_hop=str(ip_gw))
                 bgp_speaker.neighbor_add(
                     address=vlan.bgp_neighbor_address,
                     remote_as=vlan.bgp_neighbor_as)
                 bgp_speakers[vlan] = bgp_speaker
示例#2
0
    def _create_bgp_speaker_for_vlan(self, vlan, dp_id, vlan_vid):
        """Set up BGP speaker for an individual VLAN if required.

        Args:
            vlan (valve VLAN): VLAN for BGP speaker.
            dp_id (int): Datapath ID for BGP speaker.
            vlan_vid (vlan_vid): VLAN VID for BGP speaker.
        Returns:
            ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker: BGP speaker.
        """
        handler = lambda x: self._bgp_route_handler(x, dp_id, vlan_vid)
        bgp_speaker = BGPSpeaker(
            as_number=vlan.bgp_as,
            router_id=vlan.bgp_routerid,
            bgp_server_port=vlan.bgp_port,
            bgp_server_hosts=vlan.bgp_server_addresses,
            best_path_change_handler=handler,
            peer_up_handler=self._bgp_up_handler,
            peer_down_handler=self._bgp_down_handler)
        for ip_dst, ip_gw in self._vlan_prefixes(vlan):
            bgp_speaker.prefix_add(prefix=ip_dst, next_hop=ip_gw)
        for bgp_neighbor_address in vlan.bgp_neighbor_addresses:
            bgp_speaker.neighbor_add(
                connect_mode=vlan.bgp_connect_mode,
                address=bgp_neighbor_address,
                remote_as=vlan.bgp_neighbor_as,
                local_address=vlan.bgp_local_address,
                enable_ipv4=True,
                enable_ipv6=True)
        return bgp_speaker
示例#3
0
    def _create_bgp_speaker_for_vlan(self, vlan):
        """Set up BGP speaker for an individual VLAN if required.

        Args:
            vlan (vlan): VLAN associated with this speaker.
        Returns:
            ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker: BGP speaker.
        """
        handler = lambda x: self._bgp_route_handler(x, vlan)
        bgp_speaker = BGPSpeaker(as_number=vlan.bgp_as,
                                 router_id=vlan.bgp_routerid,
                                 bgp_server_port=vlan.bgp_port,
                                 best_path_change_handler=handler)
        for faucet_vip in vlan.faucet_vips:
            prefix = ipaddr.IPNetwork(faucet_vip.exploded)
            bgp_speaker.prefix_add(prefix=str(prefix),
                                   next_hop=str(faucet_vip.ip))
        for route_table in (vlan.ipv4_routes, vlan.ipv6_routes):
            for ip_dst, ip_gw in route_table.iteritems():
                bgp_speaker.prefix_add(prefix=str(ip_dst), next_hop=str(ip_gw))
        for bgp_neighbor_address in vlan.bgp_neighbor_addresses:
            bgp_speaker.neighbor_add(address=bgp_neighbor_address,
                                     remote_as=vlan.bgp_neighbor_as,
                                     local_address=vlan.bgp_local_address,
                                     enable_ipv4=True,
                                     enable_ipv6=True)
        return bgp_speaker
示例#4
0
def ryu(routerid, asn, peerip, peerport, peeras):
    import eventlet
    from ryu.services.protocols.bgp.bgpspeaker import BGPSpeaker
    eventlet.monkey_patch()  # BGPSpeaker needs sockets patched

    def dump_remote_best_path_change(event):
        print('the best path changed:', event.remote_as, event.prefix,
              event.nexthop, event.is_withdraw)

    def detect_peer_down(remote_ip, remote_as):
        print('Peer down:', remote_ip, remote_as)

    speaker = BGPSpeaker(
        as_number=int(args.asn),
        router_id=args.router_id,
        best_path_change_handler=dump_remote_best_path_change,
        peer_down_handler=detect_peer_down)

    # XXX need to fix port arg
    speaker.neighbor_add(peerip, peeras, peerport)
    # uncomment the below line if the speaker needs to talk with a bmp server.
    # speaker.bmp_server_add('192.168.177.2', 11019)

    # count = 1
    while True:
        eventlet.sleep(30)
示例#5
0
    def __init__(self, *args, **kwargs):
        super(SDNIP, self).__init__(*args, **kwargs)
        self.fwd = kwargs['fwd']
        self.hop_db = kwargs['hop_db']
        self.cfg_mgr = SDNIPConfigManager()
        self.waiters = {}
        self.bgp_speaker =\
            BGPSpeaker(self.cfg_mgr.as_number,
                       str(self.cfg_mgr.router_id),
                       bgp_server_port=self.cfg_mgr.listen_port,
                       best_path_change_handler=self.best_path_change_handler,
                       peer_down_handler=self.peer_down_handler,
                       peer_up_handler=self.peer_up_handler)

        speaker_ids = self.cfg_mgr.get_all_speaker_id()

        for speaker_id in speaker_ids:
            self.bgp_speaker.neighbor_add(speaker_id,
                                          self.cfg_mgr.as_number,
                                          is_next_hop_self=True)

        hub.spawn(self.prefix_check_loop)

        if with_dk:
            dk_plugin.DynamicLoader.register_custom_cmd(
                'sdn-ip:info', self.cmd_self_info)
            dk_plugin.DynamicLoader.register_custom_cmd(
                'sdn-ip:routes', self.cmd_list_routes)
            dk_plugin.DynamicLoader.register_custom_cmd(
                'sdn-ip:flows', self.cmd_get_flows)
 def start_bgpspeaker(self, asNum, routerId, label_start, label_end):
     self.myRouterId = routerId
     self.labelRange = tuple([label_start, label_end])
     self.speaker = BGPSpeaker(as_number=asNum, router_id=routerId,
                  best_path_change_handler=self.dump_remote_best_path_change,
                  peer_down_handler=self.detect_peer_down,
                  peer_up_handler=self.detect_peer_up,
                  label_range=self.labelRange)
示例#7
0
def main():
    reset_flows()
    sw=discover_switches()
    resolve_nhops()
    print "start BGP peering"
    speaker = BGPSpeaker(**self)
    speaker.neighbor_add(**neighbor)
    while True:
        eventlet.sleep(10)
示例#8
0
    def _start_speaker(self, settings):
        """
        Starts BGPSpeaker using the given settings.
        """
        # Settings for starting BGPSpeaker
        bgp_settings = {}

        # Get required settings.
        try:
            bgp_settings['as_number'] = settings.get(LOCAL_AS)
            bgp_settings['router_id'] = settings.get(ROUTER_ID)
        except KeyError as e:
            raise ApplicationException(
                desc='Required BGP configuration missing: %s' % e)

        # Set event notify handlers if no corresponding handler specified.
        bgp_settings['best_path_change_handler'] = settings.get(
            'best_path_change_handler', self._notify_best_path_changed_event)
        bgp_settings['peer_down_handler'] = settings.get(
            'peer_down_handler', self._notify_peer_down_event)
        bgp_settings['peer_up_handler'] = settings.get(
            'peer_up_handler', self._notify_peer_up_event)

        # Get optional settings.
        bgp_settings[BGP_SERVER_PORT] = settings.get(
            BGP_SERVER_PORT, DEFAULT_BGP_SERVER_PORT)
        bgp_settings[REFRESH_STALEPATH_TIME] = settings.get(
            REFRESH_STALEPATH_TIME, DEFAULT_REFRESH_STALEPATH_TIME)
        bgp_settings[REFRESH_MAX_EOR_TIME] = settings.get(
            REFRESH_MAX_EOR_TIME, DEFAULT_REFRESH_MAX_EOR_TIME)
        bgp_settings[LABEL_RANGE] = settings.get(
            LABEL_RANGE, DEFAULT_LABEL_RANGE)
        bgp_settings['allow_local_as_in_count'] = settings.get(
            'allow_local_as_in_count', 0)
        bgp_settings[LOCAL_PREF] = settings.get(
            LOCAL_PREF, DEFAULT_LOCAL_PREF)

        # Create BGPSpeaker instance.
        LOG.debug('Starting BGPSpeaker...')
        self.speaker = BGPSpeaker(**bgp_settings)

        # Add neighbors.
        LOG.debug('Adding neighbors...')
        self._add_neighbors(settings.get('neighbors', []))

        # Add VRFs.
        LOG.debug('Adding VRFs...')
        self._add_vrfs(settings.get('vrfs', []))

        # Add Networks
        LOG.debug('Adding routes...')
        self._add_routes(settings.get('routes', []))
示例#9
0
    def _start_speaker(self, settings):
        """
        Starts BGPSpeaker using the given settings.
        """
        # Check required settings.
        _required_settings = (
            LOCAL_AS,
            ROUTER_ID,
        )
        for required in _required_settings:
            if required not in settings:
                raise ApplicationException(
                    desc='Required BGP configuration missing: %s' % required)

        # Set event notify handlers if no corresponding handler specified.
        settings.setdefault(
            'best_path_change_handler', self._notify_best_path_changed_event)
        settings.setdefault(
            'adj_rib_in_change_handler', self._notify_adj_rib_in_changed_event)
        settings.setdefault(
            'peer_down_handler', self._notify_peer_down_event)
        settings.setdefault(
            'peer_up_handler', self._notify_peer_up_event)

        # Pop settings other than creating BGPSpeaker instance.
        neighbors_settings = settings.pop('neighbors', [])
        vrfs_settings = settings.pop('vrfs', [])
        routes_settings = settings.pop('routes', [])

        # Create BGPSpeaker instance.
        LOG.debug('Starting BGPSpeaker...')
        settings.setdefault('as_number', settings.pop(LOCAL_AS))
        self.speaker = BGPSpeaker(**settings)

        # Add neighbors.
        LOG.debug('Adding neighbors...')
        self._add_neighbors(neighbors_settings)

        # Add VRFs.
        LOG.debug('Adding VRFs...')
        self._add_vrfs(vrfs_settings)

        # Add routes
        LOG.debug('Adding routes...')
        self._add_routes(routes_settings)
示例#10
0
    def bgp_sender(self):
        def dump_remote_best_path_change(event):
            print 'the best path changed:', event.remote_as, event.prefix, \
                event.nexthop, event.is_withdraw

        def detect_peer_down(remote_ip, remote_as):
            print 'Peer down:', remote_ip, remote_as

        def detect_peer_up(remote_ip, remote_as, uri_enabled, peer):
            print 'Peer up', remote_ip, remote_as
            if uri_enabled:
                self.uri_enabled_capability = True
                self.peer[remote_ip] = (
                    peer, self.uri_enabled_capability
                )  #Create peer dictionary with key ip and value a tuple of peer and uri_enabled capability
                self.uri_enabled_capability = False
            else:
                self.peer[remote_ip] = (peer, False)

        self.speaker = BGPSpeaker(
            as_number=1000,
            router_id='147.102.13.198',
            best_path_change_handler=dump_remote_best_path_change,
            peer_down_handler=detect_peer_down,
            peer_up_handler=detect_peer_up)
        #self.speaker = BGPSpeaker(as_number=1000, router_id='2.1.1.1',
        #                        best_path_change_handler=dump_remote_best_path_change,
        #                         peer_down_handler=detect_peer_down,peer_up_handler=detect_peer_up)

        self.speaker.neighbor_add('147.102.13.156', 1000, next_hop='192.0.2.1')

        #self.speaker.neighbor_add('192.168.1.2', 1001,enable_uri=True)
        #self.speaker.neighbor_add('2.1.1.2', 1000, next_hop='192.0.2.1')
        #alla = PrefixFilter('0.0.0.0/0',policy=PrefixFilter.POLICY_DENY)
        #self.speaker.out_filter_set('192.168.1.2',[alla])
        #self.speaker.out_filter_set('2.1.1.2',[alla])
        #self.drop_to_router(AC(1000).create())
        #self.speaker.
        #eventlet.sleep(20)
        #self.drop_to_router(['147.102.13.199/32'])
        ofs = Switch()
        eventlet.sleep(40)
        ofs.add_flow("147.102.13.199")
        """
示例#11
0
    def __init__(self, *args, **kwargs):
        super(SDNIP, self).__init__(*args, **kwargs)
        self.fwd_util = kwargs['fwd']
        self.hop_db = kwargs['hop_db']
        self.cfg_mgr = SDNIPConfigManager()  #获取SDN-IP配置信息
        # 在Ryu上运行一个iBGPSpeaker
        self.bgp_speaker =\
            BGPSpeaker(self.cfg_mgr.as_number,      #AS号
                       str(self.cfg_mgr.router_id),     #iBGP的router id
                       bgp_server_port=self.cfg_mgr.listen_port,        #监听BGP协议的端口号
                       best_path_change_handler=self.best_path_change_handler,      #当路由信息变化时调用此方法
                       peer_down_handler=self.peer_down_handler,        #BGP对等体下线
                       peer_up_handler=self.peer_up_handler)        #BGP对等体上线

        speaker_ids = self.cfg_mgr.get_all_speaker_id()
        # 建立iBGPSpeaker与SDN域内的BGPSpeaker的连接
        for speaker_id in speaker_ids:
            self.bgp_speaker.neighbor_add(speaker_id,
                                          self.cfg_mgr.as_number,
                                          is_next_hop_self=True)
示例#12
0
    def __init__(self, *args, **kwargs):
        super(SDNIP, self).__init__(*args, **kwargs)
        self.fwd = kwargs['fwd']
        self.hop_db = kwargs['hop_db']
        self.cfg_mgr = SDNIPConfigManager('config.json')
        self.bgp_speaker =\
        BGPSpeaker(self.cfg_mgr.as_number,
                   self.cfg_mgr.router_id,
                   bgp_server_port=self.cfg_mgr.listen_port,
                   best_path_change_handler=self.best_path_change_handler,
                   peer_down_handler=self.peer_down_handler,
                   peer_up_handler=self.peer_up_handler)

        speaker_ids = self.cfg_mgr.get_all_speaker_id()

        for speaker_id in speaker_ids:
            self.bgp_speaker.neighbor_add(speaker_id,
                                          self.cfg_mgr.as_number,
                                          is_next_hop_self=True)

        hub.spawn(self.prefix_check_loop)
示例#13
0
    def bgp_create(self, as_number, router_id):
        # MUDAR AQUI - INICIO
        try:
            self.bgp_speaker = BGPSpeaker(
                as_number=as_number,
                router_id=router_id,
                best_path_change_handler=self.best_path_change_handler,
                adj_rib_in_change_handler=self.adj_rib_in_change_handler,
                peer_down_handler=self.peer_down_handler,
                peer_up_handler=self.peer_up_handler)
        except Exception as e:
            print "Error creating bgp speaker: %s" % (e)
            return (False, 'Failed to create BGP speaker')
        # MUDAR AQUI - FIM

        self.bgp_config['as_number'] = as_number
        self.bgp_config['router_id'] = router_id
        self.bgp_config['neighbors'] = []
        self.bgp_config['adv_prefixes'] = []
        self.persist_config()
        return (True, 'Success')
示例#14
0
    def _start_speaker(self, settings):
        """
        Starts BGPSpeaker using the given settings.
        """
        # Settings for starting BGPSpeaker
        bgp_settings = {}

        # Get required settings.
        try:
            bgp_settings['as_number'] = settings.get(LOCAL_AS)
            bgp_settings['router_id'] = settings.get(ROUTER_ID)
        except KeyError as e:
            raise ApplicationException(
                desc='Required BGP configuration missing: %s' % e)

        # Get optional settings.
        bgp_settings[BGP_SERVER_PORT] = settings.get(BGP_SERVER_PORT,
                                                     DEFAULT_BGP_SERVER_PORT)
        bgp_settings[REFRESH_STALEPATH_TIME] = settings.get(
            REFRESH_STALEPATH_TIME, DEFAULT_REFRESH_STALEPATH_TIME)
        bgp_settings[REFRESH_MAX_EOR_TIME] = settings.get(
            REFRESH_MAX_EOR_TIME, DEFAULT_REFRESH_MAX_EOR_TIME)
        bgp_settings[LABEL_RANGE] = settings.get(LABEL_RANGE,
                                                 DEFAULT_LABEL_RANGE)

        # Create BGPSpeaker instance.
        LOG.debug('Starting BGPSpeaker...')
        self.speaker = BGPSpeaker(**bgp_settings)

        # Add neighbors.
        LOG.debug('Adding neighbors...')
        self._add_neighbors(settings.get('neighbors', []))

        # Add VRFs.
        LOG.debug('Adding VRFs...')
        self._add_vrfs(settings.get('vrfs', []))

        # Add Networks
        LOG.debug('Adding routes...')
        self._add_routes(settings.get('routes', []))
示例#15
0
    def _create_bgp_speaker_for_vlan(self, vlan):
        """Set up BGP speaker for an individual VLAN if required.

        Args:
            vlan (vlan): VLAN associated with this speaker.
        Returns:
            ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker: BGP speaker.
        """
        handler = lambda x: self._bgp_route_handler(x, vlan)
        bgp_speaker = BGPSpeaker(as_number=vlan.bgp_as,
                                 router_id=vlan.bgp_routerid,
                                 bgp_server_port=vlan.bgp_port,
                                 best_path_change_handler=handler)
        for controller_ip in vlan.controller_ips:
            prefix = ipaddr.IPNetwork('/'.join(
                (str(controller_ip.ip), str(controller_ip.prefixlen))))
            bgp_speaker.prefix_add(prefix=str(prefix),
                                   next_hop=controller_ip.ip)
        for route_table in (vlan.ipv4_routes, vlan.ipv6_routes):
            for ip_dst, ip_gw in route_table.iteritems():
                bgp_speaker.prefix_add(prefix=str(ip_dst), next_hop=str(ip_gw))
        bgp_speaker.neighbor_add(address=vlan.bgp_neighbor_address,
                                 remote_as=vlan.bgp_neighbor_as)
        return bgp_speaker
示例#16
0
__author__ = 'hyq'

import eventlet
import json
eventlet.monkey_patch()

import logging
import sys
log = logging.getLogger()
log.addHandler(logging.StreamHandler(sys.stderr))
log.setLevel(logging.DEBUG)

from ryu.services.protocols.bgp.bgpspeaker import BGPSpeaker

if __name__ == "__main__":
    speaker = BGPSpeaker(as_number=64512, router_id='10.0.0.1',
                         ssh_console=True)

    while True:
         eventlet.sleep(5)
示例#17
0
from ryu.services.protocols.bgp.bgpspeaker import BGPSpeaker

'''
sudo /usr/bin/python2.7 "/home/walber/Dropbox/SDN - Controllers/ryu/ryu/app/COOL/topology_management/bgp_tester.py"
'''

def dump_remote_best_path_change(event):
    print 'the best path changed:', event.remote_as, event.prefix,\
        event.nexthop, event.is_withdraw

def detect_peer_down(remote_ip, remote_as):
    print 'Peer down:', remote_ip, remote_as

if __name__ == "__main__":
    speaker = BGPSpeaker(as_number=65001, router_id='192.168.25.7',
                         best_path_change_handler=dump_remote_best_path_change,
                         peer_down_handler=detect_peer_down)

    speaker.neighbor_add('192.168.25.2', 65002)
    # uncomment the below line if the speaker needs to talk with a bmp server.
    # speaker.bmp_server_add('192.168.177.2', 11019)
    count = 1
    while True:
        print "Oi"
        eventlet.sleep(30)
        prefix = '10.20.' + str(count) + '.0/24'
        print "add a new prefix", prefix
        speaker.prefix_add(prefix)
        count += 1
        if count == 4:
            speaker.shutdown()
示例#18
0
    def __init__(self, hosts=None, networks=None, *args, **kwargs):
        super(BGP_Speaker, self).__init__(*args, **kwargs)
        self.networks = networks
        self.hosts = hosts
        # Configuring AS 65501:
        self.as_number = 65001
        #self.remote_as = 65501
        self.router_id = '192.168.25.7'
        self.router_next_hop = "10.0.254.254"  # The source IP of the BGP
        self.listen_port = 179
        self.bgp_speaker = \
            BGPSpeaker(self.as_number,
                       self.router_id,
                       bgp_server_port=self.listen_port,
                       best_path_change_handler=self.best_path_change_handler,
                       peer_down_handler=self.peer_down_handler,
                       peer_up_handler=self.peer_up_handler)
        # print "<<<<<<<<<",self.bgp_speaker

        # speaker = BGPSpeaker(as_number=65001, router_id='192.168.25.7',
        #                      best_path_change_handler=dump_remote_best_path_change,
        #                      peer_down_handler=detect_peer_down)
        self.neighbor1 = Neighbor(ip="192.168.25.2",
                                  asn=65002,
                                  next_hop="10.0.1.254",
                                  border_switch=2,
                                  sw_port=1,
                                  controller_ip="10.0.1.254")
        #self.neighbor2 = Neighbor(ip="10.0.2.2", asn=65002,next_hop="10.0.1.254", border_switch=2, sw_port=2, controller_ip="10.0.1.254")
        # self.neighbor = {"10.0.1.1": {'asn': 65001,'switch':2, 'port': 1,'controller_ip':"10.0.1.254"},
        #                  "10.0.2.2": {'asn': 65002,'switch':2, 'port': 2,'controller_ip':"10.0.2.254"},
        #                  }
        self.neighbors = [self.neighbor1]  #,self.neighbor2]
        #self.local_networks = {"192.168.2.0/24":{'controller_ip':"192.168.2.254"}}
        self.prefix_add(prefix="192.168.2.0/24", next_hop="192.168.2.254")
        # Adding neighbors:
        #TODO: Verify the option of next_hop
        for neighbor in self.neighbors:
            # self.bgp_speaker.neighbor_add(address=neighbor, remote_as=self.neighbor[neighbor]['asn'],
            #                               next_hop=self.router_next_hop,
            #                               is_next_hop_self=True)
            self.neighbors_add(neighbor)
            # for network in self.local_networks:
            #     # Adding prefixes:
            #     self.bgp_speaker.prefix_add(network, self.neighbor[neighbor]['controller_ip'])  # next_hop (how to reach the network)
            #     #self.bgp_speaker.prefix_add("192.168.2.0/24", "10.0.2.254")  # next_hop (how to reach the network)
            #     # self.bgp_speaker.prefix_add("10.0.0.0/24", "10.0.1.1")

        # "10.0.3.1": 'fe:00:00:00:00:03'}
        # self.arp_controller = '00:00:00:00:00:fe'
        # self.monitor_thread = hub.spawn(self._monitor)
        # self.best_paths ={}

        self.prefix_learned = {}  # "198.51.100.0/24",'10.0.1.0/24'}

        self.is_load_balancer_active = False
        self.load_balancer = {}

        #self.monitor_thread = hub.spawn(self.stand_alone)
        print "BGP Speaker started! ;)"
        self.stand_alone()
示例#19
0
    null = ''
    true = 'True'
    false = 'False'
    Flag = False
    status_bgp = speaker.neighbor_state_get()
    status = json.loads(status_bgp)
    for key in status.keys():
        if status[key]['info']['bgp_state'] != 'Established':
            logging.info('neighbor is abornamal .please check peer {}'.format(key))
            Flag = True
    return Flag


if __name__ == "__main__":
    speaker = BGPSpeaker(as_number=100, router_id='10.0.0.82',
                         best_path_change_handler=dump_remote_best_path_change,
                         peer_down_handler=detect_peer_down)

    speaker.neighbor_add('10.0.0.81', 100)

    # uncomment the below line if the speaker needs to talk with a bmp server.
    # speaker.bmp_server_add('192.168.177.2', 11019)
    time.sleep(5)
    while True:
        print(datetime.datetime.now())
        if (get_bgp_status()):
            logging.warning("~~~~~~~~~~~~~~~~~~~~~")
            db_from_bgp.clear()
        else:
            compare_db()
        eventlet.sleep(6)
示例#20
0
        event.nexthop, event.is_withdraw

def detect_peer_down(remote_ip, remote_as):
    print 'Peer down:', remote_ip, remote_as


SSH = {
    'ssh_port': 4990,
    'ssh_host': 'localhost',
    'ssh_host_key': '/etc/ssh_host_rsa_key',
    'ssh_username': '******',
    'ssh_password': '******',
}

if __name__ == "__main__":
    speaker = BGPSpeaker(as_number=65005, router_id='172.16.1.174',
                         best_path_change_handler=dump_remote_best_path_change,
                         peer_down_handler=detect_peer_down)

    speaker.neighbor_add('172.16.1.175', 65003)
    count = 0
    while True:
        eventlet.sleep(5)
        prefix = '192.168.' + str(count) + '.0/24'
        print "add a new prefix", prefix
        speaker.prefix_add(prefix)
        count += 1
        print("Neighbors: ", speaker.neighbors_get())
        print("Routes: ", speaker.rib_get())