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; }
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); }
/* 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; }
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; }