* limitations under the License.
*/
-#define rte_mbuf_from_vlib_buffer(x) (((struct rte_mbuf *)x) - 1)
-#define vlib_buffer_from_rte_mbuf(x) ((vlib_buffer_t *)(x+1))
-
#define DPDK_NB_RX_DESC_DEFAULT 1024
#define DPDK_NB_TX_DESC_DEFAULT 1024
#define DPDK_NB_RX_DESC_VIRTIO 256
_(mem-alloc-request, m) \
_(force-ranks, r)
-/* These args are preceeded by "--" and followed by a single string */
+/* These args are preceded by "--" and followed by a single string */
#define foreach_eal_double_hyphen_arg \
_(huge-dir) \
_(proc-type) \
_(file-prefix) \
-_(vdev)
+_(vdev) \
+_(log-level) \
+_(iova-mode)
static inline void
dpdk_get_xstats (dpdk_device_t * xd)
{
- int len;
- if ((len = rte_eth_xstats_get (xd->device_index, NULL, 0)) > 0)
- {
- vec_validate (xd->xstats, len - 1);
- vec_validate (xd->last_cleared_xstats, len - 1);
+ int len, ret;
- len =
- rte_eth_xstats_get (xd->device_index, xd->xstats,
- vec_len (xd->xstats));
+ if (!(xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP))
+ return;
- ASSERT (vec_len (xd->xstats) == len);
- ASSERT (vec_len (xd->last_cleared_xstats) == len);
+ len = rte_eth_xstats_get (xd->port_id, NULL, 0);
+ if (len < 0)
+ return;
- _vec_len (xd->xstats) = len;
- _vec_len (xd->last_cleared_xstats) = len;
+ vec_validate (xd->xstats, len - 1);
+ ret = rte_eth_xstats_get (xd->port_id, xd->xstats, len);
+ if (ret < 0 || ret > len)
+ {
+ _vec_len (xd->xstats) = 0;
+ return;
}
-}
+ _vec_len (xd->xstats) = len;
+}
static inline void
dpdk_update_counters (dpdk_device_t * xd, f64 now)
return;
xd->time_last_stats_update = now ? now : xd->time_last_stats_update;
- clib_memcpy (&xd->last_stats, &xd->stats, sizeof (xd->last_stats));
- rte_eth_stats_get (xd->device_index, &xd->stats);
+ clib_memcpy_fast (&xd->last_stats, &xd->stats, sizeof (xd->last_stats));
+ rte_eth_stats_get (xd->port_id, &xd->stats);
/* maybe bump interface rx no buffer counter */
if (PREDICT_FALSE (xd->stats.rx_nombuf != xd->last_stats.rx_nombuf))
cm = vec_elt_at_index (vnm->interface_main.sw_if_counters,
VNET_INTERFACE_COUNTER_RX_NO_BUF);
- vlib_increment_simple_counter (cm, thread_index, xd->vlib_sw_if_index,
+ vlib_increment_simple_counter (cm, thread_index, xd->sw_if_index,
xd->stats.rx_nombuf -
xd->last_stats.rx_nombuf);
}
cm = vec_elt_at_index (vnm->interface_main.sw_if_counters,
VNET_INTERFACE_COUNTER_RX_MISS);
- vlib_increment_simple_counter (cm, thread_index, xd->vlib_sw_if_index,
+ vlib_increment_simple_counter (cm, thread_index, xd->sw_if_index,
xd->stats.imissed -
xd->last_stats.imissed);
}
cm = vec_elt_at_index (vnm->interface_main.sw_if_counters,
VNET_INTERFACE_COUNTER_RX_ERROR);
- vlib_increment_simple_counter (cm, thread_index, xd->vlib_sw_if_index,
+ vlib_increment_simple_counter (cm, thread_index, xd->sw_if_index,
rxerrors - last_rxerrors);
}