diff options
author | IWASE Yusuke <iwase.yusuke0@gmail.com> | 2017-09-29 16:15:33 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2017-10-15 13:21:21 +0900 |
commit | 6329444165ef6b3844d4cc75bbb6c0121e7f3168 (patch) | |
tree | 51622ec961553b6f2284511ac2db07e24bd4a9f5 | |
parent | 7ef14a83a21f9fc4c6ac2b74de6382345a6dc637 (diff) |
bgp/application: Enhance arguments handling for BGPSpeaker
Currently, when new arguments are introduced into BGPSpeaker,
ryu.application.RyuBGPSpeaker need modifications to support the
introduced arguments.
This patch enables to pass arguments to BGPSpeaker without some
modifications on RyuBGPSpeaker.
Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/services/protocols/bgp/application.py | 63 |
1 files changed, 22 insertions, 41 deletions
diff --git a/ryu/services/protocols/bgp/application.py b/ryu/services/protocols/bgp/application.py index d3236f61..ed5961b8 100644 --- a/ryu/services/protocols/bgp/application.py +++ b/ryu/services/protocols/bgp/application.py @@ -33,18 +33,8 @@ from ryu.services.protocols.bgp.net_ctrl import NET_CONTROLLER from ryu.services.protocols.bgp.net_ctrl import NC_RPC_BIND_IP from ryu.services.protocols.bgp.net_ctrl import NC_RPC_BIND_PORT from ryu.services.protocols.bgp.rtconf.base import RuntimeConfigError -from ryu.services.protocols.bgp.rtconf.common import BGP_SERVER_PORT -from ryu.services.protocols.bgp.rtconf.common import DEFAULT_BGP_SERVER_PORT -from ryu.services.protocols.bgp.rtconf.common import ( - DEFAULT_REFRESH_MAX_EOR_TIME, DEFAULT_REFRESH_STALEPATH_TIME) -from ryu.services.protocols.bgp.rtconf.common import DEFAULT_LABEL_RANGE -from ryu.services.protocols.bgp.rtconf.common import LABEL_RANGE from ryu.services.protocols.bgp.rtconf.common import LOCAL_AS -from ryu.services.protocols.bgp.rtconf.common import REFRESH_MAX_EOR_TIME -from ryu.services.protocols.bgp.rtconf.common import REFRESH_STALEPATH_TIME from ryu.services.protocols.bgp.rtconf.common import ROUTER_ID -from ryu.services.protocols.bgp.rtconf.common import LOCAL_PREF -from ryu.services.protocols.bgp.rtconf.common import DEFAULT_LOCAL_PREF from ryu.services.protocols.bgp.utils.validation import is_valid_ipv4 from ryu.services.protocols.bgp.utils.validation import is_valid_ipv6 @@ -234,54 +224,45 @@ class RyuBGPSpeaker(RyuApp): """ 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) + # 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. - bgp_settings['best_path_change_handler'] = settings.get( + settings.setdefault( 'best_path_change_handler', self._notify_best_path_changed_event) - bgp_settings['peer_down_handler'] = settings.get( + settings.setdefault( 'peer_down_handler', self._notify_peer_down_event) - bgp_settings['peer_up_handler'] = settings.get( + settings.setdefault( '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) + # 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...') - self.speaker = BGPSpeaker(**bgp_settings) + settings.setdefault('as_number', settings.pop(LOCAL_AS)) + self.speaker = BGPSpeaker(**settings) # Add neighbors. LOG.debug('Adding neighbors...') - self._add_neighbors(settings.get('neighbors', [])) + self._add_neighbors(neighbors_settings) # Add VRFs. LOG.debug('Adding VRFs...') - self._add_vrfs(settings.get('vrfs', [])) + self._add_vrfs(vrfs_settings) - # Add Networks + # Add routes LOG.debug('Adding routes...') - self._add_routes(settings.get('routes', [])) + self._add_routes(routes_settings) def _notify_best_path_changed_event(self, ev): ev = EventBestPathChanged(ev.path, ev.is_withdraw) |