示例#1
0
indigo_error_t
indigo_port_queue_stats_get(of_queue_stats_request_t *request,
                            of_queue_stats_reply_t **reply_ptr)
{

    AIM_LOG_VERBOSE("queue stats get called\n");
    *reply_ptr = of_queue_stats_reply_new(request->version);
    return INDIGO_ERROR_NONE;
}
示例#2
0
文件: main.c 项目: nbastin/indigo
void
indigo_port_queue_stats_get(of_queue_stats_request_t *request,
                            indigo_cookie_t cookie)
{
    of_queue_stats_reply_t *reply;

    AIM_LOG_VERBOSE("queue stats get called\n");
    reply = of_queue_stats_reply_new(request->version);
    indigo_core_queue_stats_get_callback(INDIGO_ERROR_NONE, reply, cookie);
}
示例#3
0
文件: vport.c 项目: Sovietaced/ivs
/* Currently returns an empty reply */
indigo_error_t
indigo_port_queue_stats_get(
    of_queue_stats_request_t *queue_stats_request,
    of_queue_stats_reply_t **queue_stats_reply_ptr)
{
    of_queue_stats_reply_t *queue_stats_reply = of_queue_stats_reply_new(queue_stats_request->version);
    if (queue_stats_reply == NULL) {
        return INDIGO_ERROR_RESOURCE;
    }

    uint32_t xid;
    of_queue_stats_request_xid_get(queue_stats_request, &xid);
    of_queue_stats_reply_xid_set(queue_stats_reply, xid);

    *queue_stats_reply_ptr = queue_stats_reply;
    return INDIGO_ERROR_NONE;
}
示例#4
0
indigo_error_t indigo_port_queue_stats_get(of_queue_stats_request_t *queue_stats_request,
                                           of_queue_stats_reply_t **queue_stats_reply)
{
  indigo_error_t err = INDIGO_ERROR_NONE;
  OFDPA_ERROR_t ofdpa_rv = OFDPA_E_NONE;
  of_queue_stats_reply_t *reply;
  uint32_t req_of_port_queue_id;
  of_port_no_t req_of_port_num;
  uint32_t port, all_ports = 0;


  LOG_TRACE("Port queue stats called");

  if (queue_stats_request->version < OF_VERSION_1_3)
  {
    LOG_ERROR("Unsupported OpenFlow version 0x%x.", queue_stats_request->version);
    return INDIGO_ERROR_VERSION;
  }

  /* Allocate memory for reply message
   * NOTE: This memory is freed by the caller of
   *       indigo_port_queue_stats_get()  */
  reply = of_queue_stats_reply_new(queue_stats_request->version);
  if (reply == NULL)
  {
    LOG_ERROR("Error allocating memory for queue stats reply.");
    return INDIGO_ERROR_RESOURCE;
  }

  *queue_stats_reply = reply;

  of_list_queue_stats_entry_t list[1];
  of_queue_stats_reply_entries_bind(*queue_stats_reply, list);

  /* Get the port id from request message */
  of_queue_stats_request_port_no_get(queue_stats_request, &req_of_port_num);

  /* Get the queue id from request message */
  of_queue_stats_request_queue_id_get(queue_stats_request, &req_of_port_queue_id);

  /* Check if the queue stats request is for ALL ports (OFPP_ANY) */
  if (req_of_port_num == OF_PORT_DEST_WILDCARD_BY_VERSION(queue_stats_request->version))
  {
    /* Get the first port if the queue stats message is for all the ports*/
    ofdpa_rv = ofdpaPortNextGet(0, &port);
    if (ofdpa_rv != OFDPA_E_NONE)
    {
      LOG_ERROR("Failed to get first port. (ofdpa_rv = %d)", ofdpa_rv);
      of_queue_stats_reply_delete(*queue_stats_reply);
      return (indigoConvertOfdpaRv(ofdpa_rv));
    }
    all_ports = 1;
  }
  else
  {
    port = req_of_port_num;
  }


  do
  {
    err = ind_ofdpa_queue_stats_set(port, req_of_port_queue_id, list);
    if (err != INDIGO_ERROR_NONE)
    {
      LOG_ERROR("Failed to get port queue stats. (err = %d)", err);
      break;
    }

    if (!all_ports)
    {
      break;
    }

  }while(ofdpaPortNextGet(port, &port) == OFDPA_E_NONE);

  /* Free the reply message only on failure.
     Reply message is freed by the caller on success */
  if (err != INDIGO_ERROR_NONE)
  {
    of_queue_stats_reply_delete(*queue_stats_reply);
    *queue_stats_reply = NULL;
  }

  return err;
}