本文整理汇总了C++中rte_eth_dev_configure函数的典型用法代码示例。如果您正苦于以下问题:C++ rte_eth_dev_configure函数的具体用法?C++ rte_eth_dev_configure怎么用?C++ rte_eth_dev_configure使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rte_eth_dev_configure函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: app_init_ports
static void
app_init_ports(void)
{
uint32_t i;
/* Init driver */
RTE_LOG(INFO, USER1, "Initializing the PMD driver ...\n");
if (rte_eal_pci_probe() < 0)
rte_panic("Cannot probe PCI\n");
/* Init NIC ports, then start the ports */
for (i = 0; i < app.n_ports; i++) {
uint8_t port;
int ret;
port = (uint8_t) app.ports[i];
RTE_LOG(INFO, USER1, "Initializing NIC port %u ...\n", port);
/* Init port */
ret = rte_eth_dev_configure(
port,
1,
1,
&port_conf);
if (ret < 0)
rte_panic("Cannot init NIC port %u (%d)\n", port, ret);
rte_eth_promiscuous_enable(port);
/* Init RX queues */
ret = rte_eth_rx_queue_setup(
port,
0,
app.port_rx_ring_size,
rte_eth_dev_socket_id(port),
&rx_conf,
app.pool);
if (ret < 0)
rte_panic("Cannot init RX for port %u (%d)\n",
(uint32_t) port, ret);
/* Init TX queues */
ret = rte_eth_tx_queue_setup(
port,
0,
app.port_tx_ring_size,
rte_eth_dev_socket_id(port),
&tx_conf);
if (ret < 0)
rte_panic("Cannot init TX for port %u (%d)\n",
(uint32_t) port, ret);
/* Start port */
ret = rte_eth_dev_start(port);
if (ret < 0)
rte_panic("Cannot start port %u (%d)\n", port, ret);
}
app_ports_check_link();
}
开发者ID:AMildner,项目名称:MoonGen,代码行数:60,代码来源:init.c
示例2: config_port
static bool config_port(uint8_t port, bool simple_tx) {
int rc = rte_eth_dev_configure(port, 1, 1, &port_conf);
if (rc) {
printf("Configure %d failed: %d\n", port, rc);
return false;
}
tx_conf.txq_flags = simple_tx
? ETH_TXQ_FLAGS_NOMULTSEGS | ETH_TXQ_FLAGS_NOOFFLOADS
: ETH_TXQ_FLAGS_NOMULTSEGS;
rc = rte_eth_tx_queue_setup(port, 0, TX_DESCS, rte_socket_id(), &tx_conf);
if (rc) {
printf("could not configure tx queue on port %d: %d\n", port, rc);
return false;
}
// dev_start segfaults without a rx queue
rc = rte_eth_rx_queue_setup(port, 0, RX_DESCS, rte_socket_id(), &rx_conf, make_mempool());
if (rc) {
printf("could not configure tx queue on port %d: %d\n", port, rc);
return false;
}
rc = rte_eth_dev_start(port);
if (rc) {
printf("failed to start port %d: %d\n", port, rc);
return false;
}
return true;
}
开发者ID:thomasbhatia,项目名称:dpdk-tx-performance,代码行数:27,代码来源:main.c
示例3: init_port
/**
* Initialise an individual port:
* - configure number of rx and tx rings
* - set up each rx ring, to pull from the main mbuf pool
* - set up each tx ring
* - start the port and report its status to stdout
*/
static int
init_port(uint8_t port_num)
{
/* for port configuration all features are off by default */
const struct rte_eth_conf port_conf = {
.rxmode = {
.mq_mode = ETH_RSS
}
};
const uint16_t rx_rings = 1, tx_rings = num_clients;
const uint16_t rx_ring_size = RTE_MP_RX_DESC_DEFAULT;
const uint16_t tx_ring_size = RTE_MP_TX_DESC_DEFAULT;
struct rte_eth_link link;
uint16_t q;
int retval;
printf("Port %u init ... ", (unsigned)port_num);
fflush(stdout);
/* Standard DPDK port initialisation - config port, then set up
* rx and tx rings */
if ((retval = rte_eth_dev_configure(port_num, rx_rings, tx_rings,
&port_conf)) != 0)
return retval;
for (q = 0; q < rx_rings; q++) {
retval = rte_eth_rx_queue_setup(port_num, q, rx_ring_size,
SOCKET0, &rx_conf_default, pktmbuf_pool);
if (retval < 0) return retval;
}
for ( q = 0; q < tx_rings; q ++ ) {
retval = rte_eth_tx_queue_setup(port_num, q, tx_ring_size,
SOCKET0, &tx_conf_default);
if (retval < 0) return retval;
}
rte_eth_promiscuous_enable(port_num);
retval = rte_eth_dev_start(port_num);
if (retval < 0) return retval;
printf( "done: ");
/* get link status */
rte_eth_link_get(port_num, &link);
if (link.link_status) {
printf(" Link Up - speed %u Mbps - %s\n",
(uint32_t) link.link_speed,
(link.link_duplex == ETH_LINK_FULL_DUPLEX) ?
("full-duplex") : ("half-duplex\n"));
} else {
printf(" Link Down\n");
}
return 0;
}
开发者ID:weixu8,项目名称:dpdk-ovs,代码行数:65,代码来源:init.c
示例4: tcpreplay_netport_init
int
tcpreplay_netport_init(struct arguments *args)
{
int ret;
uint8_t rss_key [40];
struct rte_eth_link link;
struct rte_eth_dev_info dev_info;
struct rte_eth_rss_conf rss_conf;
struct rte_eth_fdir fdir_conf;
/* Retreiving and printing device infos */
rte_eth_dev_info_get(i, &dev_info);
printf("Name:%s\n\tDriver name: %s\n\tMax rx queues: %d\n\tMax tx queues: %d\n", dev_info.pci_dev->driver->name,dev_info.driver_name, dev_info.max_rx_queues, dev_info.max_tx_queues);
printf("\tPCI Adress: %04d:%02d:%02x:%01d\n", dev_info.pci_dev->addr.domain, dev_info.pci_dev->addr.bus, dev_info.pci_dev->addr.devid, dev_info.pci_dev->addr.function);
/* Configure device with '1' rx queues and 1 tx queue */
ret = rte_eth_dev_configure(i, 1, 1, &port_conf);
if (ret < 0) rte_panic("Error configuring the port\n");
/* For each RX queue in each NIC */
/* Configure rx queue j of current device on current NUMA socket. It takes elements from the mempool */
ret = rte_eth_rx_queue_setup(i, 0, RX_QUEUE_SZ, rte_socket_id(), &rx_conf, pktmbuf_pool);
if (ret < 0) FATAL_ERROR("Error configuring receiving queue\n");
/* Configure mapping [queue] -> [element in stats array] */
ret = rte_eth_dev_set_rx_queue_stats_mapping (i, 0, 0);
if (ret < 0) FATAL_ERROR("Error configuring receiving queue stats\n");
/* Configure tx queue of current device on current NUMA socket. Mandatory configuration even if you want only rx packet */
ret = rte_eth_tx_queue_setup(i, 0, TX_QUEUE_SZ, rte_socket_id(), &tx_conf);
if (ret < 0) FATAL_ERROR("Error configuring transmitting queue. Errno: %d (%d bad arg, %d no mem)\n", -ret, EINVAL ,ENOMEM);
/* Start device */
ret = rte_eth_dev_start(i);
if (ret < 0) FATAL_ERROR("Cannot start port\n");
/* Enable receipt in promiscuous mode for an Ethernet device */
rte_eth_promiscuous_enable(i);
/* Print link status */
rte_eth_link_get_nowait(i, &link);
if (link.link_status) printf("\tPort %d Link Up - speed %u Mbps - %s\n", (uint8_t)i, (unsigned)link.link_speed,(link.link_duplex == ETH_LINK_FULL_DUPLEX) ?("full-duplex") : ("half-duplex\n"));
else printf("\tPort %d Link Down\n",(uint8_t)i);
/* Print RSS support, not reliable because a NIC could support rss configuration just in rte_eth_dev_configure whithout supporting rte_eth_dev_rss_hash_conf_get*/
rss_conf.rss_key = rss_key;
ret = rte_eth_dev_rss_hash_conf_get (i,&rss_conf);
if (ret == 0) printf("\tDevice supports RSS\n"); else printf("\tDevice DOES NOT support RSS\n");
/* Print Flow director support */
ret = rte_eth_dev_fdir_get_infos (i, &fdir_conf);
if (ret == 0) printf("\tDevice supports Flow Director\n"); else printf("\tDevice DOES NOT support Flow Director\n");
if (args)
return 1;
return 1;
}
开发者ID:doofy1984,项目名称:dpdk_tcpreplay,代码行数:57,代码来源:tcpreplay_netport.c
示例5: bond_port_init
static void
bond_port_init(struct rte_mempool *mbuf_pool)
{
int retval;
uint8_t i;
retval = rte_eth_bond_create("bond0", BONDING_MODE_ALB,
0 /*SOCKET_ID_ANY*/);
if (retval < 0)
rte_exit(EXIT_FAILURE,
"Faled to create bond port\n");
BOND_PORT = (uint8_t)retval;
retval = rte_eth_dev_configure(BOND_PORT, 1, 1, &port_conf);
if (retval != 0)
rte_exit(EXIT_FAILURE, "port %u: configuration failed (res=%d)\n",
BOND_PORT, retval);
/* RX setup */
retval = rte_eth_rx_queue_setup(BOND_PORT, 0, RTE_RX_DESC_DEFAULT,
rte_eth_dev_socket_id(BOND_PORT), NULL,
mbuf_pool);
if (retval < 0)
rte_exit(retval, " port %u: RX queue 0 setup failed (res=%d)",
BOND_PORT, retval);
/* TX setup */
retval = rte_eth_tx_queue_setup(BOND_PORT, 0, RTE_TX_DESC_DEFAULT,
rte_eth_dev_socket_id(BOND_PORT), NULL);
if (retval < 0)
rte_exit(retval, "port %u: TX queue 0 setup failed (res=%d)",
BOND_PORT, retval);
for (i = 0; i < slaves_count; i++) {
if (rte_eth_bond_slave_add(BOND_PORT, slaves[i]) == -1)
rte_exit(-1, "Oooops! adding slave (%u) to bond (%u) failed!\n",
slaves[i], BOND_PORT);
}
retval = rte_eth_dev_start(BOND_PORT);
if (retval < 0)
rte_exit(retval, "Start port %d failed (res=%d)", BOND_PORT, retval);
rte_eth_promiscuous_enable(BOND_PORT);
struct ether_addr addr;
rte_eth_macaddr_get(BOND_PORT, &addr);
printf("Port %u MAC: ", (unsigned)BOND_PORT);
PRINT_MAC(addr);
printf("\n");
}
开发者ID:P4-vSwitch,项目名称:dpdk,代码行数:55,代码来源:main.c
示例6: app_init_ports
static void
app_init_ports(void)
{
uint32_t i;
/* Init NIC ports, then start the ports */
for (i = 0; i < app.n_ports; i++) {
uint32_t port;
int ret;
port = app.ports[i];
RTE_LOG(INFO, USER1, "Initializing NIC port %u ...\n", port);
/* Init port */
ret = rte_eth_dev_configure(
port,
1,
1,
&app.port_conf);
if (ret < 0)
rte_panic("Cannot init NIC port %u (%d)\n", port, ret);
rte_eth_promiscuous_enable(port);
/* Init RX queues */
ret = rte_eth_rx_queue_setup(
port,
0,
app.rsz_hwq_rx,
rte_eth_dev_socket_id(port),
&app.rx_conf,
app.pool);
if (ret < 0)
rte_panic("Cannot init RX for port %u (%d)\n",
(uint32_t) port, ret);
/* Init TX queues */
ret = rte_eth_tx_queue_setup(
port,
0,
app.rsz_hwq_tx,
rte_eth_dev_socket_id(port),
&app.tx_conf);
if (ret < 0)
rte_panic("Cannot init TX for port %u (%d)\n", port,
ret);
/* Start port */
ret = rte_eth_dev_start(port);
if (ret < 0)
rte_panic("Cannot start port %u (%d)\n", port, ret);
}
app_ports_check_link();
}
开发者ID:Cosios,项目名称:dpdk,代码行数:54,代码来源:init.c
示例7: memset
/**
* @brief Set device default configuration
*
* @param devId uint8_t, ID of DPDK device
* @param rxQueues uint16_t, number of RX queues
* @param txQueues uint16_t, number of TX queues
*
* @return 0 if success and DPDK error code otherwice
*/
int DPDKAdapter::configureDev(uint8_t devId, uint16_t rxQueues, uint16_t txQueues)
{
rte_eth_conf portConf;
memset(&portConf, 0, sizeof(portConf));
portConf.txmode.mq_mode = ETH_MQ_TX_NONE;
portConf.rxmode.jumbo_frame = 1;
portConf.rxmode.max_rx_pkt_len = MAX_PACKET_SIZE;
return rte_eth_dev_configure(devId, rxQueues, txQueues, &portConf);
}
开发者ID:sdnnfv,项目名称:dpdkadapter,代码行数:21,代码来源:dpdk_adapter.cpp
示例8: VIFHYPER_CREATE
int
VIFHYPER_CREATE(const char *devstr, struct virtif_sc *vif_sc, uint8_t *enaddr,
struct virtif_user **viup)
{
struct rte_eth_conf portconf;
struct rte_eth_link link;
struct ether_addr ea;
struct virtif_user *viu;
int rv = EINVAL; /* XXX: not very accurate ;) */
viu = malloc(sizeof(*viu));
memset(viu, 0, sizeof(*viu));
viu->viu_devstr = strdup(devstr);
viu->viu_virtifsc = vif_sc;
/* this is here only for simplicity */
if ((rv = globalinit(viu)) != 0)
goto out;
memset(&portconf, 0, sizeof(portconf));
if ((rv = rte_eth_dev_configure(IF_PORTID,
NQUEUE, NQUEUE, &portconf)) < 0)
OUT("configure device");
if ((rv = rte_eth_rx_queue_setup(IF_PORTID,
0, NDESCRX, 0, &rxconf, mbpool_rx)) <0)
OUT("rx queue setup");
if ((rv = rte_eth_tx_queue_setup(IF_PORTID, 0, NDESCTX, 0, &txconf)) < 0)
OUT("tx queue setup");
if ((rv = rte_eth_dev_start(IF_PORTID)) < 0)
OUT("device start");
rte_eth_link_get(IF_PORTID, &link);
if (!link.link_status) {
ifwarn(viu, "link down");
}
rte_eth_promiscuous_enable(IF_PORTID);
rte_eth_macaddr_get(IF_PORTID, &ea);
memcpy(enaddr, ea.addr_bytes, ETHER_ADDR_LEN);
rv = pthread_create(&viu->viu_rcvpt, NULL, receiver, viu);
out:
/* XXX: well this isn't much of an unrolling ... */
if (rv != 0)
free(viu);
else
*viup = viu;
return rumpuser_component_errtrans(-rv);
}
开发者ID:ywahl,项目名称:dpdk-rumptcpip,代码行数:53,代码来源:dpdkif_user.c
示例9: port_init
static inline int
port_init(uint16_t port, struct rte_mempool *mbuf_pool)
{
struct rte_eth_conf port_conf = port_conf_default;
const uint16_t rx_rings = 1, tx_rings = 1;
int retval;
uint16_t q;
if (port >= rte_eth_dev_count())
return -1;
/* Configure the Ethernet device. */
retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
if (retval != 0)
return retval;
/* Allocate and set up 1 RX queue per Ethernet port. */
for (q = 0; q < rx_rings; q++) {
retval = rte_eth_rx_queue_setup(port, q, RX_RING_SIZE,
rte_eth_dev_socket_id(port), NULL, mbuf_pool);
if (retval < 0)
return retval;
}
/* Allocate and set up 1 TX queue per Ethernet port. */
for (q = 0; q < tx_rings; q++) {
retval = rte_eth_tx_queue_setup(port, q, TX_RING_SIZE,
rte_eth_dev_socket_id(port), NULL);
if (retval < 0)
return retval;
}
/* Start the Ethernet port. */
retval = rte_eth_dev_start(port);
if (retval < 0)
return retval;
/* Display the port MAC address. */
struct ether_addr addr;
rte_eth_macaddr_get(port, &addr);
printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8
" %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n",
(unsigned int)port,
addr.addr_bytes[0], addr.addr_bytes[1],
addr.addr_bytes[2], addr.addr_bytes[3],
addr.addr_bytes[4], addr.addr_bytes[5]);
/* Enable RX in promiscuous mode for the Ethernet device. */
rte_eth_promiscuous_enable(port);
return 0;
}
开发者ID:cleveritcz,项目名称:f-stack,代码行数:53,代码来源:main.c
示例10: init_port
/**
* Initialise an individual port:
* - configure number of rx and tx rings
* - set up each rx ring, to pull from the main mbuf pool
* - set up each tx ring
* - start the port and report its status to stdout
*/
int
init_port(uint8_t port_num)
{
/* for port configuration all features are off by default */\
const struct rte_eth_conf port_conf = {
.rxmode = {
.hw_vlan_filter = 0,
.hw_vlan_strip = 0,
.hw_vlan_extend = 0,
.mq_mode = ETH_MQ_RX_RSS
}
};
const uint16_t rx_rings = 1, tx_rings = 1;
const uint16_t rx_ring_size = RTE_MP_RX_DESC_DEFAULT;
const uint16_t tx_ring_size = RTE_MP_TX_DESC_DEFAULT;
uint16_t q;
int retval;
printf("Port %u init ... ", (unsigned)port_num);
fflush(stdout);
/* Standard DPDK port initialisation - config port, then set up
* rx and tx rings */
if ((retval = rte_eth_dev_configure(port_num, rx_rings, tx_rings,
&port_conf)) != 0)
return retval;
for (q = 0; q < rx_rings; q++) {
retval = rte_eth_rx_queue_setup(port_num, q, rx_ring_size,
rte_eth_dev_socket_id(port_num),
NULL, pktmbuf_pool);
if (retval < 0) return retval;
}
for ( q = 0; q < tx_rings; q ++ ) {
retval = rte_eth_tx_queue_setup(port_num, q, tx_ring_size,
rte_eth_dev_socket_id(port_num),
NULL);
if (retval < 0) return retval;
}
rte_eth_promiscuous_enable(port_num);
retval = rte_eth_dev_start(port_num);
if (retval < 0) return retval;
printf( "Port %d Init done\n", port_num);
return 0;
}
开发者ID:garogers01,项目名称:soft-patch-panel,代码行数:60,代码来源:init.c
示例11: port_init
/*
* Initialises a given port using global settings and with the rx buffers
* coming from the mbuf_pool passed as parameter
*/
static inline int
port_init(uint8_t port, struct rte_mempool *mbuf_pool)
{
struct rte_eth_conf port_conf;
const uint16_t rxRings = ETH_VMDQ_DCB_NUM_QUEUES,
txRings = (uint16_t)rte_lcore_count();
const uint16_t rxRingSize = 128, txRingSize = 512;
int retval;
uint16_t q;
retval = get_eth_conf(&port_conf, num_pools);
if (retval < 0)
return retval;
if (port >= rte_eth_dev_count()) return -1;
retval = rte_eth_dev_configure(port, rxRings, txRings, &port_conf);
if (retval != 0)
return retval;
for (q = 0; q < rxRings; q ++) {
retval = rte_eth_rx_queue_setup(port, q, rxRingSize,
rte_eth_dev_socket_id(port),
NULL,
mbuf_pool);
if (retval < 0)
return retval;
}
for (q = 0; q < txRings; q ++) {
retval = rte_eth_tx_queue_setup(port, q, txRingSize,
rte_eth_dev_socket_id(port),
NULL);
if (retval < 0)
return retval;
}
retval = rte_eth_dev_start(port);
if (retval < 0)
return retval;
struct ether_addr addr;
rte_eth_macaddr_get(port, &addr);
printf("Port %u MAC: %02"PRIx8" %02"PRIx8" %02"PRIx8
" %02"PRIx8" %02"PRIx8" %02"PRIx8"\n",
(unsigned)port,
addr.addr_bytes[0], addr.addr_bytes[1], addr.addr_bytes[2],
addr.addr_bytes[3], addr.addr_bytes[4], addr.addr_bytes[5]);
return 0;
}
开发者ID:Grindland,项目名称:dpdk-valgrind,代码行数:55,代码来源:main.c
示例12: interfaceSetup
int32_t interfaceSetup(void)
{
uint8_t portIndex = 0, portCount = rte_eth_dev_count();
int32_t ret = 0, socket_id = -1;
struct rte_eth_link link;
for (portIndex = 0; portIndex < portCount; portIndex++)
{
/* fetch the socket Id to which the port the mapped */
for (ret = 0; ret < GTP_MAX_NUMANODE; ret++)
{
if (numaNodeInfo[ret].intfTotal) {
if (numaNodeInfo[ret].intfAvail & (1 << portIndex)) {
socket_id = ret;
break;
}
}
}
memset(&link, 0x00, sizeof(struct rte_eth_link));
ret = rte_eth_dev_configure(portIndex, 1, 1, &portConf);
if (unlikely(ret < 0))
{
rte_panic("ERROR: Dev Configure\n");
return -1;
}
ret = rte_eth_rx_queue_setup(portIndex, 0, RTE_TEST_RX_DESC_DEFAULT,
0, NULL, numaNodeInfo[socket_id].rx[0]);
if (unlikely(ret < 0))
{
rte_panic("ERROR: Rx Queue Setup\n");
return -2;
}
ret = rte_eth_tx_queue_setup(portIndex, 0, RTE_TEST_TX_DESC_DEFAULT,
0, NULL);
if (unlikely(ret < 0))
{
rte_panic("ERROR: Tx Queue Setup\n");
return -3;
}
rte_eth_promiscuous_enable(portIndex);
rte_eth_dev_start(portIndex);
}
return 0;
}
开发者ID:vipinpv85,项目名称:GTP_PKT_DECODE,代码行数:49,代码来源:node.c
示例13: slave_port_init
static void
slave_port_init(uint16_t portid, struct rte_mempool *mbuf_pool)
{
int retval;
uint16_t nb_rxd = RTE_RX_DESC_DEFAULT;
uint16_t nb_txd = RTE_TX_DESC_DEFAULT;
if (portid >= rte_eth_dev_count())
rte_exit(EXIT_FAILURE, "Invalid port\n");
retval = rte_eth_dev_configure(portid, 1, 1, &port_conf);
if (retval != 0)
rte_exit(EXIT_FAILURE, "port %u: configuration failed (res=%d)\n",
portid, retval);
retval = rte_eth_dev_adjust_nb_rx_tx_desc(portid, &nb_rxd, &nb_txd);
if (retval != 0)
rte_exit(EXIT_FAILURE, "port %u: rte_eth_dev_adjust_nb_rx_tx_desc "
"failed (res=%d)\n", portid, retval);
/* RX setup */
retval = rte_eth_rx_queue_setup(portid, 0, nb_rxd,
rte_eth_dev_socket_id(portid), NULL,
mbuf_pool);
if (retval < 0)
rte_exit(retval, " port %u: RX queue 0 setup failed (res=%d)",
portid, retval);
/* TX setup */
retval = rte_eth_tx_queue_setup(portid, 0, nb_txd,
rte_eth_dev_socket_id(portid), NULL);
if (retval < 0)
rte_exit(retval, "port %u: TX queue 0 setup failed (res=%d)",
portid, retval);
retval = rte_eth_dev_start(portid);
if (retval < 0)
rte_exit(retval,
"Start port %d failed (res=%d)",
portid, retval);
struct ether_addr addr;
rte_eth_macaddr_get(portid, &addr);
printf("Port %u MAC: ", portid);
PRINT_MAC(addr);
printf("\n");
}
开发者ID:cleveritcz,项目名称:f-stack,代码行数:49,代码来源:main.c
示例14: port_init
/*
* Initialises a given port using global settings and with the rx buffers
* coming from the mbuf_pool passed as parameter
*/
static inline int
port_init(uint8_t port, struct rte_mempool *mbuf_pool)
{
struct rte_eth_conf port_conf = port_conf_default;
const uint16_t rx_rings = 1, tx_rings = 1;
int retval;
uint16_t q;
if (port >= rte_eth_dev_count())
return -1;
retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
if (retval != 0)
return retval;
for (q = 0; q < rx_rings; q++) {
retval = rte_eth_rx_queue_setup(port, q, RX_RING_SIZE,
rte_eth_dev_socket_id(port), NULL, mbuf_pool);
if (retval < 0)
return retval;
}
for (q = 0; q < tx_rings; q++) {
retval = rte_eth_tx_queue_setup(port, q, TX_RING_SIZE,
rte_eth_dev_socket_id(port), NULL);
if (retval < 0)
return retval;
}
retval = rte_eth_dev_start(port);
if (retval < 0)
return retval;
struct ether_addr addr;
rte_eth_macaddr_get(port, &addr);
printf("Port %u MAC: %02"PRIx8" %02"PRIx8" %02"PRIx8
" %02"PRIx8" %02"PRIx8" %02"PRIx8"\n",
(unsigned)port,
addr.addr_bytes[0], addr.addr_bytes[1],
addr.addr_bytes[2], addr.addr_bytes[3],
addr.addr_bytes[4], addr.addr_bytes[5]);
rte_eth_promiscuous_enable(port);
return 0;
}
开发者ID:mengxiang0811,项目名称:librdns,代码行数:51,代码来源:main.c
示例15: kni_change_mtu
/* Callback for request of changing MTU */
static int
kni_change_mtu(uint8_t port_id, unsigned new_mtu)
{
int ret;
uint16_t nb_rx_queue;
struct rte_eth_conf conf;
if (port_id >= rte_eth_dev_count()) {
RTE_LOG(ERR, KNI, "Invalid port id %d\n", port_id);
return -EINVAL;
}
RTE_LOG(INFO, KNI, "-----------------Change MTU of port %d to %u\n",
port_id, new_mtu);
/* Stop specific port */
rte_eth_dev_stop(port_id);
memcpy(&conf, &port_conf, sizeof(conf));
/* Set new MTU */
if (new_mtu > ETHER_MAX_LEN)
conf.rxmode.jumbo_frame = 1;
else
conf.rxmode.jumbo_frame = 0;
/* mtu + length of header + length of FCS = max pkt length */
conf.rxmode.max_rx_pkt_len =
new_mtu + KNI_ENET_HEADER_SIZE + KNI_ENET_FCS_SIZE;
nb_rx_queue = get_port_n_rx_queues(port_id);
// XXX nb_rx_queue +1 for the kni
ret =
rte_eth_dev_configure(port_id, nb_rx_queue, nb_rx_queue + 1, &conf);
if (ret < 0) {
RTE_LOG(ERR, KNI, "Fail to reconfigure port %d\n", port_id);
return ret;
}
/* Restart specific port */
ret = rte_eth_dev_start(port_id);
if (ret < 0) {
RTE_LOG(ERR, KNI, "Fail to restart port %d\n", port_id);
return ret;
}
return 0;
}
开发者ID:Gandi,项目名称:packet-journey,代码行数:48,代码来源:kni.c
示例16: setup_and_bond_ports
static int setup_and_bond_ports(struct rte_mempool *mp)
{
int portid, queueid;
int ret;
int pl_idx;
int nb_queue;
nb_queue = rte_lcore_count();
nb_port = rte_eth_dev_count();
memset(lcore_args, 0, sizeof(struct lcore_arg_t) * RTE_MAX_LCORE);
for(portid = 0; portid < nb_port; portid++)
{
ret = rte_eth_dev_configure(portid, nb_queue, nb_queue, &port_conf);
if(unlikely(ret < 0))
{
rte_exit(EINVAL, "port %d configure failed!\n", portid);
}
for(queueid = 0; queueid < nb_queue; queueid++)
{
ret = rte_eth_rx_queue_setup(portid, queueid, NB_RXD, rte_socket_id(), NULL, mp);
if(unlikely(ret < 0))
{
rte_exit(EINVAL, "port %d rx queue %d setup failed!\n", portid, queueid);
}
ret = rte_eth_tx_queue_setup(portid, queueid, NB_TXD, rte_socket_id(), NULL);
if(unlikely(ret < 0))
{
rte_exit(EINVAL, "port %d tx queue %d setup failed!\n", portid, queueid);
}
pl_idx = lcore_args[queueid].pl_len;
lcore_args[queueid].pl[pl_idx].portid = portid;
lcore_args[queueid].pl[pl_idx].queueid = queueid;
lcore_args[queueid].mp = mp;
lcore_args[queueid].pl_len = pl_idx + 1;
}
ret = rte_eth_dev_start(portid);
if(unlikely(ret < 0))
{
rte_exit(EINVAL, "port %d start failed!\n", portid);
}
rte_eth_promiscuous_enable(portid);
}
return 0;
}
开发者ID:FI-Lab,项目名称:dpdk-cc-benchmarks,代码行数:47,代码来源:main.c
示例17: configure_eth_port
static inline int
configure_eth_port(uint8_t port_id)
{
struct ether_addr addr;
const uint16_t rxRings = 1, txRings = 1;
const uint8_t nb_ports = rte_eth_dev_count();
int ret;
uint16_t q;
if (port_id > nb_ports)
return -1;
ret = rte_eth_dev_configure(port_id, rxRings, txRings, &port_conf_default);
if (ret != 0)
return ret;
for (q = 0; q < rxRings; q++) {
ret = rte_eth_rx_queue_setup(port_id, q, RX_DESC_PER_QUEUE,
rte_eth_dev_socket_id(port_id), NULL,
mbuf_pool);
if (ret < 0)
return ret;
}
for (q = 0; q < txRings; q++) {
ret = rte_eth_tx_queue_setup(port_id, q, TX_DESC_PER_QUEUE,
rte_eth_dev_socket_id(port_id), NULL);
if (ret < 0)
return ret;
}
ret = rte_eth_dev_start(port_id);
if (ret < 0)
return ret;
rte_eth_macaddr_get(port_id, &addr);
printf("Port %u MAC: %02"PRIx8" %02"PRIx8" %02"PRIx8
" %02"PRIx8" %02"PRIx8" %02"PRIx8"\n",
(unsigned)port_id,
addr.addr_bytes[0], addr.addr_bytes[1],
addr.addr_bytes[2], addr.addr_bytes[3],
addr.addr_bytes[4], addr.addr_bytes[5]);
rte_eth_promiscuous_enable(port_id);
return 0;
}
开发者ID:Cosios,项目名称:dpdk,代码行数:47,代码来源:main.c
示例18: configure_eth_port
void configure_eth_port(uint8_t port_id)
{
int ret;
rte_eth_dev_stop(port_id);
ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Cannot configure port %u (error %d)\n",
(unsigned) port_id, ret);
/* Initialize the port's RX queue */
ret = rte_eth_rx_queue_setup(port_id, 0, RX_DESC_PER_QUEUE,
rte_eth_dev_socket_id(port_id),
NULL,
mbuf_pool);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Failed to setup RX queue on "
"port %u (error %d)\n", (unsigned) port_id, ret);
/* Initialize the port's TX queue */
ret = rte_eth_tx_queue_setup(port_id, 0, TX_DESC_PER_QUEUE,
rte_eth_dev_socket_id(port_id),
NULL);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Failed to setup TX queue on "
"port %u (error %d)\n", (unsigned) port_id, ret);
/* Initialize the port's flow control */
ret = rte_eth_dev_flow_ctrl_set(port_id, &fc_conf);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Failed to setup hardware flow control on "
"port %u (error %d)\n", (unsigned) port_id, ret);
/* Start the port */
ret = rte_eth_dev_start(port_id);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Failed to start port %u (error %d)\n",
(unsigned) port_id, ret);
/* Put it in promiscuous mode */
rte_eth_promiscuous_enable(port_id);
}
开发者ID:ANLAB-KAIST,项目名称:dpdk,代码行数:43,代码来源:init.c
示例19: init_port
void init_port(int port_id)
{
struct rte_eth_dev_info dev_info;
int ret;
struct rte_eth_link link;
rte_eth_dev_info_get(port_id, &dev_info);
printf("Name:%s\n\tDriver name: %s\n\tMax rx queues: %d\n\tMax tx queues: %d\n", dev_info.pci_dev->driver->name,dev_info.driver_name, dev_info.max_rx_queues, dev_info.max_tx_queues);
printf("\tPCI Adress: %04d:%02d:%02x:%01d\n", dev_info.pci_dev->addr.domain, dev_info.pci_dev->addr.bus, dev_info.pci_dev->addr.devid, dev_info.pci_dev->addr.function);
ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
if (ret < 0)
rte_panic("Error configuring the port\n");
ret = rte_eth_rx_queue_setup(port_id, 0, RX_QUEUE_SZ, rte_socket_id(), &rx_conf, pktmbuf_pool);
if (ret < 0)
FATAL_ERROR("Error configuring receiving queue= %d\n", ret);
// TODO: Need to check whether it is supported in the VMXNET
/*ret = rte_eth_dev_set_rx_queue_stats_mapping(port_id, 0, 0);
if (ret < 0)
FATAL_ERROR("Error configuring receiving queue stats= %d [ENOTSUP= %d]\n", ret, ENOTSUP); */
ret = rte_eth_tx_queue_setup(port_id, 0, TX_QUEUE_SZ, rte_socket_id(), &tx_conf);
if (ret < 0)
FATAL_ERROR("Error configuring transmitting queue. Errno: %d (%d bad arg, %d no mem)\n", -ret, EINVAL ,ENOMEM);
/* Start device */
ret = rte_eth_dev_start(port_id);
if (ret < 0)
FATAL_ERROR("Cannot start port\n");
/* Enable receipt in promiscuous mode for an Ethernet device */
//rte_eth_promiscuous_enable(port_id);
/* Print link status */
rte_eth_link_get_nowait(port_id, &link);
if (link.link_status)
printf("\tPort %d Link Up - speed %u Mbps - %s\n", (uint8_t)port_id, (unsigned)link.link_speed,(link.link_duplex == ETH_LINK_FULL_DUPLEX) ?("full-duplex") : ("half-duplex\n"));
else
printf("\tPort %d Link Down\n",(uint8_t)port_id);
}
开发者ID:hidd3ncod3s,项目名称:dpdk-pcapreplay,代码行数:42,代码来源:dpdkreplay_generic_pmd.c
示例20: vr_dpdk_ethdev_init
/* Init ethernet device */
int
vr_dpdk_ethdev_init(struct vr_dpdk_ethdev *ethdev)
{
uint8_t port_id;
int ret;
port_id = ethdev->ethdev_port_id;
ethdev->ethdev_ptr = &rte_eth_devices[port_id];
dpdk_ethdev_info_update(ethdev);
ret = rte_eth_dev_configure(port_id, ethdev->ethdev_nb_rx_queues,
ethdev->ethdev_nb_tx_queues, ðdev_conf);
if (ret < 0) {
RTE_LOG(ERR, VROUTER, " error configuring eth dev %" PRIu8
": %s (%d)\n",
port_id, rte_strerror(-ret), -ret);
return ret;
}
/* update device bond information after the device has been configured */
if (ethdev->ethdev_ptr->driver) /* af_packet has no driver and no bond info */
dpdk_ethdev_bond_info_update(ethdev);
ret = dpdk_ethdev_queues_setup(ethdev);
if (ret < 0)
return ret;
/* Promisc mode
* KNI generates random MACs for e1000e NICs, so we need this
* option enabled for the development on servers with those NICs
*/
#if VR_DPDK_ENABLE_PROMISC
rte_eth_promiscuous_enable(port_id);
#endif
return 0;
}
开发者ID:awesome-nfv,项目名称:contrail-vrouter,代码行数:39,代码来源:vr_dpdk_ethdev.c
注:本文中的rte_eth_dev_configure函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论