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
examples/ipv4_multicast: fix segments number type
[dpdk.git]
/
examples
/
ipv4_multicast
/
main.c
diff --git
a/examples/ipv4_multicast/main.c
b/examples/ipv4_multicast/main.c
index
2a2b915
..
1c58516
100644
(file)
--- a/
examples/ipv4_multicast/main.c
+++ b/
examples/ipv4_multicast/main.c
@@
-47,9
+47,7
@@
#include <rte_log.h>
#include <rte_memory.h>
#include <rte_memcpy.h>
#include <rte_log.h>
#include <rte_memory.h>
#include <rte_memcpy.h>
-#include <rte_memzone.h>
#include <rte_eal.h>
#include <rte_eal.h>
-#include <rte_per_lcore.h>
#include <rte_launch.h>
#include <rte_atomic.h>
#include <rte_cycles.h>
#include <rte_launch.h>
#include <rte_atomic.h>
#include <rte_cycles.h>
@@
-58,12
+56,10
@@
#include <rte_per_lcore.h>
#include <rte_branch_prediction.h>
#include <rte_interrupts.h>
#include <rte_per_lcore.h>
#include <rte_branch_prediction.h>
#include <rte_interrupts.h>
-#include <rte_pci.h>
#include <rte_random.h>
#include <rte_debug.h>
#include <rte_ether.h>
#include <rte_ethdev.h>
#include <rte_random.h>
#include <rte_debug.h>
#include <rte_ether.h>
#include <rte_ethdev.h>
-#include <rte_ring.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
@@
-118,7
+114,7
@@
static struct ether_addr ports_eth_addr[MAX_PORTS];
/* mask of enabled ports */
static uint32_t enabled_port_mask = 0;
/* mask of enabled ports */
static uint32_t enabled_port_mask = 0;
-static uint
8_t nb_ports = 0
;
+static uint
16_t nb_ports
;
static int rx_queue_per_lcore = 1;
static int rx_queue_per_lcore = 1;
@@
-138,7
+134,7
@@
struct lcore_queue_conf {
} __rte_cache_aligned;
static struct lcore_queue_conf lcore_queue_conf[RTE_MAX_LCORE];
} __rte_cache_aligned;
static struct lcore_queue_conf lcore_queue_conf[RTE_MAX_LCORE];
-static
const
struct rte_eth_conf port_conf = {
+static struct rte_eth_conf port_conf = {
.rxmode = {
.max_rx_pkt_len = JUMBO_FRAME_MAX_SIZE,
.split_hdr_size = 0,
.rxmode = {
.max_rx_pkt_len = JUMBO_FRAME_MAX_SIZE,
.split_hdr_size = 0,
@@
-146,7
+142,7
@@
static const struct rte_eth_conf port_conf = {
.hw_ip_checksum = 0, /**< IP checksum offload disabled */
.hw_vlan_filter = 0, /**< VLAN filtering disabled */
.jumbo_frame = 1, /**< Jumbo Frame Support enabled */
.hw_ip_checksum = 0, /**< IP checksum offload disabled */
.hw_vlan_filter = 0, /**< VLAN filtering disabled */
.jumbo_frame = 1, /**< Jumbo Frame Support enabled */
- .hw_strip_crc =
0
, /**< CRC stripped by hardware */
+ .hw_strip_crc =
1
, /**< CRC stripped by hardware */
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
@@
-197,7
+193,7
@@
static struct mcast_group_params mcast_group_table[] = {
/* Send burst of packets on an output interface */
static void
/* Send burst of packets on an output interface */
static void
-send_burst(struct lcore_queue_conf *qconf, uint
8
_t port)
+send_burst(struct lcore_queue_conf *qconf, uint
16
_t port)
{
struct rte_mbuf **m_table;
uint16_t n, queueid;
{
struct rte_mbuf **m_table;
uint16_t n, queueid;
@@
-225,7
+221,7
@@
bitcnt(uint32_t v)
for (n = 0; v != 0; v &= v - 1, n++)
;
for (n = 0; v != 0; v &= v - 1, n++)
;
- return
(n)
;
+ return
n
;
}
/**
}
/**
@@
-278,13
+274,13
@@
mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
/* Create new mbuf for the header. */
if (unlikely ((hdr = rte_pktmbuf_alloc(header_pool)) == NULL))
/* Create new mbuf for the header. */
if (unlikely ((hdr = rte_pktmbuf_alloc(header_pool)) == NULL))
- return
(NULL)
;
+ return
NULL
;
/* If requested, then make a new clone packet. */
if (use_clone != 0 &&
unlikely ((pkt = rte_pktmbuf_clone(pkt, clone_pool)) == NULL)) {
rte_pktmbuf_free(hdr);
/* If requested, then make a new clone packet. */
if (use_clone != 0 &&
unlikely ((pkt = rte_pktmbuf_clone(pkt, clone_pool)) == NULL)) {
rte_pktmbuf_free(hdr);
- return
(NULL)
;
+ return
NULL
;
}
/* prepend new header */
}
/* prepend new header */
@@
-293,18
+289,19
@@
mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
/* update header's fields */
hdr->pkt_len = (uint16_t)(hdr->data_len + pkt->pkt_len);
/* update header's fields */
hdr->pkt_len = (uint16_t)(hdr->data_len + pkt->pkt_len);
- hdr->nb_segs =
(uint8_t)(pkt->nb_segs + 1)
;
+ hdr->nb_segs =
pkt->nb_segs + 1
;
/* copy metadata from source packet*/
hdr->port = pkt->port;
hdr->vlan_tci = pkt->vlan_tci;
/* copy metadata from source packet*/
hdr->port = pkt->port;
hdr->vlan_tci = pkt->vlan_tci;
+ hdr->vlan_tci_outer = pkt->vlan_tci_outer;
hdr->tx_offload = pkt->tx_offload;
hdr->hash = pkt->hash;
hdr->ol_flags = pkt->ol_flags;
__rte_mbuf_sanity_check(hdr, 1);
hdr->tx_offload = pkt->tx_offload;
hdr->hash = pkt->hash;
hdr->ol_flags = pkt->ol_flags;
__rte_mbuf_sanity_check(hdr, 1);
- return
(hdr)
;
+ return
hdr
;
}
/*
}
/*
@@
-313,14
+310,14
@@
mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
*/
static inline void
mcast_send_pkt(struct rte_mbuf *pkt, struct ether_addr *dest_addr,
*/
static inline void
mcast_send_pkt(struct rte_mbuf *pkt, struct ether_addr *dest_addr,
- struct lcore_queue_conf *qconf, uint
8
_t port)
+ struct lcore_queue_conf *qconf, uint
16
_t port)
{
struct ether_hdr *ethdr;
uint16_t len;
/* Construct Ethernet header. */
ethdr = (struct ether_hdr *)rte_pktmbuf_prepend(pkt, (uint16_t)sizeof(*ethdr));
{
struct ether_hdr *ethdr;
uint16_t len;
/* Construct Ethernet header. */
ethdr = (struct ether_hdr *)rte_pktmbuf_prepend(pkt, (uint16_t)sizeof(*ethdr));
- RTE_
MBUF_
ASSERT(ethdr != NULL);
+ RTE_ASSERT(ethdr != NULL);
ether_addr_copy(dest_addr, ðdr->d_addr);
ether_addr_copy(&ports_eth_addr[port], ðdr->s_addr);
ether_addr_copy(dest_addr, ðdr->d_addr);
ether_addr_copy(&ports_eth_addr[port], ðdr->s_addr);
@@
-344,7
+341,7
@@
mcast_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf)
struct ipv4_hdr *iphdr;
uint32_t dest_addr, port_mask, port_num, use_clone;
int32_t hash;
struct ipv4_hdr *iphdr;
uint32_t dest_addr, port_mask, port_num, use_clone;
int32_t hash;
- uint
8
_t port;
+ uint
16
_t port;
union {
uint64_t as_int;
struct ether_addr as_addr;
union {
uint64_t as_int;
struct ether_addr as_addr;
@@
-352,7
+349,7
@@
mcast_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf)
/* Remove the Ethernet header from the input packet */
iphdr = (struct ipv4_hdr *)rte_pktmbuf_adj(m, (uint16_t)sizeof(struct ether_hdr));
/* Remove the Ethernet header from the input packet */
iphdr = (struct ipv4_hdr *)rte_pktmbuf_adj(m, (uint16_t)sizeof(struct ether_hdr));
- RTE_
MBUF_
ASSERT(iphdr != NULL);
+ RTE_ASSERT(iphdr != NULL);
dest_addr = rte_be_to_cpu_32(iphdr->dst_addr);
dest_addr = rte_be_to_cpu_32(iphdr->dst_addr);
@@
-408,7
+405,7
@@
static inline void
send_timeout_burst(struct lcore_queue_conf *qconf)
{
uint64_t cur_tsc;
send_timeout_burst(struct lcore_queue_conf *qconf)
{
uint64_t cur_tsc;
- uint
8
_t portid;
+ uint
16
_t portid;
const uint64_t drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1) / US_PER_S * BURST_TX_DRAIN_US;
cur_tsc = rte_rdtsc();
const uint64_t drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1) / US_PER_S * BURST_TX_DRAIN_US;
cur_tsc = rte_rdtsc();
@@
-429,7
+426,7
@@
main_loop(__rte_unused void *dummy)
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
int i, j, nb_rx;
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
int i, j, nb_rx;
- uint
8
_t portid;
+ uint
16
_t portid;
struct lcore_queue_conf *qconf;
lcore_id = rte_lcore_id();
struct lcore_queue_conf *qconf;
lcore_id = rte_lcore_id();
@@
-449,7
+446,7
@@
main_loop(__rte_unused void *dummy)
portid = qconf->rx_queue_list[i];
RTE_LOG(INFO, IPv4_MULTICAST, " -- lcoreid=%u portid=%d\n",
portid = qconf->rx_queue_list[i];
RTE_LOG(INFO, IPv4_MULTICAST, " -- lcoreid=%u portid=%d\n",
- lcore_id,
(int)
portid);
+ lcore_id, portid);
}
while (1) {
}
while (1) {
@@
-508,7
+505,7
@@
parse_portmask(const char *portmask)
if ((portmask[0] == '\0') || (end == NULL) || (*end != '\0'))
return 0;
if ((portmask[0] == '\0') || (end == NULL) || (*end != '\0'))
return 0;
- return (
(uint32_t)pm)
;
+ return (
uint32_t)pm
;
}
static int
}
static int
@@
-522,9
+519,9
@@
parse_nqueue(const char *q_arg)
n = strtoul(q_arg, &end, 0);
if (errno != 0 || end == NULL || *end != '\0' ||
n == 0 || n >= MAX_RX_QUEUE_PER_LCORE)
n = strtoul(q_arg, &end, 0);
if (errno != 0 || end == NULL || *end != '\0' ||
n == 0 || n >= MAX_RX_QUEUE_PER_LCORE)
- return
(-1)
;
+ return
-1
;
- return
(n)
;
+ return
n
;
}
/* Parse the argument given in the command line of the application */
}
/* Parse the argument given in the command line of the application */
@@
-575,7
+572,7
@@
parse_args(int argc, char **argv)
argv[optind-1] = prgname;
ret = optind-1;
argv[optind-1] = prgname;
ret = optind-1;
- optind =
0
; /* reset getopt lib */
+ optind =
1
; /* reset getopt lib */
return ret;
}
return ret;
}
@@
-611,11
+608,12
@@
init_mcast_hash(void)
/* Check the link status of all ports in up to 9s, and print them finally */
static void
/* Check the link status of all ports in up to 9s, and print them finally */
static void
-check_all_ports_link_status(uint
8
_t port_num, uint32_t port_mask)
+check_all_ports_link_status(uint
16
_t port_num, uint32_t port_mask)
{
#define CHECK_INTERVAL 100 /* 100ms */
#define MAX_CHECK_TIME 90 /* 9s (90 * 100ms) in total */
{
#define CHECK_INTERVAL 100 /* 100ms */
#define MAX_CHECK_TIME 90 /* 9s (90 * 100ms) in total */
- uint8_t portid, count, all_ports_up, print_flag = 0;
+ uint16_t portid;
+ uint8_t count, all_ports_up, print_flag = 0;
struct rte_eth_link link;
printf("\nChecking link status");
struct rte_eth_link link;
printf("\nChecking link status");
@@
-630,18
+628,17
@@
check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
/* print link status if flag set */
if (print_flag == 1) {
if (link.link_status)
/* print link status if flag set */
if (print_flag == 1) {
if (link.link_status)
- printf(
"Port %d Link Up - speed %u "
-
"Mbps - %s\n", (uint8_t)portid
,
-
(unsigned)
link.link_speed,
+ printf(
+
"Port%d Link Up. Speed %u Mbps - %s\n"
,
+
portid,
link.link_speed,
(link.link_duplex == ETH_LINK_FULL_DUPLEX) ?
("full-duplex") : ("half-duplex\n"));
else
(link.link_duplex == ETH_LINK_FULL_DUPLEX) ?
("full-duplex") : ("half-duplex\n"));
else
- printf("Port %d Link Down\n",
- (uint8_t)portid);
+ printf("Port %d Link Down\n", portid);
continue;
}
/* clear all_ports_up flag if any link down */
continue;
}
/* clear all_ports_up flag if any link down */
- if (link.link_status ==
0
) {
+ if (link.link_status ==
ETH_LINK_DOWN
) {
all_ports_up = 0;
break;
}
all_ports_up = 0;
break;
}
@@
-674,7
+671,7
@@
main(int argc, char **argv)
uint16_t queueid;
unsigned lcore_id = 0, rx_lcore_id = 0;
uint32_t n_tx_queue, nb_lcores;
uint16_t queueid;
unsigned lcore_id = 0, rx_lcore_id = 0;
uint32_t n_tx_queue, nb_lcores;
- uint
8
_t portid;
+ uint
16
_t portid;
/* init EAL */
ret = rte_eal_init(argc, argv);
/* init EAL */
ret = rte_eal_init(argc, argv);
@@
-725,6
+722,11
@@
main(int argc, char **argv)
qconf = &lcore_queue_conf[rx_lcore_id];
qconf = &lcore_queue_conf[rx_lcore_id];
+ /* limit the frame size to the maximum supported by NIC */
+ rte_eth_dev_info_get(portid, &dev_info);
+ port_conf.rxmode.max_rx_pkt_len = RTE_MIN(
+ dev_info.max_rx_pktlen, port_conf.rxmode.max_rx_pkt_len);
+
/* get the lcore_id for this port */
while (rte_lcore_is_enabled(rx_lcore_id) == 0 ||
qconf->n_rx_queue == (unsigned)rx_queue_per_lcore) {
/* get the lcore_id for this port */
while (rte_lcore_is_enabled(rx_lcore_id) == 0 ||
qconf->n_rx_queue == (unsigned)rx_queue_per_lcore) {
@@
-752,6
+754,13
@@
main(int argc, char **argv)
rte_exit(EXIT_FAILURE, "Cannot configure device: err=%d, port=%d\n",
ret, portid);
rte_exit(EXIT_FAILURE, "Cannot configure device: err=%d, port=%d\n",
ret, portid);
+ ret = rte_eth_dev_adjust_nb_rx_tx_desc(portid, &nb_rxd,
+ &nb_txd);
+ if (ret < 0)
+ rte_exit(EXIT_FAILURE,
+ "Cannot adjust number of descriptors: err=%d, port=%d\n",
+ ret, portid);
+
rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
print_ethaddr(" Address:", &ports_eth_addr[portid]);
printf(", ");
rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
print_ethaddr(" Address:", &ports_eth_addr[portid]);
printf(", ");
@@
-777,7
+786,6
@@
main(int argc, char **argv)
printf("txq=%u,%hu ", lcore_id, queueid);
fflush(stdout);
printf("txq=%u,%hu ", lcore_id, queueid);
fflush(stdout);
- rte_eth_dev_info_get(portid, &dev_info);
txconf = &dev_info.default_txconf;
txconf->txq_flags = 0;
ret = rte_eth_tx_queue_setup(portid, queueid, nb_txd,
txconf = &dev_info.default_txconf;
txconf->txq_flags = 0;
ret = rte_eth_tx_queue_setup(portid, queueid, nb_txd,