ethdev: fix max Rx packet length
[dpdk.git] / examples / ip_reassembly / main.c
index 954a115..f1ea3a7 100644 (file)
@@ -22,7 +22,6 @@
 #include <rte_memcpy.h>
 #include <rte_eal.h>
 #include <rte_launch.h>
-#include <rte_atomic.h>
 #include <rte_cycles.h>
 #include <rte_prefetch.h>
 #include <rte_lcore.h>
@@ -162,7 +161,8 @@ static struct lcore_queue_conf lcore_queue_conf[RTE_MAX_LCORE];
 static struct rte_eth_conf port_conf = {
        .rxmode = {
                .mq_mode        = ETH_MQ_RX_RSS,
-               .max_rx_pkt_len = JUMBO_FRAME_MAX_SIZE,
+               .mtu = JUMBO_FRAME_MAX_SIZE - RTE_ETHER_HDR_LEN -
+                       RTE_ETHER_CRC_LEN,
                .split_hdr_size = 0,
                .offloads = (DEV_RX_OFFLOAD_CHECKSUM |
                             DEV_RX_OFFLOAD_JUMBO_FRAME),
@@ -189,6 +189,7 @@ struct l3fwd_ipv4_route {
        uint8_t  if_out;
 };
 
+/* Default l3fwd_ipv4_route_array table. 8< */
 struct l3fwd_ipv4_route l3fwd_ipv4_route_array[] = {
                {RTE_IPV4(100,10,0,0), 16, 0},
                {RTE_IPV4(100,20,0,0), 16, 1},
@@ -199,6 +200,7 @@ struct l3fwd_ipv4_route l3fwd_ipv4_route_array[] = {
                {RTE_IPV4(100,70,0,0), 16, 6},
                {RTE_IPV4(100,80,0,0), 16, 7},
 };
+/* >8 End of default l3fwd_ipv4_route_array table. */
 
 /*
  * IPv6 forwarding table
@@ -210,6 +212,7 @@ struct l3fwd_ipv6_route {
        uint8_t if_out;
 };
 
+/* Default l3fwd_ipv6_route_array table. 8< */
 static struct l3fwd_ipv6_route l3fwd_ipv6_route_array[] = {
        {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 48, 0},
        {{2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 48, 1},
@@ -220,6 +223,7 @@ static struct l3fwd_ipv6_route l3fwd_ipv6_route_array[] = {
        {{7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 48, 6},
        {{8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 48, 7},
 };
+/* >8 End of default l3fwd_ipv6_route_array table. */
 
 #define LPM_MAX_RULES         1024
 #define LPM6_MAX_RULES         1024
@@ -409,11 +413,11 @@ reassemble(struct rte_mbuf *m, uint16_t portid, uint32_t queue,
        /* if packet wasn't IPv4 or IPv6, it's forwarded to the port it came from */
 
        /* 02:00:00:00:00:xx */
-       d_addr_bytes = &eth_hdr->d_addr.addr_bytes[0];
+       d_addr_bytes = &eth_hdr->dst_addr.addr_bytes[0];
        *((uint64_t *)d_addr_bytes) = 0x000000000002 + ((uint64_t)dst_port << 40);
 
        /* src addr */
-       rte_ether_addr_copy(&ports_eth_addr[dst_port], &eth_hdr->s_addr);
+       rte_ether_addr_copy(&ports_eth_addr[dst_port], &eth_hdr->src_addr);
 
        send_single_packet(m, dst_port);
 }
@@ -856,6 +860,7 @@ setup_queue_tbl(struct rx_queue *rxq, uint32_t lcore, uint32_t queue)
        if (socket == SOCKET_ID_ANY)
                socket = 0;
 
+       /* Each table entry holds information about packet fragmentation. 8< */
        frag_cycles = (rte_get_tsc_hz() + MS_PER_S - 1) / MS_PER_S *
                max_flow_ttl;
 
@@ -867,6 +872,7 @@ setup_queue_tbl(struct rx_queue *rxq, uint32_t lcore, uint32_t queue)
                        max_flow_num, lcore, queue);
                return -1;
        }
+       /* >8 End of holding packet fragmentation. */
 
        /*
         * At any given moment up to <max_flow_num * (MAX_FRAG_NUM)>
@@ -874,8 +880,10 @@ setup_queue_tbl(struct rx_queue *rxq, uint32_t lcore, uint32_t queue)
         * Plus, each TX queue can hold up to <max_flow_num> packets.
         */
 
+       /* mbufs stored int the gragment table. 8< */
        nb_mbuf = RTE_MAX(max_flow_num, 2UL * MAX_PKT_BURST) * MAX_FRAG_NUM;
-       nb_mbuf *= (port_conf.rxmode.max_rx_pkt_len + BUF_SIZE - 1) / BUF_SIZE;
+       nb_mbuf *= (port_conf.rxmode.mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN
+                       + BUF_SIZE - 1) / BUF_SIZE;
        nb_mbuf *= 2; /* ipv4 and ipv6 */
        nb_mbuf += nb_rxd + nb_txd;
 
@@ -890,6 +898,7 @@ setup_queue_tbl(struct rx_queue *rxq, uint32_t lcore, uint32_t queue)
                        "rte_pktmbuf_pool_create(%s) failed", buf);
                return -1;
        }
+       /* >8 End of mbufs stored int the fragmentation table. */
 
        return 0;
 }
@@ -1046,9 +1055,9 @@ main(int argc, char **argv)
                                "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.mtu = RTE_MIN(
+                   dev_info.max_mtu,
+                   local_port_conf.rxmode.mtu);
 
                /* get the lcore_id for this port */
                while (rte_lcore_is_enabled(rx_lcore_id) == 0 ||
@@ -1201,5 +1210,8 @@ main(int argc, char **argv)
                        return -1;
        }
 
+       /* clean up the EAL */
+       rte_eal_cleanup();
+
        return 0;
 }