-
-static int
-parse_queue_stats_mapping_config(const char *q_arg, int is_rx)
-{
- char s[256];
- const char *p, *p0 = q_arg;
- char *end;
- enum fieldnames {
- FLD_PORT = 0,
- FLD_QUEUE,
- FLD_STATS_COUNTER,
- _NUM_FLD
- };
- unsigned long int_fld[_NUM_FLD];
- char *str_fld[_NUM_FLD];
- int i;
- unsigned size;
-
- /* reset from value set at definition */
- is_rx ? (nb_rx_queue_stats_mappings = 0) : (nb_tx_queue_stats_mappings = 0);
-
- while ((p = strchr(p0,'(')) != NULL) {
- ++p;
- if((p0 = strchr(p,')')) == NULL)
- return -1;
-
- size = p0 - p;
- if(size >= sizeof(s))
- return -1;
-
- snprintf(s, sizeof(s), "%.*s", size, p);
- if (rte_strsplit(s, sizeof(s), str_fld, _NUM_FLD, ',') != _NUM_FLD)
- return -1;
- for (i = 0; i < _NUM_FLD; i++){
- errno = 0;
- int_fld[i] = strtoul(str_fld[i], &end, 0);
- if (errno != 0 || end == str_fld[i] || int_fld[i] > 255)
- return -1;
- }
- /* Check mapping field is in correct range (0..RTE_ETHDEV_QUEUE_STAT_CNTRS-1) */
- if (int_fld[FLD_STATS_COUNTER] >= RTE_ETHDEV_QUEUE_STAT_CNTRS) {
- printf("Stats counter not in the correct range 0..%d\n",
- RTE_ETHDEV_QUEUE_STAT_CNTRS - 1);
- return -1;
- }
-
- if (!is_rx) {
- if ((nb_tx_queue_stats_mappings >=
- MAX_TX_QUEUE_STATS_MAPPINGS)) {
- printf("exceeded max number of TX queue "
- "statistics mappings: %hu\n",
- nb_tx_queue_stats_mappings);
- return -1;
- }
- tx_queue_stats_mappings_array[nb_tx_queue_stats_mappings].port_id =
- (uint8_t)int_fld[FLD_PORT];
- tx_queue_stats_mappings_array[nb_tx_queue_stats_mappings].queue_id =
- (uint8_t)int_fld[FLD_QUEUE];
- tx_queue_stats_mappings_array[nb_tx_queue_stats_mappings].stats_counter_id =
- (uint8_t)int_fld[FLD_STATS_COUNTER];
- ++nb_tx_queue_stats_mappings;
- }
- else {
- if ((nb_rx_queue_stats_mappings >=
- MAX_RX_QUEUE_STATS_MAPPINGS)) {
- printf("exceeded max number of RX queue "
- "statistics mappings: %hu\n",
- nb_rx_queue_stats_mappings);
- return -1;
- }
- rx_queue_stats_mappings_array[nb_rx_queue_stats_mappings].port_id =
- (uint8_t)int_fld[FLD_PORT];
- rx_queue_stats_mappings_array[nb_rx_queue_stats_mappings].queue_id =
- (uint8_t)int_fld[FLD_QUEUE];
- rx_queue_stats_mappings_array[nb_rx_queue_stats_mappings].stats_counter_id =
- (uint8_t)int_fld[FLD_STATS_COUNTER];
- ++nb_rx_queue_stats_mappings;
- }
-
- }
-/* Reassign the rx/tx_queue_stats_mappings pointer to point to this newly populated array rather */
-/* than to the default array (that was set at its definition) */
- is_rx ? (rx_queue_stats_mappings = rx_queue_stats_mappings_array) :
- (tx_queue_stats_mappings = tx_queue_stats_mappings_array);
- return 0;
-}
-