| 3432 | } |
| 3433 | |
| 3434 | int |
| 3435 | rte_eth_xstats_get_names(uint16_t port_id, |
| 3436 | struct rte_eth_xstat_name *xstats_names, |
| 3437 | unsigned int size) |
| 3438 | { |
| 3439 | struct rte_eth_dev *dev; |
| 3440 | int cnt_used_entries; |
| 3441 | int cnt_expected_entries; |
| 3442 | int cnt_driver_entries; |
| 3443 | int i; |
| 3444 | |
| 3445 | cnt_expected_entries = eth_dev_get_xstats_count(port_id); |
| 3446 | if (xstats_names == NULL || cnt_expected_entries < 0 || |
| 3447 | (int)size < cnt_expected_entries) |
| 3448 | return cnt_expected_entries; |
| 3449 | |
| 3450 | /* port_id checked in eth_dev_get_xstats_count() */ |
| 3451 | dev = &rte_eth_devices[port_id]; |
| 3452 | |
| 3453 | cnt_used_entries = eth_basic_stats_get_names(dev, xstats_names); |
| 3454 | |
| 3455 | if (dev->dev_ops->xstats_get_names != NULL) { |
| 3456 | /* If there are any driver-specific xstats, append them |
| 3457 | * to end of list. |
| 3458 | */ |
| 3459 | cnt_driver_entries = (*dev->dev_ops->xstats_get_names)( |
| 3460 | dev, |
| 3461 | xstats_names + cnt_used_entries, |
| 3462 | size - cnt_used_entries); |
| 3463 | if (cnt_driver_entries < 0) |
| 3464 | return eth_err(port_id, cnt_driver_entries); |
| 3465 | cnt_used_entries += cnt_driver_entries; |
| 3466 | } |
| 3467 | |
| 3468 | for (i = 0; i < cnt_used_entries; i++) |
| 3469 | rte_eth_trace_xstats_get_names(port_id, i, &xstats_names[i], |
| 3470 | size, cnt_used_entries); |
| 3471 | |
| 3472 | return cnt_used_entries; |
| 3473 | } |
| 3474 | |
| 3475 | |
| 3476 | static int |
no test coverage detected