← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2025969] [NEW] bgp os_ken ssh_console support

 

Public bug reported:

Hi, is it possible to enable the os_ken ssh_console?

For now there is no way to see the live status of the bgp connections.

There exist a closed RFE about bgp statistics:
https://bugs.launchpad.net/neutron/+bug/1527993

Enabling ssh console should require less effort than bgp statistics RFE.


ssh console example:

    $ ssh localhost -p 4990

    Hello, this is OSKen BGP speaker (version 4.19).

    bgpd> # Hit '?' key
     clear - allows to reset BGP connections
     help - show this help
     quit - exit this session
     set - set runtime settings
     show - shows runtime state information
    bgpd>
    bgpd> show rib all
    Status codes: * valid, > best
    Origin codes: i - IGP, e - EGP, ? - incomplete
         Network        Labels   Next Hop   Reason      Metric LocPrf Path
     *>  10.10.1.0/24   None     0.0.0.0    Only Path                 i
    bgpd>


os-ken supports ssh console:

ssh_console specifies whether or not SSH CLI need to be started.

ssh_port specifies the port number for SSH CLI server. The default is
bgp.operator.ssh.DEFAULT_SSH_PORT.

ssh_host specifies the IP address for SSH CLI server. The default is
bgp.operator.ssh.DEFAULT_SSH_HOST.

ssh_host_key specifies the path to the host key added to the keys list
used by SSH CLI server. The default is
bgp.operator.ssh.DEFAULT_SSH_HOST_KEY.


# ./os_ken/services/protocols/bgp/bgpspeaker.py

class BGPSpeaker(object):
    """Class to provide the APIs of OSKen BGP Speaker.

    ``as_number`` specifies an Autonomous Number. It must be an integer
    between 1 and 65535.

    ``router_id`` specifies BGP router identifier. It must be the
    string representation of an IPv4 address (e.g. 10.0.0.1).

    ``bgp_server_host`` specifies a list of TCP listen host addresses.

    ``bgp_server_port`` specifies TCP listen port number. 179 is
    used if not specified.

    ``refresh_stalepath_time`` causes the BGP speaker to remove
    stale routes from the BGP table after the timer expires, even
    if the speaker does not receive a Router-Refresh End-of-RIB
    message. This feature is disabled (not implemented yet).

    ``refresh_max_eor_time`` causes the BGP speaker to generate a
    Route-Refresh End-of-RIB message if it was not able to
    generate one due to route flapping. This feature is disabled
    (not implemented yet).

    ``best_path_change_handler``, if specified, is called when any
    best remote path is changed due to an update message or remote
    peer down. The handler is supposed to take one argument, the
    instance of an EventPrefix class instance.

    ``adj_rib_in_change_handler``, if specified, is called when any
    adj-RIB-in path is changed due to an update message or remote
    peer down. The given handler should take three argument, the
    instance of an EventPrefix class instance, str type peer's IP address
    and int type peer's AS number.

    ``peer_down_handler``, if specified, is called when BGP peering
    session goes down.

    ``peer_up_handler``, if specified, is called when BGP peering
    session goes up.

    ``ssh_console`` specifies whether or not SSH CLI need to be started.

    ``ssh_port`` specifies the port number for SSH CLI server.
    The default is bgp.operator.ssh.DEFAULT_SSH_PORT.

    ``ssh_host`` specifies the IP address for SSH CLI server.
    The default is bgp.operator.ssh.DEFAULT_SSH_HOST.

    ``ssh_host_key`` specifies the path to the host key added to
    the keys list used by SSH CLI server.
    The default is bgp.operator.ssh.DEFAULT_SSH_HOST_KEY.

    ``label_range`` specifies the range of MPLS labels generated
    automatically.

    ``allow_local_as_in_count`` maximum number of local AS number
    occurrences in AS_PATH.  This option is useful for e.g.  auto RD/RT
    configurations in leaf/spine architecture with shared AS numbers.
    The default is 0 and means "local AS number is not allowed in
    AS_PATH".  To allow local AS, 3 is recommended (Cisco's default).

    ``cluster_id`` specifies the cluster identifier for Route Reflector.
    It must be the string representation of an IPv4 address.
    If omitted, "router_id" is used for this field.

    ``local_pref`` specifies the default local preference. It must be an
    integer.
    """

    def __init__(self, as_number, router_id,
                 bgp_server_hosts=DEFAULT_BGP_SERVER_HOSTS,
                 bgp_server_port=DEFAULT_BGP_SERVER_PORT,
                 refresh_stalepath_time=DEFAULT_REFRESH_STALEPATH_TIME,
                 refresh_max_eor_time=DEFAULT_REFRESH_MAX_EOR_TIME,
                 best_path_change_handler=None,
                 adj_rib_in_change_handler=None,
                 peer_down_handler=None,
                 peer_up_handler=None,
                 ssh_console=False,
                 ssh_port=None, ssh_host=None, ssh_host_key=None,
                 label_range=DEFAULT_LABEL_RANGE,
                 allow_local_as_in_count=0,
                 cluster_id=None,
                 local_pref=DEFAULT_LOCAL_PREF):
        super(BGPSpeaker, self).__init__()


# ./neutron_dynamic_routing/services/bgp/agent/driver/os_ken/driver.py
        curr_speaker = bgpspeaker.BGPSpeaker(as_number=speaker_as,
                             router_id=self.routerid, bgp_server_port=0,
                             best_path_change_handler=best_path_change_cb,
                             peer_down_handler=bgp_peer_down_cb,
                             peer_up_handler=bgp_peer_up_cb)

Dynamic Routing can get the ssh_console, ssh_port, ssh_host and
ssh_host_key variables from config and initialize the curr_speaker with
ssh_console support.

Do you have any idea why this feature is not implemented? Thanks.

** Affects: neutron
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2025969

Title:
  bgp os_ken ssh_console support

Status in neutron:
  New

Bug description:
  Hi, is it possible to enable the os_ken ssh_console?

  For now there is no way to see the live status of the bgp connections.

  There exist a closed RFE about bgp statistics:
  https://bugs.launchpad.net/neutron/+bug/1527993

  Enabling ssh console should require less effort than bgp statistics
  RFE.

  
  ssh console example:

      $ ssh localhost -p 4990

      Hello, this is OSKen BGP speaker (version 4.19).

      bgpd> # Hit '?' key
       clear - allows to reset BGP connections
       help - show this help
       quit - exit this session
       set - set runtime settings
       show - shows runtime state information
      bgpd>
      bgpd> show rib all
      Status codes: * valid, > best
      Origin codes: i - IGP, e - EGP, ? - incomplete
           Network        Labels   Next Hop   Reason      Metric LocPrf Path
       *>  10.10.1.0/24   None     0.0.0.0    Only Path                 i
      bgpd>

  
  os-ken supports ssh console:

  ssh_console specifies whether or not SSH CLI need to be started.

  ssh_port specifies the port number for SSH CLI server. The default is
  bgp.operator.ssh.DEFAULT_SSH_PORT.

  ssh_host specifies the IP address for SSH CLI server. The default is
  bgp.operator.ssh.DEFAULT_SSH_HOST.

  ssh_host_key specifies the path to the host key added to the keys list
  used by SSH CLI server. The default is
  bgp.operator.ssh.DEFAULT_SSH_HOST_KEY.

  
  # ./os_ken/services/protocols/bgp/bgpspeaker.py

  class BGPSpeaker(object):
      """Class to provide the APIs of OSKen BGP Speaker.

      ``as_number`` specifies an Autonomous Number. It must be an integer
      between 1 and 65535.

      ``router_id`` specifies BGP router identifier. It must be the
      string representation of an IPv4 address (e.g. 10.0.0.1).

      ``bgp_server_host`` specifies a list of TCP listen host addresses.

      ``bgp_server_port`` specifies TCP listen port number. 179 is
      used if not specified.

      ``refresh_stalepath_time`` causes the BGP speaker to remove
      stale routes from the BGP table after the timer expires, even
      if the speaker does not receive a Router-Refresh End-of-RIB
      message. This feature is disabled (not implemented yet).

      ``refresh_max_eor_time`` causes the BGP speaker to generate a
      Route-Refresh End-of-RIB message if it was not able to
      generate one due to route flapping. This feature is disabled
      (not implemented yet).

      ``best_path_change_handler``, if specified, is called when any
      best remote path is changed due to an update message or remote
      peer down. The handler is supposed to take one argument, the
      instance of an EventPrefix class instance.

      ``adj_rib_in_change_handler``, if specified, is called when any
      adj-RIB-in path is changed due to an update message or remote
      peer down. The given handler should take three argument, the
      instance of an EventPrefix class instance, str type peer's IP address
      and int type peer's AS number.

      ``peer_down_handler``, if specified, is called when BGP peering
      session goes down.

      ``peer_up_handler``, if specified, is called when BGP peering
      session goes up.

      ``ssh_console`` specifies whether or not SSH CLI need to be
  started.

      ``ssh_port`` specifies the port number for SSH CLI server.
      The default is bgp.operator.ssh.DEFAULT_SSH_PORT.

      ``ssh_host`` specifies the IP address for SSH CLI server.
      The default is bgp.operator.ssh.DEFAULT_SSH_HOST.

      ``ssh_host_key`` specifies the path to the host key added to
      the keys list used by SSH CLI server.
      The default is bgp.operator.ssh.DEFAULT_SSH_HOST_KEY.

      ``label_range`` specifies the range of MPLS labels generated
      automatically.

      ``allow_local_as_in_count`` maximum number of local AS number
      occurrences in AS_PATH.  This option is useful for e.g.  auto RD/RT
      configurations in leaf/spine architecture with shared AS numbers.
      The default is 0 and means "local AS number is not allowed in
      AS_PATH".  To allow local AS, 3 is recommended (Cisco's default).

      ``cluster_id`` specifies the cluster identifier for Route Reflector.
      It must be the string representation of an IPv4 address.
      If omitted, "router_id" is used for this field.

      ``local_pref`` specifies the default local preference. It must be an
      integer.
      """

      def __init__(self, as_number, router_id,
                   bgp_server_hosts=DEFAULT_BGP_SERVER_HOSTS,
                   bgp_server_port=DEFAULT_BGP_SERVER_PORT,
                   refresh_stalepath_time=DEFAULT_REFRESH_STALEPATH_TIME,
                   refresh_max_eor_time=DEFAULT_REFRESH_MAX_EOR_TIME,
                   best_path_change_handler=None,
                   adj_rib_in_change_handler=None,
                   peer_down_handler=None,
                   peer_up_handler=None,
                   ssh_console=False,
                   ssh_port=None, ssh_host=None, ssh_host_key=None,
                   label_range=DEFAULT_LABEL_RANGE,
                   allow_local_as_in_count=0,
                   cluster_id=None,
                   local_pref=DEFAULT_LOCAL_PREF):
          super(BGPSpeaker, self).__init__()

  
  # ./neutron_dynamic_routing/services/bgp/agent/driver/os_ken/driver.py
          curr_speaker = bgpspeaker.BGPSpeaker(as_number=speaker_as,
                               router_id=self.routerid, bgp_server_port=0,
                               best_path_change_handler=best_path_change_cb,
                               peer_down_handler=bgp_peer_down_cb,
                               peer_up_handler=bgp_peer_up_cb)

  Dynamic Routing can get the ssh_console, ssh_port, ssh_host and
  ssh_host_key variables from config and initialize the curr_speaker
  with ssh_console support.

  Do you have any idea why this feature is not implemented? Thanks.

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2025969/+subscriptions