struct rte_eth_dev *vrtl_eth_dev;
struct virtual_ethdev_private *dev_private;
-
+ uint64_t obytes = 0;
int i;
+ for (i = 0; i < nb_pkts; i++)
+ obytes += rte_pktmbuf_pkt_len(bufs[i]);
vrtl_eth_dev = &rte_eth_devices[tx_q->port_id];
dev_private = vrtl_eth_dev->data->dev_private;
if (vrtl_eth_dev->data->dev_link.link_status) {
/* increment opacket count */
dev_private->eth_stats.opackets += nb_pkts;
-
+ dev_private->eth_stats.obytes += obytes;
/* free packets in burst */
for (i = 0; i < nb_pkts; i++)
rte_pktmbuf_free(bufs[i]);
dev_private->tx_burst_fail_count = packet_fail_count;
}
+void
+virtual_ethdev_set_link_status(uint8_t port_id, uint8_t link_status)
+{
+ struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
+
+ vrtl_eth_dev->data->dev_link.link_status = link_status;
+}
+
void
virtual_ethdev_simulate_link_status_interrupt(uint8_t port_id,
uint8_t link_status)
int
virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
- uint8_t socket_id)
+ uint8_t socket_id, uint8_t isr_support)
{
struct rte_pci_device *pci_dev = NULL;
struct rte_eth_dev *eth_dev = NULL;
pci_dev->numa_node = socket_id;
pci_drv->name = virtual_ethdev_driver_name;
pci_drv->id_table = id_table;
- pci_drv->drv_flags = RTE_PCI_DRV_INTR_LSC;
+
+ if (isr_support)
+ pci_drv->drv_flags |= RTE_PCI_DRV_INTR_LSC;
+ else
+ pci_drv->drv_flags &= ~RTE_PCI_DRV_INTR_LSC;
+
eth_drv->pci_drv = (struct rte_pci_driver)(*pci_drv);
eth_dev->driver = eth_drv;
memcpy(eth_dev->data->mac_addrs, mac_addr,
sizeof(*eth_dev->data->mac_addrs));
- eth_dev->data->mac_addrs->addr_bytes[5] = eth_dev->data->port_id;
eth_dev->data->dev_started = 0;
eth_dev->data->promiscuous = 0;