docs: def _bgp_dispatcher(payload):
      """
      Returns the right class for a given BGP message.
      """
  
      cls = conf.raw_layer
  
      # By default, calling BGP() will build a BGPHeader.
      if payload is None:
          cls = _get_cls("BGPHeader", conf.raw_layer)
  
      else:
          if len(payload) >= _BGP_HEADER_SIZE and\
                  payload[:16] == _BGP_HEADER_MARKER:
  
              # Get BGP message type
              message_type = orb(payload[18])
              if message_type == 4:
                  cls = _get_cls("BGPKeepAlive")
              else:
                  cls = _get_cls("BGPHeader")
  
      return cls