code: def _start_speaker(self, 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)
docs: Starts BGPSpeaker using the given settings.