On 10/19/2017 6:58 PM, Radu Nicolau wrote:
Added cmdline option for jumbo frames.
Switched port initialization to the new offload API.

Signed-off-by: Radu Nicolau <radu.nico...@intel.com>
---
v2: updated commit message
v3: addressed feedback

  doc/guides/sample_app_ug/ipsec_secgw.rst |  6 +++++-
  examples/ipsec-secgw/ipsec-secgw.c       | 35 +++++++++++++++++++++++++-------
  2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/doc/guides/sample_app_ug/ipsec_secgw.rst 
b/doc/guides/sample_app_ug/ipsec_secgw.rst
index b675cba..a292859 100644
--- a/doc/guides/sample_app_ug/ipsec_secgw.rst
+++ b/doc/guides/sample_app_ug/ipsec_secgw.rst
@@ -119,7 +119,7 @@ The application has a number of command line options::
./build/ipsec-secgw [EAL options] --
-                        -p PORTMASK -P -u PORTMASK
+                        -p PORTMASK -P -u PORTMASK -j FRAMESIZE
                          --config (port,queue,lcore)[,(port,queue,lcore]
                          --single-sa SAIDX
                          -f CONFIG_FILE_PATH
@@ -135,6 +135,10 @@ Where:
* ``-u PORTMASK``: hexadecimal bitmask of unprotected ports +* ``-j FRAMESIZE``: *optional*. Enables jumbo frames with the maximum size
+    specified as FRAMESIZE. If an invalid value is provided as FRAMESIZE
+    then the default value 9000 is used.
+
  *   ``--config (port,queue,lcore)[,(port,queue,lcore)]``: determines which 
queues
      from which ports are mapped to which cores.
diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c
index d451b3d..a6cb342 100644
--- a/examples/ipsec-secgw/ipsec-secgw.c
+++ b/examples/ipsec-secgw/ipsec-secgw.c
@@ -161,6 +161,7 @@ static int32_t numa_on = 1; /**< NUMA is enabled by 
default. */
  static uint32_t nb_lcores;
  static uint32_t single_sa;
  static uint32_t single_sa_idx;
+static uint32_t frame_size;
struct lcore_rx_queue {
        uint16_t port_id;
@@ -204,11 +205,9 @@ static struct rte_eth_conf port_conf = {
                .mq_mode        = ETH_MQ_RX_RSS,
                .max_rx_pkt_len = ETHER_MAX_LEN,
                .split_hdr_size = 0,
-               .header_split   = 0, /**< Header Split disabled */
-               .hw_ip_checksum = 1, /**< IP checksum offload enabled */
-               .hw_vlan_filter = 0, /**< VLAN filtering disabled */
-               .jumbo_frame    = 0, /**< Jumbo Frame Support disabled */
-               .hw_strip_crc   = 1, /**< CRC stripped by hardware */
+               .offloads = DEV_RX_OFFLOAD_CHECKSUM |
+                           DEV_RX_OFFLOAD_CRC_STRIP,
+               .ignore_offload_bitfield = 1,
        },
IMO change the port_conf struct should be a different patch.

Thanks!
        .rx_adv_conf = {
                .rss_conf = {
@@ -845,6 +844,7 @@ print_usage(const char *prgname)
                "  -p PORTMASK: hexadecimal bitmask of ports to configure\n"
                "  -P : enable promiscuous mode\n"
                "  -u PORTMASK: hexadecimal bitmask of unprotected ports\n"
+               "  -j FRAMESIZE: jumbo frame maximum size\n"
                "  --"OPTION_CONFIG": (port,queue,lcore): "
                "rx queues configuration\n"
                "  --single-sa SAIDX: use single SA index for outbound, "
@@ -983,7 +983,7 @@ parse_args(int32_t argc, char **argv)
argvopt = argv; - while ((opt = getopt_long(argc, argvopt, "p:Pu:f:",
+       while ((opt = getopt_long(argc, argvopt, "p:Pu:f:j:",
                                lgopts, &option_index)) != EOF) {
switch (opt) {
@@ -1022,6 +1022,19 @@ parse_args(int32_t argc, char **argv)
                        }
                        f_present = 1;
                        break;
+               case 'j':
+                       {
+                               int32_t size = parse_decimal(optarg);
+                               if (size <= 1518) {
+                                       printf("Invalid jumbo frame size\n"
+                                           "Using default value 9000\n");
+                                       frame_size = 9000;
+                               } else {
+                                       frame_size = size;
+                               }
+                       }
+                       printf("Enabled jumbo frames size %u\n", frame_size);
+                       break;
                case 0:
                        if (parse_args_long_options(lgopts, option_index)) {
                                print_usage(prgname);
@@ -1359,6 +1372,11 @@ port_init(uint16_t portid)
        printf("Creating queues: nb_rx_queue=%d nb_tx_queue=%u...\n",
                        nb_rx_queue, nb_tx_queue);
+ if (frame_size) {
+               port_conf.rxmode.max_rx_pkt_len = frame_size;
+               port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
+       }
+
        ret = rte_eth_dev_configure(portid, nb_rx_queue, nb_tx_queue,
                        &port_conf);
        if (ret < 0)
@@ -1423,11 +1441,14 @@ static void
  pool_init(struct socket_ctx *ctx, int32_t socket_id, uint32_t nb_mbuf)
  {
        char s[64];
+       uint32_t buff_size = frame_size ? (frame_size + RTE_PKTMBUF_HEADROOM) :
+                       RTE_MBUF_DEFAULT_BUF_SIZE;
+
snprintf(s, sizeof(s), "mbuf_pool_%d", socket_id);
        ctx->mbuf_pool = rte_pktmbuf_pool_create(s, nb_mbuf,
                        MEMPOOL_CACHE_SIZE, ipsec_metadata_size(),
-                       RTE_MBUF_DEFAULT_BUF_SIZE,
+                       buff_size,
                        socket_id);
        if (ctx->mbuf_pool == NULL)
                rte_exit(EXIT_FAILURE, "Cannot init mbuf pool on socket %d\n",

Reply via email to