git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cryptodev: break dependency on virtual device bus
[dpdk.git]
/
examples
/
tep_termination
/
main.c
diff --git
a/examples/tep_termination/main.c
b/examples/tep_termination/main.c
index
2b67e64
..
a14d2e3
100644
(file)
--- a/
examples/tep_termination/main.c
+++ b/
examples/tep_termination/main.c
@@
-49,7
+49,8
@@
#include <rte_log.h>
#include <rte_string_fns.h>
#include <rte_malloc.h>
#include <rte_log.h>
#include <rte_string_fns.h>
#include <rte_malloc.h>
-#include <rte_virtio_net.h>
+#include <rte_vhost.h>
+#include <rte_pause.h>
#include "main.h"
#include "vxlan.h"
#include "main.h"
#include "vxlan.h"
@@
-68,7
+69,7
@@
(nb_switching_cores * MBUF_CACHE_SIZE))
#define MBUF_CACHE_SIZE 128
(nb_switching_cores * MBUF_CACHE_SIZE))
#define MBUF_CACHE_SIZE 128
-#define MBUF_
SIZE (2048 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
+#define MBUF_
DATA_SIZE RTE_MBUF_DEFAULT_BUF_SIZE
#define MAX_PKT_BURST 32 /* Max burst size for RX/TX */
#define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
#define MAX_PKT_BURST 32 /* Max burst size for RX/TX */
#define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
@@
-97,7
+98,7
@@
#define MBUF_HEADROOM_UINT32(mbuf) (*(uint32_t *)((uint8_t *)(mbuf) \
+ sizeof(struct rte_mbuf)))
#define MBUF_HEADROOM_UINT32(mbuf) (*(uint32_t *)((uint8_t *)(mbuf) \
+ sizeof(struct rte_mbuf)))
-#define INVALID_PORT_ID 0xFF
+#define INVALID_PORT_ID 0xFF
FF
/* Size of buffers used for snprintfs. */
#define MAX_PRINT_BUFF 6072
/* Size of buffers used for snprintfs. */
#define MAX_PRINT_BUFF 6072
@@
-183,7
+184,7
@@
static uint32_t burst_rx_retry_num = BURST_RX_RETRIES;
static char dev_basename[MAX_BASENAME_SZ] = "vhost-net";
static unsigned lcore_ids[RTE_MAX_LCORE];
static char dev_basename[MAX_BASENAME_SZ] = "vhost-net";
static unsigned lcore_ids[RTE_MAX_LCORE];
-uint
8
_t ports[RTE_MAX_ETHPORTS];
+uint
16
_t ports[RTE_MAX_ETHPORTS];
static unsigned nb_ports; /**< The number of ports specified in command line */
static unsigned nb_ports; /**< The number of ports specified in command line */
@@
-559,17
+560,16
@@
check_ports_num(unsigned max_nb_ports)
* This function routes the TX packet to the correct interface. This may be a local device
* or the physical port.
*/
* This function routes the TX packet to the correct interface. This may be a local device
* or the physical port.
*/
-static
inline void __attribute__((always_inline))
+static
__rte_always_inline void
virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m)
{
struct mbuf_table *tx_q;
struct rte_mbuf **m_table;
unsigned len, ret = 0;
const uint16_t lcore_id = rte_lcore_id();
virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m)
{
struct mbuf_table *tx_q;
struct rte_mbuf **m_table;
unsigned len, ret = 0;
const uint16_t lcore_id = rte_lcore_id();
- struct virtio_net *dev = vdev->dev;
-
LOG_DEBUG(VHOST_DATA, "(%"PRIu64"
) TX: MAC address is external\n",
-
dev->device_fh
);
+
RTE_LOG_DP(DEBUG, VHOST_DATA, "(%d
) TX: MAC address is external\n",
+
vdev->vid
);
/* Add packet to the port tx queue */
tx_q = &lcore_tx_queue[lcore_id];
/* Add packet to the port tx queue */
tx_q = &lcore_tx_queue[lcore_id];
@@
-578,8
+578,8
@@
virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m)
tx_q->m_table[len] = m;
len++;
if (enable_stats) {
tx_q->m_table[len] = m;
len++;
if (enable_stats) {
- dev_statistics[
dev->device_fh
].tx_total++;
- dev_statistics[
dev->device_fh
].tx++;
+ dev_statistics[
vdev->vid
].tx_total++;
+ dev_statistics[
vdev->vid
].tx++;
}
if (unlikely(len == MAX_PKT_BURST)) {
}
if (unlikely(len == MAX_PKT_BURST)) {
@@
-614,7
+614,6
@@
static int
switch_worker(__rte_unused void *arg)
{
struct rte_mempool *mbuf_pool = arg;
switch_worker(__rte_unused void *arg)
{
struct rte_mempool *mbuf_pool = arg;
- struct virtio_net *dev = NULL;
struct vhost_dev *vdev = NULL;
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
struct virtio_net_data_ll *dev_ll;
struct vhost_dev *vdev = NULL;
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
struct virtio_net_data_ll *dev_ll;
@@
-651,7
+650,7
@@
switch_worker(__rte_unused void *arg)
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
-
LOG_DEBUG(
VHOST_DATA, "TX queue drained after "
+
RTE_LOG_DP(DEBUG,
VHOST_DATA, "TX queue drained after "
"timeout with burst size %u\n",
tx_q->len);
ret = overlay_options.tx_handle(ports[0],
"timeout with burst size %u\n",
tx_q->len);
ret = overlay_options.tx_handle(ports[0],
@@
-688,7
+687,6
@@
switch_worker(__rte_unused void *arg)
while (dev_ll != NULL) {
vdev = dev_ll->vdev;
while (dev_ll != NULL) {
vdev = dev_ll->vdev;
- dev = vdev->dev;
if (unlikely(vdev->remove)) {
dev_ll = dev_ll->next;
if (unlikely(vdev->remove)) {
dev_ll = dev_ll->next;
@@
-709,22
+707,22
@@
switch_worker(__rte_unused void *arg)
* must be less than virtio queue size
*/
if (enable_retry && unlikely(rx_count >
* must be less than virtio queue size
*/
if (enable_retry && unlikely(rx_count >
- rte_v
ring_available_entries(dev
, VIRTIO_RXQ))) {
+ rte_v
host_avail_entries(vdev->vid
, VIRTIO_RXQ))) {
for (retry = 0; retry < burst_rx_retry_num;
retry++) {
rte_delay_us(burst_rx_delay_time);
for (retry = 0; retry < burst_rx_retry_num;
retry++) {
rte_delay_us(burst_rx_delay_time);
- if (rx_count <= rte_v
ring_available_entries(dev
, VIRTIO_RXQ))
+ if (rx_count <= rte_v
host_avail_entries(vdev->vid
, VIRTIO_RXQ))
break;
}
}
break;
}
}
- ret_count = overlay_options.rx_handle(
dev
, pkts_burst, rx_count);
+ ret_count = overlay_options.rx_handle(
vdev->vid
, pkts_burst, rx_count);
if (enable_stats) {
rte_atomic64_add(
if (enable_stats) {
rte_atomic64_add(
- &dev_statistics[
dev->device_fh
].rx_total_atomic,
+ &dev_statistics[
vdev->vid
].rx_total_atomic,
rx_count);
rte_atomic64_add(
rx_count);
rte_atomic64_add(
- &dev_statistics[
dev->device_fh
].rx_atomic, ret_count);
+ &dev_statistics[
vdev->vid
].rx_atomic, ret_count);
}
while (likely(rx_count)) {
rx_count--;
}
while (likely(rx_count)) {
rx_count--;
@@
-736,7
+734,7
@@
switch_worker(__rte_unused void *arg)
if (likely(!vdev->remove)) {
/* Handle guest TX*/
if (likely(!vdev->remove)) {
/* Handle guest TX*/
- tx_count = rte_vhost_dequeue_burst(
dev
,
+ tx_count = rte_vhost_dequeue_burst(
vdev->vid
,
VIRTIO_TXQ, mbuf_pool,
pkts_burst, MAX_PKT_BURST);
/* If this is the first received packet we need to learn the MAC */
VIRTIO_TXQ, mbuf_pool,
pkts_burst, MAX_PKT_BURST);
/* If this is the first received packet we need to learn the MAC */
@@
-908,23
+906,27
@@
init_data_ll(void)
/**
* Remove a device from the specific data core linked list and
* from the main linked list. Synchonization occurs through the use
/**
* Remove a device from the specific data core linked list and
* from the main linked list. Synchonization occurs through the use
- * of the lcore dev_removal_flag. Device is made volatile here
- * to avoid re-ordering of dev->remove=1 which can cause an infinite
- * loop in the rte_pause loop.
+ * of the lcore dev_removal_flag.
*/
static void
*/
static void
-destroy_device(
volatile struct virtio_net *dev
)
+destroy_device(
int vid
)
{
struct virtio_net_data_ll *ll_lcore_dev_cur;
struct virtio_net_data_ll *ll_main_dev_cur;
struct virtio_net_data_ll *ll_lcore_dev_last = NULL;
struct virtio_net_data_ll *ll_main_dev_last = NULL;
{
struct virtio_net_data_ll *ll_lcore_dev_cur;
struct virtio_net_data_ll *ll_main_dev_cur;
struct virtio_net_data_ll *ll_lcore_dev_last = NULL;
struct virtio_net_data_ll *ll_main_dev_last = NULL;
- struct vhost_dev *vdev;
+ struct vhost_dev *vdev
= NULL
;
int lcore;
int lcore;
- dev->flags &= ~VIRTIO_DEV_RUNNING;
-
- vdev = (struct vhost_dev *)dev->priv;
+ ll_main_dev_cur = ll_root_used;
+ while (ll_main_dev_cur != NULL) {
+ if (ll_main_dev_cur->vdev->vid == vid) {
+ vdev = ll_main_dev_cur->vdev;
+ break;
+ }
+ }
+ if (!vdev)
+ return;
/* set the remove flag. */
vdev->remove = 1;
/* set the remove flag. */
vdev->remove = 1;
@@
-944,8
+946,7
@@
destroy_device(volatile struct virtio_net *dev)
if (ll_lcore_dev_cur == NULL) {
RTE_LOG(ERR, VHOST_CONFIG,
if (ll_lcore_dev_cur == NULL) {
RTE_LOG(ERR, VHOST_CONFIG,
- "(%"PRIu64") Failed to find the dev to be destroy.\n",
- dev->device_fh);
+ "(%d) Failed to find the dev to be destroy.\n", vid);
return;
}
return;
}
@@
-992,8
+993,8
@@
destroy_device(volatile struct virtio_net *dev)
/* Decrement number of device on the lcore. */
lcore_info[vdev->coreid].lcore_ll->device_num--;
/* Decrement number of device on the lcore. */
lcore_info[vdev->coreid].lcore_ll->device_num--;
- RTE_LOG(INFO, VHOST_DATA, "(%
"PRIu64"
) Device has been removed "
- "from data core\n",
dev->device_fh
);
+ RTE_LOG(INFO, VHOST_DATA, "(%
d
) Device has been removed "
+ "from data core\n",
vid
);
rte_free(vdev);
rte_free(vdev);
@@
-1004,7
+1005,7
@@
destroy_device(volatile struct virtio_net *dev)
* to the main linked list and the allocated to a specific data core.
*/
static int
* to the main linked list and the allocated to a specific data core.
*/
static int
-new_device(
struct virtio_net *dev
)
+new_device(
int vid
)
{
struct virtio_net_data_ll *ll_dev;
int lcore, core_add = 0;
{
struct virtio_net_data_ll *ll_dev;
int lcore, core_add = 0;
@@
-1014,18
+1015,16
@@
new_device(struct virtio_net *dev)
vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE);
if (vdev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE);
if (vdev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
- "(%"PRIu64") Couldn't allocate memory for vhost dev\n",
- dev->device_fh);
+ "(%d) Couldn't allocate memory for vhost dev\n", vid);
return -1;
}
return -1;
}
- vdev->dev = dev;
- dev->priv = vdev;
+ vdev->vid = vid;
/* Add device to main ll */
ll_dev = get_data_ll_free_entry(&ll_root_free);
if (ll_dev == NULL) {
/* Add device to main ll */
ll_dev = get_data_ll_free_entry(&ll_root_free);
if (ll_dev == NULL) {
- RTE_LOG(INFO, VHOST_DATA, "(%
"PRIu64"
) No free entry found in"
+ RTE_LOG(INFO, VHOST_DATA, "(%
d
) No free entry found in"
" linked list Device limit of %d devices per core"
" linked list Device limit of %d devices per core"
- " has been reached\n",
dev->device_fh
, nb_devices);
+ " has been reached\n",
vid
, nb_devices);
if (vdev->regions_hpa)
rte_free(vdev->regions_hpa);
rte_free(vdev);
if (vdev->regions_hpa)
rte_free(vdev->regions_hpa);
rte_free(vdev);
@@
-1033,7
+1032,7
@@
new_device(struct virtio_net *dev)
}
ll_dev->vdev = vdev;
add_data_ll_entry(&ll_root_used, ll_dev);
}
ll_dev->vdev = vdev;
add_data_ll_entry(&ll_root_used, ll_dev);
- vdev->rx_q =
dev->device_fh
;
+ vdev->rx_q =
vid
;
/* reset ready flag */
vdev->ready = DEVICE_MAC_LEARNING;
/* reset ready flag */
vdev->ready = DEVICE_MAC_LEARNING;
@@
-1050,10
+1049,10
@@
new_device(struct virtio_net *dev)
ll_dev = get_data_ll_free_entry(&lcore_info[core_add].lcore_ll->ll_root_free);
if (ll_dev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
ll_dev = get_data_ll_free_entry(&lcore_info[core_add].lcore_ll->ll_root_free);
if (ll_dev == NULL) {
RTE_LOG(INFO, VHOST_DATA,
- "(%
"PRIu64"
) Failed to add device to data core\n",
-
dev->device_fh
);
+ "(%
d
) Failed to add device to data core\n",
+
vid
);
vdev->ready = DEVICE_SAFE_REMOVE;
vdev->ready = DEVICE_SAFE_REMOVE;
- destroy_device(
dev
);
+ destroy_device(
vid
);
rte_free(vdev->regions_hpa);
rte_free(vdev);
return -1;
rte_free(vdev->regions_hpa);
rte_free(vdev);
return -1;
@@
-1065,17
+1064,16
@@
new_device(struct virtio_net *dev)
ll_dev);
/* Initialize device stats */
ll_dev);
/* Initialize device stats */
- memset(&dev_statistics[
dev->device_fh
], 0,
+ memset(&dev_statistics[
vid
], 0,
sizeof(struct device_statistics));
/* Disable notifications. */
sizeof(struct device_statistics));
/* Disable notifications. */
- rte_vhost_enable_guest_notification(
dev
, VIRTIO_RXQ, 0);
- rte_vhost_enable_guest_notification(
dev
, VIRTIO_TXQ, 0);
+ rte_vhost_enable_guest_notification(
vid
, VIRTIO_RXQ, 0);
+ rte_vhost_enable_guest_notification(
vid
, VIRTIO_TXQ, 0);
lcore_info[vdev->coreid].lcore_ll->device_num++;
lcore_info[vdev->coreid].lcore_ll->device_num++;
- dev->flags |= VIRTIO_DEV_RUNNING;
- RTE_LOG(INFO, VHOST_DATA, "(%
"PRIu64"
) Device has been added to data core %d\n",
-
dev->device_fh
, vdev->coreid);
+ RTE_LOG(INFO, VHOST_DATA, "(%
d
) Device has been added to data core %d\n",
+
vid
, vdev->coreid);
return 0;
}
return 0;
}
@@
-1084,7
+1082,7
@@
new_device(struct virtio_net *dev)
* These callback allow devices to be added to the data core when configuration
* has been fully complete.
*/
* These callback allow devices to be added to the data core when configuration
* has been fully complete.
*/
-static const struct v
irtio_ne
t_device_ops virtio_net_device_ops = {
+static const struct v
hos
t_device_ops virtio_net_device_ops = {
.new_device = new_device,
.destroy_device = destroy_device,
};
.new_device = new_device,
.destroy_device = destroy_device,
};
@@
-1099,7
+1097,7
@@
print_stats(void)
struct virtio_net_data_ll *dev_ll;
uint64_t tx_dropped, rx_dropped;
uint64_t tx, tx_total, rx, rx_total, rx_ip_csum, rx_l4_csum;
struct virtio_net_data_ll *dev_ll;
uint64_t tx_dropped, rx_dropped;
uint64_t tx, tx_total, rx, rx_total, rx_ip_csum, rx_l4_csum;
-
uint32_t device_fh
;
+
int vid
;
const char clr[] = { 27, '[', '2', 'J', '\0' };
const char top_left[] = { 27, '[', '1', ';', '1', 'H', '\0' };
const char clr[] = { 27, '[', '2', 'J', '\0' };
const char top_left[] = { 27, '[', '1', ';', '1', 'H', '\0' };
@@
-1113,22
+1111,22
@@
print_stats(void)
dev_ll = ll_root_used;
while (dev_ll != NULL) {
dev_ll = ll_root_used;
while (dev_ll != NULL) {
-
device_fh = (uint32_t)dev_ll->vdev->dev->device_fh
;
- tx_total = dev_statistics[
device_fh
].tx_total;
- tx = dev_statistics[
device_fh
].tx;
+
vid = dev_ll->vdev->vid
;
+ tx_total = dev_statistics[
vid
].tx_total;
+ tx = dev_statistics[
vid
].tx;
tx_dropped = tx_total - tx;
rx_total = rte_atomic64_read(
tx_dropped = tx_total - tx;
rx_total = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_total_atomic);
+ &dev_statistics[
vid
].rx_total_atomic);
rx = rte_atomic64_read(
rx = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_atomic);
+ &dev_statistics[
vid
].rx_atomic);
rx_dropped = rx_total - rx;
rx_ip_csum = rte_atomic64_read(
rx_dropped = rx_total - rx;
rx_ip_csum = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_bad_ip_csum);
+ &dev_statistics[
vid
].rx_bad_ip_csum);
rx_l4_csum = rte_atomic64_read(
rx_l4_csum = rte_atomic64_read(
- &dev_statistics[
device_fh
].rx_bad_l4_csum);
+ &dev_statistics[
vid
].rx_bad_l4_csum);
- printf("\nStatistics for device %
"PRIu32"
----------"
+ printf("\nStatistics for device %
d
----------"
"\nTX total: %"PRIu64""
"\nTX dropped: %"PRIu64""
"\nTX successful: %"PRIu64""
"\nTX total: %"PRIu64""
"\nTX dropped: %"PRIu64""
"\nTX successful: %"PRIu64""
@@
-1137,7
+1135,7
@@
print_stats(void)
"\nRX bad L4 csum: %"PRIu64""
"\nRX dropped: %"PRIu64""
"\nRX successful: %"PRIu64"",
"\nRX bad L4 csum: %"PRIu64""
"\nRX dropped: %"PRIu64""
"\nRX successful: %"PRIu64"",
-
device_fh
,
+
vid
,
tx_total,
tx_dropped,
tx,
tx_total,
tx_dropped,
tx,
@@
-1154,8
+1152,7
@@
print_stats(void)
}
/**
}
/**
- * Main function, does initialisation and calls the per-lcore functions. The CUSE
- * device is also registered here to handle the IOCTLs.
+ * Main function, does initialisation and calls the per-lcore functions.
*/
int
main(int argc, char *argv[])
*/
int
main(int argc, char *argv[])
@@
-1164,7
+1161,7
@@
main(int argc, char *argv[])
unsigned lcore_id, core_id = 0;
unsigned nb_ports, valid_nb_ports;
int ret;
unsigned lcore_id, core_id = 0;
unsigned nb_ports, valid_nb_ports;
int ret;
- uint
8
_t portid;
+ uint
16
_t portid;
uint16_t queue_id;
static pthread_t tid;
char thread_name[RTE_MAX_THREAD_NAME_LEN];
uint16_t queue_id;
static pthread_t tid;
char thread_name[RTE_MAX_THREAD_NAME_LEN];
@@
-1190,8
+1187,6
@@
main(int argc, char *argv[])
/* Get the number of physical ports. */
nb_ports = rte_eth_dev_count();
/* Get the number of physical ports. */
nb_ports = rte_eth_dev_count();
- if (nb_ports > RTE_MAX_ETHPORTS)
- nb_ports = RTE_MAX_ETHPORTS;
/*
* Update the global var NB_PORTS and global array PORTS
/*
* Update the global var NB_PORTS and global array PORTS
@@
-1205,24
+1200,19
@@
main(int argc, char *argv[])
MAX_SUP_PORTS);
}
/* Create the mbuf pool. */
MAX_SUP_PORTS);
}
/* Create the mbuf pool. */
- mbuf_pool = rte_
mem
pool_create(
+ mbuf_pool = rte_
pktmbuf_
pool_create(
"MBUF_POOL",
"MBUF_POOL",
- NUM_MBUFS_PER_PORT
- * valid_nb_ports,
- MBUF_SIZE, MBUF_CACHE_SIZE,
- sizeof(struct rte_pktmbuf_pool_private),
- rte_pktmbuf_pool_init, NULL,
- rte_pktmbuf_init, NULL,
- rte_socket_id(), 0);
+ NUM_MBUFS_PER_PORT * valid_nb_ports,
+ MBUF_CACHE_SIZE,
+ 0,
+ MBUF_DATA_SIZE,
+ rte_socket_id());
if (mbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
for (queue_id = 0; queue_id < MAX_QUEUES + 1; queue_id++)
vpool_array[queue_id].pool = mbuf_pool;
if (mbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
for (queue_id = 0; queue_id < MAX_QUEUES + 1; queue_id++)
vpool_array[queue_id].pool = mbuf_pool;
- /* Set log level. */
- rte_set_log_level(LOG_LEVEL);
-
/* initialize all ports */
for (portid = 0; portid < nb_ports; portid++) {
/* skip ports that are not enabled */
/* initialize all ports */
for (portid = 0; portid < nb_ports; portid++) {
/* skip ports that are not enabled */
@@
-1249,9
+1239,9
@@
main(int argc, char *argv[])
if (ret != 0)
rte_exit(EXIT_FAILURE, "Cannot create print-stats thread\n");
snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-stats");
if (ret != 0)
rte_exit(EXIT_FAILURE, "Cannot create print-stats thread\n");
snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-stats");
- ret =
pthread_setname_np
(tid, thread_name);
+ ret =
rte_thread_setname
(tid, thread_name);
if (ret != 0)
if (ret != 0)
- RTE_LOG(
ERR
, VHOST_CONFIG, "Cannot set print-stats name\n");
+ RTE_LOG(
DEBUG
, VHOST_CONFIG, "Cannot set print-stats name\n");
}
/* Launch all data cores. */
}
/* Launch all data cores. */
@@
-1259,17
+1249,28
@@
main(int argc, char *argv[])
rte_eal_remote_launch(switch_worker,
mbuf_pool, lcore_id);
}
rte_eal_remote_launch(switch_worker,
mbuf_pool, lcore_id);
}
- rte_vhost_feature_disable(1ULL << VIRTIO_NET_F_MRG_RXBUF);
- /* Register CUSE device to handle IOCTLs. */
- ret = rte_vhost_driver_register((char *)&dev_basename);
+ ret = rte_vhost_driver_register((char *)&dev_basename, 0);
if (ret != 0)
if (ret != 0)
- rte_exit(EXIT_FAILURE, "CUSE device setup failure.\n");
+ rte_exit(EXIT_FAILURE, "failed to register vhost driver.\n");
+
+ rte_vhost_driver_disable_features(dev_basename,
+ 1ULL << VIRTIO_NET_F_MRG_RXBUF);
- rte_vhost_driver_callback_register(&virtio_net_device_ops);
+ ret = rte_vhost_driver_callback_register(dev_basename,
+ &virtio_net_device_ops);
+ if (ret != 0) {
+ rte_exit(EXIT_FAILURE,
+ "failed to register vhost driver callbacks.\n");
+ }
+
+ if (rte_vhost_driver_start(dev_basename) < 0) {
+ rte_exit(EXIT_FAILURE,
+ "failed to start vhost driver.\n");
+ }
- /* Start CUSE session. */
-
rte_vhost_driver_session_start(
);
+ RTE_LCORE_FOREACH_SLAVE(lcore_id)
+
rte_eal_wait_lcore(lcore_id
);
return 0;
}
return 0;
}