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/ipsec-secgw: check event adapter errors
[dpdk.git]
/
examples
/
ip_fragmentation
/
main.c
diff --git
a/examples/ip_fragmentation/main.c
b/examples/ip_fragmentation/main.c
index
85c0100
..
5eca7ba
100644
(file)
--- a/
examples/ip_fragmentation/main.c
+++ b/
examples/ip_fragmentation/main.c
@@
-242,16
+242,21
@@
l3fwd_simple_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf,
{
struct rx_queue *rxq;
uint32_t i, len, next_hop;
{
struct rx_queue *rxq;
uint32_t i, len, next_hop;
- uint8_t ipv6;
- uint16_t port_out;
+ uint16_t port_out, ether_type;
int32_t len2;
int32_t len2;
+ uint64_t ol_flags;
+ const struct rte_ether_hdr *eth;
-
ipv6
= 0;
+
ol_flags
= 0;
rxq = &qconf->rx_queue_list[queueid];
/* by default, send everything back to the source port */
port_out = port_in;
rxq = &qconf->rx_queue_list[queueid];
/* by default, send everything back to the source port */
port_out = port_in;
+ /* save ether type of the incoming packet */
+ eth = rte_pktmbuf_mtod(m, const struct rte_ether_hdr *);
+ ether_type = eth->ether_type;
+
/* Remove the Ethernet header and trailer from the input packet */
rte_pktmbuf_adj(m, (uint16_t)sizeof(struct rte_ether_hdr));
/* Remove the Ethernet header and trailer from the input packet */
rte_pktmbuf_adj(m, (uint16_t)sizeof(struct rte_ether_hdr));
@@
-289,6
+294,9
@@
l3fwd_simple_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf,
/* Free input packet */
rte_pktmbuf_free(m);
/* Free input packet */
rte_pktmbuf_free(m);
+ /* request HW to regenerate IPv4 cksum */
+ ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM);
+
/* If we fail to fragment the packet */
if (unlikely (len2 < 0))
return;
/* If we fail to fragment the packet */
if (unlikely (len2 < 0))
return;
@@
-297,8
+305,6
@@
l3fwd_simple_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf,
/* if this is an IPv6 packet */
struct rte_ipv6_hdr *ip_hdr;
/* if this is an IPv6 packet */
struct rte_ipv6_hdr *ip_hdr;
- ipv6 = 1;
-
/* Read the lookup key (i.e. ip_dst) from the input packet */
ip_hdr = rte_pktmbuf_mtod(m, struct rte_ipv6_hdr *);
/* Read the lookup key (i.e. ip_dst) from the input packet */
ip_hdr = rte_pktmbuf_mtod(m, struct rte_ipv6_hdr *);
@@
-348,21
+354,18
@@
l3fwd_simple_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf,
rte_panic("No headroom in mbuf.\n");
}
rte_panic("No headroom in mbuf.\n");
}
+ m->ol_flags |= ol_flags;
m->l2_len = sizeof(struct rte_ether_hdr);
/* 02:00:00:00:00:xx */
d_addr_bytes = ð_hdr->d_addr.addr_bytes[0];
m->l2_len = sizeof(struct rte_ether_hdr);
/* 02:00:00:00:00:xx */
d_addr_bytes = ð_hdr->d_addr.addr_bytes[0];
- *((uint64_t *)d_addr_bytes) = 0x000000000002 + ((uint64_t)port_out << 40);
+ *((uint64_t *)d_addr_bytes) = 0x000000000002 +
+ ((uint64_t)port_out << 40);
/* src addr */
rte_ether_addr_copy(&ports_eth_addr[port_out],
ð_hdr->s_addr);
/* src addr */
rte_ether_addr_copy(&ports_eth_addr[port_out],
ð_hdr->s_addr);
- if (ipv6)
- eth_hdr->ether_type =
- rte_be_to_cpu_16(RTE_ETHER_TYPE_IPV6);
- else
- eth_hdr->ether_type =
- rte_be_to_cpu_16(RTE_ETHER_TYPE_IPV4);
+ eth_hdr->ether_type = ether_type;
}
len += len2;
}
len += len2;
@@
-379,7
+382,7
@@
l3fwd_simple_forward(struct rte_mbuf *m, struct lcore_queue_conf *qconf,
/* main processing loop */
static int
/* main processing loop */
static int
-main_loop(__
attribute__((unused))
void *dummy)
+main_loop(__
rte_unused
void *dummy)
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
unsigned lcore_id;
@@
-589,6
+592,7
@@
check_all_ports_link_status(uint32_t port_mask)
uint16_t portid;
uint8_t count, all_ports_up, print_flag = 0;
struct rte_eth_link link;
uint16_t portid;
uint8_t count, all_ports_up, print_flag = 0;
struct rte_eth_link link;
+ int ret;
printf("\nChecking link status");
fflush(stdout);
printf("\nChecking link status");
fflush(stdout);
@@
-598,7
+602,14
@@
check_all_ports_link_status(uint32_t port_mask)
if ((port_mask & (1 << portid)) == 0)
continue;
memset(&link, 0, sizeof(link));
if ((port_mask & (1 << portid)) == 0)
continue;
memset(&link, 0, sizeof(link));
- rte_eth_link_get_nowait(portid, &link);
+ ret = rte_eth_link_get_nowait(portid, &link);
+ if (ret < 0) {
+ all_ports_up = 0;
+ if (print_flag == 1)
+ printf("Port %u link get failed: %s\n",
+ portid, rte_strerror(-ret));
+ continue;
+ }
/* 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)
@@
-635,7
+646,7
@@
check_all_ports_link_status(uint32_t port_mask)
}
}
}
}
-/* Check L3 packet type detection capablity of the NIC port */
+/* Check L3 packet type detection capab
i
lity of the NIC port */
static int
check_ptype(int portid)
{
static int
check_ptype(int portid)
{
@@
-900,7
+911,12
@@
main(int argc, char **argv)
qconf = &lcore_queue_conf[rx_lcore_id];
/* limit the frame size to the maximum supported by NIC */
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);
+ ret = rte_eth_dev_info_get(portid, &dev_info);
+ if (ret != 0)
+ rte_exit(EXIT_FAILURE,
+ "Error during getting device (port %u) info: %s\n",
+ portid, strerror(-ret));
+
local_port_conf.rxmode.max_rx_pkt_len = RTE_MIN(
dev_info.max_rx_pktlen,
local_port_conf.rxmode.max_rx_pkt_len);
local_port_conf.rxmode.max_rx_pkt_len = RTE_MIN(
dev_info.max_rx_pktlen,
local_port_conf.rxmode.max_rx_pkt_len);
@@
-936,9
+952,6
@@
main(int argc, char **argv)
n_tx_queue = nb_lcores;
if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
n_tx_queue = MAX_TX_QUEUE_PER_PORT;
n_tx_queue = nb_lcores;
if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
n_tx_queue = MAX_TX_QUEUE_PER_PORT;
- if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
- local_port_conf.txmode.offloads |=
- DEV_TX_OFFLOAD_MBUF_FAST_FREE;
ret = rte_eth_dev_configure(portid, 1, (uint16_t)n_tx_queue,
&local_port_conf);
if (ret < 0) {
ret = rte_eth_dev_configure(portid, 1, (uint16_t)n_tx_queue,
&local_port_conf);
if (ret < 0) {
@@
-979,17
+992,30
@@
main(int argc, char **argv)
ret, portid);
}
ret, portid);
}
- rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
+ ret = rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
+ if (ret < 0) {
+ printf("\n");
+ rte_exit(EXIT_FAILURE,
+ "rte_eth_macaddr_get: err=%d, port=%d\n",
+ ret, portid);
+ }
+
print_ethaddr(" Address:", &ports_eth_addr[portid]);
printf("\n");
/* init one TX queue per couple (lcore,port) */
print_ethaddr(" Address:", &ports_eth_addr[portid]);
printf("\n");
/* init one TX queue per couple (lcore,port) */
+ ret = rte_eth_dev_info_get(portid, &dev_info);
+ if (ret != 0)
+ rte_exit(EXIT_FAILURE,
+ "Error during getting device (port %u) info: %s\n",
+ portid, strerror(-ret));
+
queueid = 0;
for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
if (rte_lcore_is_enabled(lcore_id) == 0)
continue;
queueid = 0;
for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
if (rte_lcore_is_enabled(lcore_id) == 0)
continue;
- if (queueid >=
rte_eth_devices[portid].data->
nb_tx_queues)
+ if (queueid >=
dev_info.
nb_tx_queues)
break;
socket = (int) rte_lcore_to_socket_id(lcore_id);
break;
socket = (int) rte_lcore_to_socket_id(lcore_id);
@@
-1027,7
+1053,11
@@
main(int argc, char **argv)
rte_exit(EXIT_FAILURE, "rte_eth_dev_start: err=%d, port=%d\n",
ret, portid);
rte_exit(EXIT_FAILURE, "rte_eth_dev_start: err=%d, port=%d\n",
ret, portid);
- rte_eth_promiscuous_enable(portid);
+ ret = rte_eth_promiscuous_enable(portid);
+ if (ret != 0)
+ rte_exit(EXIT_FAILURE,
+ "rte_eth_promiscuous_enable: err=%s, port=%d\n",
+ rte_strerror(-ret), portid);
if (check_ptype(portid) == 0) {
rte_eth_add_rx_callback(portid, 0, cb_parse_ptype, NULL);
if (check_ptype(portid) == 0) {
rte_eth_add_rx_callback(portid, 0, cb_parse_ptype, NULL);